忍者ブログ
情報処理技術者試験の合格を目指す全受験者のための、1問1問「徹底解説」ブログです。単なる過去問の暗記ではなく、なぜその答えになるのかを本質的に理解できるよう解説します。書籍などでは学べない最新用語やトレンドを踏まえてご紹介します。

【ソフトウェア開発技術】処理の流れ(分岐・反復)を網羅!「制御フローテスト」|情報処理問題1000本ノック

プログラム内部のソースコードや構造に着目して行うホワイトボックステスト。処理の実行経路(制御フロー)に沿って網羅的に検証を行う「制御フローテスト」の概念とカバレッジ(網羅率)を攻略しましょう。

1. 【 問題 】:ソフトウェア開発技術(テスト設計技法・ホワイトボックステスト)

【 問題 】 ソフトウェア開発技術におけるホワイトボックステストの設計技法に関する記述です。プログラムの内部構造を分析し、処理の実行順序や条件分岐、繰り返し処理などの「制御の流れ(制御フローグラフ)」に基づいてテスト経路を決定し、そのルートを正しく通過するかを確認するテスト技法を何と呼ぶでしょうか?

(ア)制御フローテスト(Control Flow Testing)
(イ)データフローテスト(Data Flow Testing)
(ウ)境界値分析(Boundary Value Analysis)
(エ)状態遷移テスト(State Transition Testing)

2. 正解:

正解:(ア)制御フローテスト(Control Flow Testing)

3. 解説:「プログラムの迷路」をすり抜けるルート決め!

制御フローテスト(Control Flow Testing)は、プログラムのソースコード内に存在する「if文(分岐)」や「for/while文(繰り返し)」といった処理の流れ(制御フロー)に注目し、あらかじめ作成した**制御フローグラフ(フローチャートのような図)**をもとにテストケースを作成する手法です。
どれだけのルートを通過させたかを表す指標として「網羅率(カバレッジ)」が用いられます。

【制御フローテストで問われる「3大カバレッジ基準」】 ← ココが試験の超重要ポイント!

カバレッジ名網羅する対象(目指すゴール)
命令網羅(C0:ステートメントカバレッジ) すべての「命令(処理文)」を少なくとも1回は実行させる。
分岐網羅(C1:ブランチカバレッジ) すべての「分岐(真/偽の両方の矢印)」を少なくとも1回は通過させる。
条件網羅(C2:ディシジョンカバレッジ) 分岐条件の中にある「個々のサブ条件式(A>0 や B==1 など)」の真・偽の組み合わせをすべて網羅する。

1. 理解のコツ: 「ダンジョンの地図(迷路)の探索」に例えてみましょう。
・プログラムはスタートからゴールまでの迷路です。途中には「右へ進むか、左へ進むか」の分岐(if文)や「同じ場所をぐるぐる回る」ループ(for文)があります。
制御フローテストは、このダンジョンの地図を開き、「すべての宝箱(命令)を回収できる最短ルートはどこか」「右の道も左の道(分岐)も両方一度は歩いたか」と、道順(フロー)に注目して探索計画を立てるテスト手法です。

2. 試験対策の視点: ソフトウェア開発技術分野のホワイトボックステストにおいて超基本となる重要ワードです。
問題文の中に「内部構造」「制御の流れ」「フローグラフ」「命令網羅・分岐網羅」といったキーワードがあれば、即座に制御フローテストを選べるようにしておきましょう。
※選択肢の(イ)データフローテストは「変数の定義と参照の追跡」、(エ)状態遷移テストは「状態の変化(ステート)」に着目する手法であり、明確に区別できます。


4. まとめ

「プログラム内部の処理順序や分岐などの『制御の流れ』に着目し、命令網羅や分岐網羅といった基準でルートをテストする技法」。これが制御フローテストです。ホワイトボックステストの王道手法として、各カバレッジの定義とセットでしっかり記憶しておきましょう!


PR

【ソフトウェア開発技術】経験者の勘でバグを狙い撃ち!「エラー推測」|情報処理問題1000本ノック

ソフトウェアテストにおいて、規定のテストケースだけでは見抜けず見落としがちな不具合。テスト担当者の経験や過去の失敗事例から発生しそうなエラーを予見して検証する「エラー推測」の概念を攻略しましょう。

1. 【 問題 】:ソフトウェア開発技術(テスト設計技法)

【 問題 】 ソフトウェアテストの設計技法に関する記述です。標準的な仕様書に基づくテストケースの作成とは異なり、テスト担当者の経験、直感、過去の欠陥履歴などに基づいて「発生しそうなエラーやバグのパターン」をあらかじめ推測し、そのエラーが発生しないこと(正しく処理されること)を確認するテスト技法を何と呼ぶでしょうか?

(ア)エラー推測(Error Guessing)
(イ)境界値分析(Boundary Value Analysis)
(ウ)同値分割法(Equivalence Partitioning)
(エ)決定表テスト(Decision Table Testing)

2. 正解:

正解:(ア)エラー推測(Error Guessing)

3. 解説:「開発者がやらかしそうなポイント」をピンポイント攻撃

エラー推測(Error Guessing)は、公式なルールや仕様書の数式だけに頼らず、人間の経験則や過去のノウハウを活かす補完的なテスト技法です。
たとえば、「入力欄にゼロ(0)を入れたらゼロ除算エラーが起きないか」「絵文字や特殊文字を送信したら文字化けしないか」「通信が途切れた瞬間に送信ボタンを連打したら二重決済されないか」といった、仕様書には細かく書かれていないけれど『開発者が考慮漏れしそうな意地悪なシナリオ』を推測してテストを実行します。

【試験で整理すべき「テスト設計技法」のアプローチの違い】 ← ココが試験のポイント!

テスト技法テストケース生成の基準・根拠
(ア)エラー推測 担当者の「経験・直感・過去の欠陥パターン」からエラーを想定する。
(イ)境界値分析 仕様の「境界ギリギリの値(上限値、下限値、その前後)」を選ぶ。
(ウ)同値分割法 入力範囲を「同じ挙動をするグループ」に分け、各グループの代表値を選ぶ。
(エ)決定表テスト 複雑な条件の組み合わせと動作結果を「デシジョンテーブル」に表して整理する。

1. 理解のコツ: 「熟練の防犯診断員(セキュリティ専門家)」に例えてみましょう。
・新築の家(システム)をチェックする際、図面(仕様書)通りに鍵がかかるかテストするのが「境界値分析」や「決定表」です。
・一方でエラー推測は、熟練の泥棒対策プロが「泥棒はだいたいこの低いフェンスから飛び越えようとするんだよな」「この窓の鍵は締め忘れやすいから試してみよう」と、過去の犯行パターン(バグの事例)から不備を言い当てる感覚です。体系的なテスト手法を補う「隠れたバグのハンター」として非常に有効です。

2. 試験対策の視点: ソフトウェア開発技術や品質管理の分野において、用語の定義を問う問題としてよく出題されます。
問題文の中に「経験」「直感」「過去の障害履歴」「エラーの発生を想定・推測」といったキーワードがあれば、即座にエラー推測(Error Guessing)を選択してください。
「誰がやっても同じ結果になる」形式的な技法(同値分割や境界値分析)と異なり、「テスト担当者のスキルや知見に依存する」という特徴・課題がある点もセットで理解しておくと完璧です。


4. まとめ

「担当者の経験や過去の障害パターンからエラーを予測し、ピンポイントで発生しないか確認する技法」。これがエラー推測です。境界値分析や同値分割法などの形式的な技法と組み合わせて使う『実践的なテスト手法』として記憶に定着させておきましょう!


【ソフトウェア開発】組み合わせ爆発を防ぐ!「ペアワイズテスト(オールペア法)」|情報処理問題1000本ノック

システム開発のテスト工程(ブラックボックステスト)において、複数の設定値(パラメータ)の組み合わせテストを行う際、テスト件数を抑えつつ効率的に不具合を見つけるための代表的なテスト技法を攻略しましょう。

1. 【 問題 】:ソフトウェア開発技術(テスト技法・品質管理)

【 問題 】 ソフトウェアテストの設計技法に関する記述です。OS、ブラウザ、画面サイズなど、複数のパラメータが存在する場合、すべての組み合わせをテストしようとするとテストケース数が膨大(組み合わせ爆発)になります。この問題に対し、「任意の2つのパラメータの組み合わせ(対)」が少なくとも1回は含まれるように選定し、テストケース数を大幅に削減しながら高い網羅性を保つテスト技法を何と呼ぶでしょうか?

(ア)ペアワイズテスト(オールペア法)
(イ)境界値分析(限界値テスト)
(ウ)等価分割法
(エ)トップダウンテスト

2. 正解:

正解:(ア)ペアワイズテスト(オールペア法)

3. 解説:「2つの組み合わせ」を押さえればバグの約8割は見つかる!

ペアワイズテスト(Pairwise Testing / オールペア法)は、2つの因子間の組み合わせ(2因子間網羅)をすべて網羅するようにテストケースを作成するブラックボックステストの手法です。
ソフトウェアの不具合(バグ)の多くは「単独の条件」か「2つの条件の相互作用」によって発生するという経験則に基づいています。そのため、全組み合わせを実行しなくても、2因子間を網羅するだけで高い欠陥検出率を得ることができます。

【ソフトウェア開発で押さえるテスト技法の比較】 ← ココが試験のポイント!

テスト設計技法アプローチ・目的
(ア)ペアワイズ法(オールペア法) 組み合わせのパラメータから「2因子のペア」を抽出して件数を大幅削減する。
(イ)境界値分析 仕様の「境界ギリギリの値(上限・下限)」を入力して不具合を見つける。
(ウ)等価分割法 同等とみなせる入力値のグループ(同値クラス)から代表値を1つ選んでテストする。
(エ)トップダウンテスト 上位モジュールから下位へと順番に結合して行う構造テスト手法(スタブを使用)。

1. 理解のコツ: 「服のコーディネート(帽子・服・靴)」に例えてみましょう。
・帽子3種類 × 服3種類 × 靴3種類 の全組み合わせは「3×3×3=27通り」です。
・しかし、ペアワイズ法を使うと「帽子と服」「服と靴」「帽子と靴」のあらゆるペアを網羅した9通り程度のテストだけで済ませられます。
・「特定の帽子と特定の靴を合わせた時だけ起きる不具合」などを、たった1/3の労力で見つけ出すことができます。

2. 試験対策の視点: ソフトウェア開発技術分野の午後問題や選択式試験で非常によく問われるテーマです。
問題文に「複数のパラメータ」「組み合せ爆発」「2つの因子(ペア)の組み合わせを網羅」「直交表」といったキーワードがあれば、即座にペアワイズ(オールペア)を導き出せるようにしておきましょう。


4. まとめ

パラメータが爆発する組み合わせテストにおいて、「2因子のペアを網羅して件数を削減する」のがペアワイズテストです。境界値分析や等価分割法と並ぶ主要なテスト設計技法として覚えておきましょう!


【ソフトウェア開発技術】変化を抱擁するアジャイルの雄!「エクストリームプログラミング(XP)」|情報処理問題1000本ノック

仕様変更やトラブルは開発の「敵」ではなく、当然起こる「前提」である。そんな逆転の発想から生まれたアジャイル開発手法の代表格「エクストリームプログラミング(XP)」の行動指針と特徴を攻略しましょう。

1. 【 問題 】:ソフトウェア開発プロセス(XPの特徴とプラクティス)

【 問題 】 アジャイル開発手法の一つである「エクストリームプログラミング(XP)」の特徴や、実践すべき行動指針(プラクティス)として、不適切なものはどれでしょうか?

(ア) 継続的なインテグレーション(CI)の実施
(イ) 最初から正しく行う(完璧な初期設計)
(ウ) 短期間でのリリース
(エ) 反復(イテレーション)型の開発

2. 正解:

正解: (イ) 最初から正しく行う

3. 解説:「完璧なフライング」よりも「柔軟な修正」を重視する

エクストリームプログラミング(XP)は、「変化を受け入れる(Embrace Change)」をスローガンに掲げる開発手法です。
従来のウォーターフォール開発のように「最初の設計段階で100%完璧(正しく)に仕様を決め、その通りに作る」という一発勝負のやり方を否定します。XPでは、最初は必要最小限のシンプルなコードを書き、プログラムを頻繁に合体させて自動テストする「継続的インテグレーション(CI)」や、数週間単位の「短期間でのリリース」「反復型開発」を繰り返すことで、徐々にシステムを正しく育てていきます。

【試験に出るエクストリームプログラミング(XP)の主要プラクティス】 ← ココが試験のポイント!

プラクティス名具体的な開発の行動・ルール
テスト駆動開発(TDD) プログラムを書く前に、まずそのプログラムの「テストコード」を先に作成する。
ペアプログラミング 1台のPCの前に2人のプログラマが座り、1人がコードを書き、もう1人がチェックする。
リファクタリング プログラムの動き(外部仕様)を変えずに、内部のソースコードを綺麗に整理する。
継続的インテグレーション 作ったコードを1日に何度もメインシステムに合体させ、自動テストでバグを即時発見する。

1. 理解のコツ: 「車の運転」に例えてみましょう。
「最初から正しく行う」というのは、『東京から大阪まで運転する際、出発前に全ての交差点の信号のタイミングや、前の車の動きを完璧に予測し、ハンドルを1ミリも修正せずに目的地に到着しようとする』ようなものです。現実には絶対に不可能です。
・XPの思想は、『とりあえず出発し、道が曲がっていたらハンドルを切り、前の車が止まったらブレーキを踏む(=リファクタリングや仕様変更に対応する)』という柔軟な運転です。小さな反復(イテレーション)を繰り返し、常にテストという「カーナビ」で現在地を確認しながら進むため、最初の段階で完璧を目指す必要はありません。この『変化にその都度、爆速で適応していく』というスタンスがXPの真髄です。

2. 試験対策の視点: ITパスポート、基本情報技術者、応用情報技術者の開発技術分野において、アジャイル開発の具体的な手法として定番の出題です。問題文の「不適切なもの」として、今回のように「最初から完璧に」「最初の段階で詳細な仕様決定を」「厳格な計画遵守」といった、ウォーターフォール型の特徴が混入するパターンが非常に多いです。
また、XPに関する問題では、上の表に挙げた「テスト駆動開発」「ペアプログラミング」「リファクタリング」といった『具体的なプラクティスの名前と中身の組み合わせ』が単独の4択問題として直接狙われます。これらは一見すると「やりすぎ(極端=Extreme)」に見えるルールですが、これらを徹底することでチーム全体の開発速度と品質を爆発的に高めることができる、というXPならではのユニークな特徴をセットで覚えておきましょう。


4. まとめ

「最初の設計段階での完璧(正しく行うこと)を目指さず、数週間単位の短期間の反復開発、テスト駆動開発、継続的インテグレーションなどを駆使して、仕様変更に柔軟に対応していくアジャイル開発手法」。これがエクストリームプログラミング(XP)です。アジャイル開発ならではの「変化を前提とする」という思想の根底を、しっかりと記憶に刻んでおきましょう!


【ソフトウェア開発技術】毒ガスを検知するカナリアのようにリスクを察知!「カナリアテスト」|情報処理問題1000本ノック

全ユーザーを巻き込む大惨事を未然に防ぐ。最新のアップデートをまずは一部の環境だけで試し、安全性を確かめる「カナリアテスト」の仕組みを攻略しましょう。

1. 【 問題 】:ソフトウェアのリリース(デプロイ)戦略

【 問題 】 システム開発やサービス運用におけるデプロイ(本番環境への反映)手法に関する問題です。新バージョンのソフトウェアをリリースする際、すべての本番サーバーや全ユーザーに一斉に適用するのではなく、まずは全体の「数%のユーザー(または一部のサーバー)」だけに限定して先行してアップデートを実施し、本番環境での動作ログやバグの有無を監視・評価した上で、問題がなければ段階的に全体へ展開していく手法はどれでしょうか?

① カナリアテスト (Canary Testing / カナリアデプロイ)
② ブルーグリーンデプロイメント (Blue-Green Deployment)
③ ローリングデプロイ (Rolling Deployment)
④ A/Bテスト (A/B Testing)

2. 正解:

正解: ① カナリアテスト (Canary Testing / カナリアデプロイ)

3. 解説:万が一バグがあっても、被害を「最小限」に抑え込む

どれだけ事前にテストを重ねても、実際のユーザーが使う本番環境(大規模なアクセスや多様な端末)でしか発生しない予期せぬバグは存在します。これを一斉にリリースするとシステム全体がダウンしてしまいますが、カナリアテストを使えば、万が一バグがあっても影響を受けるのは一部のユーザーだけで済みます。

【カナリアテストの名前の由来と仕組み】

名前の由来:かつて炭鉱で働く人々が、目に見えない有毒ガス(一酸化炭素など)をいち早く検知するために、人間よりも毒ガスに敏感な「カナリア」を鳥かごに入れて地下へ連れて行った歴史に由来します。カナリアに異変が起きれば、人間が倒れる前に危険を察知して脱出できました。 ← ココが問題の正解!

運用の流れ:システム運用では、全体の5%のアクセスだけを新バージョン(カナリア環境)に流します。もしここでエラー率が跳ね上がったり(カナリアが鳴き止んだり)したら、即座にその5%を旧バージョンに「切り戻し(ロールバック)」します。これによって、残りの95%のユーザーには一切迷惑をかけずに本番の不具合を発見・修正することができます。
[ 選択肢のシャッフル解説(クラウド・DevOps時代のデプロイ手法たち) ]
★ ② ブルーグリーンデプロイメント:本番環境と全く同じシステムをもう1セット(古い方をブルー、新しい方をグリーンなどと呼ぶ)用意しておき、ネットワークの接続先(ルーターやロードバランサー)のスイッチをポンと切り替えることで、一瞬で新バージョンへ移行する手法です。一部に限定するのではなく、一気に切り替えます。
★ ③ ローリングデプロイ:複数ある本番サーバーを「1台ずつ順番に」アップデートしていく手法です。サーバーの稼働を止めずにリリースできますが、カナリアテストのように「バグがないかじっくり様子を見る」というよりは、自動で次々と更新していくニュアンスが強いです。
★ ④ A/Bテスト:デザインや機能の「どちらの方がユーザーに好まれるか(ボタンのクリック率や売上が上がるか)」を比較するためのマーケティング手法です。カナリアテストが「バグやトラブルの発見(安全対策)」を目的とするのに対し、A/Bテストは「効果測定(ビジネス成果)」を目的とします。

1. 理解のコツ: 「大人気オンラインゲームのアップデート」に例えてみましょう。
・新機能を世界中のプレイヤー全員に一斉に配信して、もしゲームが起動しなくなったら世界中で大炎上してしまいます。
・そこで、『まずは全体の数%のプレイヤー(または特定の地域のサーバー)だけに先行して新機能を配信し、2〜3日遊んでもらってバグが起きないかチェックする』。そして「よし、クラッシュしてないな!」と確認できてから、世界全体へ配信を広げていく。この、安全第一の先行リリース作戦こそがカナリアテストです。
2. 試験対策の視点: 「一部のユーザー(サーバー)に限定してアップデート」「問題を発見(安全性の確認)する」という記述があれば「カナリアテスト(カナリアデプロイ)」が一択です。基本情報の科目A、応用情報の午前試験、そしてシステムアーキテクトやITサービスマネジメント試験において、アジャイル開発やCI/CD(継続的インテグレーション/継続的デリバリー)、DevOpsを実践するためのモダンなリリース管理技術として非常によく狙われるトレンド用語です。


4. まとめ

「本番環境での致命的なバグやパフォーマンス低下を、全社・全ユーザーに波及させる前に、ごく一部の限定された環境でいち早く検知・防衛するための賢明なデプロイ戦略」。これがカナリアテストです。クラウドやコンテナ技術の普及によって、このようにアクセスを数%だけ別環境に流す制御が簡単になったため、現代のITサービスでは主流の防衛策となっています。


【開発管理】矢印の罠に引っかかるな!「プレジデンス・ダイアグラム法」|情報処理問題1000本ノック

プロジェクトのスケジュールを組む際、作業の順番(前後関係)を網の目のように表すネットワーク図。記述の「主語」を冷静に見極める必要がある罠問題を攻略しましょう。

1. 【 問題 】:スケジュール管理のネットワーク図

【 問題 】 プロジェクト管理におけるスケジュール管理技法(タイムマネジメント)のうち、作業の依存関係を表す「ネットワークダイアグラム」に分類され、個々の『作業(タスク)』をノード(結合点となる四角などの箱)で表現し、その作業間の『順序(前後関係)』をアロー(矢印)で表現するものはどれでしょうか?

(ア)プレジデンス・ダイアグラム法
(イ)アロー・ダイアグラム法
(ウ)クリティカル・ダイアグラム法
(エ)作業イベント法

2. 正解:

正解: (ア)プレジデンス・ダイアグラム法(PDM)

3. 解説:「アロー」という言葉の罠を解き明かす

この問題の最大のポイントは、「何がノードで、何がアローか」という組み合わせの定義です。試験では(ア)と(イ)の明確な違いが超高頻度で狙われます。

【絶対に混同してはならない2つの図法の違い】

■ (ア)プレジデンス・ダイアグラム法(PDM:AON方式)
構造作業(アクティビティ)そのものを「ノード(四角などの箱)」の中に書きます。そして、作業を繋ぐ「矢印(アロー)」は、単に『順番』を表すためだけに使います。 ← ココが問題の正解!

■ (イ)アロー・ダイアグラム法(PERT:AOA方式)
構造作業(アクティビティ)そのものを「アロー(矢印)」の上に書きます。そして、「ノード(丸印)」は作業の『開始イベント・終了イベント(結合点)』を表します。
[ 選択肢のひっかけポイント ]
★ (ウ)クリティカル・ダイアグラム法:そのような名前の図法はありません。これらの図から導き出される、遅れが絶対に許されない最長の経路のことは「クリティカルパス」と呼びます。
★ (エ)作業イベント法:こちらも存在しない架空の用語です。

1. 理解のコツ: 目の前にある「タスクカード(四角い付箋)」を想像してください。「①要件定義」と書いた付箋と、「②設計」と書いた付箋を壁に貼り、それを線(矢印)で結びますよね。この、作業自体が「四角い箱(ノード)」になっている、私たちが普段一番よく見かける馴染み深い書き方プレジデンス・ダイアグラム法(PDM)です。
2. 試験対策の視点: 問題文をパッと見たときに「アローで表現する」という単語だけを目が拾ってしまうと、反射的に(イ)を選んで失点してしまいます。「作業をノードで」と書かれているか、それとも「作業をアローで」と書かれているか、主語を1文字ずつ丁寧に読むことが午前試験の罠を回避する鉄則です。


4. まとめ

「作業を箱(ノード)で表し、その前後関係を矢印で繋ぐ、現代のプロジェクト管理ツールの標準的なネットワーク図法」。これがプレジデンス・ダイアグラム法です。この図法を用いることで、作業の並列実行や「前が完全に終わっていなくても次の作業を少しフライングして始めてよい(リード・ラグ)」といった複雑なスケジュール調整を視覚的に行えるようになります。


【開発管理】本番環境でしか見えないリスクを暴く!「シフトライトテスト」|情報処理問題1000本ノック

テストを左(上流)に前倒しする「シフトレフト」の対義語。リリース「後」の本番環境というリアルな舞台で品質を磨き上げる最新のテストマネジメント、シフトライトを攻略しましょう。

1. 【 問題 】:モダン開発における品質管理のアプローチ

【 問題 】 近年のソフトウェア開発および運用管理において、システムを本番環境にリリースした「後」に、実際のユーザー利用環境やリアルなトラフィック(通信量)を用いてシステムの品質、パフォーマンス、安定性を継続的に検証するテスト管理のアプローチはどれでしょうか?

① シフトレフトテスト (Shift-Left Testing)
② シフトライトテスト (Shift-Right Testing)
③ リグレッションテスト (Regression Testing)
④ スモークテスト (Smoke Testing)

2. 正解:

正解: ② シフトライトテスト(Shift-Right Testing / 本番環境テスト)

3. 解説:ステージング環境の「限界」を超える

従来のウォーターフォール開発や、先述の「Wモデル」では、テスト工程をなるべく左(上流・開発初期)に寄せる「シフトレフト」が正義とされてきました。しかし、クラウドやマイクロサービスが複雑に絡み合う現代のシステムでは、「本番と全く同じ環境」をテスト用に用意することがコスト的・技術的に不可能になってきています。そこで生まれたのが「シフトライト(テスト工程を右側の本番運用へ拡張する)」という発想です。

【シフトライトテストの具体的な手法例】

ただ本番環境でぶっつけ本番のテストをするわけではなく、ユーザーに影響が出ないよう高度な管理手法とセットで行われます。

カナリアリリース:新バージョンを本番環境にデプロイする際、まずは全体の「5%のユーザー」にだけ先行公開して様子(エラー率や負荷)をテストし、問題がなければ全体に広げる。
A/Bテスト:本番環境でユーザーを2つのグループに分け、異なるUIや機能を同時に提供してどちらがスムーズに動作・利用されるかを検証する。
カオスエンジニアリング:本番環境のシステムにわざと疑似的な障害(サーバーを1台強制停止するなど)を発生させ、システムが自動復旧するか、耐障害性があるかをテストする。
[ 選択肢のひっかけポイント ]
★ ①:シフトレフトは、要件定義や設計といった「リリースより遥か前(左側)」の段階で不備を見つけるアプローチなので真逆です。
★ ④:プログラムがビルドできた直後に、主要な機能がとりあえず起動するかを確かめる「ごく初期の簡易テスト」です。

1. 理解のコツ: 「新車の開発」に例えてみましょう。テストコース(実験室・ステージング環境)でどれだけ安全確認(シフトレフト)を重ねても、実際に「大雨の一般公道(本番環境)」を走らせてみないと、本当のワイパーの弾き具合やタイヤの静音性は分かりません。一般公道に出た「後」も、ドライブレコーダーやセンサーのデータを集めて車の挙動を検証し続ける、これがシフトライトテストです。
2. 試験対策の視点: 「本番環境へのリリース後」「実際のユーザー環境での検証」「カナリアリリースやカオスエンジニアリング」というキーワードが出たらシフトライトテストが一択です。DevOps(開発と運用の融合)やSRE(サイト信頼性エンジニアリング)の文脈で、近年非常に注目されているマネジメント用語です。


4. まとめ

「リリース後の本番環境という究極のリアル舞台で、継続的にシステムの安全性を検証する管理アプローチ」。これがシフトライトテストです。事前の「シフトレフト」で防げるバグは徹底的に防ぎ、事前検証が不可能なリスクは「シフトライト」で監視・制御する、という両輪のマネジメントが現代のクオリティ管理の最適解とされています。


【開発管理】ユーザーの「欲しい」をテストで定義!「ATDD(受け入れテスト駆動開発)」|情報処理問題1000本ノック

アジャイル開発において、チーム全員が「同じゴール」を向くための管理手法。要望の定義と同時にテストの合格条件を決めてしまう、ATDDを攻略しましょう。

1. 【 問題 】:アジャイル開発のマネジメントプラクティス

【 問題 】 アジャイル開発において、顧客、ビジネスアナリスト、開発者、テスターが協力し、ユーザーストーリー(機能要求)の作成と同時に、その機能の完了条件となる「受け入れテスト」を明確に定義して開発を進める手法はどれでしょうか?

① TDD (Test-Driven Development)
② BDD (Behavior-Driven Development)
③ ATDD (Acceptance Test-Driven Development)
④ FDD (Feature-Driven Development)

2. 正解:

正解: ③ ATDD(Acceptance Test-Driven Development / 受け入れテスト駆動開発)

3. 解説:「できた!」の基準を最初に握る

ATDDは、開発をスタートする前に「何を作れば顧客が満足して受け入れてくれるか」というゴール(受け入れテスト)を全員で合意し、それを道標にして開発を“駆動(リード)”していく管理手法です。

【ATDDの4つのステップ(3アミーゴの協力)】

ATDDでは、ビジネス・開発・テストの3つの視点(3アミーゴ)で話し合います。

1. 議論 (Discuss):顧客が「こんな機能(ユーザーストーリー)が欲しい」と提案する。
2. 抽出 (Distill):全員で話し合い、「じゃあ、〇〇の条件でボタンを押したら、××の画面になる。これで合格(受け入れ)ですね?」と、具体的なテスト例を同時に定義する。 ← ココが問題の正解!
3. 実装 (Develop):そのテストをパスすることだけを目指して、開発者がコードを書く。
4. デモ (Demo):作った機能でテストを走らせ、顧客に確認してもらう。
[ 選択肢のひっかけポイント(似た3文字単語に注意) ]
★ ①:TDDは、開発者がプログラムの最小単位(関数など)に対して、コードを書く前に単体テストを書く「実装テクニック(開発技術)」です。顧客視点の受け入れテストを対象とするATDDとは規模や目的が異なります。
★ ②:BDDは、TDDやATDDをさらに「システムの振る舞い(ユーザーの行動)」に焦点を当て、「Given(前提)-When(もし)-Then(ならば)」という自然言語に近い文章で記述する手法です。

1. 理解のコツ: 「友達への誕生日プレゼント」に例えてみましょう。「何かいい感じの服が欲しい(ユーザーストーリー)」と言われて勝手に選ぶと、好みが合わずに失敗するリスクがあります。そうではなく、最初に「青色で、サイズはMで、普段着として洗えるパーカー(受け入れテスト)」と、合格ラインを具体的に約束してからお店に買いに行く。これがATDDです。絶対にハズレ(手戻り)が起きません。
2. 試験対策の視点: 「ユーザーストーリーの作成と同時」「受け入れテスト(または受け入れ基準)を定義」「顧客やテスターと協力」という管理・コミュニケーション重視の記述があればATDDです。先述の「Wモデル」や「シフトレフト」の思想を、アジャイル開発のチーム運営に落とし込んだ手法として出題されます。


4. まとめ

「要求定義(ユーザーストーリー)と受け入れテストをセットで作り、開発のブレをなくす管理手法」。これがATDDです。ビジネス側と開発側の『言った・言わない』の不毛な衝突を完全に防ぎ、無駄なコードを1行も書かずに最短ルートで顧客が本当に欲しいシステムを届けるための強力なプラクティスです。



【開発管理】設計とテストは表裏一体!「Vモデル」|情報処理問題1000本ノック

ソフトウェア開発の流れを「Vの字」で表現するVモデル。各開発工程の成果物が、どのテスト工程の基準(インプット)になるのか、その美しい対応関係を攻略しましょう。

1. 【 問題 】:ソフトウェア開発プロセスモデル

【 問題 】 ソフトウェア開発における「Vモデル」に関する記述として、最も適切なものはどれでしょうか?

① 開発工程の初期段階でプロトタイプ(試作品)を作成し、ユーザーの評価を得ながら仕様を確定していくモデルである。
② 開発工程とテスト工程を対比させて並べたものであり、各開発工程の成果物(アウトプット)が、それぞれ対応するテスト工程の検証基準(インプット)となることを示したモデルである。
③ システムをいくつかの機能単位に分割し、優先度の高い機能から順に設計、開発、テスト、リリースを繰り返していくモデルである。
④ 設計書のレビュー(静的テスト)を重視し、コードを書く前の段階で仕様の矛盾をすべて洗い出すことを目的としたモデルである。

2. 正解:

正解: ② 開発工程とテスト工程を対比させて並べたものであり、各開発工程の成果物が、それぞれ対応するテスト工程の検証基準となることを示したモデルである。

3. 解説:左で作り、右で試す

Vモデルは、ウォーターフォール開発における「開発工程」と「テスト工程」の1対1の対応関係を分かりやすく視覚化したものです。Vの字の左側を下に向かって進むのが開発、右側を上に向かって進むのがテストになります。

【Vモデルの美しい対応マップ】

左側の開発で作った「設計書(アウトプット)」は、右側のテストを行う際の「テスト仕様書(インプット)」に化けます。

要件定義(ユーザーの要望)
システムテスト/受入れテスト(本当に要望通り動くか?)

基本設計/外部設計(画面や全体の仕組み)
統合テスト/結合テスト(部品を繋げて仕様通り動くか?)

詳細設計/内部設計(プログラムの細かいロジック)
単体テスト(関数やクラス単体で正しく動くか?)
[ 選択肢のひっかけポイント ]
★ ①:これは「プロトタイピングモデル」の説明です。
★ ③:これは「イテレーティブ(反復)開発」や「アジャイル開発」に近い説明です。

1. 理解のコツ: 「取扱説明書」をイメージしてください。基本設計の段階で「この電化製品のリモコンのボタンを押すと、画面が切り替わります(取扱説明書の内容)」と決めたら、後で行う結合テストでは、その取扱説明書を読みながら「よし、ボタンを押して本当に画面が切り替わるな」とテストをします。左側で作った仕様書がないと、右側のテストができないという強い結びつきを示すのがVモデルです。
2. 試験対策の視点: 「開発工程とテスト工程の対応」「成果物がテストのインプット(基準)になる」という記述があればVモデルで間違いありません。午前問題では概念を問われ、午後問題では「基本設計書の不備は、どのテスト工程で発覚するか?(答え:結合テスト)」といった、具体的な対応関係を突っ込んでくる問題が頻出します。


4. まとめ

「上流の設計と、下流のテストを1対1でペアリングした開発モデル」。これがVモデルです。このモデルを意識することで、設計書を書いている段階から「この仕様はどうやってテストしようか?」と考える視点が生まれ、結果として手戻りの少ない高品質な開発ができるようになります。


【開発技術】修正による「飛び火バグ」を防ぐ!「リグレッションテスト」|情報処理問題1000本ノック

バグを1つ直したら、別の場所が動かなくなった――開発現場で誰もが経験するこの恐怖。システムの「先祖返り」やバグの拡散を防ぐための必須テスト、リグレッションテストを攻略しましょう。

1. 【 問題 】:ソフトウェアテストの手法

【 問題 】 ソフトウェアの変更やバグ修正、機能追加を行った際に、その修正がシステム内の他の正常だった部分に予期せぬ悪影響(新たなバグの混入など)を及ぼしていないかを確認するために、以前実施したテストを再度行うものはどれでしょうか?

① リグレッションテスト(回帰テスト)
② 統合テスト(結合テスト)
③ 受入れテスト(承認テスト)
④ ストレステスト(負荷テスト)

2. 正解:

正解: ① リグレッションテスト(回帰テスト / 退行テスト)

3. 解説:既存の安心をもう一度確かめる

リグレッション(Regression)とは「後退、退行」という意味です。プログラムを書き換えたことで、システムの品質が「以前より悪くなっていないこと」を保証するために行うテストです。

【リグレッションテストの極意と自動化】

■ 目的:サイドエフェクト(副作用)の検知
・バグ修正そのものが正しく直っているかを確認するのは「デバッグ(修正確認テスト)」です。
・リグレッションテストは、その修正によって「関係ないはずのA機能やB機能が、巻き添えを食らって壊れていないか」を調べるために、過去に合格したテストケースを丸ごとやり直します。

■ 開発現場での運用:自動化の主役
・コードを書き換えるたびに毎回大量の過去のテストを行う必要があるため、人間が手動でやると膨大な時間がかかります。そのため、現代の開発(CI/CD:継続的インテグレーションなど)では、ツールを使って夜間に自動でリグレッションテストを回す仕組みが定着しています。
[ 選択肢のひっかけポイント ]
★ ②:複数のモジュール(部品)を組み合わせて、インターフェースのデータの受け渡しを確認するテストです。
★ ③:開発の最終段階で、発注元(ユーザー)が要望通りのシステムになっているかを確認するテストです。
★ ④:大量のデータやアクセスを同時に発生させ、システムが限界まで耐えられるかを試すテストです。

1. 理解のコツ: 「お家のリフォーム」をイメージしてください。2階の水回りを新しく修理してもらった(バグ修正)あと、その工事のせいで「1階の電気がつかなくなっていないか」「壁にヒビが入っていないか」を確認するために、家中のスイッチをもう一度入れて回る。これがリグレッションテストです。
2. 試験対策の視点: 「プログラムの変更・修正」「他の部分に悪影響がないか確認」「以前のテストを再度実施」というキーワードが並んだらリグレッションテストが一択です。カタカナで「リグレッションテスト」、漢字で「回帰テスト」または「退行テスト」と、試験によって表記が揺れるので、すべて同じ意味だと覚えておきましょう。


4. まとめ

「システムの修正・追加によって、正常だった他の機能が壊れていないかを確かめる再テスト」。これがリグレッションテストです。アジャイル開発や継続的な機能改善(アップデート)を行う現代のソフトウェア開発において、システムの品質を一定に保つための生命線と言えるテスト手法です。


        
  • 1
  • 2