Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

コピーされたソースファイル集合のオリジナルバージョンの検索

179 views

Published on

既存のライブラリのソースコードをコピーし改造したようなバージョンがソフトウェアに含まれているとき、そのオリジナルのライブラリ名・バージョン番号をファイルの類似度によって推測するという手法の研究です。

Published in: Software
  • Be the first to comment

  • Be the first to like this

コピーされたソースファイル集合のオリジナルバージョンの検索

  1. 1. Software Engineering Laboratory, NAIST, Japan コピーされたソースファイル集合の オリジナルバージョンの検索 このスライドは Takashi Ishio, Yusuke Sakaguchi, Kaoru Ito, Katsuro Inoue: Source File Set Search for Clone-and-Own Reuse Analysis, MSR 2017 での 発表内容を日本語化し、補足を加えたものです 石尾 隆†‡, 坂口 雄亮‡, 伊藤 薫‡, 井上 克郎‡ † 奈良先端科学技術大学院大学 ‡ 大阪大学
  2. 2. Software Engineering Laboratory, NAIST, Japan ソフトウェア再利用 開発者は多数のライブラリを使ってソフトウェアを作る 2 Firefox 45 zlib libpng libjpeg libvpx libogg stlport libjar freetype2 expat Cloned Components
  3. 3. Software Engineering Laboratory, NAIST, Japan ライブラリの更新問題 ライブラリのリリースノートや脆弱性報告は,更新を推奨 する過去のバージョン番号を指定する 3 Due to the bug fixes, any installations of 1.2.9 or 1.2.10 should be immediately replaced with 1.2.11. zlib 1.2.11 release (http://www.zlib.net/) zlib “これは更新が必要か?” ライブラリのコピーに対して,バージョン番号を知っていることは重要
  4. 4. Software Engineering Laboratory, NAIST, Japan バージョン番号はよく失われる [Xia, 2013] プロジェクトによっては,バージョン番号をきちんと記 録している バージョン番号の追跡が難しい場合もある 4 Firefox-45:modules/zlib Upgrade zlib to version 1.2.8 reorganize NSS directory layout, moving files, very large changeset! NSS-3.14:lib/zlib (バージョン情報がない)
  5. 5. Software Engineering Laboratory, NAIST, Japan 提案手法:ソースファイルのバージョン推定 5 zlib/gzlib.c zlib/inflate.c zlib/mozzconf.h zlib/zconf.h zlib/zlib.h zlib/zutil.c … (27 files) 検索クエリ:ファイル集合 出力:再利用されたと思われるライブラリバージョンの一覧 # Package Name Total Sim Same Similar 1 zlib-1:1.2.8.dfsg-2 25.9714 22 4 2 genometools-1.5.8-2 25.9670 22 4 3 mongodb-1:3.2.8-1 19.9505 15 5 Firefox-45.0 Debian GNU/Linux Package Database (200,018 packages)
  6. 6. Software Engineering Laboratory, NAIST, Japan 提案手法のプロセス 1. 再利用されたライブラリの候補の検索 • 検索クエリとなったソースファイルと,既存ライブ ラリのバージョンごとのファイルを比較する 2. 候補の順位付け • ファイル単位の類似度を合算した結果を用いる 6
  7. 7. Software Engineering Laboratory, NAIST, Japan ファイル単位の類似度の定義 トークン3つ組の Jaccard 係数: 編集距離の近似 sim 𝑎, 𝑏 = |𝑡𝑟𝑖𝑔𝑟𝑎𝑚𝑠 𝑎 ∩𝑡𝑟𝑖𝑔𝑟𝑎𝑚𝑠 𝑏 | |𝑡𝑟𝑖𝑔𝑟𝑎𝑚𝑠(𝑎)∪𝑡𝑟𝑖𝑔𝑟𝑎𝑚𝑠(𝑏)| 例: f1: while (( *dst++ = *src++) != '0'); f2: while (*dst++ = *src++); 7 _, _, while _, while, ( while, (, ( (, (, * (, *, dst *, dst, ++ … trigrams(f1) _, _, while _, while, ( while, (, * (, *, dst *, dst, ++ … trigrams(f2) • 空白やコメントは無視する • 現在の実装は C/C++,Java 等に対応する
  8. 8. Software Engineering Laboratory, NAIST, Japan Database gzlib.c inflate.c zconf.h … zlib-1.2.8 gzlib.c inflate.c zconf.h … zlib-1.2.7 inflate.c … mongodb-3.2.8 1. 再利用されたライブラリの検索 各ライブラリから最も類似したファイルを探す 類似度が低いものは無視する: sim 𝑎, 𝑏 ≥ 𝑡ℎ . 8 zlib/gzlib.c zlib/inflate.c zlib/mozzconf.h zlib/zconf.h zlib/zlib.h zlib/zutil.c … Firefox-45.0 1.0 0.9160 Query
  9. 9. Software Engineering Laboratory, NAIST, Japan 1. 再利用されたライブラリの検索 9 各ライブラリから最も類似したファイルを探す 類似度が低いものは無視する: sim 𝑎, 𝑏 ≥ 𝑡ℎ . Database zlib/gzlib.c zlib/inflate.c zlib/mozzconf.h zlib/zconf.h zlib/zlib.h zlib/zutil.c … Firefox-45.0 gzlib.c inflate.c zconf.h … zlib-1.2.8 gzlib.c inflate.c zconf.h … zlib-1.2.7 inflate.c … mongodb-3.2.8 Query 1.0 0.9948 0.9858 0.9160 0.9568 0.9384 0.991 似ているファイルを含む = 再利用された可能性がある
  10. 10. Software Engineering Laboratory, NAIST, Japan 実装技術 単純なファイル比較では時間がかかる |Q| × |F| 10 検索クエリのファイル数 データベースのファイル数 11,040,924 ファイル in Debian GNU/Linux (C/C++ and Java) 27 ファイル in zlib directory  b-bit minwise hashing 技術を採用して対応
  11. 11. Software Engineering Laboratory, NAIST, Japan b-bit minwise hashing [Li, 2010] 11 _, _, while _, while, ( while, (, ( (, (, * (, *, dst *, dst, ++ … trigrams(f1) 1-bit Min-Hash: b 𝑓 = min ℎ 𝑡 | 𝑡 ∈ 𝑡𝑟𝑖𝑔𝑟𝑎𝑚𝑠 𝑓 𝑚𝑜𝑑 2 h(t1) h(t2) h(t3) h(t4) h(t5) h(t6) … h(ti) trigrams(f2) f1 と f2 が似ているほど b(f1) = b(f2) である確率が高い b(f1) mod 2 b(f2) ∈ {0, 1} ∈ {0, 1} min
  12. 12. Software Engineering Laboratory, NAIST, Japan 類似度の推定 ハッシュ関数が同じ値を出す確率 𝑝 は類似度で表現される 𝑝 = sim 𝑓1, 𝑓2 + 1−sim 𝑓1 ,𝑓2 2 12 式変形して,類似度を観測された確率 𝑝 𝑜 で表現する sim 𝑒 𝑓1, 𝑓2 = 𝑝 𝑜 − 1 2 × 2 ハッシュ関数 𝑏𝑖 𝑓 (1 ≤ 𝑖 ≤ 𝑘) をたくさん( 𝑘 = 2048 個)持っ てきて確率 𝑝 𝑜 を観測する [Li, 2010] b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 f1 1 1 0 1 1 0 0 0 1 1 f2 1 0 0 1 1 0 0 0 1 1 𝑝 𝑜 = 0.9  sim 𝑒 𝑓1, 𝑓2 = 0.8
  13. 13. Software Engineering Laboratory, NAIST, Japan 類似度の高速な計算 13 IF sim 𝑒 𝑓1, 𝑓2 ≥ 𝑡ℎ − 𝑚 THEN sim 𝑓1, 𝑓2 = |𝑡𝑟𝑖𝑔𝑟𝑎𝑚𝑠 𝑎 ∩𝑡𝑟𝑖𝑔𝑟𝑎𝑚𝑠 𝑏 | |𝑡𝑟𝑖𝑔𝑟𝑎𝑚𝑠(𝑎)∪𝑡𝑟𝑖𝑔𝑟𝑎𝑚𝑠(𝑏)| ELSE sim 𝑓1, 𝑓2 = 0 Error margin 実際の類似度は必要な時しか計算しない: 全ファイル組のうち,0.1% 以下しか比較せずに済む
  14. 14. Software Engineering Laboratory, NAIST, Japan 2. 候補の順位付け 他のライブラリと比べて「どのファイルの 類似度も低い」候補は除外する 14 Database zlib/gzlib.c zlib/inflate.c zlib/mozzconf.h zlib/zconf.h zlib/zlib.h zlib/zutil.c … Firefox-45.0 gzlib.c inflate.c zconf.h … zlib-1.2.8 gzlib.c inflate.c zconf.h … zlib-1.2.7 inflate.c … mongodb-3.2.8 Query 1.0 0.9948 0.9858 0.9160 0.9568 0.9384 0.991 0.9160 0.9568 0.9384 Sum=25.9714 Sum=19.9505
  15. 15. Software Engineering Laboratory, NAIST, Japan 実装: Clofile Search http://sel.ist.osaka-u.ac.jp/clofile/ 15 ソースファイルの zip を投稿すると、 解析結果の HTML ページが出てくる
  16. 16. Software Engineering Laboratory, NAIST, Japan 評価 この方法で,正しいバージョンが得られるか? Firefox と Android の75ディレクトリを対象に実験 – 版管理システムにバージョン番号が記録されているもの – ランキングから,結果の順位を調べる 評価基準 – Top-k Recall: 上位 k 個に正解が入っている割合 – 順位の合計値: 人間が上から順に中身を確認したとき,正 解を見つけるまでの労力 – SHA-1 ハッシュによる単純比較(同一ファイルが多いもの をオリジナルとみなす)をベースラインとする 16
  17. 17. Software Engineering Laboratory, NAIST, Japan 結果 Method Top-1 Recall Top-5 Recall Top-10 Recall Top-∞ Recall Sum of positions Baseline (SHA-1) 0.640 0.773 0.827 0.960 931 Baseline +Ranking 0.707 0.840 0.867 0.960 719 th=1.0 0.733 0.867 0.893 0.987 785 th=0.9 0.733 0.907 0.920 1.000 551 th=0.8 0.733 0.893 0.920 1.000 627 th=0.7 0.680 0.880 0.907 1.000 692 th=0.6 0.667 0.880 0.907 1.000 689 17 ランキングあり 空白やコメントの無視 類似ファイルの考慮 Top-5: 0.773  0.907 見逃しなし 労力を削減 931  551 (60%)
  18. 18. Software Engineering Laboratory, NAIST, Japan 実行時性能 実行環境: Intel Xeon E6-2690 v3 (2.6 GHz), 64 GB RAM 使用消費メモリ量はおよそ24GB ソースファイルのデータベースとして HDD を 300 GB 使用 18 クエリあたりの時間 [th=0.6]: 中央値 77.7 秒 最大 25 分 合計では13,720 ファイルに 対して 3.5 時間 (0.92 秒/ファイル)
  19. 19. Software Engineering Laboratory, NAIST, Japan まとめ • 既存ライブラリの再利用を抽出できるようにした – b-bit minwise hashing で現実的な計算時間を達成した – 見逃し少なく、かつ正解を上位に出すことが可能 • Clofile Search http://sel.ist.osaka-u.ac.jp/clofile/ – 入出力サンプルも同 Web サイトで提供中 19
  20. 20. Software Engineering Laboratory, NAIST, Japan 今後の課題 • さらに大規模なデータへの適応 – GitHub のような環境で、開発者が相互に自由に再利用 し、後からそれを追跡できるようにする • ライブラリ更新の支援 – 再利用元でのバグ修正等の取り込みを容易にする • 開発者の活動の調査 – 開発者はパッチの取り込みを行っているか? – 再利用のときソースファイルを編集するのはなぜか? 20

×