ソフトウェア部品検索システムを対象とする
ソフトウェアライセンス特定手法
真鍋雄貴†

市井誠†

早瀬康裕† 松下誠† 井上克郎†

大阪大学大学院情報科学研究科†
本稿では，ファイルのブロックコメントを用いたライセンス指定に注目する．ブロックコメ
著者らが所属している研究グループでは，ソントとは複数行にわたり記述できるコメントをフトウェアの再利用を目的としたソフトウェア指す．以下，本稿ではブロックコメントを単に
部 品 検 索 シ ス テ ム SPARS-J[1] を 開 発 し た ．
コメントと表記する．提案手法では以下の経験
SPARS-J はソフトウェア部品を大規模ソースフ則に基づき，複数のコメントに共通して現れるァイル群から抽出するという特徴がある．再利
文字列がライセンスの指定であるとみなす．フ
用をおこなう際には部品のソフトウェアライセ
ァイルには，単体での再利用を考慮し，ライセンス（以降，単にライセンスとする）に従わなンスを指定する記述がコメントに含まれているければならない．しかし，現在の SPARS-J では場合が多い．また，同一のソフトウェアに含まライセンスを扱っておらず，SPARS-J の利用者れる同一のライセンスのファイルには，ライセが別途ライセンスを調べる必要がある．また，ンスの指定に統一された記述が用いられること
ライセンスの種類は多く，OSI[2]により承認されが多い．
たオープンソースの為のライセンスに限定して複数のファイルのコメントに共通して含まれも 50 種類以上存在するため，機械的な特定は困る文字列を共通文字列と呼び，提案手法では共難である．このため，大規模ソースファイル群通文字列に対してライセンスの特定をおこなう．のライセンスを少ない手間で特定する手法が必
ファイルに対するライセンス指定の記述は共通要となる．
文字列として抽出される．共通文字列により指Tuunanen ら[3]は，正規表現を用いてライセンスを特定する手法を提案している．この手法は， 定されるライセンスを特定することで，複数のライセンスの特定に用いる正規表現の文字列を， ファイルのライセンスを同時に特定できる．
効率的にライセンスの特定をおこなうためにライセンスの特定が行われていないソースファは，多くのファイルに含まれ，ライセンスが特イル（以下，単にファイルとする）を見て作成定されていない共通文字列を調べればよい．共する必要がある．また，検索結果のライセンス通文字列 A を含み，ライセンスの特定されていを表示するソフトウェア部品検索システムとしないファイルの数を共通文字列 A の未特定ファて Google Code Search[4]があるが，ライセンスがイル数とする．未特定ファイル数は，共通文字特定できていないファイルが多い．
列 A の示すライセンスを特定することにより，本稿では，複数のファイルのコメント間に共新たにライセンスが特定されるファイルの数を通して表れる文字列を用いてライセンスを特定示す．
する手法を提案する．本手法ではシステムが自また，共通文字列が示すライセンスはシステ
動的に抽出する文字列を読むことでライセンスムの管理者が手作業で確認し，指定する．なぜを特定するため，管理者が正規表現の文字列ななら，機械的に特定し誤りが生じた場合，シスどを作成する必要がない．また，多くのファイルテムの利用者に不利益が生じるためである．に共通する文字列から順に処理するため，効率的2.2 提案手法の処理の流れにライセンスを特定できる．
提案手法の処理を以下に示す．また，Step1 から Step4 の流れを図 1 に示す．以下，特に注意が2. ソフトウェアライセンス特定手法
ない場合はシステムによる自動的な処理とする．
2.1 提案手法の概要
Step1．ファイルからコメントを抽出する．
An approach to identifying software licenses for software
Step2．コメントから共通文字列を抽出する．
component retrieving system.
Step3. 各共通文字列の未特定ファイル数を計算し，† Yuki MANABE ,† Makoto ICHII, † Yasuhiro HAYASE,† Makoto MATSUSHITA, † Katsuro INOUE
未特定ファイル数を基に降順ソートをおこなう．
† Graduate School of Information Science and Technology,
Step4．システムの管理者は Step3 の結果の上位
Osaka Universityから順に確認し，ライセンスを特定する．特定

1. はじめにStep2

Step33aA

Step4
ライセンス
特定10.9ソースファイル
b,c,d,eのライセンスが特定される

ソースファイル
c

コメント

4

e

0.6

0.68

0.5

0.69

0.4
0.3

共通文字列

Bd0.7

凡例b

ライセンスを特定するためのコメントを含む
ソースファイルの割合 0.690.8

カバー率

Step1

4

未特定ファ
イル数
システム
管理者

図 1 提案手法の処理の流れ不可能であった場合は，特定可能な共通文字列が見つかるまで，順に共通文字列を確認する．
Step5．未特定ファイル数が 0 でなく，ライセンス特定不可能でない共通文字列が残っている場
合は Step3 に戻る．残っていない場合は終了する．

0.2
0.1
01

2

3

45678
9 10 11 12
確認した共通文字列数

13141516171819

図 2 提案手法によるライセンス特定のカバー率
ライセンス指定の記述を含むファイルのうち，ほぼ全てに対してライセンスを特定できた．[3]では同様のカバー率を達成するために，7 種類の正規表現の文字列を作成する必要がある．本手法はシステムにより自動的に共通文字列を抽出するため，システムの管理者の負担をより軽減
3. 適用実験できると考えられる．
3.1 実験概要
また，上位にライセンスを特定できない共通実験ではソフトウェアのファイル群に対し提文字列が現れた．これは，ライセンスを指定す案手法を適用した場合のライセンス特定のカバる文字列の一部が異なっており，その共通部分のー率を調べる．本実験におけるカバー率は以下みが抽出されたためである．このようなライセの式で表される．
ンスの特定に至らず，また，差異の部分を含まライセンスが特定されたファイル数ない共通文字列は，差異の部分を含む共通文字
カバー率 =
ソフトウェアに含まれる全ファイル数列よりも未特定ファイル数が大きいため，上位実験のため，手法を実装したツールを作成した． に現れた．
また，Step2 の共通文字列の抽出には CCFinder[5]を用いた．
4. 今後の課題
実験対象として Gaim[6]のファイルを用いる．
今後の課題は，実際のソフトウェア部品検索
Gaim は 182 個の C 言語で書かれたファイルを含システムで検索対象となるような大規模なソーみ，そのうち 126 個でコメントにより 3 種類のスファイル群に対する適用実験と，本手法のソライセンスが指定され，全ファイルに対するこフトウェア部品検索システム SPARS-J に対するれらのファイルの割合は 0.69 である．
実装である．
3.2 実験結果
Step2 で 141 個の共通文字列が抽出された．ま
参考文献
た，少なくとも 1 個の共通文字列を含むファイ[1] Inoue, K., Yokomori, R., Yamamoto, T.,
ル数は 130 個であった．
Matsushita, M., Kusumoto, S.: Ranking significanceof software components based on use relations,
次に，Step3〜Step5 によるライセンス特定のカIEEE Trans. Softw. Eng. Vol. 31, No. 3, Pp.213 –
バー率と，ライセンスが指定されているファイ
225 (2005)
ルの割合を図 2 に示す．6 個の共通文字列を確認[2] Open Source Initiative:
することでカバー率が 0.68 となり，ライセンスhttp://www.opensource.org/の指定されたファイルの 98%を特定できた．さ[3] Tuunanen, T., Koskinen, J., Kärkkäinen, T.:らに，3 種類のライセンス全てを特定した．一方， Retrieving open source software licenses, Proc. OSS
2006, Pp.35 – 46 (2006)
1 番目と 5 番目に確認した共通文字列はライセン[4] Google Code Search:
スを指定する記述の一部であったが，ライセン
http://www.google.com/codesearch
スを特定出来なかった．全ての処理が終了する[5] Kamiya, T., Kusumoto, S., Inoue, K.: CCFinder: aまでに 19 個の共通文字列を確認し，カバー率はmultilinguistic token-based code clone detection
0.69 となった．
system for large scale source code, IEEE Trans. Softw.
3.3 実験の考察
Eng. Vol. 28, No. 7, Pp.654 – 670 (2002)
実験では，6 個の共通文字列を確認することで， [6] Gaim: http://gaim.sourceforge.net