コードクローン関連ツール
-> English Page
Last update 2005-01-05, Since 2002
大阪大学大学院情報科学研究科 コンピュータサイエンス専攻 井上研究室
• ツール
→ ICCA
→ CCFinder
• 技術解説
• コードクローン
• よくある質問
• 発表
• 報道など(update)
• 論文
• 参考文献
• 更新履歴
|
はじめに
コードクローンとは、ソースコード中の全く同じあるいは類似したコードの断片です。コードクローンが存在するソースコードは、保守が困難になることが指摘されています。
特に、大規模なソフトウェアにおいては、コードクローン問題は深刻であり、手作業では、ソースコード中にコードクローンが存在するかどうかをチェックすることすら困難です。 関連手法・研究・技術CloneWarrior
大杉直樹氏(奈良先端科学技術大学院大学 情報科学研究科 ソフトウェア工学講座)によって開発された、
コードクローンを追跡して、ソースコードを修正することを目的とするGUIベースのコードクローン分析ツール。 コードクローン検出手法およびツール
コードクローンと開発プロセス
技術解説ここでは、特にCCFinder/Geminiで用いられている技術や定義について説明します。 一般に、コードクローンを検出する手法には、ソースコードの字面の比較によるもの、特徴メトリクスによるものなど、 様々なものがあります(チュートリアル[Inoue2001], 解説記事[Kamiya2004])。コードクローンソースコード中の同一あるいは類似したコード断片を、コードクローンと呼びます。 コードクローンが発生する主な原因は、開発者がソースコードをコピー&ペーストすることですが、 実行時のパフォーマンスを求めて意図的に繰り返しコードを書くこともあり、 エラー処理などの定型処理もコードクローンとなります。 また、コード生成ツール(パーザージェネレータ等)によって生成されたソースファイルもコードクローンを含むことがあります。 コードクローンの存在は、特に大規模なソフトウェアにおいて、ソフトウェアの保守を困難にします。 コードクローンであるコード断片に誤りが含まれていた場合には、そのコードクローンのコード断片について、修正を行う必要があります。 機能拡張や機能変更のためにソースコードを修正する場合も同様で、コードクローンがあればそのすべてのコード断片について修正を行う必要があります。 実際に、20年以上保守されているあるソフトウェアからコードクローンを検出したケーススタディにおいては、 全部で約2000個あるモジュール(ソースファイル)の半数にコードクローンが含まれていました。 特に、長いコードクローン(そのコードクローンが含む個々のソースコード断片の行数が多いもの)は、 ソフトウェアの保守に悪影響を与えていることもわかりました。 現実的には、ソフトウェアを開発する上でコードクローンの発生は避けられない問題です。 複数の開発者が開発すれば、ほぼ確実に定型処理が重複して記述されることになります。 また、一度ソフトウェアを開発して初めてわかるような、繰り返して用いられる処理もあります。 発見されたコードクローンを取り除く(まとめる)ことが常に可能であるとは限らず、 プログラミング言語に適切な機能(構造化例外処理や汎用型、オブジェクト指向、アスペクト指向)が無い場合には、 単一のルーチンとしてまとめることができないコードクローンもあります。 現在、大規模なソフトウェアのソースコードからコードクローンを検出する手法、コードクローンに対処するための手法が盛んに研究されています。 散布図(スキャッタープロット)
Coming soon. クローンメトリクスクローンクラス(互いに同じまたは類似しているソースコード断片の集合)を計測対象とするメトリクス
モジュール(ソースファイル)を計測対象とするメトリクス
よくある質問
Q1: どこからダウンロードできるのですか?
A1: 現在、諸般の事情のため、CCFinder/Geminiの配布は厳密な管理の下におかれています。研究に協力して頂けるという条件付きで配布しております。詳細は以下の連絡先にどうぞ。 Q2: 論文[Kamiya2002]で、CCFinderの実行時間の計測は何回か実行した平均ですか?アルゴリズムの複雑さの評価としては、接尾辞木(suffix tree)の節点の数や深さで評価する方がよいのではないですか? A2: 実行時間は、PCを再起動した直後にCCFinderを実行して計測しました。何度か実行してみて、ディスクキャッシュが最も大きく影響していると分ったので、時間計測はこの方法で行いました。接尾辞木の節点の数で評価する方法は、一見、客観的に見えるかも知れませんが、以下の理由により採用しませんでした。(1)何が節点になるかは検出アルゴリズムによって違うためあまり参考にならない、(2)接尾辞木を操作している時間は検出アルゴリズム全体からみてそれほど大きな割合を占めていない。 発表報道など
[受賞] 第7回プログラミングおよびプログラミング言語ワークショップ(PPL2005) 発表賞(一般の部)受賞。
[その他] 2004年度第2回未踏ソフトウェア創造事業に「コードクローン検出ツールCCFinderNexGenの開発」が採択される。(2004/12/22)
[受賞] 第35回市村学術賞貢献賞に選ばれる。(2003/04/25)
[Award] International Conference on Software Maintenance(ICSM) 2002併設ワークショップWorkshop on Detection of Software Cloneにおいて、CCFinderがClones Award 2002の1つに選ばれる。(2002/10/02) [新聞記事] "阪大『修正点、100倍速く検索』 ", 日経産業新聞 2002年5月17日(金)日刊 8面, 2002.5.17. [新聞記事] "コンピュータソフト 『コピー部分高速検出法』 阪大教授ら開発", 讀賣新聞 2002年5月8日(水)朝刊 総合2面, 2002.5.2. 論文20042003 2002 2001
[Ueda2001] 植田泰士, 神谷年洋, 楠本真二, 井上克郎: "クローン検出ツールを用いたソースコード分析ツールの試作", 電子情報通信学会技術研究報告, SS2001-14, Vol.101, No.240, pp.17-24, (2001-7).
[Kamiya2001-3] Toshihiro Kamiya, Fumiaki Ohata, Kazuhiro Kondou, Shinji Kusumoto, and Katuro Inoue: "Maintenance support tools for Java programs: CCFinder and JAAT", Proc. of The 23rd Int'l Conf. on Software Eng. (ICSE'2001), pp. 837-838, Toronto, Canada, (May, 2001).
[Kamiya2001-2] 神谷年洋, "コードクローンの検出手法," 情報処理学会ソフトウェア工学研究会 ウィンターワークショップ・イン・金沢論文集, pp.21-22, (2001-1).
[Kamiya2001] 神谷年洋, 楠本真二, 井上克郎: "コードクローン検出における新手法の提案及び評価実験", 電子情報通信学会技術研究報告、SS2000-42〜52, Vol.100, No.570, pp. 41-48, (2001-1).
[Nakae2001] 中江大海, 神谷年洋, 門田暁人, 加藤裕史, 佐藤慎一, 井上克郎, "レガシーソフトウェアを対象とするクローンコード分析," 電子情報通信学会技術研究報告, ソフトウェアサイエンス研究会, Vol. 100, No. 570, SS2000-49, pp. 57-64, (2001-1).
参考文献謝辞
これらの研究は、平成16年度〜平成20年度の研究期間については、
日本学術振興会科学研究費補助金基盤研究(A)(課題番号:JP17200001)の助成を得ています。
更新履歴
|