石尾 隆 (大阪大学) 山本 哲男 (立命館大学) 佐々木 裕介 (大阪大学)

Slides:



Advertisements
Similar presentations
API 呼び出し列の差分を利用した Android アプリケーション比較ツールの 試作 井上研究室 神田 哲也.
Advertisements

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
1 EASE プロジェクトにおける EPM ( Empirical Project Monitor) を用いたプロジェクト管理デモ 奈良先端科学技術大学院大学 産学官連携研究員 松村 知子 2005 年 9 月 30 日 JISA 経営者セミナー.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
S8. コルモゴロフ複雑性に基づく プロダクト派生木復元の試み
メソッド周辺の識別子と メソッド本体のAPI利用実績に基づいたAPI集合推薦手法
ソースコードの編集内容を入力とした ソフトウェア部品の自動検索
利用実績に基づくソフトウェア部品検索システムSPARS-J
情報爆発A01支援班 マイサーチエンジン開発環境支援グループ 中村聡史, 大島裕明, 田中克己, 喜連川優
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
Webサイト運営 09fi118 橋倉伶奈 09fi131 本間昂 09fi137 三上早紀.
既存システムを連携させることによるeラーニング ― MoodleとXoopsのアカウント情報を交換するモジュール ―
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
大規模ソースコード集合を対象とした 類似関数集合群の抽出
ソフトウェア工学 知能情報学部 新田直也.
類似するコーディングパターンの 利用状況調査ツールの提案
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
識別子の共起関係に基づく類似コード検索法の提案と 欠陥検出への適用
ソードコードの編集に基づいた コードクローンの分類とその分析システム
Javaソースコード蓄積・ 検索システムSPARS-Jの概要
コードクローンの分類に基づいた メソッド引き上げ手順の提案とその有効性評価
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
重複コードと非重複コードにおける 修正頻度の比較
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
利用実績に基づくソフトウェア部品検索システムSPARS-J
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローンに対する一貫性のない変更に起因する欠陥の検出
Token Comparison Approach to Detect Code Clone-related Bugs
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
Javaソフトウェア部品検索システムSPARS-Jの実験的評価
シナリオを用いたレビュー手法PBRの追証実験 - UMLで記述された設計仕様書を対象として -
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
ソフトウェアプロダクト集合に対する 派生関係木の構築
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
ソフトウェア工学 知能情報学部 新田直也.
統合開発環境によって表現された 言語機構によるコードのモジュール化
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
アスペクト指向言語のための視点に応じた編集を可能にするツール
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
ソフトウェア理解支援を目的とした 辞書の作成法
コードクローン解析に基づく デザインパターン適用候補の検出手法
識別子の読解を目的とした名詞辞書の作成方法の一試案
プログラム理解のための 付加注釈 DocumentTag の提案
Presentation transcript:

石尾 隆 (大阪大学) 山本 哲男 (立命館大学) 佐々木 裕介 (大阪大学) ソースコードの類似性 ワークショップ開催報告 Japanese Workshop on Source Code Similarity 2009 石尾 隆 (大阪大学) 山本 哲男 (立命館大学) 佐々木 裕介 (大阪大学) 第166回 ソフトウェア工学研究報告会

発表の概要 SES2009 併設ワークショップ WS-3「ソースコードの類似性」 開催の背景 実施方法 得られた知見

ワークショップ開催の背景 Q. 「類似したソースコード」とは? A. 研究者ごとに定義が異なる 提案手法で検出するコード = 似ているコード  検索手法の評価で用いられる Recall, Precision のうち,Precision のほうは常に100%となる 選んだ「似ている」基準自体の妥当性は判断しにくい 性能のトレードオフなどの議論が難しい

類似ソースコード検索技術の例 コードクローン検索 [Kamiya, 2002] ソースコードの「見本」提示 [渡邉, 2007] ソースコードの字面の比較 ソースコードの「見本」提示 [渡邉, 2007] 自然言語の検索技術で類似ソースコードを検索 編集中のコードに似たものを3つ自動で提示 類似部品のグループ化 [佐々木, 2009] メソッドシグネチャ等の類似性を判定

ワークショップの目的 「類似したソースコード」とはどのようなものか? 目的ごとに違う,状況ごとに違うとしても 多くの人が共通して納得するような性質はあるか? SIGSE-WW 「プログラム解析」 2008,2009 の 参加者に呼び掛けて開催

参加者の興味 (1/2) 類似したソースコードを検出する研究多数 重複したコードをまとめて保守性向上 重複したコードを発見してソースコードの来歴分析 ソースコード検索用DBからの重複データ排除 ライブラリの使用方法の「見本」表示 再利用可能なソースコードの検索 「機能が似ている」プログラムを見つけたい 異なるシステムで「役割が同じ」クラスを見つけたい

参加者の興味 (2/2) 類似コードはどんな問題があるのか? まったく別の機能のファイルに,同じようなコードがあるのは問題なのでは? 保守性に悪影響があると言われているが… まったく別の機能のファイルに,同じようなコードがあるのは問題なのでは? バグの原因となる「悪い」複製を見つけたい 同じようなコードは連動して変更されるのか 似たコードというのは変更が多いか コードをまとめるコスト対効果

ワークショップの実施方式 共同作業型ワークショップ 開催側で似ていそうなソースコードを準備 参加者は,どう対処するかを判定して回答 SIGSE-WW「プログラム解析」グループでは初めて 開催側で似ていそうなソースコードを準備 CCFinder [Kamiya, 2002],Twigi [佐々木,2009] を使用 参加者は,どう対処するかを判定して回答 状況は1つに設定  共通した基準があるのかを見てみる

設定した状況 ソースコードを蓄積・再利用するための データベースを構築しようとしている. 言語は Java に限定 ソースコードはインターネット上から集めてくる 互いに類似したコード片が見つかることがある ソフトウェア間での複製に関する履歴は残っていない キーワード検索したコード片をランキング表示する 同じようなソースコードが上位10件を占めてしまうと,検索効率が非常に悪い

類似したコードへの「対策」を回答 例:パッケージが違うだけの100行のクラスの組 a) 一方だけ登録.他方は捨てる. b) 共通部品1つを作成して差分情報と合わせて登録. c) 関連した部品という記録を付けて2部品を登録. d) 特に関連性は付与せず,個別の部品として登録. 様々なコードの組に対して, 同様に選択肢 a)~d) からの選択方式で回答

似ているソースコードの抽出方法 2つのソースファイルの類似度 x% (閾値: 80~90%) クラス名に共通の単語が含まれている. 同じ名前のクラスを継承している(パッケージ名は無視) . 一方のnon-privateメソッドの x%以上が,他方にもnon-private メソッドとして含まれている. 一方のnon-privateフィールドのx%以上が,他方のnon-private フィールドとして含まれている. ソースコードのトークン数の比 (短いほうの長さ ÷ 長いほうの長さ)が x%以上. ソースコードのトークンの種類数の比が x%以上. …

グループ単位での活動による進行 18人の参加者を4グループに分配 24組のソースコードを 6組ずつ読んでいく 教員10,学生7,企業1 各学生に対し,事前アンケートの回答が近い別組織の学生および教員が同一グループになるように配置. 24組のソースコードを 6組ずつ読んでいく グループ単位で読む 個人単位で回答を記録. グループ内で意見交換. 個人単位で再回答. Group A Group B Group C Group D ソースP ソースQ ソースR ソースS

参加者への配布物 ソースコードの差分情報を印刷した紙 その PDF データ ソースコードの組 (.javaファイル) X-WinMerge というツールを使用して作成 A4横で1組あたり1~11ページ,合計82ページ その PDF データ ソースコードの組 (.javaファイル) diff コマンドの出力 X-WinMerge バイナリ

ソースコードの例 ソースコードを横に並べて diff 表示 行単位,文字単位差分がハイライトされる

結果の分析 ワークショップ開催時は時間不足  持ち帰っての分析 分析方法 予定では1組5分で120分の作業 実際は180分程度 ソースコードの差分情報と,回答を比較 回答理由に書かれていた項目を集計

回答の傾向 グループ内部ではそれなりに意見がまとまる グループ間ではばらつきが大きい 1グループ,ソース1組あたりの回答は平均1.5個 3/4 (14人)の判断が一致するコード: 24組中5組 2/3 (12人)の判断が一致するコード: +3組 1/2 (9人)の判断が一致するコード: +10組

判断の基準 識別子が似ていると,互いに関連していそう. クラスの振舞いが同じなら,一方を捨てられる. 例: Prefix○○とSuffix○○,And△△ と Or△△ クラスの振舞いが同じなら,一方を捨てられる. 集約して1部品にするかどうか ≒ しやすいかどうか 似ていても,興味のないコード 例外やテストケースなど.登場するクラス名以外は同一 一方が他方の更新版の場合. 古いほうを捨てるだけ API の使用例.使うメソッドの差異は少ない

回答用紙の判断理由キーワード 40 10 バージョン,版,派生,新,オリジナル 31 12 継承,extends, 親,子 28 9 出現回数 使用人数 キーワード 40 10 バージョン,版,派生,新,オリジナル 31 12 継承,extends, 親,子 28 9 双対,一対 25 14 テスト 22 7 ロジック,アルゴリズム 16 4 例,サンプル,example その他     コメント,識別子,役割,振る舞い

考察 ソースコード情報だけでは対処は決定できない ソースコードの関係をいかに抽出するか 他に似ているコードはどれだけあるか 同時期,同じ役割で作られているかどうか 一方が他方の派生物であるかどうか まとめて1部品にしやすいかどうか ☆ 本当は開発者の意図が知りたい ソースコードの関係をいかに抽出するか 人により注目する要素が異なる 目的別に抽出する情報を選択可能なツールが必要

ワークショップでの反省点 作業時間の超過 作業途中での議論の記録が取れなかった 積極的にコントロールが必要 議論時間が取れず,事後分析のみとなった 作業途中での議論の記録が取れなかった 回答用紙にはほとんど理由が記載されず 議論での同意,不同意等の情報は得られなかった

まとめ ソースコードの類似性ワークショップを開催 ソースコード,分析結果などのデータ公開中 識別子などの字面が似ていると,ソースコードに関係があると認識される 対処法を決めるには,ソースコードが置かれた周辺の状況情報が必要 ソースコード,分析結果などのデータ公開中 http://sel.ist.osaka-u.ac.jp/JWSCS2009/ ワークショップ参加者の皆様に          深く感謝いたします.