保守請負時を対象とした 労力見積のためのメトリクスの提案

Slides:



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

1 EASE プロジェクトにおける EPM ( Empirical Project Monitor) を用いたプロジェクト管理デモ 奈良先端科学技術大学院大学 産学官連携研究員 松村 知子 2005 年 9 月 30 日 JISA 経営者セミナー.
背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.
ソフトウェア変更作業の 見積りと支援に関する研究
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
ラベル付き区間グラフを列挙するBDDとその応用
機能実現期間の測定による プログラマ能力の実験的評価
プログラムの動作を理解するための技術として
デバイスからの異常注入が指定可能なCPUエミュレータ
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
プログラム静的解析手法の効率化と 解析フレームワークの構築に関する研究
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
ソフトウェア部品の利用関係におけるスケールフリー性の調査
ソースコードに対する適用可能な修正手順を 可視化するリファクタリング支援手法の提案
CKメトリクスを用いてリファクタリングの 効果を予測する手法の提案
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
ソフトウェア工学 第五回 知能情報学部 新田直也.
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
静的情報と動的情報を用いた プログラムスライス計算法
オブジェクト指向プログラムのための 動的結合メトリクスの評価
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
CKメトリクスに基づくリファクタリングの 効果予測手法の提案と実装
ソフトウェアを取り巻く環境の変化がメトリクスに及ぼす影響について
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
重複コードと非重複コードにおける 修正頻度の比較
Javaプログラムの変更を支援する 影響波及解析システム
コンポーネントランク法を用いたJavaクラス分類手法の提案
ソフトウェア保守性を評価する メトリクス間の関連分析
動的データ依存関係解析を用いた Javaプログラムスライス手法
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
コードクローンの動作を比較するためのコードクローン周辺コードの解析
プログラム理解におけるThin sliceの 統計的調査による有用性評価
バイトコードを単位とするJavaスライスシステムの試作
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
JAVAバイトコードにおける データ依存解析手法の提案と実装
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
ソフトウェアプロダクト集合に対する 派生関係木の構築
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
ソフトウェア工学 知能情報学部 新田直也.
ソフトウェア部品グラフの次数分布におけるべき乗則の調査
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
依存関係の局所性を利用した プログラム依存グラフの 効率的な構築法
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
アスペクト指向言語のための視点に応じた編集を可能にするツール
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
開発作業の形式化に基づく プロセス評価 松下誠 大阪大学.
クラスタリングを用いた ベイズ学習モデルを動的に更新する ソフトウェア障害検知手法
コードクローン間の依存関係に基づく リファクタリング支援手法の提案と実現
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
ソフトウェア理解支援を目的とした 辞書の作成法
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
回帰テストにおける実行系列の差分の効率的な検出手法
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
Presentation transcript:

保守請負時を対象とした 労力見積のためのメトリクスの提案 早瀬康裕† 松下誠† 楠本真二† 井上克郎† 小林健一‡ 吉野利明‡ †大阪大学大学院情報科学研究科 ‡(株)富士通研究所

背景 ソフトウェア保守作業のコスト見積りは困難 保守請負サービス 問題 熟練者の経験 新規開発用の手法を流用 正確な見積りを算出したい ソフトウェアプロダクトの保守を代行 コスト増大や障害の発生により保守が困難になったプロダクトが対象 契約前に見積りを行う必要 問題 正確な見積りができていない 限られた情報で見積りを行なわなければならない 保守請負サービス契約前など

研究の目的 保守コストを見積るためのメトリクスを提案 指針 保守ポイント: 個々の保守作業の見積りに適したメトリクス 一般化保守ポイント: 保守請負前の見積りに適したメトリクス 指針 ソフトウェア保守作業をモデル化 作業プロセス プロダクト モデル上で保守作業量を反映する値を計算

プロセスのモデル化 保守プロセス プロダクト s1 システム理解 s2 変更 s3 テスト 変更された プロダクト 変更要求 変更箇所特定 テスト範囲特定 s2 変更 s3 テスト 変更された プロダクト 変更要求 一般的な作業工程を対象としてモデル化を行う 保守プロセスへの入力は、プロダクトと変更要求である 保守プロセスは以下の3つのステップから成る システム理解 影響範囲の特定 変更 テスト 保守プロセスの出力は、変更されたプロダクトである

プロダクトのモデル化 プロダクトを有向グラフとしてモデル化する 頂点はプロダクトを構成する様々な種類のエンティティ メソッド、クラス、パッケージ、マニュアル、設計文書,中間生成物など 頂点は複雑さを表す値を持つ 有向辺は、エンティティ間の影響波及関係 辺の基のエンティティを変更したときに、辺の先のエンティティに何らかの作業が必要になる関係 辺は影響波及の強さを表す重みを持つ エンティティ1 複雑さ 2 エンティティ3 複雑さ 4 重み 0.3 エンティティ2 複雑さ 2 重み 0.5 重み 0.7

プロダクトモデルの詳細 エンティティの複雑さ 影響波及の強さ そのエンティティだけを変更するときの作業量を反映する値 複雑さメトリクスを用いる McCabe の循環的複雑度 CK メトリクス Halstead の複雑度 行数 影響波及の強さ 0 から 1 までの値 (1に近いほど影響波及が強いことを表す) 計算方法の例 c : モジュール間の呼び出しの数 d : モジュール間でデータフローを起こす変数の数 1-αcβd (ただし、αとβは 0 より大きく 1 より小さい定数) プロダクトが大規模であるといった理由により計算が困難な場合 定数を用いる

保守ポイント 保守作業のコスト 「保守ポイント」を提案 以下、簡単化のため Cs3 のみを対象として議論する 主に、変更されるエンティティとその影響範囲に依存 「保守ポイント」を提案 個々の保守作業のコストを見積るためのメトリクス プロダクトとプロセスのモデルを利用 プロダクトモデル上で影響範囲の複雑さを計算する 以下、簡単化のため Cs3 のみを対象として議論する 保守工数の見積 Cs1 システム理解 にかかるコスト Cs2 変更に かかるコスト Cs3 テストに かかるコスト 保守ポイント プロダクトモデル Gp 変更要求 R

保守ポイントの計算方法 プロダクトモデル上での影響範囲 保守ポイントの計算式 プロダクトモデル上での経路の重み 0から1までの値 例: 経路に含まれる辺の重みをすべて掛け合わせた値 最大の重みが、影響の強さを表す 保守ポイントの計算式 cx(r) : エンティティ r の複雑さ w (Gp, R, r’) : R に含まれるいずれかの頂点から r’ に到達する経路の重み (0から1までの値を取る)

保守ポイントの計算例 下のプロダクトモデルで、エンティティ 1 を変更するときの保守ポイントは、以下のようになる。 cx(E1) + 0.2*cx(E2) + (0.5*0.7)*cx(E3) = 2 + 0.5*2 + 0.35*4 = 4.4 エンティティ1 複雑さ 2 エンティティ1 複雑さ 2 エンティティ3 複雑さ 4 エンティティ3 複雑さ 4 重み 0.3 エンティティ2 複雑さ 2 エンティティ2 複雑さ 2 重み 0.5 重み 0.7

一般化保守ポイントの提案 n: 頂点数 保守請負前には、具体的にどういった案件が発生するか分からない 平均的に保守作業が発生すると仮定して計算 n: 頂点数

一般化保守ポイントの計算例 下のプロダクトモデルの一般化保守ポイントは以下のようになる (Cs3(Gp,{E1})+Cs3(Gp,{E2})+Cs3(Gp,{E3}))/3 = (4.4 + 4.8 + 4)/3 = 4.4 エンティティ1 複雑さ 2 エンティティ1 複雑さ 2 エンティティ3 複雑さ 4 エンティティ3 複雑さ 4 重み 0.3 エンティティ2 複雑さ 2 エンティティ2 複雑さ 2 重み 0.5 重み 0.7

実験 保守ポイントの値が作業量を表すかを確認するために 実験を行なった 酒屋問題†をJavaを用いて実装 8 クラス、 25 メソッド、 309 行 被験者 6 人に保守作業を行なわせ、作業時間を計測した 作業内容 欠陥修正 2 件 機能追加 3 件 作業時間 1時間43分 ~ 5時間2分 †山崎利治, “共通問題によるプログラム設計技法解説”, 情処学誌, Vol.25, No.9, p.934, 1984.

→保守ポイントの方が、単純な和よりも作業コストを適切に表している 実験結果 (全体) 相関係数を計算 全ての作業にかかった時間のうち、各作業に費した時間の割合 メトリクス (保守ポイント、変更されたメソッドの複雑度の和) 保守ポイントの計算方法 エンティティの単位: メソッドまたはフィールド変数 辺の重み: 定数 0.5 頂点の複雑さ: McCabe と LOC を使用 保守ポイント (McCabe) (LOC) メソッドの McCabe和 LOC和 相関 0.678 0.617 0.640 0.594 P値 3.86E-05 2.83E-04 1.40E-04 5.32E-04 →保守ポイントの方が、単純な和よりも作業コストを適切に表している

実験結果 (詳細) 機能追加のみの相関 欠陥修正のみの相関 保守ポイント (McCabe) (LOC) メソッドの McCabe和 LOC和 0.788 0.719 0.767 0.714 P値 1.04E-04 7.76E-04 2.05E-04 8.68E-04 欠陥修正のみの相関 保守ポイント (McCabe) (LOC) メソッドの McCabe和 LOC和 相関 -0.0748 -0.260 -0.180 -0.326 P値 0.817 0.413 0.575 0.301 →相関が見られない。人によるばらつきが大き過ぎた?

修正作業での 保守ポイントと作業時間割合の散布図

まとめ 保守コスト見積りのためのメトリクスを提案 対象 保守プロセスと、対象プロダクトをモデル化 プロダクトモデル上での影響範囲を用いて計算 個々の保守作業のコスト見積り 保守請負の契約前に行うコスト見積り 保守プロセスと、対象プロダクトをモデル化 プロダクトモデル上での影響範囲を用いて計算 メトリクスと労力との相関を評価 メトリクス値の単純な和よりも強い相関を持つ 修正作業では有意な相関が見られなかった

今後の課題 実験データの考察 修正作業で相関が見られなかったこと 他のメトリクスとの比較 より大規模な環境での実験