Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 保守支援を目的とした コードクローン情報検索ツール.

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
Advertisements

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 情報検索技術に基づく 関数クローン検出を用いた.
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 識別子名のタグクラウドを用いた.
大杉 直樹†, 神谷 年洋‡, 門田 暁人†, 松本 健一† †奈良先端科学技術大学院大学 情報工学科 {naoki-o, akito-m,
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
AGMアルゴリズムを用いた ギャップを含むコードクローン情報の生成
剽窃 他人の作品や論文を盗んで,自分のものとして発表すること. プログラムが剽窃される事例もある. Aさんのプログラム Xさんのプログラム
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
プログラム変更支援を目的とした コードクローン情報付加手法の提案と実装
大規模収集データに基づいた ソフトウェアエンジニアリング
大規模開発データの収集と エンピリカルソフトウェア工学
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
ソースコードに対する適用可能な修正手順を 可視化するリファクタリング支援手法の提案
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
コードクローン検出技術と その利用法 神谷年洋‡, 植田泰士†, 肥後芳樹†, 楠本真二†, 井上克郎†
コードクローン分析ツールGeminiを用いたコードクローン分析手順
コードクローンの分布情報を用いた特徴抽出手法の提案
ギャップを含むコードクローンの フィルタリング手法の提案
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の共起関係に基づく類似コード検索法の提案と 欠陥検出への適用
ソードコードの編集に基づいた コードクローンの分類とその分析システム
関数の変更履歴と呼出し関係に基づいた開発履歴理解支援システムの実現
コードクローンの集約によるリファクタリング支援システムの提案と実装
ネットワーク共生環境を築く情報技術の創出 テーマ4:高信頼性・高安全性を有するネットワーク共生環境の構築技術の創出
オブジェクト指向プログラミング言語に対応した コードクローン検出技法の提案と実験
リファクタリング中に生じる コンパイルエラーの自動解消手法
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向メトリクスを用いた 開発支援法に関する研究
変数のデータフローを考慮した API利用コード例の検索 井上研究室 竹之内 啓太.
クローンセットに対する主要編集者の分析法の提案と調査
重複コードと非重複コードにおける 修正頻度の比較
クローン検出ツールを用いた ソースコード分析ツールの試作
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
コードクローン統合分析ツール ICCA 肥後 芳樹† ,吉田 則裕† ,神谷 年洋‡,楠本 真二† ,井上 克郎†
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローンに対する一貫性のない変更に起因する欠陥の検出
柔軟に変更可能な字句解析機構を持つ コードクローン検出ツールの開発
プログラム実行履歴を用いたコードクローン検出手法
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
バイトコードを単位とするJavaスライスシステムの試作
コードクローン編集者数に着目した開発履歴の分析
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
第7回OACISシンポジウム 大阪大学におけるソフトウェア工学研究と産学連携活動
大阪大学 大学院情報科学研究科 コンピュータサイエンス専攻 井上研究室
保守請負時を対象とした 労力見積のためのメトリクスの提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
容易に使用可能な grep風コードクローン検索ツール
ソフトウェア理解支援を目的とした 辞書の作成法
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コードクローン解析に基づく デザインパターン適用候補の検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
コードクローンを対象とした リファクタリングの有効性に関する調査
Presentation transcript:

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 保守支援を目的とした コードクローン情報検索ツール の試作 泉田 聡介 †, 植田 泰士 †, 神谷 年洋 ‡, 楠本 真二 †, 井上克郎 † † 大阪大学大学院情報科学研究科 ‡ 科学技術振興事業団 さきがけ研究 21

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT 研究 の 背景 (1/2) コードクローン ソースコード中に含まれる同一もしくは類 似したコードのこと, いわゆる “ 重複した コード ” クローン

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT 研究 の 背景 (2/2) コードクローンはソフトウェア保守を困難にす る コードクローンにバグがあった場合、全てのコード クローンについて修正を考慮しなければならない 機能追加の場合も同様 コードクローン検出ツール CCFinder ソースコードをトークン単位で直接比較することに よりクローンを検出 数百万行規模のシステムにも実用時間で解析可能 実用的に意味のないクローンを検出しない 様々な企業のソフトウェアにも適用している

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT コードクローン検出手順 (1) ソースコードを入力し,トークンの列にす る (2) 変形ルールにより,トークン列を変形する (3) パラメータ置換を行う (4) マッチングアルゴリズムによりコードク ローンを検出する (5) コードクローンの位置 ( ファイル,行, カラ ム ) を出力する

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT static void foo() throws RESyntaxException { 2. String a[] = new String [] { "123,400", "abc", "orange 100" }; 3. org.apache.regexp.RE pat = new org.apache.regexp.RE("[0-9,]+"); 4. int sum = 0; 5. for (int i = 0; i < a.length; ++i) 6. if (pat.match(a[i])) 7. sum += Sample.parseNumber(pat.getParen(0)); 8. System.out.println("sum = " + sum); 9. } 10. static void goo(String [] a) throws RESyntaxException { 11. RE exp = new RE("[0-9,]+"); 12. int sum = 0; 13. for (int i = 0; i < a.length; ++i) 14. if (exp.match(a[i])) 15. sum += parseNumber(exp.getParen(0)); 16. System.out.println("sum = " + sum); 17. } 例題ソースコード

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT ステップ (1) :ソースコードを入力し,トークンの列にする

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT ステップ (2) :変形ルールにより,トークン列を変形する

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT ステップ (3) :パラメータ置換を行う

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT ステップ (4) : マッチング アルゴリズ ムにより, コードク ローンを検 出

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT ステップ (4) : マッチング アルゴリズ ムにより, コードク ローンを検 出

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT ステップ (5) :コードクローンの位置を出力する #version: ccfinder 4.5h #langspec: JAVA #option: -b 30,1 #option: -k: - #option: -r abcdfikmnprsv #option: -c wfg #begin{file description} C:\test1.java #end{file description} #begin{syntax error} #end{syntax error} #begin{clone} 0.0 3,3,10 10,1, ,3,53 17,1,90 37 #end{clone} 対象ファイルの ID (file 0 in group 0) クローンの位置 file 0.0: 3 ~ 9 行 file 0.0: 11 ~ 17 行 がクローンである

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT static void foo() throws RESyntaxException { 2. String a[] = new String [] { "123,400", "abc", "orange 100" }; 3. org.apache.regexp.RE pat = new org.apache.regexp.RE("[0-9,]+"); 4. int sum = 0; 5. for (int i = 0; i < a.length; ++i) 6. if (pat.match(a[i])) 7. sum += Sample.parseNumber(pat.getParen(0)); 8. System.out.println("sum = " + sum); 9. } 10. static void goo(String [] a) throws RESyntaxException { 11. RE exp = new RE("[0-9,]+"); 12. int sum = 0; 13. for (int i = 0; i < a.length; ++i) 14. if (exp.match(a[i])) 15. sum += parseNumber(exp.getParen(0)); 16. System.out.println("sum = " + sum); 17. }

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT #version: ccfinder 4.5h #langspec: JAVA #option: -b 30,1 #option: -k: - #option: -r abcdfikmnprsv #option: -c wfg #begin{file description} C:\test1.java #end{file description} #begin{syntax error} #end{syntax error} #begin{clone} 0.0 3,3,10 10,1, ,3,53 17,1,90 37 #end{clone} CCFinder の 出力 ユーザの利用目的に応じた ユーザインタフェースが求められて いる 検出結果はクローンの位置情報のみであり、 その結果を直感的に理解することは困難

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT 研究 の 目的 CCFinder を利用したコードクローン情報検索 ツールの試作 ユーザが入力したコード片に対して,そのコード クローンを含むファイルを検索し、提示する

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT 利用状況の想定 修正箇所の特定 デバッグへの適用 機能追加時の使用 発見したクローン全てに 対し、修正コードを適用 を検討 修正箇所に関するクロー ンの検索 機能を追加 追加前のコード片のクロー ン を検索 クローン全てについて 機能追加の是非を検討

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT クローン情報検索ツール 入力: ユーザが指定するコード片 検索対象ファイル名のリスト 出力: ユーザが指定したコード片のクロー ンを含む ファイルのリスト 特徴 簡単な操作 検索結果のソースコード上での確認 ハイライト表示等 Java で実装.サイズは約 3 千行.

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT ツールのインターフェース ファイルのリストを入 力 検索したいコード 片を入力 解析対象言語の選択 解析開始ボタン

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT ツールの使用例 検索項目 の入力 起動画面 検索結果 ソースコー ドの確認

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT ケーススタディ 擬似デバッグへの適用 SourceForge で開発されている日本語入力 システム「かんな」の修正例へ適用 修正の対象となるコード片を検出できるか 実行にかかる時間はどれくらいか 適用環境 CPU Pentium4 2GHz 、メインメモリ 512MB OS WindowsXP HomeEdition SP1 Java VM JDK1.4 付属のもの

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT 「かんな」の修正例 「かんな」の ver3.6 と ver3.6p1 間の修正 例 セキュリティー問題の修正において、バッ ファ処理の前にオーバーフローを調べる処 理を追加する. ほぼ同じ修正を行っている部分が 21 ヵ所 あった.

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT 評価方法 以下の 2 つの方法の比較を行う. grep を用いた検索 修正箇所で使用されている変数 “ Request.type ” で検索 本ツールを用いた検索 入力コード片として,典型的なバッファ処理を行ってい る 2 行を与えて検索 ir_debug(Dmsg(10, ” ProcWideReq3 start\n ” ) ); buf += HEADER_SIZE; Request.type3.context = S2TOS(buf); 検索対象:かんな ver3.6 の全ソースコード (約 21,000 行)

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT 結果 検索結果 検索時間 grep 243 行( 58 箇所) 約 1 秒 本ツール 17 箇所 約 8 秒 本ツールでの検索では,実際の修正箇所 21 箇所のうち 4 箇所が検出されず 2 行が連続していなかった 検出された 17 箇所は正しい grep での検索結果のうち 134 行( 20 箇 所)が 修正箇所に関連していた

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT f 値を用いた比較 f 値の定義 完全性 - 必要な情報のうち実際に検索された情報の割合 効率性 - 実際に検索された情報のうち必要な情報の割合 完全性効率性 f値f値 grep95%34%0.50 本ツール 81%100%0.90 本ツールでの検索の方が効率的である

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT まとめ と 今後 の 課題 ユーザが入力したコード片のクローンを検索 するツールの試作を行った 「かんな」の修正へ適用した 今後の課題 実際の保守作業への適用 出力する結果の表示方法の検討

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University H15/09/11FIT