大規模開発データの収集と エンピリカルソフトウェア工学

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
Advertisements

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 保守支援を目的とした コードクローン情報検索ツール.
EASEプロジェクトの現状と展望 JEITAソフトウェアエンジニアリング技術専門委員会
AGMアルゴリズムを用いた ギャップを含むコードクローン情報の生成
利用実績に基づくソフトウェア部品検索システムSPARS-J
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
剽窃 他人の作品や論文を盗んで,自分のものとして発表すること. プログラムが剽窃される事例もある. Aさんのプログラム Xさんのプログラム
研究の背景 コードクローン ソースコード中に存在する一致または類似したコード片
実証的ソフトウェア工学環境とEASEプロジェクトについて
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
プログラム変更支援を目的とした コードクローン情報付加手法の提案と実装
大規模収集データに基づいた ソフトウェアエンジニアリング
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
コードクローン検出技術と その利用法 神谷年洋‡, 植田泰士†, 肥後芳樹†, 楠本真二†, 井上克郎†
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
コードクローン分析ツールGeminiを用いたコードクローン分析手順
コードクローンの分布情報を用いた特徴抽出手法の提案
実践的ソフトウェア工学における 産学協力 井上克郎 大阪大学大学院基礎工学研究科.
ギャップを含むコードクローンの フィルタリング手法の提案
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
ソードコードの編集に基づいた コードクローンの分類とその分析システム
コードクローンの集約によるリファクタリング支援システムの提案と実装
Javaソースコード蓄積・ 検索システムSPARS-Jの概要
ネットワーク共生環境を築く情報技術の創出 テーマ4:高信頼性・高安全性を有するネットワーク共生環境の構築技術の創出
オブジェクト指向プログラミング言語に対応した コードクローン検出技法の提案と実験
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
オブジェクト指向メトリクスを用いた 開発支援法に関する研究
ソフトウェアを取り巻く環境の変化がメトリクスに及ぼす影響について
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローン検出ツールを用いた ソースコード分析ツールの試作
社会シミュレーションのための モデル作成環境
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
利用実績に基づくソフトウェア部品検索システムSPARS-J
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローンに対する一貫性のない変更に起因する欠陥の検出
ソースコードの静的特性を用いた Javaプログラム間類似度測定ツールの試作
プログラム実行履歴を用いたコードクローン検出手法
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
バイトコードを単位とするJavaスライスシステムの試作
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
JAVAバイトコードにおける データ依存解析手法の提案と実装
第7回OACISシンポジウム 大阪大学におけるソフトウェア工学研究と産学連携活動
設計情報の再利用を目的とした UML図の自動推薦ツール
大阪大学 大学院情報科学研究科 コンピュータサイエンス専攻 井上研究室
保守請負時を対象とした 労力見積のためのメトリクスの提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
開発作業の形式化に基づく プロセス評価 松下誠 大阪大学.
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
ソフトウェア理解支援を目的とした 辞書の作成法
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
コードクローンを対象とした リファクタリングの有効性に関する調査
Presentation transcript:

大規模開発データの収集と エンピリカルソフトウェア工学 第7回日立GP/UC 事業化・技術発表会 大規模開発データの収集と エンピリカルソフトウェア工学 井上克郎 大阪大学大学院情報科学研究科

ソフトウェア開発は工学?

ソフトウェア開発の現状と問題点 ソフトウェアの信頼性 ソフトウェアの生産性 経験的なノウハウや非科学的な手法,ツールを使う場合が多い 多数のバグを含んだソフトの流通 一度ダウンすると多大な社会的損失 ソフトウェアの生産性 開発期間の短縮要請 人海戦術による限界 経験的なノウハウや非科学的な手法,ツールを使う場合が多い

科学的手法に基づくソフトウェア開発 多くの他の科学、工学分野では、計測して定量化し、評価を行い、それをフィードバックして改善を行うのが普通(フィードバックループ) ソフトウェア開発の分野では?

Zelkowitz-Wallaceによる評価法分類 観測型(Observational) 実際に行われているプロジェクトを横から観測して評価 履歴型(Historical) 過去に行われたプロジェクトのデータや発表された論文に基づいて評価 制御型(Controlled) 目的とするデータを得るために環境を整えてプロジェクトを行い評価する V. Zelkowitz, D. R.Wallace, "Experimental Models for Validating Technology", IEEE Computer, pp.23-31, May 1998.

観測型評価 プロジェクトモニタ 事例研究 アサーション 野外調査(Field Study) 対象を漠然と観察。目標不明確な場合も。簡単 対象をより深く解析。まだ、変動要素の制御が不十分だが、比較的簡便 アサーション 主張がなりたつことを簡単なプロジェクトで実証。厳密な評価としては不十分。 野外調査(Field Study) いろいろなプロジェクトを見て回る。条件を揃えるのが困難だが追証しやすい。

履歴型 文献調査 事例調査 経験 (静的解析) 過去発表された論文を探す。条件や視点の統一不可能。簡単 過去のプロジェクトデータをひっくりかえす。条件不統一でデータ限られている 経験 過去のプロジェクトの定性的なデータを調べる。定性的な議論できない。やりやすくて簡単に傾向がわかる (静的解析) 作ったプロダクトの解析をする。方法には適用できない。評価の自動化できるかもしれない。

制御型 繰返し 実験室 (動的解析) (シミュレーション) 条件を揃えていくつものプロジェクトで繰り返す。高価。 条件を揃えて実験室で繰り返す。スケーラビリティ。条件を制御しやすく比較的安価。 (動的解析) プロダクトの効率を実行させて計測。方法には適用できない。 (シミュレーション) 仮想データで実行。

発表された論文の分類(他の科学) 方法\論文種類 デバイス 物理 臨床医学 人類学 評価なし 16% 58% 6% 31% 方法\論文種類 デバイス 物理 臨床医学 人類学 評価なし 16% 58% 6% 31% プロジェクトモニタ 事例評価 40% 16% 6% 8% アサーション 8% 4% 8% 野外調査 18% 文献調査 4% 11% 24% 23% 事例調査 6% 23% 経験 5% 8% 静的解析 繰返し   5% 12% 実験室   29% 動的解析 32% 5% シミュレーション

ソフトウェア工学の現状 30年に亘って,いろいろな技法,システム,ツールなどの提案がされてきた. あまりにも,言いっぱなしの提案が多い 評価するために手間暇かかる -> 歴史で評価 (ICSE n-10)

ソフトウェア工学の論文が使っている評価法 実験なし プロジェクトモニタ 事例研究 アサーション 野外調査 文献調査 評価法 1985 事例調査 1990 -ICSE -TSE -IEEE Software 1995 経験 静的解析 繰返し 実験室 動的解析 シミュレーション 0% 5% 10% 15% 20% 25% 30% 35% 40% 45% 論文の割合

Empirical Software Engineering

エンピリカルソフトウェア工学 定量的なデータに基づいてソフトウェア工学におけるいろいろな手法、技術、ツールなどの評価を行う データの収集が必須 実際の開発現場のデータ オープンソース開発プロジェクトのデータ エンピリカルソフトウェア工学に関する雑誌、国際会議、研究機関ができつつある

Journal by Kluwer Empirical Software Engineering

2002 International Symposium on Empirical Software Engineering

Fraunhofer IESE Model Fraunhofer財団(政府系研究支援) Institute for Experimental Software Engineering 大学工房モデル Kaiserslautern大学を基礎 大学から車で10分 仕事内容 ソフトウェア開発に関わる技術評価 ソフトウェア品質向上システムの設計 品質規格認証への支援 ソフトウェア技術者教育の支援 ソフトウェア購入・発注・開発管理の支援

Fraunhofer Institute for Experimental Software Engineering

ソフトウェアエンジニアリングセンター 政府がソフト工学の研究機関を立ち上げ 日経コンピュータ 2003年9月30日  経済産業省はソフトウエア工学の研究機関「ソフトウエア・エンジニアリング・センター(SEC)」を新設する構想を明らかにした。概要は日経コンピュータの既報の通りであり、早ければ来年4月にも、情報処理振興事業協会(IPA)内に設置する。  SECには、大学や民間企業からの出向者を集め、ソフトウエア工学の最新技術の研究開発や、開発した成果の民間への技術移転を進める。さらに、高度なソフトウエア工学の技術/手法を取得した人材育成の基盤としての役割も持たせ、日本のソフトウエア産業の国際競争力向上を狙う。 …

これからの ソフトウェアエンジニアリング

データ収集対象によるSE技術の分類 計測・検索 評価・分析 フィードバック Mega Software Engineering 対象 細 広 目的 ユーザビリティ・問題把握 フィードバック 形態 ヘルプ、ツール・ガイドライン 対象 各開発者の作業や生産物 プロジェクト群(企業内全資産、全オープンソース等) パターンや部品、知見の抽出、 利益予測 部品共通化、リファレンスモデル・標準化 Mega Software Engineering 単一プロジェクト 進捗把握、コスト管理 プロセス改善、資産再利用 既存のソフトウェア工学技術

Mega Software Engineering MSE * (実用化はまだまだだが)ソフトウェア工学として個人・プロジェクト単位の技術はかなり研究されている *一方、多プロジェクトを意識したソフトウェア工学MSEはこれから * 組織の利益に直結する結果が得やすい * 基礎となる技術の種はいろいろある * 計算機のパワーアップ、ネットワークの高速化によって、実現できそうな気配

MSEの基本ステップと技術 プロジェクトにまたがった大規模データの収集,蓄積技術(Inter-project Data Collection) 得られたデータを大域的に解析・分析する技術(Intensive Analysis) 評価結果に基づいて経験や知識を資産化しフィードバックする技術(Software Asset Management)

MSE環境

MSE技術の使用イメージ (1) プロジェクトXの進捗予定 実際のプロジェクトXの進捗 Xの類似プロジェクトを探す - プロジェクト分類技術 - 協調フィルタリング 2 X Y A Q T E W C V P

MSE技術の使用イメージ(2) 同類の再利用率 Xの再利用率 ソフトウェアの再利用を促進させる - ソフトウェア部品検索エンジン 3 - コードクローン検出 - ソフトウェア部品検索エンジン 4 ソフトウェアの再利用を促進させる

MSEシステム使用イメージ プログラムの生産性が、社内的な再利用やオープンソースの利用で劇的に上がった 管理しきれなかった膨大な社内資産が、見通しよく整理できた 過去の同類のプロジェクト情報を有効利用して、コスト管理が厳密になった 蓄積した欠陥情報を利用して、信頼性を大幅に改善された

関連基礎技術(1) コードクローン検出

コードクローン ソースコード中に類似したコード片があるとき、 それらをコードクローンという コードクローンはソフトウェア保守を困難にする    コードクローンはソフトウェア保守を困難にする クローンクラス クローンペア

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

CCFinderの処理概要(1) ソースコード CCfinder 字句解析 トークン列 変換処理 変換後トークン列 検出処理 クローン情報 出力整形処理 クローンペア位置情報

CCFinderの処理概要(2) 1. static void foo() throws RESyntaxException { ソースコード 字句解析 1. static void foo() throws RESyntaxException { 2. String a[] = new String [] { "123,400", "abc", "orange 100" }; 3. org.apache.regexp.RE pat = new org.apache.regexp.RE("[0-9,]+"); 4. int sum = 0; 5. for (int i = 0; i < a.length; ++i) 6. if (pat.match(a[i])) 7. sum += Sample.parseNumber(pat.getParen(0)); 8. System.out.println("sum = " + sum); 9. } 10. static void goo(String [] a) throws RESyntaxException { 11. RE exp = new RE("[0-9,]+"); 12. int sum = 0; 13. for (int i = 0; i < a.length; ++i) 14. if (exp.match(a[i])) 15. sum += parseNumber(exp.getParen(0)); 16. System.out.println("sum = " + sum); 17. } トークン列 変換処理 変換後トークン列 検出処理 クローン情報 出力整形処理 クローンペア位置情報

CCFinderの処理概要(3) ソースコード 字句解析 トークン列 変換処理 変換後トークン列 検出処理 クローン情報 出力整形処理 クローンペア位置情報

CCFinderの処理概要(4) ソースコード 字句解析 トークン列 変換処理 変換後トークン列 検出処理 クローン情報 出力整形処理 クローンペア位置情報

CCFinderの処理概要(5) 1. static void foo() throws RESyntaxException { ソースコード 1. static void foo() throws RESyntaxException { 2. String a[] = new String [] { "123,400", "abc", "orange 100" }; 3. org.apache.regexp.RE pat = new org.apache.regexp.RE("[0-9,]+"); 4. int sum = 0; 5. for (int i = 0; i < a.length; ++i) 6. if (pat.match(a[i])) 7. sum += Sample.parseNumber(pat.getParen(0)); 8. System.out.println("sum = " + sum); 9. } 10. static void goo(String [] a) throws RESyntaxException { 11. RE exp = new RE("[0-9,]+"); 12. int sum = 0; 13. for (int i = 0; i < a.length; ++i) 14. if (exp.match(a[i])) 15. sum += parseNumber(exp.getParen(0)); 16. System.out.println("sum = " + sum); 17. } 字句解析 トークン列 変換処理 変換後トークン列 検出処理 クローン情報 出力整形処理 クローンペア位置情報

適用例#1 JDKのライブラリ JDK(Java Development Kit) 1.2.2(サンプルとデモプログラムを除く) 入力ファイルは1648個,約50万行 ツールの実行には,Pentium III 650MHzおよび1GBのRAMを持つPCで約3分を要した

JDKのコードクローン散布図 両軸はソースファイルを辞書順に並べたもの 20行以上のコードクローンを図示 多くのコードクローンが密集している(A) 最長のコードクローン(B) B A

コードクローンが密集している部分(A) src/javax/swing/plaf/multi/*.java(29個) クラス名を除いてまったく同じクラスの定義 コード生成ツールによって生成された 31| */ 32| public class MultiButtonUI extends ButtonUI { 33|   160| public static ComponentUI createUI(JComponent a) { 161| ComponentUI mui = new MultiButtonUI(); 162| return MultiLookAndFeel.createUIs(mui, 163| ((MultiButtonUI) mui).uis, 164| a); 165| }

最長のコードクローン(B) 最長のコードクローン(349行) src/java/util/Arrays.javaの18の“sort”メソッド シグネチャ(引数の型と数)が異なる アルゴリズムは同一

FreeBSD, Linux, NetBSDの比較 3つのOSの比較 FreeBSD 4.0 (C 220万行) Linux 2.4.0 (C 240万行) NetBSD 1.5 (C 260万行) FreeBSDとNetBSDは同じソースコードから,Linuxは異なるソースコード 実行には108分を要した

UNIXカーネル間のコードクローン

FreeBSDとLinuxのコードクローン ドライバ部分に多くのクローン「ファイル」が存在する 共通のソースから分岐したソースファイル 名前が付け替えられたソースファイル あるソースファイルを複数のファイルに分割している →

関連基礎技術(2) ソフトウェアシステムの類似度

類似度の定義 二つのプロダクトP={p1,…,pm},Q={q1,…,qm}に対し、等価な要素の対応R⊆P×Qが得られるとする PとQのRに対する類似度S(0≦S≦1)を以下のように定義する P Q ≡

CCFinderを利用したシステム間類似度 SMMT 前処理後のP P Step1 Step2 Step3 前処理 CCFinder の実行 CCFinder の実行結果 diff の実行 Q diff の実行結果 前処理後のQ Step4 対応の 抽出 抽出結果 Step5 類似度の 計算 類似度

実験 UNIX系OSを用いて類似度を計算した 23個のOSのすべての組み合わせで類似度を求めた カーネル部分のC言語のソースのみ 4.4BSDLite, 4.4BSDLite2 FreeBSD2.0, 2.0.5, 2.1, 2.2, 3.0, 4.0 NetBSD1.0, 1.1, 1.2, 1.3, 1.4, 1.5 OpenBSD2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8 23個のOSのすべての組み合わせで類似度を求めた カーネル部分のC言語のソースのみ

同一種類のOS間での類似度 FreeBSD 2.2との間の類似度

異なる種類のOS間での類似度 FreeBSD3.0とNetBSD1.3で4.4BSDLite2が取り込まれている

 類似度を距離とした系統樹

関連基礎技術(3) ソフトウェア部品検索

ソフトウェア部品の再利用 人手を介さない、自動的に保存、検索ができる部品ライブラリが必須 膨大なソフトウェアが毎日開発され続けている 同様なソフトウェア部品 (ライブラリやコード片、抽象的なアルゴリズム ...) が異なるところで独立に開発されているかもしれない 高信頼性、高生産性の鍵 再利用 ソフトウェアライブラリを探し回るのは大変 サーチ機能が貧弱 整合性を保った管理は困難 人手を介さない、自動的に保存、検索ができる部品ライブラリが必須 As you can see the case of SourceForge case, numerous ... In such a situation, similar components, which mean libraries,

部品ランクモデル 検索結果の表示順を決めるためのモデル プログラム部品(component)群をグラフ化 部品の重み計算 重みの順序:部品ランクComponent Rank (CR)  As you can see the case of SourceForge case, numerous ... In such a situation, similar components, which mean libraries,

部品グラフ 部品 利用 システム X システム Y A B F C G D E H I We are going to introduce component rank model. First, we define a component graph. This is a directed graph, whose nodes are software components, and whose edges are use relations on component. 部品 利用

類似部品の集約 集約化した部品グラフ 部品グラフ C G C BF AD E G B F A D E 2nd adjustments is clustering components. This is a component graph. In this graph, component B and F are almost the same. Also, A and D are very similar. We merge these similar components into single components, and draw new edges to or from merged nodes, as shown here. We call this new graph, clustered component graph. This clustering operation is very important, because there are many copied components in software systems. 部品グラフ

部品の重み 0.4 0.2 0.2 A B 0.2 0.4 0.2 0.4 C 安定した重み配置は、隣接行列の固有値計算による 部品ランク : 頂点の重みの順 1:A, C 3:B

部品ランクモデルの意味 ユーザの視点移動をマルコフモデルで表したもの 単位時間ごとにユーザ視点が利用関係に沿って移動 0.01 0.02 0.03 0.05 0.001 0.1 ユーザの視点移動をマルコフモデルで表したもの 単位時間ごとにユーザ視点が利用関係に沿って移動 頂点の重みはユーザ視点の存在確率

部品ランクの適用例 JDK1.3(約1800ファイル)を対象として部品ランクを計算 言語仕様上、直接的、間接的に利用しなければならないクラスが上位を占めている

S P A R S-J Software Product Archiving, Analyzing and Retrieving System for Java Component Collector Analyzer and Evaluator インターネット・イントラネット Query Handler Component Archive ソフトウェア検索者 SPARS-J

EASEプロジェクト (Empirical Approach to Software Engineering)

プロジェクト概要 文部科学省リーディングプロジェクト 2003年4月開始で5年計画 奈良先端科学技術大学院大学/大阪大学 産学連携モデル e-society基盤ソフトウェア総合開発計画 2003年4月開始で5年計画 奈良先端科学技術大学院大学/大阪大学 産学連携モデル

プロジェクトの目的 実践的なソフトウェア開発技術やツールの開発 → ソフトウェア産業の活性化 MSE環境の構築 実践的なソフトウェア開発技術やツールの開発 → ソフトウェア産業の活性化 MSE環境の構築 新しい技術を開発し論文や特許を書く 産学連携による人材育成

エンピリカルソフトウェア工学ラボ 千里中央にオフィス 専任研究員、企業出向者、大学研究者、事務員滞在 研究開発のみならず交流の拠点 多様なソフトウェア工学に関する技術委員会 常に内外の市場調査

プロジェクトの構成概要 海外アドバイザー B. Bohem V. Basili R. Jeffery 技術委員会 D. Rombach 中核企業 -NTTソフト -日立 -日立公共システム -SRA 中核大学 -奈良先端大 -大阪大 技術委員会 -メトリクス -安全性 -プロセス改善 -形式手法  … 協力企業 -国内・国外企業 協力大学 -国内・国外大学 プロジェクト推進ラボ -プロジェクト長 -専任マネージャ -企業出向者 -大学兼任者

MSE環境のベースとなるシステム オープンソース開発管理システムを基本 既存のWebインターフェースの利用 CVS:レポジトリ構築、バージョン管理 Mailman:メール蓄積、管理 Gnats:バグ追跡 既存のWebインターフェースの利用 Corporate Source (ZeeSource)

System Architecture

MSEのためのSEデータの標準化 プロダクトデータ プロセスデータ CVSを使った各種プロダクトの履歴 プロダクト間の種々の関係定義をXMLで標準化 プロセスデータ XMLを使った標準形式のイベント系列を蓄積 CVS、Mailman、Gnatsのログなどから自動抽出(粗粒度情報) 各作業者の作業環境からの標準形式での情報提供(細粒度情報も可能)

今後の計画 11月7日、海外アドバイザーと共にワークショップ @ 東京国際交流館(台場) - 本システムの初期バージョンの公開予定    @ 東京国際交流館(台場)    - 本システムの初期バージョンの公開予定 初期バージョンの利用促進 評価に参加する協力企業の募集 それ以外の一般参加企業の募集