Download presentation
Presentation is loading. Please wait.
1
ソフトウェア保守のための コードクローン情報検索ツール
特別研究報告 井上研究室 泉田 聡介
2
研究の背景(1/2) コードクローン ソースコード中に含まれる同一もしくは類似したコードのこと, いわゆる“重複したコード” クローン
H15/02/26 平成14年度特別研究報告
3
研究の背景(2/2) コードクローンはソフトウェア保守を困難にする コードクローン検出ツールCCFinder
コードクローンにバグがあった場合、全てのコードクローンについて修正を考慮しなければならない 機能追加の場合も同様 コードクローン検出ツールCCFinder ソースコードをトークン単位で直接比較することによりクローンを検出 数百万行規模のシステムにも実用時間で解析可能 実用的に意味のないクローンを検出しない 様々な企業のソフトウェアにも適用している ユーザー定義名の置き換え 名前空間の正規化 テーブル初期化部分を取り除く モジュールの区切りを認識する H15/02/26 平成14年度特別研究報告
4
CCFinderの出力 検出結果はクローンの位置情報のみであり、その結果を直感的に理解することは困難
#version: ccfinder 4.5h #langspec: JAVA #option: -b 30,1 #option: -k: - #option: -r abcdfikmnprsv #option: -c w-f-g #begin{file description} D:\test1.java D\GUI.java D:\search.java : #end{file description} #begin{syntax error} #end{syntax error} #begin{clone} ,12, ,34, ,12, ,34, ,15, ,12, ,15, ,12,108 48 ,12, ,12, ,12, ,15, ,12, ,15, ,12, ,12, ,15, ,1, ,15, ,12, #end{clone} 対象ファイルのID (file 0 in group 0) クローンの位置 file 0.1:1615~1636行 file 1.0: ~83行 がクローンである 検出結果はクローンの位置情報のみであり、その結果を直感的に理解することは困難 検出結果はクローンペアの位置情報のみであり その結果を直感的に理解することは困難 ユーザの利用目的に応じた ユーザインタフェースが求められている H15/02/26 平成14年度特別研究報告
5
研究の目的 CCFinderを利用したコードクローン情報検索ツールの試作
ユーザが入力したコード片に対して,そのコードクローンを含むファイルを検索し、提示する H15/02/26 平成14年度特別研究報告
6
利用状況の想定 デバッグへの適用 機能追加時の使用 修正箇所の特定 機能を追加 修正箇所に関するクローンの検索 追加前のコード片のクローン
を検索 発見したクローン全てに対し、修正コードを適用 機能追加時の使用 クローン全てについて機能追加の是非を検討 利用状況のイメージを入れる H15/02/26 平成14年度特別研究報告
7
クローン情報検索ツール 入力: ユーザが指定するコード片 検索対象ファイル名のリスト
検索対象ファイル名のリスト 出力: ユーザが指定したコード片のクローンを含 むファイルのリスト 特徴 簡単な操作 検索結果のソースコード上での確認 ハイライト表示等 Javaで実装.サイズは約3千行. H15/02/26 平成14年度特別研究報告
8
ツールの使用例(1/2) ファイルのリストを入力 検索したいコード片を入力 解析対象言語の選択 解析開始ボタン H15/02/26
平成14年度特別研究報告
9
ツールの使用例(2/2) 起動画面 検索項目の入力 検索結果 ソースコードの確認 H15/02/26 平成14年度特別研究報告
10
評価実験 擬似デバッグへの適用 SourceForge で開発されている日本語入力システム「かんな」の修正例へ適用
修正の対象となるコード片を検出できるか 実行にかかる時間はどれくらいか 適用環境 CPU Pentium4 2GHz、メインメモリ 512MB OS WindowsXP HomeEdition SP1 Java VM JDK1.4付属のもの H15/02/26 平成14年度特別研究報告
11
「かんな」の修正例 「かんな」のver3.6とver3.6p1間の修正例
セキュリティー問題の修正において、バッファ処理の前にオーバーフローを調べる処理を追加する. ほぼ同じ修正を行っている部分が21ヵ所あった. H15/02/26 平成14年度特別研究報告
12
評価方法 以下の2つの方法の比較を行う. 検索対象:かんなver3.6の全ソースコード (約21,000行) grepを用いた検索
修正箇所で使用されている変数“Request.type”で検索 本ツールを用いた検索 入力コード片として,典型的なバッファ処理を行っている2行を与えて検索 検索対象:かんなver3.6の全ソースコード (約21,000行) H15/02/26 平成14年度特別研究報告
13
結果 検索結果 検索時間 grep 243行(58箇所) 約1秒 本ツール 17箇所 約8秒 本ツールでの検索では,4箇所が検出されず
検索結果 検索時間 grep 243行(58箇所) 約1秒 本ツール 17箇所 約8秒 本ツールでの検索では,4箇所が検出されず 2行が連続していなかった 検出された17箇所は正しい grepでの検索結果のうち134行(20箇所)が 修正箇所に関連していた H15/02/26 平成14年度特別研究報告
14
f値を用いた比較 完全性、効率性からf値を求め比較 完全性 効率性 f値 grep 95% 34% 0.50 本ツール 81% 100%
完全性 - 必要な情報のうち実際に検索された情報の割合 効率性 - 実際に検索された情報のうち必要な情報の割合 完全性 効率性 f値 grep 95% 34% 0.50 本ツール 81% 100% 0.90 本ツールでの検索の方が効率的である H15/02/26 平成14年度特別研究報告
15
まとめと今後の課題 ユーザが入力したコード片のクローンを検索するツールの試作を行った 「かんな」の修正へ適用した 今後の課題 実用性の向上
出力する結果の表示方法の検討 H15/02/26 平成14年度特別研究報告
16
H15/02/26 平成14年度特別研究報告
17
H15/02/26 平成14年度特別研究報告
18
性能の評価 JDK1.4.01 ?file ??万行 Gemini FreeBSD 10行30token 20行 30token
100行 H15/02/26 平成14年度特別研究報告
19
適用実験概要(1/2) 適用対象 SourceForgeで開発されている日本語入力システム「かんな」 「かんな」のバグ修正を行うことを想定
約21,000行 「かんな」のバグ修正を行うことを想定 実際のバグ修正履歴を用いた擬似的なデバッグ 修正すべき(実際に修正された)コード片を本ツールでどの程度見つけることができるか 実行環境 Pentium4 2GHz メインメモリ512MB OS Windows XP HomeEdition SP1 Java VM JDK1.4付属のもの H15/02/26 平成14年度特別研究報告
20
適用実験概要(2/2) 用いたバグ修正履歴 ver3.6からver3.6p1 バッファオーバーフローが起こるバグの修正
ir_debug(Dmsg(10,”ProcWideReq3 start\n”) ); buf += HEADER_SIZE; Request.type3.context = S2TOS(buf); buf += SIZEOFINT; Request.type3.buflen = S2TOS(buf); : 用いたバグ修正履歴 ver3.6からver3.6p1 バッファオーバーフローが起こるバグの修正 該当バッファを扱う処理コードへバッファサイズチェックコードの追加 修正が行われたのは30ヵ所(3ファイル) うち21ヵ所は同じようなコード片に対し、同じような修正を行っていた結果の分析 ir_debug(Dmsg(10,”ProcWideReq3 start\n”) ); if(Request.type3.datalen != SIZEOFSHORT *2) return(-1); buf += HEADER_SIZE; Request.type3.context = S2TOS(buf); buf += SIZEOFINT; Request.type3.buflen = S2TOS(buf); : H15/02/26 平成14年度特別研究報告
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.