応用情報技術者 2014年 秋期 午後 問08
ソフトウェアのテストに関する次の記述を読んで、設問1~3に答えよ。
J社は、自社の販売管理システムを再構築するプロジェクトを実施している。プロジェクトでは、設計者が要件定義、方式設計を行った後、ソフトウェアコンポーネント(以下、コンポーネントという)の詳細設計を行う。その後、構築において、開発者がコンポーネントを構成するソフトウェアユニット(以下、ユニットという)のコード作成と単体テストを行う。そして、結合において、コンポーネント内のユニット間、及びコンポーネント間の結合テストを行う。K君はプロジェクトマネジャを務めている。
販売管理システムは、出荷管理、顧客管理、受注管理、見積り管理の四つのコンポーネントから成る。表1に、これらのコンポーネントのステップ数を示す。

〔単体テストの実施と結果の分析〕
J社では、単体テストとして、ホワイトボックステストとブラックボックステストを行う。テスト項目の件数は、ユニットへの入力の組合せ数でカウントし、その目標を1kステップ当たり 100 以上と定めている。ただし、回帰テストのために同じテスト項目を複数回実行しても重複してカウントしない。テストにおいて期待どおりの処理結果とならない場合には、その原因となる欠陥を特定し、ユニットごとにその欠陥件数をカウントする。
出荷管理、顧客管理、受注管理は、コンポーネントを構成するユニットの単体テストを予定どおりに完了し、結合テストを実施中である。見積り管理は、他よりも遅れて単体テストを完了し、K君がテスト結果を確認中である。表2は、見積り管理の各ユニットの単体テストで検出された欠陥件数である。

K君は表2を基に図1の欠陥密度の管理図を作成した。この図の縦軸は欠陥密度、横軸はユニットIDである。管理図分析では、しきい値モデルを使用し、データの分布がUCL(Upper Control Limit:上部管理限界)とLCL(Lower Control Limit:下部管理限界)に対してどの位置にプロットされるかを見て、データが正常値であるか異常値であるかを判断する。K君は、J社の単体テストで検出された欠陥密度の過去の実績値の四分位点を利用し、LCLに第1四分位点の値を、中央値に第2四分位点の値を、UCLに第3四分位点の値を置いた。J社の過去の実績値から中央値は11件/kステップ、UCLは14件/kステップ、LCLは8件/kステップである。

管理図から、K君は、欠陥密度がUCLを大きく超過しているユニットP10は、品質に問題がある可能性が高いと考えた。P10の構築を担当したのは、入社2年目のL君である。L君にヒアリングしたところ、テスト開始当初から多くの欠陥を検出し、テスト項目を 50%消化した時点で、重大な欠陥を検出し、ユニット全体に影響するメイン機能の大きな修正を行っていた。そして、その修正を完了した後、直ちに、未消化のテスト項目を実施していた。K君は、①L君の単体テストの実施方法に問題があると考え、やり直しを指示した。
〔結合テストの実施と欠陥発生状況の分析〕
見積り管理を除く三つのコンポーネントについて、結合テストを実施中である。K君は、結合テストにおいて、品質の低いコンポーネントを早い時点で検出して対策を取ることで、工程の遅延を防ぐことを考えた。そこで、テストの実施中から、欠陥の検出状況を、管理図を用いて確認することにした。図2は、結合テストで検出された累積欠陥密度の管理図である。この図の縦軸は、各コンポーネントの結合テストで検出された累積欠陥密度であり、横軸は、結合テストの日程である。結合テストは 9 月 29 日の週から開始し、11 月 17 日の週に完了する予定である。J社の結合テストで検出された累積欠陥密度の過去の実績値から、中央値は 1.4 件/k ステップ、UCL は 1.7 件/k ステップ、LCL は 1.2 件/k ステップである。現在、11 月 9 日であり、週初日が 11 月 3 日の週を終えたところである。結合テストのテスト項目数は J社の目標値を満たしており、消化状況も予定どおりである。

K君は、受注管理が既に UCL を超えているので、原因を調査することにした。表3は、受注管理の結合テストで検出された欠陥の内訳である。

表3のインタフェース誤りは、全て受注管理から出荷管理へのデータ連携テストで検出されたもので、全て双方のコンボーネントのユニットに修正が必要な久陥であったが、欠陥件数は、データの送出側である受注管理だけに計上していた。
K君は、出荷管理と顧客管理について、図2の破線のように、10月27日と11月3日の週の累積欠陥密度を直線で結び、11月17日以降まで延長させて、11月17日の週の累積欠陥密度を推測した。そして、両コンポーネントの累積欠陥密度は、ともに、結合テストが完了する予定の11月17日の週でも、UCLとLCLの間に収まると予想した。
設問1:
単体テストの方法について、ホワイトボックステスト、ブラックボックステストのテスト項目の作成方法に該当するものを、解答群の中からそれぞれ全て選び、記号で答えよ。
解答群
ア:ユニット内の条件判定の組合せ全てを少なくとも1回は実行する。
イ:ユニットの全ての分岐を少なくとも1回は実行する。
ウ:ユニットの全ての命令を少なくとも1回は実行する。
エ:ユニットへの入力データの値の範囲を分割し、各代表値で実行する。
オ:ユニットへの入力と出力の因果関係を網羅するよう実行する。
模範解答
ホワイトボックステスト:ア、イ、ウ
ブラックボックステスト:エ、オ
解説
解答の論理構成
- 問題文では「J社では、単体テストとして、ホワイトボックステストとブラックボックステストを行う。」と明記されています。したがって、両者の典型的なテスト項目作成技法を識別することが要求されています。
- ホワイトボックステストはソースコードの内部構造を基に網羅性を測る手法です。典型例として
- ア:「ユニット内の条件判定の組合せ全てを少なくとも1回は実行する。」(条件組合せ網羅)
- イ:「ユニットの全ての分岐を少なくとも1回は実行する。」(分岐網羅)
- ウ:「ユニットの全ての命令を少なくとも1回は実行する。」(命令網羅)
が挙げられ、いずれも内部ロジックの“網羅率”を量的に保証する観点です。
- 一方、ブラックボックステストは仕様記述や入出力の観点から設計する手法です。代表的なのは
- エ:「ユニットへの入力データの値の範囲を分割し、各代表値で実行する。」(同値分割・境界値分析)
- オ:「ユニットへの入力と出力の因果関係を網羅するよう実行する。」(原因結果グラフ)
であり、プログラム内部を意識せず、外部仕様の正当性を確認します。
- 上記より、模範解答どおり
- ホワイトボックステスト:ア、イ、ウ
- ブラックボックステスト:エ、オ
が論理的に導かれます。
誤りやすいポイント
- 「条件判定の組合せ」と「入力と出力の因果関係」を混同しやすい。前者は内部条件式、後者は仕様レベルの入力–結果マッピングである点を区別する必要があります。
- 「入力データの値の範囲を分割する」技法を“境界値網羅=内部ロジック確認”と誤認し、ホワイトボックスに分類してしまうケースがあります。
- “命令網羅=全命令実行”をブラックボックスだと思い込むミス。内部実装の網羅率を測っている時点でホワイトボックスです。
FAQ
Q: ホワイトボックステストは必ずソースが完成してから行うのでしょうか?
A: ソースが存在しなければ実行できませんが、設計段階でテスト項目を先行作成しておく「テストファースト」も可能です。要は内部構造情報が入手可能かどうかが鍵になります。
A: ソースが存在しなければ実行できませんが、設計段階でテスト項目を先行作成しておく「テストファースト」も可能です。要は内部構造情報が入手可能かどうかが鍵になります。
Q: ブラックボックステストでもコードを参照してはいけないのですか?
A: 「参照してはいけない」ではなく「内部構造を前提にテスト設計しない」が本質です。効率化のためにコードをのぞくこと自体は禁じられていません。
A: 「参照してはいけない」ではなく「内部構造を前提にテスト設計しない」が本質です。効率化のためにコードをのぞくこと自体は禁じられていません。
Q: どちらのテストが欠陥検出に効果的ですか?
A: 一般にホワイトボックスは実装ミス、ブラックボックスは仕様ミスを検出しやすく、両方を組み合わせることで網羅的な品質保証が可能になります。
A: 一般にホワイトボックスは実装ミス、ブラックボックスは仕様ミスを検出しやすく、両方を組み合わせることで網羅的な品質保証が可能になります。
関連キーワード: 命令網羅、分岐網羅、同値分割、境界値分析、原因結果グラフ
設問2:見積り管理の単体テスト結果について、(1)〜(3)に答えよ。
(1)図1の管理図に対する分析結果として正しいものはどれか。解答群の中から全て選び、記号で答えよ。
解答群
ア:P1は、UCLを超えており、調査が必要なユニットである。
イ:P2, P3, P5, P8は、管理限界に収まっているので、品質が保証される。
ウ:P4, P9は、欠陥が少なく、品質が高い。
エ:P6は、UCLをわずかに超えているだけなので、今は調査に時間を掛けず、結合テストで経過を監視する。
オ:P7は、テスト項目の精査を行うべきユニットである。
模範解答
ア、オ
解説
解答の論理構成
-
管理図の基準値を確認
問題文には「中央値は11件/kステップ、UCLは14件/kステップ、LCLは8件/kステップである。」と示されています。
したがって各ユニットの欠陥密度が
• 14より大きい → 上方管理限界を超過(異常値の疑い)
• 8未満 → 下方管理限界を下回る(テスト不足の疑い)
• 8以上14以下 → 管理範囲内(正常値)
と判断できます。 -
選択肢ごとの検証
ア:「P1は、UCLを超えており、調査が必要なユニットである。」
表2より “P1” の欠陥密度は “16.1” 件/kステップで、UCL “14” を超えています。異常値のため調査が必要—正しい。イ:「P2, P3, P5, P8は、管理限界に収まっているので、品質が保証される。」
これらは確かに 8~14 の範囲ですが、管理図は“工程が安定しているか”を見る道具であり、「品質を保証」するものではありません。したがって誤り。ウ:「P4, P9は、欠陥が少なく、品質が高い。」
“P4” は “5.0”、“P9” は “4.4” とLCL “8” を下回ります。欠陥が少ないのではなくテスト網羅が不十分な恐れがあるため、品質が高いと断定できません。誤り。エ:「P6は、UCLをわずかに超えているだけなので、今は調査に時間を掛けず、結合テストで経過を監視する。」
“P6” は “14.1” とUCL “14” を超えています。限界超過は僅差でも直ちに原因究明すべきですから誤り。オ:「P7は、テスト項目の精査を行うべきユニットである。」
“P7” は “6.8” とLCL “8” を下回ります。下方逸脱はテスト不足が疑われ、テスト項目の見直しが必要—正しい。 -
結論
よって正しい組合せは「ア、オ」です。
誤りやすいポイント
- 管理図の目的を「品質保証」と誤認しがちですが、本来は“工程の異常検知”です。正常範囲に入っていても欠陥ゼロとは限りません。
- LCL 未満を「優秀」と早合点するケース。むしろテスト不足・データ収集漏れの疑いが濃いことを忘れがちです。
- UCL 超過を「少しだけなら大丈夫」と軽視するミス。限界値は経験統計から決めているため、僅差でも異常シグナルとなります。
FAQ
Q: 管理図でLCLを下回ったら必ずテスト項目不足と決めつけて良いですか?
A: 必ずしも不足とは限りませんが、まずはテスト網羅率・実行手順に問題がないかを確認するのが定石です。十分網羅されていることを確認してから品質が高いと判断します。
A: 必ずしも不足とは限りませんが、まずはテスト網羅率・実行手順に問題がないかを確認するのが定石です。十分網羅されていることを確認してから品質が高いと判断します。
Q: UCLを超えたユニットは必ず手戻りが必要ですか?
A: 原則として原因調査は必須ですが、単純ミスで即修正できるケースもあります。重要なのは“放置しない”ことで、必要な追加テストや設計見直しの有無を迅速に判断します。
A: 原則として原因調査は必須ですが、単純ミスで即修正できるケースもあります。重要なのは“放置しない”ことで、必要な追加テストや設計見直しの有無を迅速に判断します。
Q: 管理図の中央値・UCL・LCLはどのように設定しますか?
A: 本問のように「過去実績の四分位点」を採用する例や、平均±3σで設定する統計的手法があります。プロジェクト特性やデータ量に応じて決定します。
A: 本問のように「過去実績の四分位点」を採用する例や、平均±3σで設定する統計的手法があります。プロジェクト特性やデータ量に応じて決定します。
関連キーワード: 欠陥密度、管理図、UCL, LCL, ホワイトボックステスト
設問2:見積り管理の単体テスト結果について、(1)〜(3)に答えよ。
(2)表2において、J社の基準に従うと、欠陥密度以外の観点でテストに問題があると考えられるユニットがある。そのユニットのユニットIDを答えよ。また、その理由を20字以内で述べよ。
模範解答
ユニットID:P2
理由:テスト項目数が目標値よりも少ない。
解説
解答の論理構成
- 目標値の確認
【問題文】には「テスト項目の件数は…その目標を1kステップ当たり 100 以上と定めている」とあります。
つまり必要なテスト項目数=ステップ数 ÷ 10 です。 - 各ユニットの実績と比較
表2から「P2」のステップ数は「5,500」、テスト項目数は「490」です。
必要項目数は なので、実績「490」は目標「550」に未達です。 - ほかのユニットはどうか
例として「P1」はステップ数「3,600」で必要項目数「360」、実績「456」で達成。
同様に P3 〜 P10 も計算すると全て達成しており、未達なのは P2 だけです。 - 結論
したがって、問題のあるユニットIDは「P2」、理由は「テスト項目数が目標値よりも少ない」です。
誤りやすいポイント
- 欠陥密度に気を取られてテスト項目数の目標を見落とす。
- 目標値の計算を「100行につき1件」などと誤解し、÷10 を忘れる。
- 「P10」は欠陥密度が高いため目立つが、テスト項目数の観点では目標を満たしている。
FAQ
Q: 目標項目数は端数切り上げですか?
A: 本文は「100 以上」とだけ示しているため、整数計算後にそのまま比較します。
A: 本文は「100 以上」とだけ示しているため、整数計算後にそのまま比較します。
Q: テスト項目数が少ないと具体的にどんなリスクがありますか?
A: 入力組合せが十分に網羅できず、欠陥の取り残しにつながります。
A: 入力組合せが十分に網羅できず、欠陥の取り残しにつながります。
Q: 欠陥密度とテスト項目数、どちらを優先して見るべきですか?
A: 双方重要です。欠陥密度は品質の結果指標、テスト項目数はテストプロセスの量的指標です。
A: 双方重要です。欠陥密度は品質の結果指標、テスト項目数はテストプロセスの量的指標です。
関連キーワード: 欠陥密度、テスト項目数、kステップ、管理図、単体テスト
設問2:見積り管理の単体テスト結果について、(1)〜(3)に答えよ。
(3)本文中の下線①の、L君が行ったユニットP10の単体テストにおける問題点は何か。30字以内で具体的に述べよ。
模範解答
メイン機能修正後に回帰テストを行っていない。
解説
解答の論理構成
- 問題文では、L君の作業状況が次のように記述されています。
――「重大な欠陥を検出し、ユニット全体に影響するメイン機能の大きな修正を行っていた。そして、その修正を完了した後、直ちに、未消化のテスト項目を実施していた。」 - 単体テストでは、コードを大きく修正した場合、修正によって既に実行済みのテスト項目の結果が無効になる可能性があります。そのため、修正前に実施済みだったテスト項目を再実行し、修正が副作用を起こしていないか確認する「回帰テスト」が必須です。
- しかし引用文にあるとおり、L君は修正後「直ちに、未消化のテスト項目」を続行し、再実行(回帰テスト)を行った記載がありません。
- この欠落により、修正によって再混入した欠陥を見逃し、欠陥密度が「UCL を大きく超過しているユニットP10」という結果につながったと推定できます。
- 以上から、L君の問題点は「メイン機能修正後に回帰テストを実施していないこと」です。
誤りやすいポイント
- 「テスト項目を 50%消化した時点で修正」とあるため、残り50%の実施だけで十分と誤解しやすい。
- 表2の「同じテスト項目を複数回実行しても重複してカウントしない」というルールを、再実行自体が不要と解釈してしまう。
- 欠陥密度の上昇=コード品質だけの問題と短絡し、手順不備(回帰テスト漏れ)を見落としやすい。
FAQ
Q: 「同じテスト項目を複数回実行しても重複してカウントしない」とあるが、再実行してはいけないのですか?
A: いけないのではなく、件数を二重計上しないだけです。品質保証の観点では、修正後も再実行して結果を確認する必要があります。
A: いけないのではなく、件数を二重計上しないだけです。品質保証の観点では、修正後も再実行して結果を確認する必要があります。
Q: なぜ回帰テストを怠ると欠陥密度が高くなるのですか?
A: 修正によって新たな欠陥が混入しても再確認されず、そのまま後段工程で検出されるため、ユニット単体テスト段階で欠陥件数が膨れ上がります。
A: 修正によって新たな欠陥が混入しても再確認されず、そのまま後段工程で検出されるため、ユニット単体テスト段階で欠陥件数が膨れ上がります。
Q: 回帰テストはどの範囲まで実施すべきですか?
A: 影響分析に基づき、修正箇所とその周辺、および関連する入出力・制御パスをカバーするテスト項目を再実行するのが一般的です。
A: 影響分析に基づき、修正箇所とその周辺、および関連する入出力・制御パスをカバーするテスト項目を再実行するのが一般的です。
関連キーワード: 回帰テスト、欠陥密度、管理図、ホワイトボックステスト、ブラックボックステスト
設問3:
見積り管理を除く三つのコンポーネントの結合テストにおいて、現状では、検出された欠陥件数が正しく計上されておらず、欠陥件数を修正すると、管理図分析の結果として問題があると考えられるコンポーネントがある。そのコンポーネントを答えよ。また、問題があると考えられる理由を、本文中の字句を用いて20字以内で述べよ。
模範解答
コンポーネント:出荷管理
理由:累積欠陥密度がUCLを超えるから
解説
解答の論理構成
-
欠陥件数の計上誤り
― 【問題文】「表3のインタフェース誤りは、全て受注管理から出荷管理へのデータ連携テストで検出されたもので、…欠陥件数は、データの送出側である受注管理だけに計上していた。」
→ 本来は受信側の「出荷管理」にも同数(12件)計上すべきです。 -
出荷管理の欠陥件数を修正
・現状(11月3日の週)の累積欠陥密度:図2より「出荷管理」=1.2件/kステップ
・ステップ数は表1より「出荷管理」=20,000ステップ=20kステップ
・現状の累積欠陥件数
件
・インタフェース誤り 12 件を加算
件
・修正後の累積欠陥密度
件/kステップ -
管理図との照合
― 【問題文】「UCL は 1.7 件/k ステップ」
→ 1.8件/kステップは UCL を超過。
よって、修正後に管理図で「問題がある」と判定されるのは出荷管理です。
誤りやすいポイント
- 「インタフェース誤り」を両コンポーネントに計上するルールを見落とし、受注管理だけを調整してしまう。
- 累積欠陥密度の換算で、ステップ数を “20,000” ではなく “20” と読み違え、件数計算を誤る。
- 管理図の UCL(1.7)・LCL(1.2)を取り違え、判定を反転させる。
FAQ
Q: 受注管理の欠陥密度も変わりますか?
A: 受注管理は既に 12 件を計上済みなので値は変わりません。
A: 受注管理は既に 12 件を計上済みなので値は変わりません。
Q: 顧客管理はなぜ問題にならないのですか?
A: 計上漏れがなく、修正後も「1.5件/kステップ」程度で UCL(1.7)内に収まるためです。
A: 計上漏れがなく、修正後も「1.5件/kステップ」程度で UCL(1.7)内に収まるためです。
Q: 管理図で将来値を延長する理由は?
A: 進行中でも傾向線を引いて“完了時点のリスク”を早期に予測し、手当てを打つためです。
A: 進行中でも傾向線を引いて“完了時点のリスク”を早期に予測し、手当てを打つためです。
関連キーワード: 欠陥密度、管理図、UCL, インタフェース誤り、結合テスト


