資格道場 › レッスン一覧 › ソフトウェア開発管理技術
ソフトウェア開発管理技術・2/4・13分

品質管理とバグ・修正コストの見積り

ゴール

ソフトウェア品質管理の対象と指標を見分けられるようになり、エラー埋込法による残存エラー数と、潜在不良数から求める修正費用の期待値を、自分で計算して選べるようになる。

品質管理は「どこまでが対象か」「何で品質を測るか」を言葉で区別させる問題として出ます。エラー埋込法と修正費用の計算も過去に出題があり、決まった手順を覚えておけば点を取りやすい分野です。

このレッスンで稽古する(用語チェック・過去問)

結論:品質管理は「全部の成果物」が対象で、誤りは上流ほど高くつく

このレッスンで押さえることは3つです。

  • 品質管理の対象は、プログラムの機能だけではありません。性能やドキュメントを含むすべての成果物が対象です。
  • 誤りの修復コストは、上流工程(要求定義・設計など、開発の前半)で入った誤りほど高くなります。
  • 残っているバグの数や修正費用は、比例計算と割合の掛け算で見積もれます。

最後に、組織の開発プロセスの成熟度を測る CMMI を1つだけ覚えます。

品質管理の対象範囲:「一部だけ」「性能は別」はすべて誤り

品質管理とは、成果物が求められた品質を満たしているかを計画・測定・改善する活動です。対象は要求機能の充足度だけでなく、性能やドキュメントを含むすべての成果物です。

試験に出る誤りは、次の3パターンです。

誤った記述 なぜ誤りか
サブシステムごとの品質が保証できれば、全体の品質も保証できる 組み合わせたときの不具合(連携部分の不良)は、部分のテストだけでは見つからない
応答時間などの性能は品質管理の対象外 性能も品質の一部(使える速さで動くことも要求のうち)
市販製品を組み合わせる場合、対象は自社開発分だけ システム全体として品質を保証する必要があり、市販製品も対象になる

たとえるなら家の新築です。部屋ごとに検査が通っても、配管がつながっていなければ家としては不合格です。取扱説明書(ドキュメント)に誤りがあっても、引き渡しの品質としては不十分です。

品質の管理指標:進捗・生産性・バージョンと混ぜない

品質を数字で管理するときは、成果物ごとのレビュー時間や**バグ数(バグ密度)**などを使います。レビューとは、成果物を人が読んで誤りを探す作業です。レビューにかけた時間が少なすぎる成果物は、誤りの見逃しを疑えます。

試験では、別の管理領域の指標と並べて出題されます。

指標の例 何の管理か 品質指標か
成果物ごとのレビュー時間・バグ数 品質管理 ○
WBS のワークパッケージの完了数 進捗管理(どこまで終わったか) ×
個人別のプログラミング生産性 生産性・工数の管理 ×
プログラムのバージョン 構成管理(どの版がどれか) ×

WBS(Work Breakdown Structure)は作業を細かく分けた一覧で、その最小単位がワークパッケージです。完了数は「どれだけ進んだか」を表すもので、出来の良さは表しません。

誤りの修復コスト:上流で入った誤りほど高い

ウォータフォール型(要求定義→設計→プログラミング→テストを順に進める開発)では、上流工程で入った誤りほど、後で見つかったときの修復コストが高くなります。上流の誤りは、それを前提に作った下流の成果物すべてに広がるからです。

誤りの入った工程 運用テストで見つかったときに直す範囲 修復コスト
要求定義 設計・プログラム・マニュアル・テストのすべて 最も高い
外部設計(画面・帳票など利用者から見える部分の設計) プログラムに加え、マニュアルなどにも波及 高い
内部設計(プログラム内部の設計) 該当プログラムとそのテスト 中くらい
コーディング 該当箇所の修正と再テスト 比較的低い

たとえば建築で、設計図の段階で決めた間取りを、完成後に変えるのは大工事です。壁紙の貼り間違い(コーディングの誤り)ならその壁だけで済みます。

「内部設計の誤りはレビューでほとんど除去できるから安い」という選択肢は誤りです。除去しやすさの話と、見つかったときのコストの話がすり替わっています。

運用テストで見つかったときに直す範囲要求定義の誤りコーディングの誤り要求定義外部設計内部設計コーディングテストマニュアル要求定義外部設計内部設計コーディングテスト(再テスト)マニュアル修復コスト:最も高い修復コスト:比較的低い誤りが入った工程一緒に直す範囲
運用テストで見つかったとき、要求定義の誤りは下流の成果物すべてを直すことになるが、コーディングの誤りはその箇所の修正と再テストで済む。

エラー埋込法:わざと入れたバグの発見率で全体を推定する

エラー埋込法(バグ埋込み法)は、わざと既知のエラーをプログラムに埋め込んでからテストし、その発見率から、まだ残っている本物のエラーの数を推定する方法です。考え方は「埋め込んだエラーの発見率=本物のエラーの発見率」という比例の仮定です。

たとえば池の魚の数を調べるとき、印を付けた魚を放流し、網ですくって印付きの割合を見るのと同じ発想です。

記号で書くと次の式です(S=埋め込んだ数、m=そのうち発見した数、T=もともとの潜在エラー数、n=発見した総数)。

m / S = (n − m) / T

  • 左辺:埋め込んだエラーの発見率
  • 右辺:本物のエラーの発見率(発見総数 n には埋込みエラー m が含まれるので、本物は n − m)

計算問題は「本物の総数を出す → 発見済みの数を引いて残存数を出す」の2段階です。総数で止めると誤りの選択肢を選んでしまいます。

埋め込んだ側と本物側で発見率は同じ埋め込んだ数 S発見 m 個もともとの数 T発見 n − m 個m / S = (n − m) / T① 式から T を出す② T −(n − m)=残存数T で止めると誤り。発見済みを引く発見した未発見
埋め込んだエラーと本物のエラーの発見率が等しいと仮定して T を求め、発見済みの n − m を引いて残存数を出す。

潜在不良から修正費用の期待値を出す:掛け算を順番に

潜在不良とは、まだ見つかっていないがプログラムに含まれている不良のことです。期待値は「平均的に見込まれる値」で、件数の見込みに単価を掛けて求めます。

手順は次の4段の掛け算です。

  1. 規模 × 潜在不良率 = 潜在不良の件数
  2. 潜在不良の件数 × 年間発見率 = その年に見つかる件数
  3. 見つかる件数 × 修正対象の割合 = 修正する件数
  4. 修正する件数 × 1件当たりの費用 = 修正費用の期待値

条件文に「影響度大だけ修正する」とあれば、影響度小の費用は足しません。件数が 3.2 件のように小数になっても、期待値なのでそのまま計算します。

掛け算を上から順につなぐ規模× 潜在不良率潜在不良の件数× 年間発見率その年に見つかる件数× 修正対象の割合修正する件数× 1件当たりの費用修正費用の期待値影響度大だけ修正なら小の費用は足さない小数の件数もそのまま計算する
規模から出発し、4つの掛け算を上から順につないで修正費用の期待値にたどり着く。

CMMI:組織のプロセスの成熟度を評価するモデル

CMMI(Capability Maturity Model Integration・能力成熟度モデル統合)は、ソフトウェア開発組織やプロジェクトのプロセスの成熟度を評価するためのモデルです。成熟度は5段階で表されます。開発の進め方そのもの(ウォータフォールなどのプロセスモデル)や、取引のための共通フレームとは別物です。

用語 何か
CMMI 組織・プロジェクトのプロセスの成熟度を評価するモデル
プロセスモデル(ウォータフォール等) 開発の進め方の型
共通フレーム 開発・取引で使う作業や用語を共通化した枠組み
例題 1

エラー埋込法の関係式を選ぶ

エラー埋込法において,埋め込まれたエラー数を S,埋め込まれたエラーのうち発見されたエラー数を m,埋め込まれたエラーを含まないテスト開始前の潜在エラー数を T,発見された総エラー数を n としたとき,S,T,m,n の関係を表す式はどれか。

ア m/S = (n-m)/T
イ m/S = T/(n-m)
ウ m/S = n/T
エ m/S = T/n

出典:令和元年度 秋期 基本情報技術者試験 午前 問47

解き方と答えを見る
  1. 記号の意味を確認する:S=埋め込んだ数、m=埋込みのうち発見した数、T=もともとの潜在エラー数、n=発見した総数。
  2. 埋込みエラーの発見率は m / S。
  3. 発見総数 n には埋込みエラー m が含まれるので、本物のエラーの発見数は n − m。本物の発見率は (n − m) / T。
  4. エラー埋込法の仮定「二つの発見率は等しい」を式にすると m / S = (n − m) / T。
  5. n − m ではなく n のままの選択肢(ウ・エ)や、分子分母が逆の選択肢(イ)は誤り。

答え:ア:m/S = (n − m)/T

例題 2

埋込み22個中16個発見、実バグ48個発見 → 残存は?

バグ埋込み法によってソフトウェア内に残存するバグを推定する。テストによって現在までに発見されたバグは 48 個であり,総埋込みバグ 22 個のうち,テストによって発見されたものは 16 個であった。あと幾つのバグが潜在していると推定されるか。ここで,埋込みバグの発見数とソフトウェアのバグの発見数は比例するものとする。

ア 6
イ 10
ウ 18
エ 22

出典:基本情報技術者試験 科目A免除 修了試験 20230122 実施分 問47

解き方と答えを見る
  1. 埋込みバグの発見率を出す:16 ÷ 22 = 16/22。
  2. 本問の解き方では、48個を本物のバグの発見数として扱う。
  3. 本物のバグの総数を x とすると、発見率が等しいので 48 = x × 16/22。
  4. x = 48 × 22 ÷ 16 = 1,056 ÷ 16 = 66 個。
  5. 残存数 = 総数 − 発見済み = 66 − 48 = 18 個。
  6. 検算:66 は総数なので選択肢にあっても答えではない。6(=22 − 16)は埋込みバグの残りで、本物のバグではない。

答え:ウ:18 個

例題 3

埋込み48個中36個発見、真のエラー42個発見 → 残存は?

エラー埋込み法による残存エラーの予測において,テストが十分に進んでいると仮定する。当初の埋込みエラーは48個である。テスト期間中に発見されたエラーの内訳は,埋込みエラーが36個,真のエラーが42個である。このとき,残存する真のエラーは何個と推定されるか。

ア 6
イ 14
ウ 54
エ 56

出典:基本情報技術者試験 科目A免除 修了試験 20220612 実施分 問48

解き方と答えを見る
  1. 埋込みエラーの発見率:36 ÷ 48 = 0.75(75%)。
  2. 真のエラーも 75% 見つかったと仮定する。真のエラーの総数 = 42 ÷ 0.75 = 56 個。
  3. 残存する真のエラー = 56 − 42 = 14 個。
  4. 検算:56 は推定総数なので、残存数として選ばない。

答え:イ:14 個

例題 4

初年度の修正費用の期待値(影響度大だけ修正)

条件に従うとき,アプリケーションプログラムの初年度の修正費用の期待値は,何万円か。 〔条件〕 (1) プログラム規模:2,000 k ステップ (2) プログラムの潜在不良率:0.04 件/k ステップ (3) 潜在不良の年間発見率:20%/年 (4) 発見した不良の分類  影響度大の不良:20%,影響度小の不良:80% (5) 不良 1 件当たりの修正費用  影響度大の不良:200 万円,影響度小の不良:50 万円 (6) 初年度は影響度大の不良だけを修正する

ア 640
イ 1,280
ウ 1,600
エ 6,400

出典:平成31年度 春期 基本情報技術者試験 午前 問49

解き方と答えを見る
  1. 潜在不良の件数:2,000 kステップ × 0.04 件/kステップ = 80 件。
  2. 初年度に見つかる件数:80 件 × 20% = 16 件。
  3. そのうち影響度大:16 件 × 20% = 3.2 件(期待値なので小数のままでよい)。
  4. 修正費用:3.2 件 × 200 万円 = 640 万円。影響度小は修正しないので足さない。
  5. 検算:影響度小も修正すると 12.8 件 × 50 万円 = 640 万円が加わり 1,280 万円(イ)になる。年間発見率を掛け忘れて両方を修正すると 80 件 ×(20% × 200 + 80% × 50)= 80 × 80 = 6,400 万円(エ)になる。年間発見率と影響度大の割合はどちらも 20% なので、どちらか片方を落とすと 80 × 20% × 200 = 3,200 万円(正解の5倍)になり、選択肢のどれにも当たらない。

答え:ア:640 万円

要点(試験直前に読む)

  • 品質管理の対象は機能・性能・ドキュメントを含むすべての成果物。部分の品質では全体を保証できず、市販製品も対象。
  • 品質指標はレビュー時間やバグ数。WBS の完了数は進捗、生産性は工数、バージョンは構成管理の指標。
  • 誤りの修復コストは上流工程ほど高い。外部設計の誤りはマニュアルにも波及するので、コーディングの誤りより高い。
  • エラー埋込法は m/S = (n − m)/T。本物の総数を出したら、発見済みを引いて残存数にする。
  • 修正費用は「規模×潜在不良率×年間発見率×修正対象の割合×単価」の順に掛け、修正しない種類は足さない。
  • CMMI は組織・プロジェクトのプロセスの成熟度を評価するモデル。

ひっかけ

  • 「サブシステム単位で品質を保証すれば全体も保証できる」「性能は対象外」「自社開発分だけが対象」は、どれも品質管理の範囲を狭めた誤り。「すべての成果物が対象」を選ぶ。
  • 「コーディングの誤りは後の全工程に及ぶので高い」のように上流と下流を逆にした選択肢に注意する。後の工程に広がるのは上流の誤り。
  • エラー埋込法で推定総数(例:56個、66個)が選択肢にあっても、それは答えではない。問われているのは残存数=総数−発見済み。
  • エラー埋込法の式で、発見総数 n をそのまま本物の発見数として使わない。n に埋込みの発見分 m が含まれる場合、本物は n − m。
  • 修正費用の計算では、影響度小の費用を足した 1,280 万円や、年間発見率を落として両方足した 6,400 万円が誤りの選択肢として並ぶ。条件の「影響度大だけ修正」と「年間発見率」を最後に指差し確認する。

用語(15)

品質管理 ひんしつかんり
成果物が求められた品質を満たしているかを、計画・測定・改善する活動で、機能・性能・ドキュメントなどすべての成果物を対象にする。
⚠ 進捗管理(どこまで終わったか)や構成管理(どの版か)と混同しやすい。品質管理は「出来の良さ」を扱う。
レビュー れびゅー
設計書やプログラムなどの成果物を人が読み、誤りや問題点を見つける作業。
⚠ テストはプログラムを動かして確かめる作業。レビューは動かさずに読んで確かめる。
品質の管理指標 ひんしつのかんりしひょう
成果物ごとのレビュー時間やバグ数・バグ密度など、成果物の品質を数字で把握するための目安。
⚠ ワークパッケージの完了数(進捗)、個人の生産性、プログラムのバージョン(構成管理)は品質指標ではない。
WBS Work Breakdown Structure
プロジェクトの作業を階層的に細かく分解した一覧。
⚠ WBS の完了数は進捗の指標で、品質の指標ではない。
ワークパッケージ わーくぱっけーじ
WBS で分解した作業のうち、最も下の単位で、担当や見積りを割り当てる単位。
構成管理 こうせいかんり
プログラムや文書のバージョンと、その組み合わせを管理し、どの版がどれかを分かるようにする活動。
⚠ 品質管理と並べて出る。バージョンは構成管理の対象であり、品質の指標ではない。
上流工程 じょうりゅうこうてい
要求定義や設計など、開発の前半にあたる工程。
⚠ 下流工程(プログラミング・テスト)と比べ、上流で入った誤りほど後で直すコストが高い。
外部設計 がいぶせっけい
画面・帳票・操作など、利用者から見えるシステムの振る舞いを決める設計。
⚠ 内部設計はプログラム内部の構造を決める設計。外部設計の誤りはマニュアルにも波及するので、修復コストがより高い。
運用テスト うんようてすと
実際の業務に近い環境と手順で、システムが運用に耐えるかを確かめる最終段階のテスト。
エラー埋込法 えらーうめこみほう(バグ埋込み法)
既知のエラーをわざと埋め込んでテストし、その発見率と本物のエラーの発見率が等しいとみなして、残存エラー数を推定する方法。
⚠ 推定で出るのはまず本物のエラーの総数。残存数は総数から発見済みの数を引いて求める。
潜在不良 せんざいふりょう(潜在エラー)
プログラムに含まれているが、まだ見つかっていない不良。
潜在不良率 せんざいふりょうりつ
プログラム規模当たりに含まれる潜在不良の件数で、0.04件/kステップのように表す。
⚠ 年間発見率(その年に見つかる割合)とは別物。件数を出すのが潜在不良率、その年の分を出すのが年間発見率。
期待値 きたいち
起こりうる値を、その起こりやすさで重み付けした平均的な見込み値。
CMMI Capability Maturity Model Integration
ソフトウェア開発組織やプロジェクトのプロセスの成熟度を、段階で評価するためのモデル。
⚠ 開発の進め方の型(プロセスモデル)や、取引のための共通フレームと取り違えやすい。CMMI は「評価する」モデル。
共通フレーム きょうつうふれーむ
システム開発や取引にかかわる作業内容や用語を共通化し、発注側と受注側が同じ言葉で話せるようにした枠組み。
⚠ CMMI の説明の誤り選択肢として出る。成熟度の評価は CMMI。

このレッスンの過去問

このレッスンで稽古する