応用情報技術者試験 合格教科書|2026年度(令和8年度)対応
第 13 章|科目 A 例年 2〜3 問(直近 10 年 19 回で 53 問、1 回平均 2.8 問)/科目 B 選択問題(情報システム開発。19 回すべて問 8 で出題) 科目 B: 情報システム開発

システム開発技術 ― 要件定義・設計・実装・テスト・保守

V 字モデルに沿って各工程の成果物と技法を図で結び、テスト技法の計算問題を型で解く。科目 B 情報システム開発の基盤

この章で学ぶこと

科目 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 字モデルは、左側に分解していく工程(要件定義・設計)を、右側に組み上げて確かめる工程(テスト)を並べ、同じ高さのものどうしを対応させた見方です。左で決めたことは、同じ高さの右のテストで確認します。詳細設計の誤りは単体テストで、要件定義の誤りは受入れテスト(資料により運用テストと呼ぶこともあります)で見つかる、という対応関係が試験の論点です。

システム要件定義 ソフトウェア要件定義 ソフトウェア方式設計 ソフトウェア詳細設計 実装(コーディング) ユニットテスト ソフトウェア統合テスト ソフトウェア検証テスト システム検証テスト 受入れ基準で確認 要件どおりか 結合できるか 仕様どおりか
図 13-1 V 字モデル。横の両矢印が「どの工程の成果物を、どのテストで確かめるか」の対応です。左を下るほど分解が細かくなり、右を上るほど組み上がった単位が大きくなります。

右側のテスト工程の名前は、JIS X 0160 の呼称と実務での通称が食い違うため、両方を結び付けて覚えます。検証(verification)は「決めた仕様どおりに作れているか」、妥当性確認(validation)は「利用者の本来の目的に合っているか」で、対象が違います。仕様どおりでも業務で使えなければ妥当性確認では不合格です。

工程(JIS X 0160)主な成果物対応するテスト実務での通称
システム要件定義システム要件定義書システム検証テスト受入れテスト・運用テスト
システム設計(システム方式設計)システム構成品目の割振りシステム統合テスト総合テスト
ソフトウェア要件定義ソフトウェア要件定義書ソフトウェア検証テストシステムテスト
ソフトウェア方式設計ソフトウェア要素とインタフェースソフトウェア統合テスト結合テスト
ソフトウェア詳細設計ソフトウェアユニット仕様書ソフトウェアユニットのテスト単体テスト
出題実績 「JIS X 0160 の実装プロセスで最上位の設計を行う下位プロセスはどれか」という設問が、この中分類の 53 問中 2 問(H28 秋 問 48、H30 春 問 46)出ています。ほぼ同一問題で、正解はいずれもソフトウェア方式設計です。誤答肢は要求事項分析・詳細設計・構築で作られます。

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 春に出題。条件の組合せ漏れを潰す
SysMLUML を拡張したシステムズエンジニアリングの表記ハードウェアを含むシステム全体を記述する

状態遷移表と状態遷移図

状態遷移表は行が現在の状態、列が事象、セルが遷移先の状態です。同じ仕様を図にしたものが状態遷移図で、試験では「表を渡され、事象を順に適用した後の状態を答える」形で出ます(R3 春 問 47)。音楽プレーヤの例で追ってみます。

現在の状態\事象a: 再生ボタンb: 一時停止ボタンc: 停止ボタン
停止再生(無視)(無視)
再生(無視)一時停止停止
一時停止再生(無視)停止
停止 再生 一時停止 a: 再生 b: 一時停止 a: 再生 c: 停止 c: 停止 停止 a 再生 b 一時停止 a 再生 b 一時停止 c 停止
図 13-2 上が状態遷移図、下が事象列 a・b・a・b・c を順に適用した追跡です。表に「(無視)」と書かれたセルは状態が変わらないので、事象を読み飛ばさずに 1 つずつ現在行を移すのがこの型の解き方です。

決定表は条件の組合せを列(規則)にした表です。条件部に Y/N、動作部に X(実行する)/−(実行しない)を書き、条件が n 個なら規則は最大 2 の n 乗列になります。列が埋まっていない箇所が仕様の抜けです。

条件・動作規則 1規則 2規則 3規則 4
購入金額が 5,000 円以上YYNN
会員であるYNYN
送料を無料にするXXX−
送料 500 円を加算する−−−X

3. 設計 ― 要件を構造に落とす

設計は 3 段階で粒度を落としていきます。システム設計(システム方式設計)でハードウェア・ソフトウェア・サービス・手作業への振り分けを決め、ソフトウェア方式設計でソフトウェア要素とその間のインタフェースを決め、ソフトウェア詳細設計でソフトウェアユニット(プログラム)の仕様まで落とします。「最上位の設計を行うのはどの下位プロセスか」を問う設問は、この並びの 2 段目を答えさせるものです。

システム設計(方式設計) ハードウェア・ソフトウェア・手作業への振り分け ソフトウェア方式設計 ソフトウェア要素への分割とインタフェース設計 ソフトウェア詳細設計 ソフトウェアユニットの仕様とモジュール仕様 実装(ユニットの作成) ソースコードとユニットテスト仕様
図 13-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 か月で移せる
覚え方 製品品質 8 特性は「機・性・互・使・信・セ・保・移」の順で唱えます。利用時の品質 5 特性(有効性・効率性・満足性・リスク回避性・利用状況網羅性)は使う人から見た成果の話なので、「1 時間で習得できる」のような製品の側の性質は使用性(製品品質)だと判別できます。

4. モジュール分割 ― 結合度と強度

この節が本章で最も出る領域です。直近 10 年 19 回のうち結合度・強度は 5 問出ており、R4 春・R5 春・R6 春は 3 回連続で春の問 46 に置かれました。まず分割の技法、次に分割の良し悪しを測る 2 つのものさし(結合度と強度)という順で押さえます。

モジュール分割技法

技法着目するもの分け方
STS 分割データの流れ入力(Source)・変換(Transform)・出力(Sink)の 3 つに切る
TR 分割データの流れトランザクション(処理要求)の種類ごとに切る
共通機能分割データの流れ複数の箇所から呼ばれる共通処理を独立させる
ジャクソン法データ構造入力と出力のデータ構造を対応づけてプログラム構造を導く
ワーニエ法データ構造入力のデータ構造を「いつ・何回」で分解してプログラム構造を導く

結合度と強度 ― 独立性を測る 2 つのものさし

良いモジュール分割とは独立性が高いこと、つまり結合度が低く、強度(結束性)が高いことです。結合度はモジュール間の依存の強さ、強度は 1 つのモジュール内部のまとまりの良さを表します。名前と順序だけでなく、「何をどう受け渡すか」で判定できるようにしておきます。

モジュール結合度(低いほど良い) モジュール強度(高いほど良い) データ結合:必要な引数だけを渡す スタンプ結合:構造体をまとめて渡す 制御結合:処理を切り替える情報を渡す 外部結合:公開された単一データを共有 共通結合:共通の大域データを共有する 内容結合:他モジュール内部を直接参照 機能的強度:単一の機能だけを行う 情報的強度:同じデータを扱う機能を隠蔽 連絡的強度:逐次実行しデータを受け渡す 手順的強度:逐次実行するが関連は薄い 時間的強度:同時期に行う処理を集めた 論理的強度:似た機能を引数で切り替える 暗号的強度:関連のない処理の寄せ集め
図 13-4 両側の縦矢印は「上から下へ悪くなる」向きです。左は上ほど結合度が低く、右は上ほど強度が高いので、どちらも上が良いと覚えると向きを取り違えません。網掛けの最下段が最悪、枠を強調した上段が理想です。最下段の暗号的強度は英語では coincidental cohesion(偶発的強度とも訳されます)。

判定の型: 受渡し方法からモジュール結合度を決める

上から順に当てはまるかを見て、最初に当たったものが結合度です(上ほど結合度が強い=悪い)。

  1. 相手モジュールの内部(内部の命令や変数)を直接参照している → 内容結合
  2. 複数のモジュールが共通の大域データ領域をまとめて参照している → 共通結合
  3. 外部宣言した単一のデータ項目だけを共有している → 外部結合
  4. 引数に処理の切替えを指示する制御情報(フラグ)が含まれる → 制御結合
  5. 引数が構造体・レコードで、受け手が使わない項目まで渡している → スタンプ結合
  6. 引数が受け手の使うデータ項目だけである → データ結合(最も結合度が低い)

例題: 呼出し側が「顧客レコード全体」を渡し、呼出された側は住所だけを使う。→ 手順 5 に当たるのでスタンプ結合。渡すのを住所だけに変えればデータ結合まで下げられます。

強度の側も同じ要領で、「1 つのモジュールが何を理由にまとまっているか」で判定します。単一の機能のためなら機能的強度、同じデータ構造を扱う複数の機能をまとめて内部データを隠蔽していれば情報的強度、初期化処理のように「同じタイミングで実行する」だけの理由で集めていれば時間的強度、引数のフラグで似た機能を選ばせていれば論理的強度です。

分割の量も評価対象です。モジュールが直接・間接に呼び出す範囲を制御領域、そのモジュールの変更が影響を及ぼす範囲を影響領域と呼び、影響領域が制御領域の中に収まっている分割が望ましいとされます。モジュール仕様の記述には、流れ図のほか NS 図(Nassi-Shneiderman 図)、PAD(Problem Analysis Diagram)、HCP チャート、PSD(Program Structure Diagram)、DSD(Design Structure Diagram)、SPD(Structured Programming Diagrams)、決定表が使われます。

出題実績 直近 10 年で 5 問。「受渡し方法で結合度が最も低いもの」(H28 春・R5 春、正解は必要な項目だけの引数渡し=データ結合)、「最も独立性が高い結合の名称」(R4 春、データ結合)、「大域データの参照は共通結合か」(R6 春)、「データと機能をまとめて隠蔽した設計の強度」(H29 秋、情報的強度)という 4 つの型に集約されます。

5. オブジェクト指向設計と UML

オブジェクト指向はデータ(属性)と操作(メソッド)を 1 つのクラスにまとめ、外部には必要な操作だけを見せるという考え方です。科目 A では直近 10 年で 3 問、科目 B ではクラス図を読ませる問題が直近 5 回のうち 3 回出ており、この節は両方の土台になります。

概念意味試験での問われ方
カプセル化属性を隠し、公開したメソッド経由でのみ操作させる情報隠蔽。モジュール強度でいう情報的強度と同根
継承(インヘリタンス)スーパークラスの属性・メソッドをサブクラスが引き継ぐ汎化(is-a 関係)として図で問われる
多相性(ポリモーフィズム)同じメッセージに対し、クラスごとに異なる振る舞いをする「同名のメソッドが実装ごとに違う結果を返す」
オーバーライドサブクラスでスーパークラスのメソッドを再定義するR6 春に出題。多相性を実現する仕組み
オーバーロード同名のメソッドを引数の型・個数で使い分けるオーバーライドとの取り違えが定番の誤答
抽象クラス実装のないメソッドを含み、インスタンス化できないクラス共通処理を親に集約する設計理由を書かせる(科目 B)
クラスライブラリ再利用可能なクラスをまとめた部品集H28 秋に出題

設計原則としてはSOLID(単一責任・開放閉鎖・リスコフの置換・インタフェース分離・依存性逆転の 5 原則)が用語例に挙がっています。名称と「1 クラスの責任は 1 つ」「拡張には開き、修正には閉じる」という趣旨を押さえておけば足ります。

UML の図の種類

UML の図は構造図(静的に何でできているか)と振る舞い図(動的にどう動くか)の 2 系統に分かれます。試験では図名の入れ替えが定番の誤答肢なので、まず系統で切り分けます。

UML の図 構造図(何でできているか) 振る舞い図(どう動くか) ・クラス図 ・オブジェクト図 ・コンポーネント図 ・パッケージ図 ・配置図 ・ユースケース図 ・アクティビティ図 ・ステートマシン図 ・シーケンス図 ・コミュニケーション図
図 13-5 UML の図の分類。色を変えた 5 つが応用情報で実際に出題された図です。「並行処理を含む制御の流れ」ならアクティビティ図、「インスタンス間の関係」ならオブジェクト図、と系統から絞り込みます。
図何を表すか読み方の要点
クラス図クラスの属性・操作と、クラス間の関係登場するのは型。矢印の向きは子から親
オブジェクト図ある時点のインスタンスとその間のリンクR7 秋に出題。具体的な値を持つ点がクラス図との違い
ユースケース図アクターとシステムが提供する機能の関係要件定義で使う。内部構造は表さない
アクティビティ図処理の制御の流れ。フォークとジョインで並行処理を表すR2 10 月・R3 秋に連続出題。並行処理が識別点
ステートマシン図1 つのオブジェクトの状態と、事象による遷移状態遷移図の UML 版。主語は状態
シーケンス図オブジェクト間のメッセージのやり取りを時系列で縦がライフライン(時間)、横が呼出し
コミュニケーション図同じやり取りを、オブジェクトの配置と番号付きメッセージでシーケンス図と情報は等価。時間軸を持たない

クラス間の関係と多重度

クラス図で最も問われるのが関係の種類です。汎化は「〜の一種(is-a)」、集約は「〜を持つ(has-a)」で部分が単独でも存在できる、コンポジションは集約のうち全体と部分の生存期間が一致するものです。多重度は関連の線の両端に書き、1(ちょうど 1)、0..*(0 個以上)、1..*(1 個以上)を読み分けます。

汎化(継承) 動物 犬 is-a 犬は動物の一種 集約 チーム 社員 0..* 社員は他チームでも可 コンポジション 注文 注文明細 1..* 明細は注文と一生を共有 関連 顧客 注文 1 0..* 多重度だけを書く
図 13-6 左 3 つは矢印の向きが「部分・子 → 全体・親」です。いちばん右の関連は、顧客 1 人に対して注文が 0 件以上あることだけを表し、所有関係は主張しません。集約とコンポジションの違いは部分が単独で存在できるかで判定します。なお is-a・has-a は教育上の通称であり、集約の意味論は UML 仕様上も適用領域やモデラーの判断に委ねられています。

6. 実装とテスト ― 網羅基準とテストケース設計

実装・構築の作法

実装工程は「ソフトウェアユニットの作成 → テスト手順とテストデータの作成 → ユニットのテスト → 利用者用文書類の更新 → コードとテスト結果の評価」というタスクで進みます。品質を人の注意力に頼らないために、規約と道具で機械的に潰すのが基本方針です。

プログラム言語の選択は、処理方式・実行環境・既存資産・技術者の確保しやすさから決めます。手続型のほかに、宣言的に規則を書く論理型プログラミング、複数の処理を同時に走らせる並列処理プログラミング、ログ出力のような横断的関心事を本体から切り離して書くアスペクト指向プログラミングがあります。2 人 1 組で 1 つのコードを書くペアプログラミングは、書きながらレビューする効果を狙ったプラクティスです(XP のプラクティスとしての位置づけは第 14 章)。

手段内容狙い
コーディング標準インデンテーション、ネストの深さ、命名規則、使用禁止命令読み手が変わっても解析しやすくする(保守性)
コーディング支援コード補完、オートインデント、シンタックスハイライト、ブレークポイント単純な打ち間違いを実行前に減らす
静的解析実行せずにソースを解析し、未初期化変数や規約違反を検出テストで見つけにくい欠陥を早く見つける
デバッグデバッガ、トレーサー、スナップショット、アサーション、机上デバッグ欠陥の位置を特定する
コードレビューコードインスペクション、ピアコードレビュー、メトリクス計測規約遵守・詳細設計との一致・効率性の確認
ローコード/ノーコード開発画面部品の組合せで作る。生産性は高いが複雑なロジックと移行に弱いR5 秋に出題。適用範囲の見極めが論点
生成 AI の活用生成されたコードの妥当性・ライセンス・機密情報の入力可否を人が確認する出力をレビュー対象として扱う

計算の型: サイクロマティック複雑度

C = L − N + 2(L: 制御フローグラフの辺の数、N: 節点の数)。分岐(判定)の数 + 1 でも同じ値になります。

  1. 制御フローグラフの辺と節点を数える: 辺 12 本、節点 10 個
  2. 公式に当てはめる: 12 − 10 + 2
  3. 答え: 4。判定が 3 個なら 3 + 1 = 4 と検算できる

値が大きいほど通すべき経路が多く、テスト工数と保守コストが増えます。しきい値(10 など)を超えたモジュールを分割対象にする、という使い方をします。科目 B(H30 春)で出題されました。

テストの階層

テストは小さい単位から大きい単位へ積み上げます。どの工程の誤りを拾うテストかは、図 13-1 の V 字の対応で決まります。

テスト実施者確認すること主な技法
ユニット(単体)テスト開発者ユニット仕様書どおりに動くかホワイトボックステスト
ソフトウェア統合(結合)テスト開発者ユニット間のインタフェースが合うかスタブ・ドライバ、ブラックボックス
ソフトウェア検証テスト供給者ソフトウェア要件どおりか機能・性能・負荷・セキュリティ
システム統合・検証テスト供給者ハードウェア・手作業も含めてシステム要件を満たすか回復テスト、運用テスト
受入れテスト(妥当性確認)取得者(利用者)業務目的を達成できるか実業務データ、ベータテスト、使用性テスト
回帰(リグレッション)テスト開発者修正が既存機能を壊していないか自動化して修正のたびに流す

ホワイトボックステスト ― 網羅基準

ホワイトボックステストは内部の制御構造を見てテストケースを作ります。どこまで通せば十分とするかの基準が網羅基準で、直近 10 年で 5 問と本章の最頻出テーマの 1 つです。同じ判定文に対して 4 つの基準が何ケースを要求するかを、1 枚で比較します。

判定 x>0 かつ y>0 真 偽 処理 P 処理 Q ケース x>0 y>0 判定 ① 真 真 真 ② 真 偽 偽 ③ 偽 真 偽 ④ 偽 偽 偽 同じ判定に対して必要なテストケース数 命令網羅 C0 2 ケース(①②) 判定条件網羅 C1 2 ケース(①②) 条件網羅 2 ケース(②③) 複数条件網羅 4 ケース(①〜④)
図 13-7 網掛けした条件網羅に注目します。②と③は各条件の真偽をどちらも 1 回ずつ含みますが、判定結果はどちらも偽なので処理 P を一度も通りません。条件網羅は判定条件網羅(分岐網羅)を含まない、というのがこの図の主張です。

判定の型: 網羅基準ごとの必要テストケース数

  1. 命令網羅(C0): すべての命令を 1 回以上実行する。分岐先の処理が 2 つあるなら 2 ケース
  2. 判定条件網羅(C1・分岐網羅): 各判定の結果を真・偽とも 1 回以上取る。判定 1 個なら 2 ケース
  3. 条件網羅: 判定を構成する個々の条件の真・偽を 1 回以上取る。判定結果は問わない。条件 2 個なら 2 ケースで足りる
  4. 複数条件網羅: 条件の真偽の全組合せを取る。条件 n 個なら 2n ケース(短絡評価や実行不可能な組合せがある場合はこの限りではありません)

例題: if (x > 0 かつ y > 0) の判定で複数条件網羅を満たす最小ケース数は。→ 条件は 2 個なので 22 = 4 ケース。真偽の組合せ(真真)(真偽)(偽真)(偽偽)を用意します。

網羅の達成度は網羅率(カバレージ)で測ります。C0 が 100% でも C1 が 100% とは限らない、というのが計算問題の急所です。

テストケースを 2 本実行した結果 命令網羅率 C0 通過した命令 8 ÷ 全命令 8 8 / 8 = 100% すべての命令を 1 回以上通過 判定条件網羅率 C1 通過した分岐 8 ÷ 全分岐 10 8 / 10 = 80% 通っていない分岐が 2 本残る 網羅率 = 通過した項目数 ÷ 全項目数 × 100(%)
図 13-8 網羅率は「通過した項目 ÷ 全項目」です。分母が命令か分岐かで結果が変わります。右のバーの空白 2 本分が、テストで一度も通っていない分岐です。

計算の型: 網羅率(カバレージ)

網羅率 = 通過した項目数 ÷ 全項目数 × 100(%)。C0 は命令を、C1 は判定の分岐(真・偽の枝)を数えます。

  1. 分母を確定する: 命令 8 個、分岐 10 本
  2. 実行結果から通過数を数える: 命令 8 個、分岐 8 本
  3. C0 = 8 ÷ 8 × 100 = 100%
  4. 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 秋)で出題
ここがひっかけ 境界値分析で「1 以上 100 以下」に対し 1 と 100 だけを選ぶのは不足です。境界の外側(0 と 101)まで取るのが境界値分析で、内側の代表値だけを取るのは同値分割です。仕様が「100 未満」なら境界は 99 と 100 になり、等号の有無で選ぶ値が変わります。

結合テストの統合順序 ― スタブとドライバ

ユニットを組み上げるとき、まだできていない相手の代わりに仮のモジュールを用意します。呼ばれる側(下位)の代わりがスタブ、呼ぶ側(上位)の代わりがドライバです。上から組むトップダウンテストではスタブ、下から組むボトムアップテストではドライバが必要になります。

トップダウンテスト 上位 A スタブ B スタブ C 未完成の下位モジュールの代わり = スタブ(stub) ボトムアップテスト ドライバ A 下位 B 下位 C 未完成の上位モジュールの代わり = ドライバ(driver)
図 13-9 外側の破線矢印が統合の進む向きです。枠を強調したモジュールが実物、網掛けが仮物です。トップダウンは早い段階で全体の骨格を確認でき、ボトムアップは末端の部品を確実に固められる、という使い分けになります。
統合の方式必要な仮モジュール長所短所
トップダウンテストスタブ上位の制御構造・インタフェースを早く検証できるスタブの作成数が多くなる
ボトムアップテストドライバ下位の部品を確実に固められる。並行して進めやすい全体の動作確認が最後になる
ビッグバンテスト不要準備が少ない欠陥の位置を切り分けられない
サンドイッチテスト(折衷法)スタブとドライバの両方上下から同時に進めて期間を短縮できる準備するものが最も多い

システム検証テストの種類

テスト確認すること
機能テスト要件どおりの機能が動くか
性能テスト応答時間・スループットが目標値を満たすか
負荷テスト想定最大の負荷をかけても性能を保てるか
ストレステスト想定を超える負荷をかけたときの壊れ方が妥当か
セキュリティテスト脆弱性がないか。ファジングは問題を起こしそうなデータを大量に送って異常を観測する(R5 秋に出題)
回復テスト障害発生後に規定時間内で復旧できるか
操作性テスト(使用性テスト)利用者が迷わず操作できるか
探索的テスト台本を作らず、結果を見ながら次のテストを決めていく

テストの実行は自動化して回帰テストを毎回流せるようにするのが定石です。テストデータジェネレーター、シミュレーター、テストベッド(試験環境)といった道具が用語例に挙がっています。継続的インテグレーション(CI)による自動実行は第 14 章が扱います。

7. 品質評価とレビュー

作ったものが十分な品質かは、レビューという人の目と、メトリクスという数字の 2 系統で判断します。どちらも科目 A・科目 B の両方で問われます。

レビュー技法

レビューの目的はその工程の中で問題点を発見し、後工程へ持ち出さないことです。技法は「誰が進行し、どこまで公式に記録するか」で区別します。

技法進め方識別のキーワード
インスペクションモデレーターが主導し、事前配布・役割分担・公式な記録と是正確認まで行う最も formal な方式モデレーター、公式記録、是正の追跡
ウォークスルー作成者が説明し、参加者が質問して欠陥を洗い出す。作成者主導で軽量作成者が説明する
ラウンドロビンレビュー参加者が順番に司会と説明を担当し、全員が主体的に関わる持ち回り
パスアラウンド成果物を回覧して個別にコメントをもらう。集まらない回覧
ピアレビュー同僚(対等な立場)どうしで相互に確認する同僚間
デザインレビュー設計工程の成果物を対象に、設計段階で問題点を検出するR7 春に出題。目的は「設計工程内での発見」
共同レビュー取得者と供給者が合同で実施する。要件定義・設計の各工程末に置く取得者と供給者

インスペクションの役割は、モデレーター(計画・進行・是正の確認)、作成者、読み手(成果物を読み上げる)、記録係、レビューアに分かれます。集合の場では欠陥の指摘までを行い、修正方法の議論はしないのが原則です。修正の議論を始めると時間が発散し、指摘の網羅性が落ちるためで、科目 B(R4 秋)でこの原則が問われました。修正によって新たに生まれる欠陥を二次欠陥と呼び、修正後の再レビューと回帰テストで拾います。

品質メトリクスとバグ収束の判定

指標求め方読み方
テスト密度テストケース数 ÷ 規模(キロ行・ファンクションポイント)低すぎればテスト不足、高すぎれば仕様が複雑すぎる疑い
バグ密度(欠陥密度)検出欠陥数 ÷ 規模他モジュールと比べて突出していれば設計を疑う
指摘密度レビュー指摘件数 ÷ 規模レビューの実施状況を測る(科目 B R4 秋)
管理図の UCL・LCL実績から上方管理限界と下方管理限界を引く大きすぎても小さすぎても原因を調査する対象になる
バグ曲線・信頼度成長曲線累積検出欠陥数を時間軸に並べるS 字(ゴンペルツ曲線・ロジスティック曲線)で飽和を見る
累積バグ検出数 推定総欠陥数 打切りを判断 立上り期 成長期 収束期(飽和) テスト経過期間
図 13-10 信頼度成長曲線。曲線の傾きが 0 に近づき、推定総欠陥数(破線)に漸近したところが収束点です。曲線がまだ立ち上がり続けている段階でテストを打ち切ると、残存欠陥を本番へ持ち込みます。逆に検出数が想定より少なすぎるときは、テストが仕様を通っていない疑いを先に潰します。

計算の型: エラー埋込み法

意図的に既知のエラーを埋め込み、その発見割合から真のエラー総数を推定します。

真のエラー総数 = 発見した真のエラー数 × 埋込みエラー総数 ÷ 発見した埋込みエラー数

  1. 与えられた数を整理する: 埋込み 20 個、発見した埋込み 12 個、発見した真のエラー 15 個
  2. 発見率は埋込みと真のエラーで等しいと仮定する: 12 ÷ 20 = 0.6
  3. 真のエラー総数 = 15 × 20 ÷ 12 = 25 個
  4. 残存する真のエラー = 25 − 15 = 10 個

問われるのは多くの場合残存数です。手順 3 の総数(25)で止めると誤答になります。R7 秋 問 48 で出題されました。

8. 導入・受入れ・保守・廃棄

導入と移行

導入では、実環境への設置と新旧システムの切替えをどう行うかを導入計画にまとめます。移行方式の選択は「業務を止められる時間」と「二重運用のコスト」のトレードオフです。

移行方式やり方長所短所
一斉移行(一括移行)ある時点で全業務・全拠点を新システムへ切り替える期間が短く、二重運用のコストが不要失敗時の影響が全体に及ぶ。切戻し手順が必須
段階移行業務・拠点・機能を分けて順に切り替える影響範囲を限定でき、問題を小さく検知できる期間が長く、新旧の連携(つなぎ)が必要
並行移行(並行稼働)一定期間、新旧を同時に動かして結果を突き合わせる結果の照合で移行の妥当性を確認できる運用負荷とコストが最大

リリースの方式としては、本番と同構成の環境を 2 つ用意して切り替えるブルーグリーンデプロイメント(R7 春に出題)、一部の利用者にだけ新版を出して様子を見るカナリアリリースがあります。どちらも切戻しを容易にする狙いです。移行前には移行リハーサルを行い、手順と所要時間を実測します。

受入れ支援と教育訓練

供給者は取得者の受入れレビューと受入れテストを支援します。合否は受入れ基準(検収基準)に照らして判定し、結果を文書化します。利用者用文書類(利用者マニュアル)は設計時に暫定版を作り、開発の進行に合わせて更新します。ウィザード・チュートリアル・オンラインヘルプのようにソフトウェアに組み込む組込文書類と、冊子として分ける分離形文書類があります。教育訓練の効果測定には、反応・学習・行動・結果の 4 段階で測るカークパトリックの教育効果の 4 段階モデルが用語例に挙がっています。

保守と廃棄

保守は何をきっかけに、何のために直すかで 4 つに分類します。この分類は直近 10 年で 2 問出ており、リバースエンジニアリングによる文書再作成がどれに当たるかが定番の論点です。

保守の種類きっかけ目的例
是正保守障害が発生した発見された問題を除去する本番で出た不具合の修正
予防保守障害が起きる前潜在的な障害が顕在化する前に検出・除去する潜在欠陥の先行修正、老朽部品の交換
適応保守外部環境が変わった変化した環境で使い続けられるようにするOS のバージョンアップ対応、税率改定対応
完全化保守環境も障害も変わらない性能・保守性を改善するチューニング、ソース解析による仕様書の再作成

既存のソースコードや実行モジュールを解析して設計仕様を復元する作業がリバースエンジニアリングです。復元した仕様をもとに作り直すのがリエンジニアリング、別のプラットフォームへ移し替えるのがマイグレーションです。リファクタリングは外部から見た振る舞いを変えずに内部構造だけを改善する作業で、変更前後で結果が変わらないことを回帰テストで担保します。

ここがひっかけ リバースエンジニアリングで仕様書を作り直す作業は完全化保守です(R4 春)。「障害を直していないのに保守なのか」と迷いますが、保守性の改善が目的なので完全化保守に入ります。是正保守(障害が起きた)・適応保守(環境が変わった)・予防保守(起きる前に潰す)とはきっかけが違う、と押さえます。

保守の手順は、開発から成果物を引き継ぐ準備 → 問題報告・修正依頼の分析 → 修正の実施 → 保守レビューと受入れ → 再発防止策 → 移行、と進みます。再発防止では FTA・FMEA・STAMP/STPA などの解析技法で根本原因を洗い出します。廃棄では、廃棄計画を立てて利用者へ通知し、新旧の並行運用と教育訓練を経て旧環境を停止します。廃棄後もデータの保持とアクセス可能性を確保しておく点が用語例に挙げられています。

出題頻度は低いが 1 行で押さえる用語

用語要点
アシュアランスケース安全性などの要件が満たされることを、根拠を示して論証した文書
イネーブリングシステム開発・テスト・運用を成立させるために必要な施設・設備・機器
ペトリネット場所とトークンの移動で並行動作と同期を表すモデル(R1 秋に出題)
フールプルーフ利用者が誤操作しても危険な状態にならないようにする設計(H30 秋に出題)
テストオラクルテストの期待結果を与える基準や仕組み。これがないと合否を判定できない
ミューテーションテストプログラムをわざと改変し、テストがその差異を検出できるかでテストの質を測る
再帰戦略(回帰戦略)統合の途中で下位が変わったとき、統合済みの範囲をどこまで再テストするかの方針
オンサイト保守/遠隔保守技術者が現地で行う保守と、通信回線を経由して行う保守
完整性(integrity)修正や廃棄の後も、システムと組織の運用が矛盾なく保たれている状態
データベース方式の決定RDB・NDB・OODB・XML データベース・インメモリ・分散・NoSQL から選ぶ(詳細は第 9 章)
サブルーチン/再帰プログラム共通処理の切り出しと、自分自身を呼び出す構造。領域設計・論理設計と併せて分割手法の用語
IoT を含む要件センサや機器側の制約(通信量・電源・設置環境)を要件と設計に織り込む
科目 B「情報システム開発」への橋渡し この分野は直近 19 回すべて問 8 に置かれ、1 問あたり平均 6.0 個の小設問で構成されます。題材は「中堅企業や SI 会社が既存システムを改修・再設計する」場面が定番で、直近 5 回のうち 3 回はクラス図を読んで継承・多相性・メソッド仕様を答える形でした。字数記述は 19 問中 18 問で出題され、字数指定は20 字が最多、50 字以上は 1 度もありません。本章の UML・テスト技法・レビューの語彙が問題文を読む前提になります。解き方の手順は第 24 章で扱います。

ひっかけポイント

ここがひっかけ ①「最も低い/最も高い」の向き 良い分割とは結合度が低く、強度が高い状態です。設問が「独立性が最も高いのはどれか」なら結合度が最も低いもの(データ結合)を選び、「最も強い設計はどれか」なら強度が最も高いもの(機能的強度・情報的強度)を選びます。「結合度が最も高い」を良いものとして選ばせる肢が定番です。
ここがひっかけ ② 条件網羅は分岐網羅を含まない 網羅の強さは命令網羅 < 判定条件網羅 < 複数条件網羅ですが、条件網羅はこの一直線上にありません。図 13-7 のとおり、各条件の真偽を満たしても判定結果が片方に偏ることがあります。同じ理由で C0 が 100% でも C1 は 100% とは限りません(R4 秋)。「C0 が 100% なのでテストは十分」とする肢は誤りです。
ここがひっかけ ③ UML の図名の入れ替え 誤答肢は図名を入れ替えて作られます。クラス図は型、オブジェクト図はインスタンス。アクティビティ図は制御の流れ(フォーク・ジョインで並行処理)、ステートマシン図は 1 つのオブジェクトの状態遷移。シーケンス図とコミュニケーション図は表す情報が同じで、時間軸を持つのがシーケンス図です。
ここがひっかけ ④ スタブとドライバの向き 呼ばれる側(下位)の代わりがスタブ、呼ぶ側(上位)の代わりがドライバです。したがって上位から組むトップダウンテストで必要になるのはスタブ、下位から組むボトムアップテストで必要になるのはドライバです。「トップダウンだから上位の代わりのドライバ」と読み替えさせる肢に注意します。
ここがひっかけ ⑤ 新しい用語は特徴 1 文で判別する ローコード開発・マイクロサービス・PWA・ブルーグリーンデプロイメント・ファジングは、直近 3 年で初出のまま特徴 1 文を選ばせる形でしか出ていません。深掘りは不要で、「サービスワーカーでオフライン動作」なら PWA、「同構成の環境を切り替える」ならブルーグリーン、「問題を起こしそうなデータを大量に送る」ならファジングと 1 対 1 で結び付ければ足ります。

理解度チェック(科目 A 形式)

Q1. モジュール間のデータの受渡し方法として、モジュール結合度が最も低いものはどれか。
  1. 共通の大域データ領域を宣言し、双方のモジュールがそれを直接参照する。
  2. 呼出し側が、呼出された側の処理を切り替えるためのフラグを引数で渡す。
  3. 呼出し側が、呼出された側が使用するデータ項目だけを引数で渡す。
  4. 呼出された側が、呼出し側のモジュール内部の変数を直接書き換える。

正解: ウ 必要なデータ項目だけを引数で渡すのがデータ結合で、6 段階のうち最も結合度が低い(独立性が高い)方式です。ア は共通結合、イ は制御結合、エ は内容結合で、いずれもこれより結合度が高くなります。

Q2. あるデータ構造と、それを操作する複数の機能を 1 つのモジュールにまとめ、そのデータ構造を外部から直接参照できないようにした。このモジュールの強度(結束性)はどれか。
  1. 時間的強度
  2. 情報的強度
  3. 論理的強度
  4. 手順的強度

正解: イ 同一のデータを扱う複数の機能をまとめ、データを隠蔽したものが情報的強度です。ア は初期化処理のように実行時期が同じだけで集めたもの、ウ は引数で似た機能を選ばせるもの、エ は逐次実行するが機能間の関連が薄いものを指します。

Q3. 命令が 20 個、判定による分岐が 16 本あるプログラムにテストケースを実行したところ、命令は 20 個すべてを、分岐は 12 本を通過した。命令網羅率 C0 と判定条件網羅率 C1 の組合せはどれか。
  1. C0 が 60%、C1 が 75%
  2. C0 が 75%、C1 が 100%
  3. C0 が 100%、C1 が 75%
  4. C0 が 100%、C1 が 100%

正解: ウ C0 = 20 ÷ 20 × 100 = 100%、C1 = 12 ÷ 16 × 100 = 75% です。ア は分母に分岐数を使った誤り、イ は C0 と C1 を入れ替えた誤り、エ は「C0 が 100% なら C1 も 100%」という誤解に基づく肢です。

Q4. 判定が「条件 A が成立し、かつ条件 B が成立する」という 1 つの判定文だけを含むプログラムについて、複数条件網羅を満たすために必要なテストケースの最小個数はどれか。
  1. 2
  2. 4
  3. 6
  4. 8

正解: イ 複数条件網羅は個々の条件の真偽の全組合せを取るので、条件が 2 個なら 22 = 4 ケースです。ア は判定条件網羅(分岐網羅)や条件網羅に必要な個数、ウ・エ は条件数を 3 個と数えた場合の値で、この設問の条件は 2 個です。

Q5. スーパークラスで定義されたメソッドを、サブクラスで同じ名前・同じ引数のまま再定義し、クラスごとに異なる振る舞いをさせる仕組みはどれか。
  1. オーバーロード
  2. カプセル化
  3. 汎化
  4. オーバーライド

正解: エ サブクラスでの再定義がオーバーライドで、多相性を実現する仕組みです。ア は同名メソッドを引数の型や個数で使い分けること、イ は属性を隠して公開メソッド経由でのみ操作させること、ウ は共通性を抽出して上位クラスにまとめる関係そのものを指します。

Q6. UML の図のうち、ある時点で存在するインスタンスと、インスタンス間のリンクを表すものはどれか。
  1. アクティビティ図
  2. オブジェクト図
  3. クラス図
  4. コミュニケーション図

正解: イ オブジェクト図はクラスではなくインスタンスとそのリンクを表す構造図です。ア は制御の流れを表す振る舞い図、ウ は型としてのクラスと関係を表す図、エ はオブジェクト間のメッセージのやり取りを番号付きで表す振る舞い図です。

Q7. UML の図のうち、フォークとジョインを用いて並行して実行される処理を含む制御の流れを表すものはどれか。
  1. アクティビティ図
  2. シーケンス図
  3. ステートマシン図
  4. 配置図

正解: ア アクティビティ図はフォークで並行処理へ分かれ、ジョインで待ち合わせる制御の流れを表します。イ は時系列でのメッセージのやり取り、ウ は 1 つのオブジェクトの状態と遷移、エ はノードへの配置という物理構成を表す構造図です。

Q8. 券売機の状態遷移が次のように定義されている。「待機」で事象 i を受けると「投入済」へ、「投入済」で事象 b を受けると「発券中」へ、「投入済」で事象 c を受けると「返却中」へ、「発券中」と「返却中」で事象 f を受けると「待機」へ移る。これ以外の組合せでは状態は変わらない。「待機」の状態から事象 i、b、f、i、c を順に受けたとき、最後の状態はどれか。
  1. 待機
  2. 投入済
  3. 発券中
  4. 返却中

正解: エ 待機 →(i)投入済 →(b)発券中 →(f)待機 →(i)投入済 →(c)返却中 と移ります。ア は 3 番目の f を受けた時点の状態、イ は 4 番目の i を受けた時点の状態、ウ は 2 番目の b を受けた時点の状態で、いずれも途中の状態です。表を 1 行ずつ指で追うのが確実です。

Q9. レビュー技法のうち、あらかじめ成果物を配布して参加者に役割を割り当て、モデレーターが主導して公式な記録と是正の確認までを行うものはどれか。
  1. インスペクション
  2. ウォークスルー
  3. パスアラウンド
  4. ラウンドロビンレビュー

正解: ア モデレーターの主導と公式な記録が識別点で、最も formal な技法がインスペクションです。イ は作成者自身が説明する軽量な方式、ウ は成果物を回覧して個別にコメントを集める方式、エ は参加者が順番に司会役を担う方式です。

Q10. 「業務システムを初めて使う利用者が、基本操作を 1 時間以内に習得できること」という品質目標は、JIS X 25010 の製品品質モデルのどの品質特性に対応するか。
  1. 機能適合性
  2. 性能効率性
  3. 使用性
  4. 保守性

正解: ウ 習得性は使用性の副特性なので、習得時間を目標にしたものは使用性です。ア は要求された機能を過不足なく備えている度合い、イ は資源量に対する応答時間やスループット、エ は解析性・修正性・試験性といった直しやすさの度合いを指します。

Q11. 稼働中のソフトウェアに対し、外部から見た振る舞いを変えないまま、内部の構造だけを分かりやすく整理する作業を指す用語はどれか。
  1. マイグレーション
  2. リエンジニアリング
  3. リバースエンジニアリング
  4. リファクタリング

正解: エ 振る舞いを変えずに内部構造を改善するのがリファクタリングで、変更前後で結果が変わらないことを回帰テストで担保します。ア は別のプラットフォームへ移し替えること、イ は復元した仕様をもとに作り直すこと、ウ は既存のコードから設計仕様を復元することです。

Q12. 稼働中のシステムについて、設計文書が失われていたため、ソースコードを解析して設計仕様書を作成し直した。この作業に該当する保守はどれか。
  1. 是正保守
  2. 適応保守
  3. 完全化保守
  4. 予防保守

正解: ウ 障害の除去でも環境変化への対応でもなく、保守性の改善を目的とした作業なので完全化保守です。ア は発生した障害を除去する保守、イ は OS 更新や法改正など環境の変化に合わせる保守、エ は障害が顕在化する前に潜在的な欠陥を除去する保守です。

Q13. JIS X 0160 が定める開発のプロセスのうち、ソフトウェア要件定義書を基に、ソフトウェアを構成する要素への分割と要素間のインタフェースの設計を行うものはどれか。
  1. ソフトウェア方式設計
  2. ソフトウェア詳細設計
  3. ソフトウェア要件定義
  4. ソフトウェア構築

正解: ア 要素への分割と要素間インタフェースの決定という最上位の設計を行うのがソフトウェア方式設計です。イ はさらに細かくソフトウェアユニットの仕様を決める工程、ウ は何を作るかを決める工程、エ は実際にコーディングとユニットテストを行う工程です。

Q14. あるプログラムに意図的に 30 個のエラーを埋め込んでテストしたところ、埋め込んだエラーのうち 18 個と、埋め込んでいない真のエラー 24 個が発見された。エラー埋込み法によって推定される、残存する真のエラーの個数はどれか。
  1. 12
  2. 16
  3. 24
  4. 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 字の各工程を短いサイクルで何度も回すのがアジャイルだと捉えると、両章がつながります。