学術的に言うとコードクローン、普通に言うとコピペの分析ツールCCFinderとかについて
今日、12月15日
コードクローン分析技術の最新動向セミナー
にいって聞いてきたので、その内容をメモメモ
■大阪大学ソフトウェア工学講座における
コードクローン研究の歩み 大阪大学 井上先生
・さいしょにやったのは、かみやさん
その辺から盛んになる:コードクローンの解析、ソフトウェアの履歴分析
最近は、いろんな研究→スタートは15年前
・きっかけは?
NTTの関連会社:レガシーシステム クローン台帳で管理→ぐちゃぐちゃ
いいツールがないかね?
調べてみたら・・・コードの同じところを探す研究はあった(小さなスケール)
ツールはなかった
かみやさんが、やってくれた。くすもと先生がアプリケーション
・技術的には・・
コアの部分:同じところを探すのは、よくある問題(本も出ている)
String Trees and しーけんす
→Suffix tree algorithmを使う
→DNAシーケンスのマッチング
数週間で、プロトタイプが動く。結果が面白い
Unixの間のコードクローン
・CCFinder
GUIを作ったり、言語拡張
TSE Submission
Highly Cited Papers in SE 24位、22位
・コードクローン分析セミナー
9回 2002年~2007年
・いろんな方向に
スケーラビリティ:CCFinderは100万行→分散処理
ソフトウェアの不正使用:ソフトウェアレベルで
システム間の類似度:系統樹
リファクタリング、コードクローンの間の関係
コーディングパターンの検出(あまり切れ味のいい結果ではない)
インターネット空間で探す→サーチエンジンを借りて
安全性をたしかめる
software heritage Project
ライセンスの問題:同じソースコードで違うライセンス
コードクローンをリファクタリングしたら、どうなるか(サイズ)
・いま、ワールドワイド:企業では、マイクロソフトが興味
■コードクローン研究グループの紹介
・大阪大学の研究
井上先生
くすもとせんせい
・NAIST:2つ
・島根大学:かみやせんせい
・名古屋大学
■大阪大学 ソフトウェア設計学講座でのコードクローン研究 楠本先生
・コードクローン検出手法 5つくらい
行単位
字句単位
抽象構文木
にている
依存グラフ
メトリクス→大きくても適用できる
・何に使える
現状把握
潜在的不具合
ライブラリ作成支援
著作権違反
リファクタリング
現状把握
・成果
http://sel.ist.osaka-u.ac.jp/
・実プロジェクトデータへの適用事例
■奈良先端大
・ソフトウェア工学関係 松本先生と飯田先生(飯田先生に所属)
正規化したものとか、コードレビューとか、ソースコードのスリム化とか
■神谷先生の研究室
・動的振る舞いの等価性によるコードクローン
書き換えたけど、同じ内容→結構大変
同じようなAPIをたたく→呼び出し環境全部→データ爆発
絶賛開発中
■レガシーマイグレーション・モダナイゼーションとコードクローン検出技術
・情報システムの変遷
定型処理 レガシーシステム
非定型処理
多システム連携 オープンシステム(独自システム→オープンソース利用)
Web
クラウド
→三菱総研 システムモダナイゼーションはなぜ必要か?
・システム更新の理由
運用保守コスト
ベンダーロックイン(保守費用高い)
開発言語のトレンド→技術者コスト
・レガシーマイグレーションとモダナイゼーション
レガシーマイグレーション:基盤だけ新しい、アプリをなるべく触らない
モダナイゼーション:作り直し(基盤もアプリも)
・クローン分析の活用
マイグレーション:基盤部分を作り直す→削減のチャンス
テスト工数、レビュー工数の削減
(学術的には)修正リスク、ライブラリ化
モダナイゼーション:現状把握に利用
・CCFinderXの現状
オープンソース化されているが、専門性が高い
大学は、保守しても、評価されない
Python2系にサポート切れる。
■多言語に対応したコードクローン検出ツールの開発
・多言語対応
・CCFinder タイプ2までのコードクローン
予約語:対象言語によって違う→予約語リスト
Javaがあれば動く
・処理
マクロ・コメントの削除
トークン分割
空白、改行、記号は1文字ずつ
N-Gram
隣り合う文字を1塊に
コードクローンの探索
4-Gram
・実行結果
■新ツールのリリースについて
・3月末に初期バージョン
・参加者のみなさんへは告知
・共同研究ライセンス
・大学との共同研究
■レガシーシステム改善のためのコードクローン分析ツールCCFinderXによる
ソフトウェア構造解析の実践
・背景
レガシーシステムの成果物の資産化・再利用
・直面した課題
品質が低いものを組み入れると・・・
大規模
・レガシー分析手法の概要
会社で定義
解析パターン
コードクローン散布図
散布図解析パターン
投資対効果
散布図解析パターン
対角線に着目するパターン→コピペ多い
分断化された対角線→一部修正
破線・点線→再利用にふさわしくない
投資対効果
リファクタリングに多大な投資→効果あるのか?
削減ステップ数の見積もり
削減工数の見積もり:ステップ数削減→回帰テストの削減
・分析事例
共通画面→コードクローン
レガシー再生の投資対効果見積り
・課題と考察
大規模なシステムではメトリクスを用いたフィルタリング
■コードクローン分析技術を活用した品質向上の取り組みのご紹介 NEC
・コードクローンはソフトウェアの保守性を低下させる要因
事例1 CCFinderXを用いたコードクローン自動検出
全社ソフトウェアファクトリー
センターサービス:自動化→CCFinderは、メトリクスの1つ
コードクローンの確認→関数化など
事例2;コードクローン変更管理システムを用いた修正モレの検出
クローンノーティファイヤー
修正モレを効率的に探す
バグがあるクローンはっけん→効率的に他のものを見つける
→クローンノーティファイヤー
クローンノーティファイヤー
ステーブル
モディファイド:変数名の変更
ムーブド :大幅な編集
アッデド :こぴぺ
デリーテッド :削除
クローンセット
ステーブル
ちぇんじど :他のクローンも修正可能性
New
デリーテッド:修正モレの可能性を生じる
■コードクローン分析による資産規模スリム化の事例紹介
・事業内容
課題センシングサービス
プログラム資産棚卸サービス
・コードクローン分析の活用
言語資産分析
プログラムの可視化→資産スリム化:プログラム棚卸と共通化(コードクローン技術)
コードクローン分析
字句解析・構文分析→共通:コードクローン→部品
・プログラム言語によって違い
類似性:グルーピング→共通化
COBOLのような手続き型と
Javaのようなオブジェクト型では、共通化が違う
→クラス構造の考慮(共通クラスの作成)
・事例紹介
COBOLの場合:共通化と棚卸
共通部品抽出
■COBOLソースの削減に向けたCCFinderXの利用事例
・業務アプリのモダナイゼーションに向けた取り組み
見える化
スリム化
最適化
今日はスリム化のお話
・実現したいこと
クローンを見つけて集約したい→CCFinder 集約まで行かない
パターンを見つけて
CCFinderはコード片になっていないことも
集約
変数名が違う場合→パラメータ化
領域のかぶり
テスト
→自動化ツールを作った
・課題1:集約する範囲が不適切
COBOLの構文にあわせて集約
・課題2:パラメータ化する必要
COPY句化→テストが比較的に簡単になる
・課題3:クローンセットの重複
クローンセット間の関係
入れ子になっているのを対象に
内側からCOPY句化
・分析事例
・まとめ
COBOL用機能を作った
課題
・集約するかどうかは人が選ぶ
・COPYファイルの命名法
・Type3クローンどうするか?
・またクローンを作られたら?
・集約の効果
Q&A
・どこめざしてるの?
→よいクローンと悪いクローンがある
クローンを作らない:理想
見せる必要のないクローンを見せない
GUIの部品の定義、変数宣言→プライオリティをふる
・車載系の組み込み
行き過ぎた共通化によるインパクト
・自動修正
意図が入らないのが問題
今日、12月15日
コードクローン分析技術の最新動向セミナー
にいって聞いてきたので、その内容をメモメモ
■大阪大学ソフトウェア工学講座における
コードクローン研究の歩み 大阪大学 井上先生
・さいしょにやったのは、かみやさん
その辺から盛んになる:コードクローンの解析、ソフトウェアの履歴分析
最近は、いろんな研究→スタートは15年前
・きっかけは?
NTTの関連会社:レガシーシステム クローン台帳で管理→ぐちゃぐちゃ
いいツールがないかね?
調べてみたら・・・コードの同じところを探す研究はあった(小さなスケール)
ツールはなかった
かみやさんが、やってくれた。くすもと先生がアプリケーション
・技術的には・・
コアの部分:同じところを探すのは、よくある問題(本も出ている)
String Trees and しーけんす
→Suffix tree algorithmを使う
→DNAシーケンスのマッチング
数週間で、プロトタイプが動く。結果が面白い
Unixの間のコードクローン
・CCFinder
GUIを作ったり、言語拡張
TSE Submission
Highly Cited Papers in SE 24位、22位
・コードクローン分析セミナー
9回 2002年~2007年
・いろんな方向に
スケーラビリティ:CCFinderは100万行→分散処理
ソフトウェアの不正使用:ソフトウェアレベルで
システム間の類似度:系統樹
リファクタリング、コードクローンの間の関係
コーディングパターンの検出(あまり切れ味のいい結果ではない)
インターネット空間で探す→サーチエンジンを借りて
安全性をたしかめる
software heritage Project
ライセンスの問題:同じソースコードで違うライセンス
コードクローンをリファクタリングしたら、どうなるか(サイズ)
・いま、ワールドワイド:企業では、マイクロソフトが興味
■コードクローン研究グループの紹介
・大阪大学の研究
井上先生
くすもとせんせい
・NAIST:2つ
・島根大学:かみやせんせい
・名古屋大学
■大阪大学 ソフトウェア設計学講座でのコードクローン研究 楠本先生
・コードクローン検出手法 5つくらい
行単位
字句単位
抽象構文木
にている
依存グラフ
メトリクス→大きくても適用できる
・何に使える
現状把握
潜在的不具合
ライブラリ作成支援
著作権違反
リファクタリング
現状把握
・成果
http://sel.ist.osaka-u.ac.jp/
・実プロジェクトデータへの適用事例
■奈良先端大
・ソフトウェア工学関係 松本先生と飯田先生(飯田先生に所属)
正規化したものとか、コードレビューとか、ソースコードのスリム化とか
■神谷先生の研究室
・動的振る舞いの等価性によるコードクローン
書き換えたけど、同じ内容→結構大変
同じようなAPIをたたく→呼び出し環境全部→データ爆発
絶賛開発中
■レガシーマイグレーション・モダナイゼーションとコードクローン検出技術
・情報システムの変遷
定型処理 レガシーシステム
非定型処理
多システム連携 オープンシステム(独自システム→オープンソース利用)
Web
クラウド
→三菱総研 システムモダナイゼーションはなぜ必要か?
・システム更新の理由
運用保守コスト
ベンダーロックイン(保守費用高い)
開発言語のトレンド→技術者コスト
・レガシーマイグレーションとモダナイゼーション
レガシーマイグレーション:基盤だけ新しい、アプリをなるべく触らない
モダナイゼーション:作り直し(基盤もアプリも)
・クローン分析の活用
マイグレーション:基盤部分を作り直す→削減のチャンス
テスト工数、レビュー工数の削減
(学術的には)修正リスク、ライブラリ化
モダナイゼーション:現状把握に利用
・CCFinderXの現状
オープンソース化されているが、専門性が高い
大学は、保守しても、評価されない
Python2系にサポート切れる。
■多言語に対応したコードクローン検出ツールの開発
・多言語対応
・CCFinder タイプ2までのコードクローン
予約語:対象言語によって違う→予約語リスト
Javaがあれば動く
・処理
マクロ・コメントの削除
トークン分割
空白、改行、記号は1文字ずつ
N-Gram
隣り合う文字を1塊に
コードクローンの探索
4-Gram
・実行結果
■新ツールのリリースについて
・3月末に初期バージョン
・参加者のみなさんへは告知
・共同研究ライセンス
・大学との共同研究
■レガシーシステム改善のためのコードクローン分析ツールCCFinderXによる
ソフトウェア構造解析の実践
・背景
レガシーシステムの成果物の資産化・再利用
・直面した課題
品質が低いものを組み入れると・・・
大規模
・レガシー分析手法の概要
会社で定義
解析パターン
コードクローン散布図
散布図解析パターン
投資対効果
散布図解析パターン
対角線に着目するパターン→コピペ多い
分断化された対角線→一部修正
破線・点線→再利用にふさわしくない
投資対効果
リファクタリングに多大な投資→効果あるのか?
削減ステップ数の見積もり
削減工数の見積もり:ステップ数削減→回帰テストの削減
・分析事例
共通画面→コードクローン
レガシー再生の投資対効果見積り
・課題と考察
大規模なシステムではメトリクスを用いたフィルタリング
■コードクローン分析技術を活用した品質向上の取り組みのご紹介 NEC
・コードクローンはソフトウェアの保守性を低下させる要因
事例1 CCFinderXを用いたコードクローン自動検出
全社ソフトウェアファクトリー
センターサービス:自動化→CCFinderは、メトリクスの1つ
コードクローンの確認→関数化など
事例2;コードクローン変更管理システムを用いた修正モレの検出
クローンノーティファイヤー
修正モレを効率的に探す
バグがあるクローンはっけん→効率的に他のものを見つける
→クローンノーティファイヤー
クローンノーティファイヤー
ステーブル
モディファイド:変数名の変更
ムーブド :大幅な編集
アッデド :こぴぺ
デリーテッド :削除
クローンセット
ステーブル
ちぇんじど :他のクローンも修正可能性
New
デリーテッド:修正モレの可能性を生じる
■コードクローン分析による資産規模スリム化の事例紹介
・事業内容
課題センシングサービス
プログラム資産棚卸サービス
・コードクローン分析の活用
言語資産分析
プログラムの可視化→資産スリム化:プログラム棚卸と共通化(コードクローン技術)
コードクローン分析
字句解析・構文分析→共通:コードクローン→部品
・プログラム言語によって違い
類似性:グルーピング→共通化
COBOLのような手続き型と
Javaのようなオブジェクト型では、共通化が違う
→クラス構造の考慮(共通クラスの作成)
・事例紹介
COBOLの場合:共通化と棚卸
共通部品抽出
■COBOLソースの削減に向けたCCFinderXの利用事例
・業務アプリのモダナイゼーションに向けた取り組み
見える化
スリム化
最適化
今日はスリム化のお話
・実現したいこと
クローンを見つけて集約したい→CCFinder 集約まで行かない
パターンを見つけて
CCFinderはコード片になっていないことも
集約
変数名が違う場合→パラメータ化
領域のかぶり
テスト
→自動化ツールを作った
・課題1:集約する範囲が不適切
COBOLの構文にあわせて集約
・課題2:パラメータ化する必要
COPY句化→テストが比較的に簡単になる
・課題3:クローンセットの重複
クローンセット間の関係
入れ子になっているのを対象に
内側からCOPY句化
・分析事例
・まとめ
COBOL用機能を作った
課題
・集約するかどうかは人が選ぶ
・COPYファイルの命名法
・Type3クローンどうするか?
・またクローンを作られたら?
・集約の効果
Q&A
・どこめざしてるの?
→よいクローンと悪いクローンがある
クローンを作らない:理想
見せる必要のないクローンを見せない
GUIの部品の定義、変数宣言→プライオリティをふる
・車載系の組み込み
行き過ぎた共通化によるインパクト
・自動修正
意図が入らないのが問題