Presentation is loading. Please wait.

Presentation is loading. Please wait.

コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用

Similar presentations


Presentation on theme: "コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用"— Presentation transcript:

1 コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
井上研究室 植田 泰士 2019/2/23

2 研究の背景(1) ソースコード中に類似したコード片があるとき、 それらをコードクローンという クローンペア クローンクラス
2019/2/23

3 研究の背景(2) コードクローンはソフトウェア保守を困難にする 井上研究室ではコードクローン検出ツールCCFinderを開発してきている
コードクローンにフォールトがあった場合、 すべてのコードクローンについて修正を 行わなければならない 井上研究室ではコードクローン検出ツールCCFinderを開発してきている 検出結果はクローンペアの位置情報のみであり その結果を直感的に理解することは困難 2019/2/23

4 目的 CCFinderの検出結果を用いてソースコードを分析するGUIシステムの試作を行う
分析手法の検討 プログラム演習に適用実験を行い,システムおよび手法の有効性を確認する 2019/2/23

5 CCFinderの特徴 ソースコードをトークン単位で直接比較することによりクローンを検出 数百万行規模のシステムにも実用時間で解析可能
実用的に意味のあるクローンのみを検出 ユーザー定義名の置き換え 名前空間の正規化 テーブル初期化部分を取り除く モジュールの区切りを認識する 2019/2/23

6 CCFinderによるクローン検出例 FreeBSD Linux 341: dwFrameGroupLength = 1;
342: for(dwCnt = 2; dwCnt <= 64; dwCnt *= 2) 343: { 344:     if(((ulOutRate / dwCnt) * dwCnt) != 345:      ulOutRate) 346:    { 347:        dwFrameGroupLength *= 2; 348:    } 349: } FreeBSD 784: frameGroupLength = 1; 785: for (cnt = 2; cnt <= 64; cnt *= 2) { 786:     if (((rate / cnt) * cnt) != rate) 787:         frameGroupLength *= 2; 788: } Linux 2019/2/23

7 システムの機能 クローンペアの位置情報を散布図で表現 クローンクラスに関するソフトウェアメトリクスの 算出とグラフ表示
類似率に基づくソート機能 指定クローンペア集合のソースコードを比較する クローンを持たないファイルを散布図から取り除く ズーム機能 クローンクラスに関するソフトウェアメトリクスの 算出とグラフ表示 指定クローンクラスのソースコードを比較する フィルタリング機能 クローンクラスに関するソフトウェアメトリクスの 算出とグラフ表示 指定クローンクラスのソースコードを比較する フィルタリング機能 2019/2/23

8 クローン散布図(1) 原点は左上角 水平軸,垂直軸には共に同じ順で同じ要素を並べる 各座標で一致している部分にプロット
対角線は自己比較なので 一本の直線が引かれる 分布状態は対角線に線対称 実際のGUIシステムでは行単位で直線を引く (対角線に平行でない直線も 現れる) A, B, C, ・・・ : トークン X Y A B C A B C X Y 2019/2/23

9 クローン散布図(2) 座標軸に単純にファイルを 並べていく クローンペアの分布が分散し 分析に非常に手間がかかる
f1 f2 f3 f4 f5 f6 f1 f6 f3 f5 f2 f4 クローンペアの分布が分散し 分析に非常に手間がかかる できる限り密集させる必要がある ソート基本アイデア あるファイルfの位置が確定すれば, その隣には,位置が未確定な残りの ファイル集合から,fに対し 最も類似したファイルを並べる 2019/2/23

10 システムの構成 ソースコード クローン検出部 クローンペア 管理部 クローンクラス 管理部 ユーザー ソースコード管理部 2019/2/23

11 適用実験概要 情報科学演習Dにおいて作成された プログラムのソースコードに適用
Pascal風言語ソースコードをCASLへ変換する コンパイラ C言語で開発 課題1:構文チェッカ(PARSER), 課題2:意味チェッカ(CHECKER), 課題3:コンパイラ(SPC)の順に作成 計76人分(約38万行)のソースコードを利用 2019/2/23

12 適用結果一例 1区切り:1個人 最小一致トークン数:30 各個人内で課題順に配置 1区切り:1個人 最小一致トークン数:30
Parser Checker SPC A 1区切り:1個人 最小一致トークン数:30 各個人内で課題順に配置 1区切り:1個人 最小一致トークン数:30 各個人内で課題順に配置 A ソートにより要分析領域は 大幅に縮小 A-B間類似性 Parser間:24% Checker間:15% SPC間:7% 容易に類似性を判断可能 2019/2/23

13 適用結果一例 1区切り:1個人 最小一致トークン数:30 各個人内で課題順に配置 ソートにより要分析領域は 大幅に縮小
A B AB A B ソートにより要分析領域は 大幅に縮小 A-B間類似性 Parser間:24% Checker間:15% SPC間:7% 容易に類似性を判断可能 2019/2/23

14 適用結果一例 1区切り:1個人 最小一致トークン数:30 各個人内で課題順に配置 ソートにより要分析領域は 大幅に縮小
A B ソートにより要分析領域は 大幅に縮小 A-B間類似性 Parser間:24% Checker間:15% SPC間:7% 容易に類似性を判断可能 2019/2/23

15 まとめと今後の課題 ソースコード分析システムを試作した 演習に適用する中で有効性を確認
クローン分析における散布図ソート機能の有効性 メトリクスグラフから特徴あるコードフラグメント集合を 容易に抽出 検出,分析,再構築のサイクルをインクリメンタルに 処理できるようにし実用性を向上させる 含まれる構文によりクローンペア,クローンクラスを 分類表示 2019/2/23

16 (参考)適用結果1 3つの課題を通した拡張特性分析(原点から順にParser,Checker,SPC)
課題1-2間:再利用性が低い(49人の内8割) 平均7.5% 課題2-3間:ある程度の再利用性(ほぼ全員) 平均30.3% 課題初期段階において 課題全体の理解度を高める必要性 2019/2/23

17 (参考)クローンメトリクス RAD(C):ファイルシステム内にクローンクラスC内の 要素がどれだけ分散しているか
LEN(C):クローンクラスC内の1要素のトークン数 POP(C):クローンクラスC内の要素数 DFL(C):クローンクラスCを一箇所にまとめた場合の       コード減少量 2019/2/23

18 (参考)適用結果2 DFL値が非常に高いクラスを分析 RAD,POP値の共に高いクラスを分析
拡張時にモジュール整理を的確に行った者と, ほとんど行っていない者を特定 RAD,POP値の共に高いクラスを分析 最も多くの人に最も使われたコードパターンを特定できる 構文解析部「変数宣言の並び」「仮パラメータの並び」 2019/2/23


Download ppt "コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用"

Similar presentations


Ads by Google