- V 字モデルで、どの設計工程の誤りをどのテストで見つけるかを対応づける
- モジュール結合度 6 段階・強度 7 段階の順序と、受渡し方法からの判定手順
- 命令網羅・判定条件網羅・条件網羅・複数条件網羅の違いと、網羅率の計算の型
- UML の図の種類と、汎化・集約・多重度の読み方
- 信頼度成長曲線とエラー埋込み法によるバグ収束の判定
- 移行方式の選び方と、保守の 4 分類(是正・予防・適応・完全化)
科目 A では直近 10 年(19 回)で 53 問、1 回平均 2.8 問が出ています。得点源はモジュール結合度・強度(5 問)とテストの網羅基準(5 問)の 2 テーマで、この 2 つだけで 53 問中 10 問を占めます。まずここを確実に取り、UML と保守の分類で上積みするのが本章の戦略です。科目 B の「情報システム開発」は 19 回すべて問 8 に置かれており、本章の設計・UML・テストの語彙がそのまま問題文を読む前提になります(解き方は第 24 章)。開発プロセス・アジャイル・構成管理は第 14 章の担当です。
1. 開発工程の全体像と V 字モデル
システム開発は「決める → 分解する → 作る → 組み上げて確かめる → 使い続ける」という一方向の流れです。JIS X 0160(ソフトウェアライフサイクルプロセス)はこの流れをプロセスとして定めており、応用情報ではこのプロセス名がそのまま選択肢になります。まず全体像を 1 枚で押さえます。
V 字モデルは、左側に分解していく工程(要件定義・設計)を、右側に組み上げて確かめる工程(テスト)を並べ、同じ高さのものどうしを対応させた見方です。左で決めたことは、同じ高さの右のテストで確認します。詳細設計の誤りは単体テストで、要件定義の誤りは受入れテスト(資料により運用テストと呼ぶこともあります)で見つかる、という対応関係が試験の論点です。
右側のテスト工程の名前は、JIS X 0160 の呼称と実務での通称が食い違うため、両方を結び付けて覚えます。検証(verification)は「決めた仕様どおりに作れているか」、妥当性確認(validation)は「利用者の本来の目的に合っているか」で、対象が違います。仕様どおりでも業務で使えなければ妥当性確認では不合格です。
| 工程(JIS X 0160) | 主な成果物 | 対応するテスト | 実務での通称 |
|---|---|---|---|
| システム要件定義 | システム要件定義書 | システム検証テスト | 受入れテスト・運用テスト |
| システム設計(システム方式設計) | システム構成品目の割振り | システム統合テスト | 総合テスト |
| ソフトウェア要件定義 | ソフトウェア要件定義書 | ソフトウェア検証テスト | システムテスト |
| ソフトウェア方式設計 | ソフトウェア要素とインタフェース | ソフトウェア統合テスト | 結合テスト |
| ソフトウェア詳細設計 | ソフトウェアユニット仕様書 | ソフトウェアユニットのテスト | 単体テスト |
2. 要件定義 ― 何を作るかを確定する
要件定義はシステム要件定義とソフトウェア要件定義の 2 段階に分かれ、どちらも「境界の定義 → 要件の定義 → 要件の評価 → 共同レビュー」という同じ 4 つのタスクで進みます。境界の定義とは、利用の状況と運用シナリオをもとに「どこまでをシステムが担い、どこからを人が担うか」を線引きする作業です。ソフトウェア要件定義では業務モデルと論理データモデルを作り、5W2H(Why・When・Where・Who・What・How・How much)の観点で文書化します。
機能要件と非機能要件
機能要件は「業務として何ができるか」、非機能要件は「どれだけの品質・性能・運用しやすさで動くか」です。非機能要件は放置すると後工程で炎上するため、IPA は非機能要求グレードという 6 つの大項目のひな型を公開しています。要件定義の抜けを問う設問はこの 6 分類で整理すると答えやすくなります。
| 非機能要求グレードの大項目 | 決めること | 要件の書き方の例 |
|---|---|---|
| 可用性 | 稼働時間・目標復旧時間・冗長化 | 稼働率 99.9%、RTO 4 時間 |
| 性能・拡張性 | レスポンスタイム・スループット・将来の増設 | 検索の応答 3 秒以内、5 年で 3 倍に耐える |
| 運用・保守性 | 監視・バックアップ・保守の形態とタイミング | 日次バックアップ、遠隔保守可 |
| 移行性 | 移行方式・移行データ量・移行期間 | 段階移行、3 か月で全店舗 |
| セキュリティ | 認証・アクセス制御・ログ・脆弱性対策 | 多要素認証、操作ログ 1 年保存 |
| システム環境・エコロジー | 設置環境・耐震・消費電力 | 消費電力を現行比 20% 削減 |
定義した要件は、共同レビューの前に評価基準に照らします。評価の観点は双方向の追跡可能性(トレーサビリティ)、一貫性、テスト可能性、システム設計の実現可能性、運用及び保守の実現可能性です。要件と設計・テストケースの対応表をトレーサビリティマトリクスと呼び、要件の取りこぼしを機械的に検出できるようにします。「取得ニーズとの一貫性が取れているか」を問う設問が H31 春に出ています。
業務分析・要件定義の技法
| 技法 | 何を表すか | 試験での要点 |
|---|---|---|
| ヒアリング | 利用者から要求を聞き取る | ヒアリング計画と議事録を残す |
| ユースケース図 | アクターとシステムのやり取り | 登場するのは利用者の目的であって画面ではない |
| ユーザーストーリー | 「誰が・何を・なぜ」の短い要求 | エピック・ストーリーポイント・プロダクトバックログ |
| ペルソナ | 役割ごとの具体的な仮想人物像 | R7 秋に出題。アクター(役割)との違いに注意 |
| モックアップ・プロトタイプ | 外部仕様を早期に評価して手戻りを防ぐ | 垂直型(一部機能を深く)と水平型(画面を広く浅く) |
| DFD | データの流れ(プロセス・データストア・源泉と吸収) | コンテキストダイアグラムから段階的詳細化する |
| E-R 図 | 実体と実体間の関連 | データ中心設計の出発点(第 9 章と共通) |
| CRUD マトリクス | 機能とデータの生成・参照・更新・削除の対応 | R3 秋に出題。生成する機能が無いデータは要件漏れ |
| 状態遷移図・状態遷移表 | 事象(イベント)で状態が移り変わる仕様 | 事象駆動の仕様に使う。DFD・E-R 図では表せない |
| 決定表(デシジョンテーブル) | 条件の組合せと実行する動作の対応 | R5 春に出題。条件の組合せ漏れを潰す |
| SysML | UML を拡張したシステムズエンジニアリングの表記 | ハードウェアを含むシステム全体を記述する |
状態遷移表と状態遷移図
状態遷移表は行が現在の状態、列が事象、セルが遷移先の状態です。同じ仕様を図にしたものが状態遷移図で、試験では「表を渡され、事象を順に適用した後の状態を答える」形で出ます(R3 春 問 47)。音楽プレーヤの例で追ってみます。
| 現在の状態\事象 | a: 再生ボタン | b: 一時停止ボタン | c: 停止ボタン |
|---|---|---|---|
| 停止 | 再生 | (無視) | (無視) |
| 再生 | (無視) | 一時停止 | 停止 |
| 一時停止 | 再生 | (無視) | 停止 |
決定表は条件の組合せを列(規則)にした表です。条件部に Y/N、動作部に X(実行する)/−(実行しない)を書き、条件が n 個なら規則は最大 2 の n 乗列になります。列が埋まっていない箇所が仕様の抜けです。
| 条件・動作 | 規則 1 | 規則 2 | 規則 3 | 規則 4 |
|---|---|---|---|---|
| 購入金額が 5,000 円以上 | Y | Y | N | N |
| 会員である | Y | N | Y | N |
| 送料を無料にする | X | X | X | − |
| 送料 500 円を加算する | − | − | − | X |
3. 設計 ― 要件を構造に落とす
設計は 3 段階で粒度を落としていきます。システム設計(システム方式設計)でハードウェア・ソフトウェア・サービス・手作業への振り分けを決め、ソフトウェア方式設計でソフトウェア要素とその間のインタフェースを決め、ソフトウェア詳細設計でソフトウェアユニット(プログラム)の仕様まで落とします。「最上位の設計を行うのはどの下位プロセスか」を問う設問は、この並びの 2 段目を答えさせるものです。
システム処理方式とアーキテクチャ
| 方式・パターン | 要点 | 採用の理由 |
|---|---|---|
| 集中処理/分散処理 | 1 か所で処理するか、複数拠点に分けるか | 運用の一元化か、負荷分散と可用性か |
| クライアントサーバ/Web システム | 処理をどこに置くか。Web は画面配布が不要 | 導入・更新のコスト |
| マイクロサービスアーキテクチャ | 業務機能ごとに独立したサービスへ分割し、API で連携する | サービス単位で開発・デプロイ・スケールできる |
| サービスメッシュ | サービス間通信の制御・監視を通信基盤側に寄せる | 各サービスに通信制御を実装しないで済む |
| サーキットブレーカー | 連続失敗した呼出しを一定時間遮断する | 障害の連鎖(カスケード障害)を止める |
| サーバレスアーキテクチャ | サーバの管理をせず、イベント駆動で関数を実行する | 運用負荷と待機コストの削減 |
| レイヤアーキテクチャ | プレゼンテーション層・業務ロジック層・データアクセス層のように役割で層を積む | 層をまたぐ影響を上下 1 段に閉じ込める |
| MVC モデル | Model(業務処理・データ)・View(表示)・Controller(入力の受付と振分け)に分ける | 表示の変更が業務処理に波及しない |
| クリーンアーキテクチャ | 業務ルールを中心に置き、依存の向きを外側から内側へ一方向にする | フレームワークや DB の入替えに強い |
| PWA(Progressive Web Apps) | サービスワーカーによりオフライン起動やバックグラウンド同期ができる Web アプリ | ネイティブアプリの配布・審査を避けたい |
Web アプリのインタフェース設計では、資源を URI で表し、HTTP メソッド(GET・POST・PUT・DELETE)で操作を表すREST の考え方が基本になります。API 設計では、資源の単位・応答形式(JSON)・エラー時の状態コード・バージョニングを決めます。画面や帳票のレイアウト設計、UX デザインの詳細は第 8 章が扱います。
設計手法の系統
| 手法 | 着目点 | 代表的な道具 |
|---|---|---|
| プロセス中心設計 | 業務の処理手順から分割する | DFD、機能階層図 |
| データ中心設計(DOA) | 業務で扱うデータ構造から設計する。一事実一箇所 | E-R 図、正規化 |
| 構造化設計 | 機能を階層に分解し、段階的詳細化する | 流れ図、構造化チャート、NS 図、HIPO、ジャクソン法、ワーニエ法 |
| 構造化分析法 | DFD で業務を段階的詳細化し、最下位プロセスの処理内容をミニスペックに書く | DFD、ミニスペック |
| オブジェクト指向設計 | データと操作をまとめたクラスに分ける | UML、SOLID、デザインパターン |
| ドメイン駆動設計(DDD) | 業務領域(ドメイン)のモデルを中心に据える | ユビキタス言語、コンテキストマップ、値オブジェクト |
部品化と再利用では、内部構造を見せて改変できるホワイトボックス型と、インタフェースだけを公開するブラックボックス型を区別します。既存資産をそのまま使いつつ外側に新しいインタフェースを被せる手法がレガシーラッピング、市販の既製品を購入して使う方針が COTS(Commercial Off-The-Shelf)です。設計上のよくある問題と解法の定石をまとめたものがデザインパターンで、GoF の 23 パターンは生成・構造・振舞いの 3 分類に整理されています。
JIS X 25010 の品質特性
要件定義と設計で「どの品質をどこまで作り込むか」を決める共通のものさしが JIS X 25010 です。製品品質モデルは 8 特性、利用時の品質モデルは 5 特性で、目標値の例からどの特性かを当てさせる形で出ます。
| 製品品質モデルの特性 | 意味 | 目標値の例 |
|---|---|---|
| 機能適合性 | 明示・暗黙のニーズを満たす機能を提供する度合い | 要求した機能が過不足なく動く |
| 性能効率性 | 資源量に対する性能の度合い | 同時 500 人で応答 2 秒以内 |
| 互換性 | 他製品と情報を共有し、共存できる度合い | CSV で他社システムと連携できる |
| 使用性 | 習得性・運用操作性・アクセシビリティなど | 初心者が 1 時間以内に基本操作を習得できる |
| 信頼性 | 可用性・回復性・障害許容性 | 月間停止 30 分以内 |
| セキュリティ | 機密性・インテグリティ・否認防止など | 権限外の参照を遮断する |
| 保守性 | 解析性・修正性・試験性・モジュール性 | 1 機能の改修を 3 人日以内で行える |
| 移植性 | 別環境へ移せる度合い(適応性・設置性) | 別クラウドへ 1 か月で移せる |
4. モジュール分割 ― 結合度と強度
この節が本章で最も出る領域です。直近 10 年 19 回のうち結合度・強度は 5 問出ており、R4 春・R5 春・R6 春は 3 回連続で春の問 46 に置かれました。まず分割の技法、次に分割の良し悪しを測る 2 つのものさし(結合度と強度)という順で押さえます。
モジュール分割技法
| 技法 | 着目するもの | 分け方 |
|---|---|---|
| STS 分割 | データの流れ | 入力(Source)・変換(Transform)・出力(Sink)の 3 つに切る |
| TR 分割 | データの流れ | トランザクション(処理要求)の種類ごとに切る |
| 共通機能分割 | データの流れ | 複数の箇所から呼ばれる共通処理を独立させる |
| ジャクソン法 | データ構造 | 入力と出力のデータ構造を対応づけてプログラム構造を導く |
| ワーニエ法 | データ構造 | 入力のデータ構造を「いつ・何回」で分解してプログラム構造を導く |
結合度と強度 ― 独立性を測る 2 つのものさし
良いモジュール分割とは独立性が高いこと、つまり結合度が低く、強度(結束性)が高いことです。結合度はモジュール間の依存の強さ、強度は 1 つのモジュール内部のまとまりの良さを表します。名前と順序だけでなく、「何をどう受け渡すか」で判定できるようにしておきます。
判定の型: 受渡し方法からモジュール結合度を決める
上から順に当てはまるかを見て、最初に当たったものが結合度です(上ほど結合度が強い=悪い)。
- 相手モジュールの内部(内部の命令や変数)を直接参照している → 内容結合
- 複数のモジュールが共通の大域データ領域をまとめて参照している → 共通結合
- 外部宣言した単一のデータ項目だけを共有している → 外部結合
- 引数に処理の切替えを指示する制御情報(フラグ)が含まれる → 制御結合
- 引数が構造体・レコードで、受け手が使わない項目まで渡している → スタンプ結合
- 引数が受け手の使うデータ項目だけである → データ結合(最も結合度が低い)
例題: 呼出し側が「顧客レコード全体」を渡し、呼出された側は住所だけを使う。→ 手順 5 に当たるのでスタンプ結合。渡すのを住所だけに変えればデータ結合まで下げられます。
強度の側も同じ要領で、「1 つのモジュールが何を理由にまとまっているか」で判定します。単一の機能のためなら機能的強度、同じデータ構造を扱う複数の機能をまとめて内部データを隠蔽していれば情報的強度、初期化処理のように「同じタイミングで実行する」だけの理由で集めていれば時間的強度、引数のフラグで似た機能を選ばせていれば論理的強度です。
分割の量も評価対象です。モジュールが直接・間接に呼び出す範囲を制御領域、そのモジュールの変更が影響を及ぼす範囲を影響領域と呼び、影響領域が制御領域の中に収まっている分割が望ましいとされます。モジュール仕様の記述には、流れ図のほか NS 図(Nassi-Shneiderman 図)、PAD(Problem Analysis Diagram)、HCP チャート、PSD(Program Structure Diagram)、DSD(Design Structure Diagram)、SPD(Structured Programming Diagrams)、決定表が使われます。
5. オブジェクト指向設計と UML
オブジェクト指向はデータ(属性)と操作(メソッド)を 1 つのクラスにまとめ、外部には必要な操作だけを見せるという考え方です。科目 A では直近 10 年で 3 問、科目 B ではクラス図を読ませる問題が直近 5 回のうち 3 回出ており、この節は両方の土台になります。
| 概念 | 意味 | 試験での問われ方 |
|---|---|---|
| カプセル化 | 属性を隠し、公開したメソッド経由でのみ操作させる | 情報隠蔽。モジュール強度でいう情報的強度と同根 |
| 継承(インヘリタンス) | スーパークラスの属性・メソッドをサブクラスが引き継ぐ | 汎化(is-a 関係)として図で問われる |
| 多相性(ポリモーフィズム) | 同じメッセージに対し、クラスごとに異なる振る舞いをする | 「同名のメソッドが実装ごとに違う結果を返す」 |
| オーバーライド | サブクラスでスーパークラスのメソッドを再定義する | R6 春に出題。多相性を実現する仕組み |
| オーバーロード | 同名のメソッドを引数の型・個数で使い分ける | オーバーライドとの取り違えが定番の誤答 |
| 抽象クラス | 実装のないメソッドを含み、インスタンス化できないクラス | 共通処理を親に集約する設計理由を書かせる(科目 B) |
| クラスライブラリ | 再利用可能なクラスをまとめた部品集 | H28 秋に出題 |
設計原則としてはSOLID(単一責任・開放閉鎖・リスコフの置換・インタフェース分離・依存性逆転の 5 原則)が用語例に挙がっています。名称と「1 クラスの責任は 1 つ」「拡張には開き、修正には閉じる」という趣旨を押さえておけば足ります。
UML の図の種類
UML の図は構造図(静的に何でできているか)と振る舞い図(動的にどう動くか)の 2 系統に分かれます。試験では図名の入れ替えが定番の誤答肢なので、まず系統で切り分けます。
| 図 | 何を表すか | 読み方の要点 |
|---|---|---|
| クラス図 | クラスの属性・操作と、クラス間の関係 | 登場するのは型。矢印の向きは子から親 |
| オブジェクト図 | ある時点のインスタンスとその間のリンク | R7 秋に出題。具体的な値を持つ点がクラス図との違い |
| ユースケース図 | アクターとシステムが提供する機能の関係 | 要件定義で使う。内部構造は表さない |
| アクティビティ図 | 処理の制御の流れ。フォークとジョインで並行処理を表す | R2 10 月・R3 秋に連続出題。並行処理が識別点 |
| ステートマシン図 | 1 つのオブジェクトの状態と、事象による遷移 | 状態遷移図の UML 版。主語は状態 |
| シーケンス図 | オブジェクト間のメッセージのやり取りを時系列で | 縦がライフライン(時間)、横が呼出し |
| コミュニケーション図 | 同じやり取りを、オブジェクトの配置と番号付きメッセージで | シーケンス図と情報は等価。時間軸を持たない |
クラス間の関係と多重度
クラス図で最も問われるのが関係の種類です。汎化は「〜の一種(is-a)」、集約は「〜を持つ(has-a)」で部分が単独でも存在できる、コンポジションは集約のうち全体と部分の生存期間が一致するものです。多重度は関連の線の両端に書き、1(ちょうど 1)、0..*(0 個以上)、1..*(1 個以上)を読み分けます。
6. 実装とテスト ― 網羅基準とテストケース設計
実装・構築の作法
実装工程は「ソフトウェアユニットの作成 → テスト手順とテストデータの作成 → ユニットのテスト → 利用者用文書類の更新 → コードとテスト結果の評価」というタスクで進みます。品質を人の注意力に頼らないために、規約と道具で機械的に潰すのが基本方針です。
プログラム言語の選択は、処理方式・実行環境・既存資産・技術者の確保しやすさから決めます。手続型のほかに、宣言的に規則を書く論理型プログラミング、複数の処理を同時に走らせる並列処理プログラミング、ログ出力のような横断的関心事を本体から切り離して書くアスペクト指向プログラミングがあります。2 人 1 組で 1 つのコードを書くペアプログラミングは、書きながらレビューする効果を狙ったプラクティスです(XP のプラクティスとしての位置づけは第 14 章)。
| 手段 | 内容 | 狙い |
|---|---|---|
| コーディング標準 | インデンテーション、ネストの深さ、命名規則、使用禁止命令 | 読み手が変わっても解析しやすくする(保守性) |
| コーディング支援 | コード補完、オートインデント、シンタックスハイライト、ブレークポイント | 単純な打ち間違いを実行前に減らす |
| 静的解析 | 実行せずにソースを解析し、未初期化変数や規約違反を検出 | テストで見つけにくい欠陥を早く見つける |
| デバッグ | デバッガ、トレーサー、スナップショット、アサーション、机上デバッグ | 欠陥の位置を特定する |
| コードレビュー | コードインスペクション、ピアコードレビュー、メトリクス計測 | 規約遵守・詳細設計との一致・効率性の確認 |
| ローコード/ノーコード開発 | 画面部品の組合せで作る。生産性は高いが複雑なロジックと移行に弱い | R5 秋に出題。適用範囲の見極めが論点 |
| 生成 AI の活用 | 生成されたコードの妥当性・ライセンス・機密情報の入力可否を人が確認する | 出力をレビュー対象として扱う |
計算の型: サイクロマティック複雑度
C = L − N + 2(L: 制御フローグラフの辺の数、N: 節点の数)。分岐(判定)の数 + 1 でも同じ値になります。
- 制御フローグラフの辺と節点を数える: 辺 12 本、節点 10 個
- 公式に当てはめる: 12 − 10 + 2
- 答え: 4。判定が 3 個なら 3 + 1 = 4 と検算できる
値が大きいほど通すべき経路が多く、テスト工数と保守コストが増えます。しきい値(10 など)を超えたモジュールを分割対象にする、という使い方をします。科目 B(H30 春)で出題されました。
テストの階層
テストは小さい単位から大きい単位へ積み上げます。どの工程の誤りを拾うテストかは、図 13-1 の V 字の対応で決まります。
| テスト | 実施者 | 確認すること | 主な技法 |
|---|---|---|---|
| ユニット(単体)テスト | 開発者 | ユニット仕様書どおりに動くか | ホワイトボックステスト |
| ソフトウェア統合(結合)テスト | 開発者 | ユニット間のインタフェースが合うか | スタブ・ドライバ、ブラックボックス |
| ソフトウェア検証テスト | 供給者 | ソフトウェア要件どおりか | 機能・性能・負荷・セキュリティ |
| システム統合・検証テスト | 供給者 | ハードウェア・手作業も含めてシステム要件を満たすか | 回復テスト、運用テスト |
| 受入れテスト(妥当性確認) | 取得者(利用者) | 業務目的を達成できるか | 実業務データ、ベータテスト、使用性テスト |
| 回帰(リグレッション)テスト | 開発者 | 修正が既存機能を壊していないか | 自動化して修正のたびに流す |
ホワイトボックステスト ― 網羅基準
ホワイトボックステストは内部の制御構造を見てテストケースを作ります。どこまで通せば十分とするかの基準が網羅基準で、直近 10 年で 5 問と本章の最頻出テーマの 1 つです。同じ判定文に対して 4 つの基準が何ケースを要求するかを、1 枚で比較します。
判定の型: 網羅基準ごとの必要テストケース数
- 命令網羅(C0): すべての命令を 1 回以上実行する。分岐先の処理が 2 つあるなら 2 ケース
- 判定条件網羅(C1・分岐網羅): 各判定の結果を真・偽とも 1 回以上取る。判定 1 個なら 2 ケース
- 条件網羅: 判定を構成する個々の条件の真・偽を 1 回以上取る。判定結果は問わない。条件 2 個なら 2 ケースで足りる
- 複数条件網羅: 条件の真偽の全組合せを取る。条件 n 個なら 2n ケース(短絡評価や実行不可能な組合せがある場合はこの限りではありません)
例題: if (x > 0 かつ y > 0) の判定で複数条件網羅を満たす最小ケース数は。→ 条件は 2 個なので 22 = 4 ケース。真偽の組合せ(真真)(真偽)(偽真)(偽偽)を用意します。
網羅の達成度は網羅率(カバレージ)で測ります。C0 が 100% でも C1 が 100% とは限らない、というのが計算問題の急所です。
計算の型: 網羅率(カバレージ)
網羅率 = 通過した項目数 ÷ 全項目数 × 100(%)。C0 は命令を、C1 は判定の分岐(真・偽の枝)を数えます。
- 分母を確定する: 命令 8 個、分岐 10 本
- 実行結果から通過数を数える: 命令 8 個、分岐 8 本
- C0 = 8 ÷ 8 × 100 = 100%
- C1 = 8 ÷ 10 × 100 = 80%
この「C0 は満点だが C1 は未達」という組合せが R4 秋で出題されました。C0 が 100% だから十分、と結論する肢は誤りです。
ブラックボックステスト ― 入力と出力だけで作る
ブラックボックステストは内部構造を見ず、仕様上の入力と期待する出力だけでテストケースを作ります。結合テスト以降の主役です。
| 技法 | テストデータの作り方 | 例(入力が 1 以上 100 以下のとき) |
|---|---|---|
| 同値分割(同値分析法) | 同じ扱いになる入力の集まり(同値クラス)から代表値を 1 つ選ぶ | 有効クラスから 50、無効クラスから −5 と 200 |
| 境界値分析(限界値分析法) | 同値クラスの境界とその両隣を選ぶ | 0、1、100、101 |
| 決定表 | 条件の組合せを列挙し、動作が変わる組合せを選ぶ | 条件 3 個なら最大 8 列 |
| 原因結果グラフ法 | 原因(入力条件)と結果(出力)の論理関係を図にし、決定表へ変換する | 複数条件が絡む仕様の抜けを見つける |
| オールペア法(実験計画法・直交表) | すべての組合せでなく、2 因子の全ペアを満たす組合せに絞る | 組合せ爆発を抑えつつ多くの欠陥を拾う |
| 状態遷移テスト | 状態遷移表の遷移をすべて 1 回以上通す | 図 13-2 の矢印を漏れなく通す |
| エラー推測 | 経験から誤りが出やすい入力を狙う | 空文字、最大桁、全角混在、0 除算 |
| ドメイン分析テスト | 複数変数の境界を on・off・in の観点で組合せる | 科目 B(H29 秋)で出題 |
結合テストの統合順序 ― スタブとドライバ
ユニットを組み上げるとき、まだできていない相手の代わりに仮のモジュールを用意します。呼ばれる側(下位)の代わりがスタブ、呼ぶ側(上位)の代わりがドライバです。上から組むトップダウンテストではスタブ、下から組むボトムアップテストではドライバが必要になります。
| 統合の方式 | 必要な仮モジュール | 長所 | 短所 |
|---|---|---|---|
| トップダウンテスト | スタブ | 上位の制御構造・インタフェースを早く検証できる | スタブの作成数が多くなる |
| ボトムアップテスト | ドライバ | 下位の部品を確実に固められる。並行して進めやすい | 全体の動作確認が最後になる |
| ビッグバンテスト | 不要 | 準備が少ない | 欠陥の位置を切り分けられない |
| サンドイッチテスト(折衷法) | スタブとドライバの両方 | 上下から同時に進めて期間を短縮できる | 準備するものが最も多い |
システム検証テストの種類
| テスト | 確認すること |
|---|---|
| 機能テスト | 要件どおりの機能が動くか |
| 性能テスト | 応答時間・スループットが目標値を満たすか |
| 負荷テスト | 想定最大の負荷をかけても性能を保てるか |
| ストレステスト | 想定を超える負荷をかけたときの壊れ方が妥当か |
| セキュリティテスト | 脆弱性がないか。ファジングは問題を起こしそうなデータを大量に送って異常を観測する(R5 秋に出題) |
| 回復テスト | 障害発生後に規定時間内で復旧できるか |
| 操作性テスト(使用性テスト) | 利用者が迷わず操作できるか |
| 探索的テスト | 台本を作らず、結果を見ながら次のテストを決めていく |
テストの実行は自動化して回帰テストを毎回流せるようにするのが定石です。テストデータジェネレーター、シミュレーター、テストベッド(試験環境)といった道具が用語例に挙がっています。継続的インテグレーション(CI)による自動実行は第 14 章が扱います。
7. 品質評価とレビュー
作ったものが十分な品質かは、レビューという人の目と、メトリクスという数字の 2 系統で判断します。どちらも科目 A・科目 B の両方で問われます。
レビュー技法
レビューの目的はその工程の中で問題点を発見し、後工程へ持ち出さないことです。技法は「誰が進行し、どこまで公式に記録するか」で区別します。
| 技法 | 進め方 | 識別のキーワード |
|---|---|---|
| インスペクション | モデレーターが主導し、事前配布・役割分担・公式な記録と是正確認まで行う最も formal な方式 | モデレーター、公式記録、是正の追跡 |
| ウォークスルー | 作成者が説明し、参加者が質問して欠陥を洗い出す。作成者主導で軽量 | 作成者が説明する |
| ラウンドロビンレビュー | 参加者が順番に司会と説明を担当し、全員が主体的に関わる | 持ち回り |
| パスアラウンド | 成果物を回覧して個別にコメントをもらう。集まらない | 回覧 |
| ピアレビュー | 同僚(対等な立場)どうしで相互に確認する | 同僚間 |
| デザインレビュー | 設計工程の成果物を対象に、設計段階で問題点を検出する | R7 春に出題。目的は「設計工程内での発見」 |
| 共同レビュー | 取得者と供給者が合同で実施する。要件定義・設計の各工程末に置く | 取得者と供給者 |
インスペクションの役割は、モデレーター(計画・進行・是正の確認)、作成者、読み手(成果物を読み上げる)、記録係、レビューアに分かれます。集合の場では欠陥の指摘までを行い、修正方法の議論はしないのが原則です。修正の議論を始めると時間が発散し、指摘の網羅性が落ちるためで、科目 B(R4 秋)でこの原則が問われました。修正によって新たに生まれる欠陥を二次欠陥と呼び、修正後の再レビューと回帰テストで拾います。
品質メトリクスとバグ収束の判定
| 指標 | 求め方 | 読み方 |
|---|---|---|
| テスト密度 | テストケース数 ÷ 規模(キロ行・ファンクションポイント) | 低すぎればテスト不足、高すぎれば仕様が複雑すぎる疑い |
| バグ密度(欠陥密度) | 検出欠陥数 ÷ 規模 | 他モジュールと比べて突出していれば設計を疑う |
| 指摘密度 | レビュー指摘件数 ÷ 規模 | レビューの実施状況を測る(科目 B R4 秋) |
| 管理図の UCL・LCL | 実績から上方管理限界と下方管理限界を引く | 大きすぎても小さすぎても原因を調査する対象になる |
| バグ曲線・信頼度成長曲線 | 累積検出欠陥数を時間軸に並べる | S 字(ゴンペルツ曲線・ロジスティック曲線)で飽和を見る |
計算の型: エラー埋込み法
意図的に既知のエラーを埋め込み、その発見割合から真のエラー総数を推定します。
真のエラー総数 = 発見した真のエラー数 × 埋込みエラー総数 ÷ 発見した埋込みエラー数
- 与えられた数を整理する: 埋込み 20 個、発見した埋込み 12 個、発見した真のエラー 15 個
- 発見率は埋込みと真のエラーで等しいと仮定する: 12 ÷ 20 = 0.6
- 真のエラー総数 = 15 × 20 ÷ 12 = 25 個
- 残存する真のエラー = 25 − 15 = 10 個
問われるのは多くの場合残存数です。手順 3 の総数(25)で止めると誤答になります。R7 秋 問 48 で出題されました。
8. 導入・受入れ・保守・廃棄
導入と移行
導入では、実環境への設置と新旧システムの切替えをどう行うかを導入計画にまとめます。移行方式の選択は「業務を止められる時間」と「二重運用のコスト」のトレードオフです。
| 移行方式 | やり方 | 長所 | 短所 |
|---|---|---|---|
| 一斉移行(一括移行) | ある時点で全業務・全拠点を新システムへ切り替える | 期間が短く、二重運用のコストが不要 | 失敗時の影響が全体に及ぶ。切戻し手順が必須 |
| 段階移行 | 業務・拠点・機能を分けて順に切り替える | 影響範囲を限定でき、問題を小さく検知できる | 期間が長く、新旧の連携(つなぎ)が必要 |
| 並行移行(並行稼働) | 一定期間、新旧を同時に動かして結果を突き合わせる | 結果の照合で移行の妥当性を確認できる | 運用負荷とコストが最大 |
リリースの方式としては、本番と同構成の環境を 2 つ用意して切り替えるブルーグリーンデプロイメント(R7 春に出題)、一部の利用者にだけ新版を出して様子を見るカナリアリリースがあります。どちらも切戻しを容易にする狙いです。移行前には移行リハーサルを行い、手順と所要時間を実測します。
受入れ支援と教育訓練
供給者は取得者の受入れレビューと受入れテストを支援します。合否は受入れ基準(検収基準)に照らして判定し、結果を文書化します。利用者用文書類(利用者マニュアル)は設計時に暫定版を作り、開発の進行に合わせて更新します。ウィザード・チュートリアル・オンラインヘルプのようにソフトウェアに組み込む組込文書類と、冊子として分ける分離形文書類があります。教育訓練の効果測定には、反応・学習・行動・結果の 4 段階で測るカークパトリックの教育効果の 4 段階モデルが用語例に挙がっています。
保守と廃棄
保守は何をきっかけに、何のために直すかで 4 つに分類します。この分類は直近 10 年で 2 問出ており、リバースエンジニアリングによる文書再作成がどれに当たるかが定番の論点です。
| 保守の種類 | きっかけ | 目的 | 例 |
|---|---|---|---|
| 是正保守 | 障害が発生した | 発見された問題を除去する | 本番で出た不具合の修正 |
| 予防保守 | 障害が起きる前 | 潜在的な障害が顕在化する前に検出・除去する | 潜在欠陥の先行修正、老朽部品の交換 |
| 適応保守 | 外部環境が変わった | 変化した環境で使い続けられるようにする | OS のバージョンアップ対応、税率改定対応 |
| 完全化保守 | 環境も障害も変わらない | 性能・保守性を改善する | チューニング、ソース解析による仕様書の再作成 |
既存のソースコードや実行モジュールを解析して設計仕様を復元する作業がリバースエンジニアリングです。復元した仕様をもとに作り直すのがリエンジニアリング、別のプラットフォームへ移し替えるのがマイグレーションです。リファクタリングは外部から見た振る舞いを変えずに内部構造だけを改善する作業で、変更前後で結果が変わらないことを回帰テストで担保します。
保守の手順は、開発から成果物を引き継ぐ準備 → 問題報告・修正依頼の分析 → 修正の実施 → 保守レビューと受入れ → 再発防止策 → 移行、と進みます。再発防止では FTA・FMEA・STAMP/STPA などの解析技法で根本原因を洗い出します。廃棄では、廃棄計画を立てて利用者へ通知し、新旧の並行運用と教育訓練を経て旧環境を停止します。廃棄後もデータの保持とアクセス可能性を確保しておく点が用語例に挙げられています。
出題頻度は低いが 1 行で押さえる用語
| 用語 | 要点 |
|---|---|
| アシュアランスケース | 安全性などの要件が満たされることを、根拠を示して論証した文書 |
| イネーブリングシステム | 開発・テスト・運用を成立させるために必要な施設・設備・機器 |
| ペトリネット | 場所とトークンの移動で並行動作と同期を表すモデル(R1 秋に出題) |
| フールプルーフ | 利用者が誤操作しても危険な状態にならないようにする設計(H30 秋に出題) |
| テストオラクル | テストの期待結果を与える基準や仕組み。これがないと合否を判定できない |
| ミューテーションテスト | プログラムをわざと改変し、テストがその差異を検出できるかでテストの質を測る |
| 再帰戦略(回帰戦略) | 統合の途中で下位が変わったとき、統合済みの範囲をどこまで再テストするかの方針 |
| オンサイト保守/遠隔保守 | 技術者が現地で行う保守と、通信回線を経由して行う保守 |
| 完整性(integrity) | 修正や廃棄の後も、システムと組織の運用が矛盾なく保たれている状態 |
| データベース方式の決定 | RDB・NDB・OODB・XML データベース・インメモリ・分散・NoSQL から選ぶ(詳細は第 9 章) |
| サブルーチン/再帰プログラム | 共通処理の切り出しと、自分自身を呼び出す構造。領域設計・論理設計と併せて分割手法の用語 |
| IoT を含む要件 | センサや機器側の制約(通信量・電源・設置環境)を要件と設計に織り込む |
ひっかけポイント
理解度チェック(科目 A 形式)
Q1. モジュール間のデータの受渡し方法として、モジュール結合度が最も低いものはどれか。
- 共通の大域データ領域を宣言し、双方のモジュールがそれを直接参照する。
- 呼出し側が、呼出された側の処理を切り替えるためのフラグを引数で渡す。
- 呼出し側が、呼出された側が使用するデータ項目だけを引数で渡す。
- 呼出された側が、呼出し側のモジュール内部の変数を直接書き換える。
正解: ウ 必要なデータ項目だけを引数で渡すのがデータ結合で、6 段階のうち最も結合度が低い(独立性が高い)方式です。ア は共通結合、イ は制御結合、エ は内容結合で、いずれもこれより結合度が高くなります。
Q2. あるデータ構造と、それを操作する複数の機能を 1 つのモジュールにまとめ、そのデータ構造を外部から直接参照できないようにした。このモジュールの強度(結束性)はどれか。
- 時間的強度
- 情報的強度
- 論理的強度
- 手順的強度
正解: イ 同一のデータを扱う複数の機能をまとめ、データを隠蔽したものが情報的強度です。ア は初期化処理のように実行時期が同じだけで集めたもの、ウ は引数で似た機能を選ばせるもの、エ は逐次実行するが機能間の関連が薄いものを指します。
Q3. 命令が 20 個、判定による分岐が 16 本あるプログラムにテストケースを実行したところ、命令は 20 個すべてを、分岐は 12 本を通過した。命令網羅率 C0 と判定条件網羅率 C1 の組合せはどれか。
- C0 が 60%、C1 が 75%
- C0 が 75%、C1 が 100%
- C0 が 100%、C1 が 75%
- C0 が 100%、C1 が 100%
正解: ウ C0 = 20 ÷ 20 × 100 = 100%、C1 = 12 ÷ 16 × 100 = 75% です。ア は分母に分岐数を使った誤り、イ は C0 と C1 を入れ替えた誤り、エ は「C0 が 100% なら C1 も 100%」という誤解に基づく肢です。
Q4. 判定が「条件 A が成立し、かつ条件 B が成立する」という 1 つの判定文だけを含むプログラムについて、複数条件網羅を満たすために必要なテストケースの最小個数はどれか。
- 2
- 4
- 6
- 8
正解: イ 複数条件網羅は個々の条件の真偽の全組合せを取るので、条件が 2 個なら 22 = 4 ケースです。ア は判定条件網羅(分岐網羅)や条件網羅に必要な個数、ウ・エ は条件数を 3 個と数えた場合の値で、この設問の条件は 2 個です。
Q5. スーパークラスで定義されたメソッドを、サブクラスで同じ名前・同じ引数のまま再定義し、クラスごとに異なる振る舞いをさせる仕組みはどれか。
- オーバーロード
- カプセル化
- 汎化
- オーバーライド
正解: エ サブクラスでの再定義がオーバーライドで、多相性を実現する仕組みです。ア は同名メソッドを引数の型や個数で使い分けること、イ は属性を隠して公開メソッド経由でのみ操作させること、ウ は共通性を抽出して上位クラスにまとめる関係そのものを指します。
Q6. UML の図のうち、ある時点で存在するインスタンスと、インスタンス間のリンクを表すものはどれか。
- アクティビティ図
- オブジェクト図
- クラス図
- コミュニケーション図
正解: イ オブジェクト図はクラスではなくインスタンスとそのリンクを表す構造図です。ア は制御の流れを表す振る舞い図、ウ は型としてのクラスと関係を表す図、エ はオブジェクト間のメッセージのやり取りを番号付きで表す振る舞い図です。
Q7. UML の図のうち、フォークとジョインを用いて並行して実行される処理を含む制御の流れを表すものはどれか。
- アクティビティ図
- シーケンス図
- ステートマシン図
- 配置図
正解: ア アクティビティ図はフォークで並行処理へ分かれ、ジョインで待ち合わせる制御の流れを表します。イ は時系列でのメッセージのやり取り、ウ は 1 つのオブジェクトの状態と遷移、エ はノードへの配置という物理構成を表す構造図です。
Q8. 券売機の状態遷移が次のように定義されている。「待機」で事象 i を受けると「投入済」へ、「投入済」で事象 b を受けると「発券中」へ、「投入済」で事象 c を受けると「返却中」へ、「発券中」と「返却中」で事象 f を受けると「待機」へ移る。これ以外の組合せでは状態は変わらない。「待機」の状態から事象 i、b、f、i、c を順に受けたとき、最後の状態はどれか。
- 待機
- 投入済
- 発券中
- 返却中
正解: エ 待機 →(i)投入済 →(b)発券中 →(f)待機 →(i)投入済 →(c)返却中 と移ります。ア は 3 番目の f を受けた時点の状態、イ は 4 番目の i を受けた時点の状態、ウ は 2 番目の b を受けた時点の状態で、いずれも途中の状態です。表を 1 行ずつ指で追うのが確実です。
Q9. レビュー技法のうち、あらかじめ成果物を配布して参加者に役割を割り当て、モデレーターが主導して公式な記録と是正の確認までを行うものはどれか。
- インスペクション
- ウォークスルー
- パスアラウンド
- ラウンドロビンレビュー
正解: ア モデレーターの主導と公式な記録が識別点で、最も formal な技法がインスペクションです。イ は作成者自身が説明する軽量な方式、ウ は成果物を回覧して個別にコメントを集める方式、エ は参加者が順番に司会役を担う方式です。
Q10. 「業務システムを初めて使う利用者が、基本操作を 1 時間以内に習得できること」という品質目標は、JIS X 25010 の製品品質モデルのどの品質特性に対応するか。
- 機能適合性
- 性能効率性
- 使用性
- 保守性
正解: ウ 習得性は使用性の副特性なので、習得時間を目標にしたものは使用性です。ア は要求された機能を過不足なく備えている度合い、イ は資源量に対する応答時間やスループット、エ は解析性・修正性・試験性といった直しやすさの度合いを指します。
Q11. 稼働中のソフトウェアに対し、外部から見た振る舞いを変えないまま、内部の構造だけを分かりやすく整理する作業を指す用語はどれか。
- マイグレーション
- リエンジニアリング
- リバースエンジニアリング
- リファクタリング
正解: エ 振る舞いを変えずに内部構造を改善するのがリファクタリングで、変更前後で結果が変わらないことを回帰テストで担保します。ア は別のプラットフォームへ移し替えること、イ は復元した仕様をもとに作り直すこと、ウ は既存のコードから設計仕様を復元することです。
Q12. 稼働中のシステムについて、設計文書が失われていたため、ソースコードを解析して設計仕様書を作成し直した。この作業に該当する保守はどれか。
- 是正保守
- 適応保守
- 完全化保守
- 予防保守
正解: ウ 障害の除去でも環境変化への対応でもなく、保守性の改善を目的とした作業なので完全化保守です。ア は発生した障害を除去する保守、イ は OS 更新や法改正など環境の変化に合わせる保守、エ は障害が顕在化する前に潜在的な欠陥を除去する保守です。
Q13. JIS X 0160 が定める開発のプロセスのうち、ソフトウェア要件定義書を基に、ソフトウェアを構成する要素への分割と要素間のインタフェースの設計を行うものはどれか。
- ソフトウェア方式設計
- ソフトウェア詳細設計
- ソフトウェア要件定義
- ソフトウェア構築
正解: ア 要素への分割と要素間インタフェースの決定という最上位の設計を行うのがソフトウェア方式設計です。イ はさらに細かくソフトウェアユニットの仕様を決める工程、ウ は何を作るかを決める工程、エ は実際にコーディングとユニットテストを行う工程です。
Q14. あるプログラムに意図的に 30 個のエラーを埋め込んでテストしたところ、埋め込んだエラーのうち 18 個と、埋め込んでいない真のエラー 24 個が発見された。エラー埋込み法によって推定される、残存する真のエラーの個数はどれか。
- 12
- 16
- 24
- 40
正解: イ 真のエラー総数 = 24 × 30 ÷ 18 = 40 個で、残存はここから発見済みの 24 個を引いた 16 個です。ア は発見できなかった埋込みエラーの個数(30 − 18)、ウ は発見済みの真のエラー数、エ は引き算前の推定総数で、いずれも設問が問う残存数ではありません。
まとめ
| 論点 | 覚える結論 |
|---|---|
| V 字の対応 | 詳細設計↔単体、方式設計↔結合、ソフトウェア要件↔システムテスト、システム要件↔受入れ |
| 設計プロセスの並び | システム設計 → ソフトウェア方式設計 → ソフトウェア詳細設計 → 実装 |
| 結合度(低い順=良い順) | データ → スタンプ → 制御 → 外部 → 共通 → 内容 |
| 強度(高い順=良い順) | 機能的 → 情報的 → 連絡的 → 手順的 → 時間的 → 論理的 → 暗号的 |
| 網羅の強さ | 命令網羅 < 判定条件網羅 < 複数条件網羅。条件網羅は判定条件網羅を含まない |
| 網羅率 | 通過した項目数 ÷ 全項目数 × 100(%)。C0 は命令、C1 は分岐を数える |
| 複数条件網羅のケース数 | 2条件数 |
| サイクロマティック複雑度 | C = L − N + 2 = 判定の数 + 1 |
| エラー埋込み法 | 総数 = 発見真エラー × 埋込み総数 ÷ 発見埋込み。残存 = 総数 − 発見済み |
| 境界値分析 | 境界とその両隣を取る。同値分割は各クラスの代表値を 1 つ |
| スタブとドライバ | 下位の代わり=スタブ(トップダウン)、上位の代わり=ドライバ(ボトムアップ) |
| UML の系統 | 構造図=クラス図・オブジェクト図。振る舞い図=アクティビティ図・ステートマシン図・シーケンス図 |
| クラス間の関係 | 汎化=is-a、集約=部分は独立、コンポジション=全体と生存期間が一致 |
| レビュー | インスペクション=モデレーター主導・公式記録。集合の場で修正方法は議論しない |
| JIS X 25010 | 製品品質モデル 8 特性、利用時の品質モデル 5 特性 |
| 保守の 4 分類 | 是正(起きた)・予防(起きる前)・適応(環境変化)・完全化(性能と保守性の改善) |
| 移行方式 | 一斉(短期・高リスク)/段階(影響限定・長期)/並行(照合可・高コスト) |
本章は工程・技法・数値の対応を覚える章でした。次の第 14 章では、これらの工程をどの順序でどう回すか(ウォーターフォール・アジャイル・DevOps)と、成果物をどう管理するか(構成管理・バージョン管理・知的財産)を扱います。V 字の各工程を短いサイクルで何度も回すのがアジャイルだと捉えると、両章がつながります。