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

Slides:



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

植田泰士†, 肥後芳樹†, 神谷年洋‡, 楠本真二†, 井上克郎†
AGMアルゴリズムを用いた ギャップを含むコードクローン情報の生成
コードクローンの長さに基づく プログラム盗用確率の実験的算出
剽窃 他人の作品や論文を盗んで,自分のものとして発表すること. プログラムが剽窃される事例もある. Aさんのプログラム Xさんのプログラム
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
アイテムセットマイニングを利用した コードクローン分析作業の効率向上
プログラム実行時情報を用いたトランザクションファンクション抽出手法
大規模ソースコード集合を対象とした 類似関数集合群の抽出
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
静的情報と動的情報を用いた プログラムスライス計算法
コードクローン分析ツールGeminiを用いたコードクローン分析手順
コードクローンの分布情報を用いた特徴抽出手法の提案
ギャップを含むコードクローンの フィルタリング手法の提案
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
識別子の共起関係に基づく類似コード検索法の提案と 欠陥検出への適用
ソードコードの編集に基づいた コードクローンの分類とその分析システム
オブジェクト指向プログラミング言語に対応した コードクローン検出技法の提案と実験
コードクローンの分類に基づいた メソッド引き上げ手順の提案とその有効性評価
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
実行時情報に基づく OSカーネルのコンフィグ最小化
クローン検出ツールを用いた ソースコード分析ツールの試作
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
動的データ依存関係解析を用いた Javaプログラムスライス手法
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローンに対する一貫性のない変更に起因する欠陥の検出
Token Comparison Approach to Detect Code Clone-related Bugs
柔軟に変更可能な字句解析機構を持つ コードクローン検出ツールの開発
UMLモデルを対象とした リファクタリング候補検出の試み
プログラム実行履歴を用いたコードクローン検出手法
Javaバイトコードの 動的依存解析情報を用いた スライシングシステムの実現
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
バイトコードを単位とするJavaスライスシステムの試作
コードクローン編集者数に着目した開発履歴の分析
多様なプログラミング言語に対応可能な コードクローン検出ツール CCFinderSW
Geminiを用いた効果的なコードクローン分析方法
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
大阪大学 大学院情報科学研究科 コンピュータサイエンス専攻 井上研究室
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
容易に使用可能な grep風コードクローン検索ツール
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コンパイラ 2012年10月11日
コードクローン解析に基づく デザインパターン適用候補の検出手法
Geminiを用いた効果的なコードクローン分析方法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

適用結果一例 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

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

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

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

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

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

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