今日090525の予定 1.範囲の計算の復習→jlect#04A 2.レポートispm2の講評と模範回答→K’sLife 3-3. Earned Value 3-4. 計画変更 4. プロジェクト演習(レポートispm3) 5. 今後の予告
Disciplined Software Engineering Lecture #4A Software Engineering Institute Carnegie Mellon University Pittsburgh, PA 15213 Sponsored by the U.S. Department of Defense よく分からない文章があるスライド: #6, 29 new reused: 「将来の再利用」で統一した。意味は、新規開発 オブジェクトのうち、将来的に再利用する目的で再利用 ライブラリに登録されるもの。スライド#8, 15 likely: 「~しやすい」としたが、日本語らしくならない。 スライド#7, 29, 41 factor: 「パラメータ」と訳したところがある。スライド#29, 40 #6,29はこじつけをやりました。#8,15は結構です。#7,29,41は工夫してみましたが,日本語らしくなったかどうか。#29,40の「パラメータ」は結構です。 Noteに記入したのは,上も含めて#5-8,11-12,15,19,29,41-42です。(久保記)
講義#4 概要 - ソフトウエア規模の見積り- 2 規模見積りの概要 PROBE見積り法 オブジェクトデータのカテゴリ分け 回帰分析法 講義#4 概要 - ソフトウエア規模の見積り- 2 規模見積りの概要 PROBE見積り法 オブジェクトデータのカテゴリ分け 回帰分析法 プロセスの追加
規模見積りの概要 製品への要求 その製品の部品が 適切な規模になるまで 反復する 全ての部品に 対して反復する 規模の見積り値 規模の履歴データを入手 その製品の部品が 適切な規模になるまで 反復する 概念設計を作成 製品を部品に分ける その部品に似ている部品が データベースの中にあるか? 全ての部品に 対して反復する 新しい部品にもっとも似ている データベース部品を選択する 新しい部品の 相対的規模を見積もる 新しい部品の見積り 規模を合計する 製品全体の 規模を見積もる 規模の見積り値
PROBE見積もり法 PROBEはProxy-Based Estimatingの略語 PROBEとはProxyに基づく見積もり
PROBE 見積り法 スタート 見積り値 オブジェクトを見極める 概念設計 メソッド数 オブジェクト の型゚ 相対的 規模 再利用 カテゴリ 追加と修正のLOCの計算 プログラム規模の見積り 予測区間の計算 見積り値
PROBE手法の説明 以降の図表はPROBE手法の説明である。 説明中、付録Cの帳票C39(p.432)を参照する。
情報システムプロジェクト管理資料 本資料 ページ1 規模見積もり例 (教科書 P.81-83) ページ2~4 規模見積もりテンプレートC39 ページ1 規模見積もり例 (教科書 P.81-83) ページ2~4 規模見積もりテンプレートC39 (教科書 P.432-434)
C39 規模見積もりテンプレート べースプログラムLOC 見積もり 実績 べース規模(B) 削除LOC(D) 修正LOC(M) べースへの追加 型 メソッド 相対規模 LOC LOC ~ べース追加(BA)>>>>>>>>>>>>>>>( ) ( ) 新規オブジェクト 型 メソツド 相対規模 LOC(将来再利用) 新規オブジ(NO)合計 >>>>>>>>>>>>>( ) ( ) 再利用オブジェクト 再利用合計(R)>>>>>>>>>>>>>>>>>>( ) ( )
C39 続 見積もりオブジェクトLOC(E) E=BA+NO+M 回帰パラメタ β0(規模と時間) 回帰パラメタ β1(同上) 回帰パラメタ β0(規模と時間) 回帰パラメタ β1(同上) 見積もり新規・変更LOC(N) N=β0+β1*E 見積もり総LOC(T) T=N+B-D-M+R 見積もり将来の再利用合計 見積もり総開発時間 時間=β0+β1*E _ 実績値 予測範囲 予測区間上限 UPI=N+範囲 予測区間下限 LPI=Nー範囲
レポート提出先:K’sLIfeと3階松本レポート受箱の両方、締切:5.15 演習プログラム (n個のデータを読み、その平均値を求め表示する。データは保持) について、 付表C39規模見積テンプレートに沿って 1.規模の見積総LOC(T)を出せ。 2.見積もり開発総時間を出せ。 3.予測範囲、UPI、LPIを出せ。 そして表5.8の見積値を完成せよ。ただし、次を仮定する: ・ 回帰パラメータβ0は62 、β1は1.3とする。 ・予測区間の%は90とする。 開発後、実績値を記入し、C39テンプレートを提出せよ。
演習の要点 1.規模見積 プロキシを使用して本命値を見積もる。 今回レポの場合、プロキシはオブジェクト規模(E) 本命値はプログラム規模(NやT) 線形回帰でEからNを求める。 2.時間見積 同様に線形回帰でプロキシEから“時間”を求める。 3.実績と比較 →反省→PSP向上→自己能力アップ
演習09.5.16 総評 見積もり後、プログラム作成し実績値を記入した人……8 演習09.5.16 総評 見積もり後、プログラム作成し実績値を記入した人……8 プログラム添付なしの人。。。。。。。。。。。....................9 ベースプログラム有りと答えた人(無添付) 新規オブジェクトNOの根拠が違う人 再利用オブジェクト有りと答えた人 見積もり総LOCが計算違いの人 見積もり総開発時間が違う人 *実績値を欄に記入しているが、プログラム添付無しの人 *プログラム見本つきで見積もり方法説明
レポート提出先:K’sLIfeと3階松本レポート受箱の両方、締切:5.23 PM2 #Initial 演習プログラム (n個のデータを読み、その分散を求め表示する。データは保持) について、 付表C39規模見積テンプレートに沿って 1.Base Programに前回programを使用せよ。 2.将来の再利用を考慮せよ。 3.規模の見積総LOC(T)を出せ。 4.見積もり開発総時間を出せ。 5.予測範囲、UPI、LPIを出せ。 そして表5.8の見積値を完成せよ。ただし、次を仮定する: ・ 回帰パラメータβ0は62 、β1は1.3とする。 ・予測区間の%は90とする。 開発後、実績値を記入し、予測が向上しつつあるか吟味結果をのべ、C39テンプレートを提出せよ。
分散 分散を求めたい各標本点のデータ値 xi 平方和=∑(xi-(1/n(Σxi)))2 データの個数 n σのべき乗=平方和/(n-1)
概念設計 概念設計は以下のために必要: 設計の見当がついていれば、概念設計は迅速にできる。 要求を製品に関連づけるため 望みどおりの機能を実現する(製品)要素を定義するため 作成するものの規模を見積もるため 設計の見当がついていれば、概念設計は迅速にできる。 設計が分かっていないなら、見積りをするための情報はまだ不十分である。 「設計が分かっているなら、概念設計は速やかに行うことができる(?)」は,説明的に意訳してみました。 「もしその設計を理解していなければ、見積りをするためにまだ十分な情報を得ていない」は直前の文の言い換えであると解し,それらしく変えてみました。(以上,久保記)
オブジェクトの識別 -1 1.アプリケーションのエンティティを選び、それをオブジェクトとする。 2.各オブジェクトが、メソッドをいくつ含むことになりそうかを判断する。 3.オブジェクトの型を決定する。 即ち、入出力、論理演算、データ操作、算術演算、ファイル処理、制御、初期設定、終了設定など 4.各オブジェクトの相対的な規模を判断する。即ち 非常に小さい (VS), 小さい (S), 中くらい(M), 大きい (L), 非常に大きい (VL). 「可能なところで、アプリケーションのエンティティを選択する。」は意訳しました。 「各オブジェクトは、いくつのメソッドを含んでいるのが最も起こりやすいかを判断する。」は変えてみました。(以上,久保記)
オブジェクトの識別 - 2 5.オブジェクトの履歴データから、各オブジェクトのLOC/メソッドを決定する(→第35コマ) 7.どのオブジェクトを再利用ライブラリーに登録するかを判断し “将来の再利用”と注記する。 「オブジェクトの履歴データから、各オブジェクトのLOC/メソッドによる規模を決定する。」は間違いではないでしょうが,あっさりした日本語に変えてみました。(久保記)
オブジェクトの識別 - 3 オブジェクトが既存の型に適合しないとき、そのオブジェクトは複数型の合成物かも知れない。 それらが十分に詳細化されていることを確認する。 要素的なオブジェクトでないオブジェクト(複合的オブジェクト)を詳細化する。 新しいオブジェクトの型に注目しておく。
オブジェクトの識別 - 例 1 表 5.8から, 3 つの新しいオブジェクトが識別される。 メソッドの数、相対的規模、およびLOCは次の通りである。 新しいオブジェクト 型 メソッド 相対規模 LOC Matrix データ 13 M 115 Linear System 計算 8 L 197 Linked List データ 3 L 49*
オブジェクトの識別 - 例 2 2 つの再利用オブジェクトも表 5.8 に示されている。 再利用ライブラリーに登録されるべき新しいオブジェクトは、Linked Listのように*印で識別される。 無修正再利用オブジェクトは Linked List 73 Data Entry 96 Linked Listは既存の 73 LOC のオブジェクトに、49 LOCのメソッドを後で追加することになる。 「3 つの再利用オブジェクト」は英文の間違いでしょう。二つしかありません。 「Linked Listは既存の 73 LOC のオブジェクトに、49 LOCのメソッドを追加して出来ている。」は変です。見積段階の表現にすべきでしょう。(以上,久保記)
プログラム規模の見積り - 1 プログラム全体の規模は以下に基づく: ① 新規開発コード (回帰法を使って調整) ① 新規開発コード (回帰法を使って調整) ② ライブラリーからの再利用コード ③ 削除部分を引いた以前のバージョンからのベースコード 新規開発コードは次の3つで構成される: ①.1 ベースへの追加 (BA) - ベースに追加されるコード ①.2 新規オブジェクト(NO) - 新規開発されるオブジェクトのコード ①.3 修正コード(M) - ベースコードのうち変更する部分 「追加された」は「追加される」,「新規開発された」は「新規開発される」に変えた。見積段階の時制を使うのが自然ではないでしょうか。 「変更されているベースLOC」は,意訳しました。(以上,久保記)
プログラム規模の見積り - 2 ( ) = b + * BA NO M 新規開発コードから、新規および変更のLOC(N)を計算する 回帰パラメータは、新規開発(オブジェクト)LOCの見積りと新規および変更のLOCの実績についての履歴データから計算される。 = b + 1 * BA NO M ( ) 新規および変更のLOC
プログラム規模の見積り - 3 再利用ライブラリから使われたコードは、カウントされ、 LOC規模全体の見積り値に含まれるべきである ベースコードは以下から構成される 以前のバージョンからのLOC 削除コードを引く 修正コードを引く (そうしないと2回カウントされることになる)
見積り値を完了させる 完了した見積り値は以下から構成される: 回帰パラメータを使って計算された、新規および変更のLOCの見積り値 新規および変更のLOCに対する 70% および 90% の上方予測区間 (UPI) および下方予測区間 (LPI) ベース、再利用、削除および修正のコードを考慮した合計LOC 再利用ライブラリに追加される、将来の再利用用の計画LOC 「再利用ライブラリに追加される、計画された将来の再利用LOC」の「計画された」の場所が気になります。変えてみました。(久保記)
見積り値を完了させた例 - 1 ベース プログラム (B) 695 LOC 削除 (D) 0 LOC 修正 (M) 5 LOC ベースへの追加 (BA) 0 LOC 新規オブジェクト: NO = 115+197+49 = 361 LOC 再利用プログラム 169 LOC
見積り値を完了させた例 - 2 ( ) = b + * BA NO M 回帰パラメータを使って、新規および変更のLOC (N)を計算する: 新規および変更: N = 62 + 366*1.3 = 538 LOC(注参照) 合計: T = 538 + 695 - 5 + 169 = 1397 LOC 注ーーβ0、β1は式で計算するが、ここでは、簡略的に次の通りとする: β1=1.0+30%(完成品はLOC計画値より通常大である事実を反映) β0=63(過少見積もりの偏りを補正した値) = b + 1 * BA NO M ( ) 新規および変更のLOC
規模を見積もるために必要な項目 タイプ別に分割された、オブジェクトについての履歴 データ タイプ別に分割された、オブジェクトについての履歴 データ 各オブジェクトタイプの相対規模に対する見積り 要因 以下の回帰パラメータを使って新規および変更のLOCを計算する: ベースへの追加LOC(BA) オブジェクトLOCの見積り値(NO) 修正LOC(M)
オブジェクトについての履歴データ オブジェクト規模は非常に変動する 言語に依存して 設計形態の影響を受ける メソッド数で正規化すると良い 基本的なタイプを選ぶ 論理、制御 入出力、ファイル、表示 データ、テキスト処理、計算 設定、エラー処理 「メソッド数で正規化するのに役立つ」は誤訳でしょう。(久保記)
オブジェクトに対する見積り要因 新規オブジェクトの規模を判断するのに役立つように、各型の規模範囲を求める この規模範囲を計算するために以下を行う 平均を求める 標準偏差を求める 非常に小さい: VS = 平均 - 2*標準偏差 小さい: S =平均 - 標準偏差 中くらい: M = 平均 大きい: L = 平均 + 標準偏差 非常に大きい: VL = 平均 + 2*標準偏差
M L S VL VS
対数-正規分布 この規模範囲は、オブジェクトデータが正規分布すると仮定している もしデータが対数-正規分布していたら、規模範囲の 計算をする前に、データの対数を取る そして、対数データを使って規模範囲を計算した後、 逆対数によりLOCの値を求める
見積りの要因 - 1 あるオブジェクトのタイプについて、次のデータがあると仮定する: 1 オブジェクト, 3 メソッドで, 合計 39 LOC 1 オブジェクト, 5 メソッドで, 合計 127 LOC 1 オブジェクト, 2 メソッドで, 合計 64 LOC 1 オブジェクト, 3 メソッドで, 合計 28 LOC 1 オブジェクト, 1 メソッドで, 23 LOC 1 オブジェクト, 2 メソッドで, 合計 44 LOC メソッド当たりの LOC はそれぞれ次の通りである: 13, 25.4, 32, 9.333, 23, 22
見積りの要因 - 2 このデータの対数値は次の通りである: 2.565, 3.235, 3.466, 2.234, 3.135, 3.091 平均は 2.954 標準偏差は 0.421 従って、規模範囲の対数値は次の通りである: 非常に大きい - VL: 2.95 + 2*0.42 = 3.79 大きい - L: 2.95 + 0.42 = 3.37 中くらい - M: 2.95 小さい - S: 2.95 - 0.42 = 2.53 非常に小さい - VS: 2.95 - 2*0.42 = 2.11
見積りの要因 - 3 規模範囲の対数値から、逆対数によって規模範囲のLOC が得られる 非常に大きい - VL: exp(3.79) = 44.3 大きい - L: exp(3.37) = 29.1 中くらい - M: exp(2.95) = 19.1 小さい - S: exp(2.53) = 12.6 非常に小さい - VS: exp(2.11) = 8.3 オブジェクトの全てのタイプについて、この計算を繰り返す
C++ オブジェクトの規模範囲(p.78) メソッド当たりのLOC VL タイプ VS S M L 計算 2.34 5.13 11.25 24.66 54.04 データ 2.60 4.79 8.84 16.31 30.09 入出力 9.01 12.06 16.15 21.62 28.93 論理 7.55 10.98 15.98 23.25 33.83 設定 3.88 5.04 6.56 8.53 11.09 テキスト 3.75 8.00 17.07 36.41 77.66
回帰パラメータ オブジェクト LOC の見積り値 (x) と、新規および変更の LOC の実績値 (y) を使う:
見積もりの良さを評価 演習ispm2では見積もりは規模と時間の2面を実施したので、2面を評価する t分布を使って予測区間を計算 区間:見積もり値の周りの範囲を表す (プログラムの実際規模はその範囲に入る) 範囲=t(α/2、n-2)σ*root(1+1/n+(xk-x avg)2/Σ(xi-xavg)2) 式(r.1) この計算の仕方は後述 α/2:予測区間のパーセント(例えば70、90%) n-2:自由度 予測区間:プログラムLOC見積値-範囲から プログラムLOC見積値+範囲まで
予測区間 - 1 予測区間は、実績値がそうなりそうな範囲を見積り値の周り(上限と下限で)で示す 90% 予測区間は、見積り回数 90%に対する実績値はそこに入るであろう範囲を与える 予測(forecast)ではなく、期待(expectation)に 過ぎない 見積りが、履歴データにある見積りと同様に行われるときのみ当てはまる 予測区間は、回帰パラメータ(factors)を計算するのに使ったのと同じデータで計算する 「予測区間は見積り値の周りに最も起こりやすい範囲を与える」は,意味を補う言葉を挿入して変更しました。 「90% 予測区間は、見積り値の 90% が入るであろう範囲を与える」についても。 「見積り値が履歴データのように振る舞うときのみ適用する(?)」は誤訳でしょう。 「予測区間は、回帰パラメータ(factors)を計算するのに使われるのと同じデータから計算される」は日本語表現を変えてみました。意味は不変です。(以上,久保記)
予測区間 - 2 下方予測区間 (LPI) と上方予測区間 (UPI) は、規模見積り値と範囲から次のように計算される LPI = 規模見積り値 - 範囲 UPI =規模見積り値 + 範囲 = t a / 2 , n - ( ) s 1 + x k avg i å 範囲
範囲の計算(教科書p.342と310) 1)次の t 分布を用いる 両側分布 (α/ 2 ) 自由度が n-2 (ただし,nはデータ個数) t値はt分布表(p.310)を使って求める。確率は70%に対して0.85、90%に対して0.95を選ぶ。90%なら付表A2からt=1.860を得る。 2)σはデータからの回帰線の標準偏差(分散の平方根)である
β0β1も計算せよ 一般には相関性のある“対データ(目的変数と駆動変数)”3組以上を使って算出する。 今回は3組がないので、62、1.3を例示した。 また、xi やyiも保持している“対データ”3組以上を使用する。
3)その他の変数説明 Xi 保持している各プログラムのプロキシLOC Xavg 上記の平均 Xk 目指すプログラムのプロキシLOC XiやXkは何を使用して目的値の何を見積もるかで選定する。
範囲(続) 計算例 t(α/2,n-2)=1.860 付表A2のt分布表を使用、p(α)=0.95を参照し、データ個数10ゆえ自由度n-2=8の交点に示されている1.860を得る 一方 σ=197.896 したがって 範囲=1.860*197.896*平方根(1+1/10+(386-382.8)2 /1.074,925.60)=386.05
t 分布 t 分布は 正規分布と類似している 分布のすその確率が正規分布より高い 限られたデータから統計的パラメータを見積る際に使われる 典型的には片側分布の範囲の確率を与える 予測区間の計算には両側分布の値を使う
1-p X
2p-1 -X X
t 分布の値 統計表では、負の無限大から x までの確率 p を与える 片側分布のすその確率(求めたい値)は、1-p で求める
予測区間の例 履歴データから範囲を計算する 範囲 = 235 LOC 上方予測区間 (UPI) UPI = N + 範囲 = 538 + 235 = 773 LOC 下方予測区間 (LPI) LPI = N - 範囲 = 538 - 235 = 303 LOC
PSP1 での追加項目 PROBE スクリプト - 既に述べた テスト報告書 : テスト計画と結果を報告すること 後でリグレッション テスト(縮退テスト)に役立つ プロジェクト計画概要(付表C36, p.426) LOC/時間 - 計画、実績、累積 - 見積り値の合理性をチェックする 規模見積りの計算 実績規模の計算
規模見積りの計算 規模見積り値を完了させるとき、次のデータで始める 新規および変更の LOC (N): 見積り値 修正 LOC (M): 見積り値 ベース LOC (B): 測定値 削除 LOC (D): 見積り値 再利用 LOC (R): 測定値または見積り値 そして、次の計算を行う 追加 LOC (A): N-M 合計 LOC (T): N+B-M-D+R (B+追加+R-D)
実績規模の計算 プログラムの実績規模を決定するとき、次のデータで始める 合計 LOC (T): 測定値 ベース LOC (B): 測定値 削除 LOC (D): カウント値 再利用 LOC (R): 測定値またはカウント値 修正 LOC (M): カウント値 そして、次の計算を行う 追加 LOC (A): T-B+D-R 新規および変更の LOC (N): A+M
演習課題 #4 PSP1 を用いて、N 組のデータに対する線形回帰パラメータ(factors)を計算するプログラム 4A を作成しなさい プログラム 1A から 3A の自分のデータを使って、規模およびリソースの見積りを行い,計画を作成しなさい プログラム 4A を使って、プログラム 1A から 4A に 対する回帰パラメータ(factors)を計算しなさい 付録 C と D に記述してあるプログラム、演習課題、プロセス記述に従いなさい 「プログラム 1A から 3A の自分のデータを使って、規模およびリソースの見積り値と計画を作成しなさい」は正確な訳にしてみました。(久保記)
講義 4 のまとめ 1 - PROBE 手法は、ソフトウェアの規模見積り 値を求める構造化された方法である 値を求める構造化された方法である 2 - PROBE 手法は、 個人の規模データを使う 3 - PROBE 手法は、 プログラムの実績規模が ほとんどの場合その中に入ると思われる、 統計的に根拠のある範囲を与える 「PROBE 手法は、 プログラムの実績規模が最もその中に入ると思われる、統計的に根拠のある範囲を与える」の「最も」を「ほとんどの場合」に置き換えてみました。その方が意味が正確に伝わるでしょう。(以上,久保記)
回帰パラメータ オブジェクト LOC の見積り値 (x) と、新規および変更の LOC の実績値 (y) を使う:
予測区間 - 2 下方予測区間 (LPI) と上方予測区間 (UPI) は、規模見積り値と範囲から次のように計算される LPI = 規模見積り値 - 範囲 UPI =規模見積り値 + 範囲 = t a / 2 , n - ( ) s 1 + x k avg i å 範囲
予測区間 - 3 次の t 分布を用いる 両側分布 (α/ 2 ) 自由度が n-2 σは、データからの回帰線の標準偏差である
PSP1 での追加項目 PROBE スクリプト - 既に述べた テスト報告書 : テスト計画と結果を報告すること 後でリグレッション テスト(縮退テスト)に役立つ プロジェクト計画概要(付表C36, p.426) LOC/時間 - 計画、実績、累積 - 見積り値の合理性をチェックする 規模見積りの計算 実績規模の計算
規模見積りの計算 規模見積り値を完了させるとき、次のデータで始める 新規および変更の LOC (N): 見積り値 修正 LOC (M): 見積り値 ベース LOC (B): 測定値 削除 LOC (D): 見積り値 再利用 LOC (R): 測定値または見積り値 そして、次の計算を行う 追加 LOC (A): N-M 合計 LOC (T): N+B-M-D+R (B+追加+R-D)
実績規模の計算 プログラムの実績規模を決定するとき、次のデータで始める 合計 LOC (T): 測定値 ベース LOC (B): 測定値 削除 LOC (D): カウント値 再利用 LOC (R): 測定値またはカウント値 修正 LOC (M): カウント値 そして、次の計算を行う 追加 LOC (A): T-B+D-R 新規および変更の LOC (N): A+M
演習課題 #4 PSP1 を用いて、N 組のデータに対する線形回帰パラメータ(factors)を計算するプログラム 4A を作成しなさい プログラム 1A から 3A の自分のデータを使って、規模およびリソースの見積りを行い,計画を作成しなさい プログラム 4A を使って、プログラム 1A から 4A に 対する回帰パラメータ(factors)を計算しなさい 付録 C と D に記述してあるプログラム、演習課題、プロセス記述に従いなさい 「プログラム 1A から 3A の自分のデータを使って、規模およびリソースの見積り値と計画を作成しなさい」は正確な訳にしてみました。(久保記)
講義 4 のまとめ 1 - PROBE 手法は、ソフトウェアの規模見積り 値を求める構造化された方法である 値を求める構造化された方法である 2 - PROBE 手法は、 個人の規模データを使う 3 - PROBE 手法は、 プログラムの実績規模が ほとんどの場合その中に入ると思われる、 統計的に根拠のある範囲を与える 「PROBE 手法は、 プログラムの実績規模が最もその中に入ると思われる、統計的に根拠のある範囲を与える」の「最も」を「ほとんどの場合」に置き換えてみました。その方が意味が正確に伝わるでしょう。(以上,久保記)