Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "大規模開発データの収集と エンピリカルソフトウェア工学"— Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

12 Empirical Software Engineering

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

14 Journal by Kluwer Empirical Software Engineering

15 2002 International Symposium on Empirical Software Engineering

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

17 Fraunhofer Institute for Experimental Software Engineering

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

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

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

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

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

23 MSE環境

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

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

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

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

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

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

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

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

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

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

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

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

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

37 コードクローンが密集している部分(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| }

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

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

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

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

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

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

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

45 実験 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言語のソースのみ

46

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

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

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

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

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

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

53 部品グラフ 部品 利用 システム 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. 部品 利用

54 類似部品の集約 集約化した部品グラフ 部品グラフ 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. 部品グラフ

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

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

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

58 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

59

60

61

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

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

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

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

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

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

68 System Architecture

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

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


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

Similar presentations


Ads by Google