システム開発手法
共通フレーム、要件定義、ウォーターフォール、V字モデル、アジャイル、DevOpsを整理する
このページの役割
このページの役割
システム開発は、単に「プログラムを書く」のではなく、企画から廃棄まで、複数の工程を連携させるプロセスです。このページは、システム開発の全体の枠組み(共通フレーム)、開発モデルの選択基準、テストと品質の関係、要件定義と設計の違いを整理し、試験に頻出する開発手法を比較して説明します。
学習のポイント
- 共通フレーム(SLCP) で工程の全体像と各工程の役割を理解する
- 要件定義と設計 の違いを「何を」と「どう」で切り分ける
- 開発モデルの選択基準 を要件の変更可能性と規模で判断する
- V字モデル でテスト工程と開発工程の対応を把握する
- アジャイル・スクラム・DevOps の違いと役割分担を整理する
試験で問われる観点
- 共通フレーム7工程の目的と出力物を、企画→開発→運用→廃棄の流れで説明できるか
- 要件定義と設計のどちらが「何を」で、どちらが「どう」か判別できるか
- ウォーターフォール、V字モデル、アジャイルの特徴を、変更への強さ・進め方・テスト戦略で比較できるか
- スクラム(役割・イベント・作成物)の構成と、DevOpsが開発と運用の統合である理由を説明できるか
- ホワイトボックス・ブラックボックステストの違い、テスト段階(単体・統合・システム・UAT)の対応関係を正確に言えるか
定義と仕組み
共通フレーム(SLCP)と工程
共通フレームとは
共通フレーム は、ソフトウェア開発ライフサイクル全体を発注者と受注者が同じ言葉で理解 するための標準ガイドラインです(SLCP:Software Life Cycle Process、2013版が最新)。試験で開発手法が出題されたとき、まず「どの工程の話か」を判別することが理解の近道になります。7つの工程が順序立てて進みますが、開発モデル(ウォーターフォールなど)によって 進め方は変わります。
なぜ共通フレームが必要か
システム開発は複数企業が関わることが多く、発注側と受注側で用語や期待が異なると、要件のズレ、品質問題、遅延などが起こります。共通フレームは、どの業界・企業でも「企画」「要件定義」「開発」などの工程を同じ定義で扱い、意思疎通をスムーズにする役割を果たします。
SLCP の7工程と役割
| 工程 | 目的 | 主な活動 | 担当 | 出力物 |
|---|---|---|---|---|
| 企画 | システム化の方向を決める | ビジネス目標の確認、投資対効果の検証 | 経営層・企画部門 | 事業計画書、RFP(提案要求書) |
| 要件定義 | ユーザーが求める機能と品質を明確化 | ヒアリング、ワークショップ、ユースケース作成 | アナリスト・ユーザー | 要件定義書、機能要件・非機能要件の整理 |
| 設計 | 要件を技術で実装する方法を決める | 基本設計(外部設計)、詳細設計(内部設計) | システム設計者 | 設計書(構成図、ER図、クラス図など) |
| 実装 | プログラムを実装する | コーディング、ユニットテスト実施 | 開発者 | ソースコード、実装成果物 |
| テスト | 全体が要件を満たすことを検証 | 統合テスト、システムテスト、UAT | QA・ユーザー | テストレポート、欠陥記録 |
| 運用 | 本番環境でシステムを稼働・監視 | 監視、バックアップ、トラブル対応 | 運用チーム | 運用ログ、監視記録、アラート |
| 保守・廃棄 | バグ修正、小規模改善、最終終了 | パッチ適用、性能改善、データ移行計画 | 保守チーム・企画 | 保守記録、移行計画 |
工程間の関係を図で理解する
企画で「何をするか」の方向が決まり、要件定義で「ユーザーが求める具体的な機能」が決まり、設計で「技術的な実装方法」が決まります。この流れを頭に置くと、後述の「要件定義と設計の違い」や「開発モデルの違い」が理解しやすくなります。
要件定義と設計の違い
なぜ分ける必要があるのか
試験で最も落としやすいのが「要件定義」と「設計」の混同です。要件定義は**「ユーザーが何を求めているか」を理解して言葉にする工程で、設計は「その要件をどうコンピュータで実現するか」を決める工程**です。この違いを把握すると、開発モデルの選択理由、テスト戦略、契約形態までが自動的に理解できるようになります。
「何を」(要件定義)と「どう」(設計)の違い
| 観点 | 要件定義(What:何を) | 設計(How:どう) |
|---|---|---|
| 主な質問 | ユーザーは何を必要としているか。どんな制約があるか | その機能をどのコンポーネント・DB・画面で実装するか |
| 関わる人 | ユーザー・ビジネスアナリスト・要件エンジニア | システム設計者・アーキテクト・DBA |
| 内容の詳しさ | 機能要件(売上を記録する、月次レポートを出力する)、非機能要件(応答時間3秒以内、稼働率99.9%) | 画面構成、DB設計(ER図)、API、モジュール分割、処理フロー |
| 成果物 | 要件定義書、要件トレーサビリティマトリクス | 基本設計書、詳細設計書、ER図、ユースケース図、クラス図 |
| 変更されやすさ | 変更されやすい。ユーザーのニーズは後になって変わることが多い | 要件が定まった後は比較的安定しているが、設計の誤りは後期に見つかると高コスト |
| 変更の影響範囲 | 大きい。全工程に波及する | 設計以降の工程に影響。要件定義には戻らない |
具体例で理解する
ユースケース:オンラインショップの「在庫不足時の通知」機能
- 要件定義の視点:
- ユーザーが在庫不足を検知したいというニーズがある
- 在庫数がしきい値を下回ったら、メール・SMS・アプリ通知のいずれかで知らせたい
- 誰に通知するか(店長、営業担当)
- どのくらいの速さで通知するか(即座、あるいは数時間後か)
- これらが「機能要件」と「非機能要件」
- 設計の視点:
- メール送信はどのシステムを使うか(SMTP、AWS SES など)
- DB のどのテーブルを参照して在庫数をチェックするか
- 通知履歴はどう記録するか(監査ログ)
- どのAPIを新規実装するか
- これらが「基本設計」「詳細設計」
この違いが分かると、「要件変更が頻繁ならアジャイル、要件が確定済みなら請負契約」という判断も自動的に出てきます。
機能要件と非機能要件
機能要件(Functional Requirements)
ユーザーが目に見える形で期待する処理・機能です。「このシステムで何ができるか」を直接的に説明するもの。
- 売上を記録する機能
- 在庫数を自動的に減らす機能
- 月次レポートを出力する機能
- 顧客情報を検索する機能
- 営業予測グラフを表示する機能
機能要件は、ユーザーとの要件定義の場面でまず出てくるものです。多くの場合、「○○ができるようにしてほしい」という形で表現されます。
非機能要件(Non-Functional Requirements)
機能そのものではなく、システムが満たすべき「品質」に関する要件です。ユーザーからは直接は要望されないことが多いですが、システムの使いやすさ、信頼性、セキュリティに大きく影響します。
| 種別 | 意味 | 具体例 |
|---|---|---|
| 性能・応答時間 | どのくらい速く処理するか | 同時接続 100 ユーザー時の平均応答時間が 3 秒以内 |
| 信頼性・可用性 | どのくらいの期間、安定稼働するか | 99.9% の稼働率(年間ダウンタイムは 8.76 時間以内に収めよ) |
| セキュリティ | 不正アクセスやデータ漏洩をどう防ぐか | SSL/TLS で通信を暗号化、全操作をログ記録、定期的なペネトレーションテスト実施 |
| 保守性・拡張性 | 後から機能追加やバグ修正がしやすいか | コード品質の基準を定義、API 仕様書を整備、テストカバレッジ 80% 以上 |
| 運用性 | 日々の運用がどう楽になるか | バックアップは自動化、障害時の復旧時間(RTO)1 時間以内、データ喪失可能性(RPO)15 分以内 |
| スケーラビリティ | 将来の成長に対応できるか | ユーザー数が 10 倍になってもシステムが耐えられる、ピークアクセス時も応答時間 5 秒以内 |
なぜ非機能要件が重要か:多くの品質問題(遅い、落ちやすい、セキュリティ侵害)は、非機能要件の定義が甘かったために発生します。試験では、特に性能、可用性、セキュリティがよく問われます。
要件定義技法
ユーザーとの対話のなかで、要件を漏らさず、正確に把握し、ユーザーとの認識ズレを早期に解消するための手法群です。試験では、各技法を「どんなときに使うか」で判別することが出題されます。
| 技法 | 概要 | メリット | デメリット・注意点 | 使う場面 |
|---|---|---|---|---|
| ヒアリング | ユーザーへ直接、1対1 で要件を聞き取る | 詳細な背景情報が得られる | 聞き手のスキルに大きく依存。異部門の要件調整が難しい | 初期段階。ユーザー側に不確実性がある場面 |
| ワークショップ | 複数部門・複数ユーザーを一堂に集め、要件について議論・合意形成 | 異なる利益関係者の要件を同時に調整できる。合意が早い | 時間がかかる。主導者のファシリテーション力が必須 | 営業・企画・現場など複数部門にまたがる要件の統一が必要な場面 |
| プロトタイピング | 試作品(UI画面など)を実装して、ユーザーに使わせ、反応を見る | ユーザーのイメージが曖昧な場面(UI/UX など)で誤解が早期に判明。ユーザー満足度が高い | 試作コストが発生。完成品と混同されるリスク。要件凍結まで時間がかかる可能性 | 新しいサービス・UI が決まっていない場合。ユーザー側が求めるイメージが漠然としている場面 |
| ユースケース分析 | シナリオ形式で「アクター(利用者)」と「システム」の対話を記述 | 複雑な業務フローが視覚化される。テストケースに直結しやすい | UML の記法を理解する必要がある | 業務フローが複雑で、複数パターンがある場面。大規模システム |
| 要件マトリクス(トレーサビリティマトリクス) | 要件を表で整理し、各要件とテストケース・設計・実装の対応を記録 | 要件の漏れ、テスト漏れを防ぎやすい。変更管理が容易 | 表の行と列が膨大になると管理が複雑。手作業なら手間が大きい | 要件数が多い大規模プロジェクト。品質重視の案件(公共事業など) |
開発モデル比較
開発モデル選択の基準
システム開発は、プロジェクトの特性によって、どの手法を選ぶかが決まります。試験で頻出なのは:
- 要件が明確か、不確実か(変更可能性)
- プロジェクト規模(小~中か、大か)
- 納期の厳しさ(余裕あるか、短期納期か)
- リスク(高リスクか、低リスクか)
この4つの軸で判断すると、最適な開発モデルが決まります。
代表的な開発モデルの比較
| モデル | 特徴 | メリット | デメリット | 要件の特性 | リスク | 適用場面 |
|---|---|---|---|---|---|---|
| ウォーターフォール | 企画→要件→設計→実装→テストと、工程を順に完了させる。1工程が終わってから次へ進む | 進捗管理が明確。各工程の責任と納期が分かりやすい。大規模チームでも混乱しない | 変更に弱い。後期に要件誤認が見つかると、修正コストが極めて高い。バグが本番後に見つかる傾向 | 要件が明確で固まっている | 低~中(要件が安定していれば低い) | 大規模プロジェクト。公共事業。要件が明確で安定。金融システム |
| V字モデル | ウォーターフォール + テスト工程との対応を明示。左上から右下へ向かう「V字」の形で、各開発工程がテスト工程と対応 | テスト工程が明確に紐付く。テスト漏れが防ぎやすい。品質基準が明確 | ウォーターフォールと同じ。やはり変更に弱い。テストリソースが多く必要 | 要件が明確。品質重視 | 低(ただし、品質管理に時間をかける) | 要件が明確で安定。品質が重要なシステム(医療、航空、金融) |
| プロトタイピング | 試作品を作って、ユーザーに使わせて、要件を確認。確認後に本開発へ進む | ユーザーのイメージ誤認が早期に解消。UI/UX が確定してから本開発に進めるので、手戻りが少ない | 試作品の開発コストがかかる。試作品が「完成品同然」と誤解され、完成品との境が曖昧になるリスク | UI/UX が不確実 | 中(ユーザーが要件を理解しづらい場面) | 新規サービス。UI/UX が決まっていない。ユーザー側の要件が曖昧 |
| スパイラル | 計画→設計→実装→評価を何度も繰り返す。各サイクルでリスク分析を行い、最も高いリスク課題を取り扱う | リスクが早期に顕在化。大規模・複雑な案件でも段階的に進められる。技術的な不確実性が高い場合に有効 | 各サイクルの管理が複雑。進捗が分かりにくい。コストが予測しにくい | リスクが高い、要件が複雑 | 高(ただし、リスク管理で軽減) | 大規模・複雑・高リスク案件。技術的な未経験領域を含む |
| RAD(Rapid Application Development) | 開発ツール(Lowコード/ノーコードなど)を活用して、短期間(数か月)で簡易版を完成させ、その後拡張 | 短期間で価値提供できる。ユーザー評価が早い。変更対応が柔軟 | 初期版の完成度が低い。スケーラビリティ・保守性に注意。将来の拡張が困難になる可能性 | 要件は概ね分かっているが、細部は未確定 | 中 | 小~中規模。納期が厳しい。Webアプリケーション |
| アジャイル(Scrum) | 1~4週間の短いスプリント(サイクル)ごとに、要件定義→設計→実装→テストを一通り実施。毎スプリント、完成した機能を納品 | 変更への対応力が高い。顧客満足度が高い。バグが本番前に見つかる傾向 | 最初から完全な要件定義がない。全体像が見えにくい。計画立案とコスト見積りが難しい。初期段階でのドキュメント不足 | 要件が不確実。段階的に確認しながら進める | 中(ただし、顧客との密接な協業が必須) | 要件が変わりやすい。急速に変化する業界(Webサービス、スタートアップ)。顧客と開発チームが一緒に進められる環境 |
| インクリメンタル | 全機能を一度に作るのではなく、機能を分割して段階的に完成・納品していく | 全機能が完成する前に、一部機能をユーザーが使用開始でき、早期に価値提供できる | 機能の分割設計が難しい。統合テストのコストが大きい。段階間の境界が曖昧になりやすい | 要件は明確だが、機能を分割可能 | 中 | 大規模なシステム。機能が明確に分割できる。長期プロジェクト |
V字モデル
V字モデルの概念
V字モデルは、「ウォーターフォール」に「テスト工程との対応関係」を追加した、より品質重視の開発モデルです。単なる工程図ではなく、各開発工程の出力物が、後段のテスト工程の入力・検証基準になる という因果関係を視覚化しています。
なぜ「V字」の形をしているのか
開発工程は左上から下(V字の底部)へ進み(要件定義→基本設計→詳細設計→実装)、その後、対応するテスト工程がV字の底部(実装)から右上へ向かいます(単体テスト→統合テスト→UAT)。この形が「V字」に見えることから名付けられました。重要なのは、テストを後付けではなく、開発の各段階で行うことで、品質を段階的に組み込むという考え方です。
V字モデルの工程とテスト対応
要件定義 ───────────────────────────── UAT
(What:何を) (全体が要件を満たすか)
↓ ↑
基本設計 ─────────────────── 統合テスト・システムテスト
(外部設計:How) (部品間の連携が正しいか)
↓ ↑
詳細設計 ──────────── 単体テスト
(内部設計:詳細How) (各モジュールが設計通りか)
↓ ↑
実装・コーディング ────
(プログラミング)| 開発側(左側) | 対応するテスト | テスト工程の名称 | 検証内容 | 検証者 |
|---|---|---|---|---|
| 要件定義 | ウォーターフォール開発との「最大のズレ箇所」 | UAT(ユーザー受入テスト) | システム全体がユーザーの要件・期待を満たすか | ユーザー・QA |
| 基本設計(外部設計) | 建築で言う「全体図」 | システムテスト・統合テスト | コンポーネント間の連携、システム全体の動作、性能、セキュリティ | QA・開発チーム |
| 詳細設計(内部設計) | 建築で言う「各部屋の詳細図」 | 単体テスト(ユニットテスト) | 個別モジュール・関数が設計通りに動くか、バグがないか | 開発者 |
| 実装・コーディング | 建築で言う「実際の建設」 | — | — | — |
V字モデルが解決する問題
ウォーターフォール開発では、テストは実装の後期に一度だけ行われるため、以下の問題が起こります:
- 後期の障害発見コストが高い:実装完了後に「実は要件を誤解していた」が判明すると、全面的な作り直しが必要
- テスト漏れ:要件と実装の対応が不明確なため、テストすべき項目を見落とす
- 品質確保の責任が曖昧:誰が何を検証するか不明確
V字モデルは、各開発工程と対応するテスト工程を明示することで、これらを防ぎます。
V字モデルのメリット
- 品質基準が明確:各工程ごとに「何をテストするか」が決まる
- テスト漏れの防止:要件→設計→実装→テストの対応が一目瞭然
- 上流での品質確保:詳細設計の段階で単体テストケースを設計するため、バグが早期に見つかる
- 責任分担が明確:誰がいつ何をテストするかが決まっている
V字モデルのデメリット・課題
- 最初が完璧である必要がある:要件定義と基本設計で誤りがあると、テストの対応関係がすべて狂う
- 変更への対応が難しい:後期の要件変更があると、対応するテストケースもすべて修正する必要があり、手戻りコストが極めて高い
- リソースが多く必要:テスト環境、テスト用ツール、テスト担当者など、テスト工程に人手とコストを要する
- スケジュールがタイトになる傾向:各工程と対応するテストを並行実施するため、スケジュール遅延が許されない
ウォーターフォール vs V字モデル
両者とも「左から右へ順に工程を進める」という点では同じです。違いは:
- ウォーターフォール:開発が終わったら、まとめてテストを実施する
- V字モデル:開発の各段階ごとに、対応するテストを並行実施する
試験では、「V字モデル」という用語が出たら、必ず「テスト工程との対応」を思い出してください。
アジャイル開発
アジャイルとは
アジャイル(Agile)は、「素早い・敏捷な」という意味の英単語です。アジャイル開発とは、短い反復サイクル(1~4週間)で、機能の実装とテストを繰り返しながら、顧客フィードバックを受けて段階的に完成させていく開発方法です。
ウォーターフォール・V字モデルは「最初に全要件を決めて、後から変更は難しい」という前提でしたが、アジャイルは「要件は段階的に確認しながら進める。変更は当たり前」という前提に立ちます。
なぜアジャイルが必要か
Web業界やスタートアップでは、市場のニーズが急速に変わります。その環境で「半年後に要件をすべて決めて、その通りに作る」というウォーターフォールは現実的ではありません。アジャイルは、このような変化が当たり前の環境で価値を生み出すための手法です。
アジャイル宣言(4つの価値)
2001年にアジャイル宣言という指針が作られました。これは「ウォーターフォール的な重厚なプロセスより、人と人のコミュニケーションと価値提供を優先しよう」という宣言です。
| 価値観 | 説明 |
|---|---|
| プロセス・ツールより、個人と相互作用 | ツールや手続きを完璧に整えるより、チーム内、顧客との直接的なコミュニケーションを重視する。朝の立ち会い(デイリースクラム)で顔を合わせ、対話を通じて課題を解決する |
| 包括的なドキュメントより、動く製品 | 完璧な設計書を作るより、まず動くシステム(プロトタイプ)をユーザーに見せて、フィードバックをもらう方が、誤解を早期に防げる |
| 契約交渉より、顧客との協働 | 最初に「この機能をこの納期で、この金額で」と契約書で固めるのではなく、開発チームとユーザーが一緒に進めながら、段階的に内容を決めていく |
| 計画に従うことより、変化への対応 | 「計画通りに進める」ことより、「市場やユーザー要望の変化に素早く対応する」ことが、最終的な成功につながる |
これらの価値観は、ウォーターフォールとの対比として理解すると、アジャイルの特徴が鮮明になります。
スクラム(Scrum)の 3 つの役割、5 つのイベント、3 つの作成物
スクラムは、アジャイルの最も一般的な実装方法です。1 スプリント(1〜4 週)ごとに、要件 → 設計 → 実装 → テスト → レビューの全工程を回します。
スクラムの 3 つの役割と試験対策
スクラムは3つの役割を厳密に分ける。試験では「PO と SM の違いを言え」という問題が頻出です。
| 役割 | 責務 | 主な活動 |
|---|---|---|
| プロダクトオーナー(PO) | 「何を作るか」の意思決定者 | 機能の優先度付け、利用者要望の聞き取り、「完成」の最終判定(技術者ではなく価値判定) |
| スクラムマスター(SM) | スクラムプロセスの支援者 | 障害除去、ルール遵守の支援、自己組織化の促進。指示命令ではなく、サーバント(奉仕者)的リーダー |
| 開発チーム | 実装・テスト担当 | 要件理解から完成まで全工程。自己組織化でスプリント内容を実現。クロスファンクショナル(多機能) |
試験での頻出混同:POはプロジェクトマネージャーではない。SMが指示命令するのではなく、障害を除去するサポーター。
スクラムの 5 つのイベント(タイムボックス)
各イベントは時間を厳密に守ります(タイムボックス)。これがスクラムのリズムを作ります。
| イベント | 時間 | 目的 |
|---|---|---|
| スプリント計画 | 2~4時間 | スプリント中に実装する内容(スプリントバックログ)を決定。POが優先度と期待を伝え、チームが実現可能かを判定 |
| デイリースクラム | 15分 | チーム同期。「昨日やったこと」「今日やること」「ブロッカー(障害)」を共有。報告会ではなく相互同期 |
| スプリント(実行) | 1~4週間 | 要件定義→設計→実装→テストを実施。スプリント中は新規追加(スコープクリープ)を認めず、約束に集中 |
| スプリントレビュー | 1~2時間 | 完成した機能を動くシステムとしてユーザーに見せ、フィードバックをもらう。スライドではなくデモ重視 |
| スプリント振り返り | 1時間 | 「うまくいったこと」「改善点」「次のアクション」を議論。プロセスの継続的改善 |
スクラムの 3 つの成果物(アーティファクト)
| 成果物 | 内容 | 管理者 | 重要ポイント |
|---|---|---|---|
| プロダクトバックログ | 製品に必要な全機能を優先度順に列挙 | PO | 優先度がないと、次スプリントの計画が立たない |
| スプリントバックログ | このスプリント中に実装する項目(プロダクトバックログから選択) | 開発チーム | スプリント中は追加しない(スコープ固定の原則) |
| インクリメント | スプリント終了時の完成した機能(テスト済み、本番納品可能) | 開発チーム | 毎スプリント、ユーザーが見える成果物が増える |
XP(Extreme Programming)の実践
XP は、スクラムを技術面から支える開発プラクティスの集合です。コード品質、テスト自動化、迅速なリリースを重視します。
| プラクティス | 説明 | 効果 |
|---|---|---|
| ペアプログラミング | 2 人で同じコードを書く。1 人がコード、もう 1 人がレビュー | バグ早期発見、知識共有、コード品質向上 |
| テスト駆動開発(TDD) | テストを先に書き、そのテストを通す最小限のコードを書く | テストカバレッジ 100%、バグ削減 |
| 継続的インテグレーション(CI) | コード変更を毎日、複数回マージして自動テスト実行 | 統合エラー早期発見、マージ競合減少 |
| リファクタリング | テストを落とさないまま、内部設計を改善する | 長期保守性向上、技術債削減 |
| YAGNI(You Aren't Gonna Need It) | 将来必要になるかもしれない機能は実装しない | 不要な複雑性を避ける |
カンバン(Kanban)
カンバンは、スクラムより軽量な反復管理手法です。WIP(Work In Progress)制限 が特徴です。
| 特徴 | 説明 |
|---|---|
| タスク表示化 | ToDo(未着手)→ Doing(進行中)→ Done(完了)を視覚化 |
| WIP 制限 | 進行中の項目数を制限し、ボトルネックを見つける |
| 継続的なフロー | スプリント区切りなく、常に完成したものを納品 |
| 適用しやすさ | スクラムより実装障壁が低い |
DevOps と継続的改善
DevOps は、開発と運用を分断せず、一体化させる 考え方です。CI/CD、インフラの自動化、継続的監視を通じて、迅速で安定したリリースを実現します。
| 要素 | 説明 | 例 |
|---|---|---|
| CI(継続的インテグレーション) | コード変更を自動でビルド・テストしてマージ | GitHub Actions、Jenkins で毎コミット実行 |
| CD(継続的デリバリー) | テスト済みコードを本番環境へ自動デプロイ | 1 日複数回リリース |
| Infrastructure as Code(IaC) | インフラ設定をコードで定義・管理 | Terraform、CloudFormation |
| マイクロサービス | 機能を小さなサービスに分割、独立デプロイ | API で疎結合 |
| コンテナ化 | Docker、Kubernetes で環境の一貫性確保 | 本番環境とローカル開発環境で同一 |
| 監視・アラート | ログ、メトリクスをリアルタイム監視 | Datadog、CloudWatch で異常検知 |
DevOps vs アジャイル
| 観点 | アジャイル | DevOps |
|---|---|---|
| 範囲 | 開発プロセス | 開発 + 運用全体 |
| 期間 | スプリント単位(1〜4 週) | 継続的なサイクル |
| フォーカス | 機能価値の提供 | 品質・安定性・迅速性を同時達成 |
テスト戦略
テストは、V字モデルでも DevOps でも全工程に組み込まれます。試験では、各テスト段階の目的と手法を区分けすることが重要です。
テストレベルと V字モデルの対応
| テストレベル | 担当 | 検証対象 | 手法 |
|---|---|---|---|
| 単体テスト | 開発者 | 個別モジュール | ホワイトボックス(C0, C1, C2) |
| 統合テスト | QA・開発チーム | コンポーネント間の連携 | ホワイトボックス + ブラックボックス |
| システムテスト | QA | システム全体の機能・性能・セキュリティ | ブラックボックス |
| UAT(利用者受入テスト) | ユーザー・QA | 利用者要件の充足 | ブラックボックス |
ホワイトボックステスト(内部構造を見るテスト)
ソースコードの内部ロジックを検証します。開発者が単体テストで実施します。
カバレッジの種類
| カバレッジ | 説明 | 対象 | 目安 |
|---|---|---|---|
| C0(ステートメントカバレッジ) | 全ての実行文が少なくとも 1 回実行されたか | 各行 | 最低限のテスト |
| C1(ブランチカバレッジ) | 各分岐(if の真・偽)が両方実行されたか | if/else、switch-case | 実務的な基準 |
| C2(パスカバレッジ) | 全ての実行経路が網羅されたか | ループ、nested 分岐の全組み合わせ | 完全だが実現困難 |
ブラックボックステスト(入出力を見るテスト)
内部コードを知らず、仕様と入出力だけで検証します。QA・ユーザーが実施します。
ブラックボックステストの技法
| 技法 | 説明 | 例 |
|---|---|---|
| 同値分割 | 入力値の範囲を等価なグループに分け、各グループから 1 つ選んでテスト | 売上額:0円、1〜999999円、1000000円以上 |
| 境界値分析 | 値域の境界付近(最小、最大、その前後)をテスト | 0円、1円、999999円、1000000円 |
| 原因結果グラフ | 入力条件と出力の関係を図で整理し、組み合わせをテスト | 複雑な業務ルール |
| 決定表テスト | 複数条件の組み合わせを表で整理してテスト | 割引条件(会員か、購買金額か、季節か) |
テスト結合方式
複数モジュールを統合するときの順序と方法です。
| 方式 | 順序 | スタブ/ドライバ | メリット | デメリット |
|---|---|---|---|---|
| トップダウン統合 | 上位モジュールから統合 | スタブ必須 | 早期に全体動作確認 | スタブ開発の手間 |
| ボトムアップ統合 | 下位モジュールから統合 | ドライバ必須 | 下位の品質が高い | 上位の動作確認が遅い |
| サンドイッチ | 上下同時に | スタブ + ドライバ | 並列化で工期短縮 | 管理が複雑 |
| ビッグバン | 全モジュール一度に | 不要 | 準備期間短い | 障害箇所の特定が困難 |
スタブ vs ドライバ
| 観点 | スタブ | ドライバ |
|---|---|---|
| 役割 | 呼ばれるモジュールの代役 | 呼ぶモジュールの代役 |
| 使う場面 | トップダウン統合 | ボトムアップ統合 |
| 例 | データベースアクセスモジュールが未完成 → スタブで固定データを返す | 画面入力モジュールが未完成 → ドライバで固定値を入力 |
レビュー技法
コード・ドキュメント・設計の品質を高めるために、作成者以外が検証します。
| 技法 | 参加者 | 進め方 | メリット | デメリット |
|---|---|---|---|---|
| ウォークスルー | 作成者が説明、他者が質問・意見 | 相互理解重視。なごやか | 発見漏れがあるかもしれない | 準備が少ない |
| インスペクション | チェックリスト使用、明確な役割分担、記録厳密 | 欠陥を体系的に捕捉 | 手間と時間がかかる | 効果が高い |
ビジネスアナリシスと BABOK
システム開発では、いきなり 何を作るか を決めるのではなく、まず なぜ必要なのか と 誰が何を求めているのか を整理します。この考え方を体系化したものが BABOK です。
BABOK の基本的な見方
BABOK は、ビジネスアナリシスの知識体系をまとめたガイドです。重要なのは、固定された工程順序を規定する本ではない ことです。知識エリア と タスク を整理したものであり、ウォーターフォールのように「この順番で必ず実行する」と決めるものではありません。
要求の4分類
試験でよく問われるのは、要求の種類です。要求 と一口に言っても、次のように分かれます。
| 要求 | 何を表すか | 例 |
|---|---|---|
| ビジネス要求 | 組織として何を達成したいか | 受注処理時間を半減したい |
| ステークホルダー要求 | 利害関係者が何を必要とするか | 営業担当が外出先で在庫確認したい |
| ソリューション要求 | システムが備えるべき要件 | 受注登録機能、検索機能、応答時間 2 秒以内 |
| 移行要求 | 新システムへ移るために一時的に必要な要件 | 旧顧客データの移行、操作研修、並行稼働 |
機能要求 は ソリューション要求 の中に含まれます。一方で、品質や運用条件のような話は 非機能要求 であり、機能要求 と同一ではありません。
BABOK の設問で切るポイント
| 問われ方 | 先に見る観点 | 選びやすい答え |
|---|---|---|
要求の分類 を問う | 組織目標か、利用者要望か、システム要件か、移行準備か | 4分類で切る |
BABOK が定めるもの を問う | 知識体系か、固定手順か | 知識体系 |
機能要求の説明 を問う | 具体機能か、品質条件か | 具体機能なら機能要求 |
知識エリア = 開発フェーズ、BABOK = 実行順序の標準 と読んだ時点で危険です。BABOK は、ビジネスアナリストが何を考え、何を整理するかをまとめたガイドだと押さえてください。
UML(統一モデリング言語)
システムの構造・動作を図で表現する標準言語です。試験では全 13 種を覚える必要はなく、主な 8 種の役割を理解します。
UML 図の分類
構造図(Static Diagram)- 静止画像
| 図 | 説明 | 用途 |
|---|---|---|
| クラス図 | クラス、属性、操作、関係(継承・実装・関連・集約・コンポジション) | OOP 設計の詳細 |
| オブジェクト図 | インスタンスと値 | クラス図の具体例 |
| コンポーネント図 | コンポーネント(機能単位)と依存関係 | アーキテクチャ、インターフェース |
| 配置図 | ハードウェア、ネットワーク、デプロイ | 実行環境、分散システムの構成 |
振る舞い図(Dynamic Diagram)- 流れ
| 図 | 説明 | 用途 |
|---|---|---|
| ユースケース図 | アクタ(利用者)、ユースケース(操作)、関係 | 要件定義、システムの外部観 |
| シーケンス図 | 時系列で、オブジェクト間のメッセージ交換 | 相互作用の詳細、API 呼び出し |
| ステートマシン図 | 状態遷移、イベント、条件 | ワークフロー、状態管理 |
| アクティビティ図 | 活動のフロー、平行処理、分岐 | 業務プロセス、制御フロー |
DFD(データフロー図)
データの流れと処理を図で整理します。要件定義・基本設計で使われます。
DFD の 4 つの構成要素
| 要素 | 記号 | 説明 |
|---|---|---|
| プロセス | 円 | データを受け取り、処理して出力する活動 |
| データフロー | 矢印 | プロセス間を流れるデータ |
| データストア | 平行線 2 本 | ファイル、データベース、帳簿 |
| 外部エンティティ | 四角形 | システム外の人・組織・他システム |
DFD の読み方
顧客(外部エンティティ)
↓
注文受け取り(プロセス)
↓ 注文データ(データフロー)
注文ファイル(データストア)
↓
請求書作成(プロセス)
↓ 請求書(データフロー)
顧客(外部エンティティ)テスト対応 V字の詳細例
実際の開発現場での対応を示します。
要件定義
↓ (What を決める)
UAT レベルの テストケース設計
↓
基本設計
↓ (概略設計)
システムテスト・統合テスト レベルの テストケース設計
↓
詳細設計
↓ (モジュール仕様)
単体テスト レベルの テストケース設計
↓
実装
↓ (コーディング)
デバッグ・単体テスト実行
↓
詳細設計と単体テストの検証 → 品質チェック
↓
基本設計と統合テストの検証 → 統合品質チェック
↓
要件定義と UAT の検証 → 最終確認契約形態
発注者(クライアント)と受託者の関係で、リスク配分が異なります。試験では、各形態の責任範囲と費用体系の違いを理解します。
| 契約形態 | 特徴 | 費用体系 | リスク(受託者) | 適用場面 |
|---|---|---|---|---|
| 請負(一括請負) | 納期・仕様を確定してから契約。成果物の責任は受託者 | 固定価格(予定原価 + 利益) | 要件追加、品質問題は受託者負担 | 要件が明確。プロジェクト規模が大きい |
| 準委任(委託) | 作業時間・作業内容を定義し、努力を提供 | 時間単価 × 実績時間 | 時間超過で赤字のリスク。成果物の責任は発注者と共有 | 要件が曖昧。研究開発、アジャイル案件 |
| SES(System Engineering Service) | 技術者を派遣し、発注者の指揮下で作業 | 月額固定 | 派遣者の稼働率。成果物責任は発注者 | 長期プロジェクト、スキル補充 |
| 派遣(労働者派遣) | 短期の人材補充 | 日給 × 就業日数 | 法的最低基準。給与・保険は派遣元 | 季節的な人手不足 |
契約形態の選択基準
| 状況 | 推奨契約形態 |
|---|---|
| 要件が明確に定まっている、納期が決まっている | 請負 |
| 要件が不確実、段階的に進める | 準委任 |
| 短期の技術者補充が必要 | SES または 派遣 |
| 要件が頻繁に変わる(アジャイル) | 準委任(固定額の準委任もあり) |
過去問で戻りやすい補助論点
見積手法の比較
開発見積では、何を基準に規模を見積もるか が手法ごとに異なります。試験では、ソースコード行数を使うのか 利用者から見える機能量を使うのか 過去データで推定するのか を切り分けられることが重要です。
| 手法 | 何を基準に見積もるか | 向いている場面 | 注意点 |
|---|---|---|---|
| LOC法 | ソースコード行数 | 使用言語や実装方式がある程度決まっているとき | 言語によって同じ機能でも行数が変わる |
| ファンクションポイント法 | 入力、出力、照会、内部ファイル、外部インタフェースなどの機能量 | 要件は見えているが、実装言語や内部方式が未確定なとき | 機能の数え方に慣れが必要 |
| パラメトリック法 | 過去プロジェクトの統計モデル | 類似案件の履歴が豊富な組織 | 前提データが弱いと精度が落ちる |
| ボトムアップ法 | WBS で分解した個別タスクの積み上げ | 詳細な作業計画が引ける段階 | 初期段階では粒度が粗くなりやすい |
判断のコツは、まだ実装方式が固まっていないなら FP 法、詳細設計後で作業分解できるならボトムアップ法、類似案件の実績があるならパラメトリック法 と考えることです。
プロトタイピング、スパイラル、反復型、FDD の違い
どれも 一度で作り切らない という点では似ていますが、目的が異なります。
| 手法 | 主眼 | 向いている場面 | 誤解しやすい点 |
|---|---|---|---|
| プロトタイピング | 試作品で要件理解を深める | UI や業務イメージが曖昧 | 完成品を早く出す手法そのものではない |
| スパイラルモデル | 反復しながらリスクを評価・低減する | 大規模で不確実性や技術リスクが高い | ただの反復開発ではなく、リスク分析 が中心 |
| 反復型 / インクリメンタル開発 | 小さく作って順に機能を広げる | 早く一部を使い始めたい | プロトタイプと違い、作ったものを本番成果物として育てる |
| FDD(Feature Driven Development) | 機能単位で短く開発する | 要件を機能単位で分けやすい業務システム | スクラムと同じではない。機能一覧 を軸に進める |
オブジェクト指向と UML のつながり
オブジェクト指向は、現実世界の対象と振る舞いを、部品として整理する考え方 です。UML は、その整理結果を図として表す道具です。オブジェクト指向 = UML ではありません。
| 用語 | 意味 | 受験での見分け方 |
|---|---|---|
| オブジェクト | 状態(属性)と振る舞い(メソッド)を持つ具体的な存在 | 顧客A、受注No.123 のような実体 |
| クラス | オブジェクトの設計図 | 顧客、受注 のような型 |
| 属性 | オブジェクトが持つデータ | 氏名、金額、日付 |
| メソッド | オブジェクトが行う処理 | 計算する、送信する |
| カプセル化 | データと処理をまとめ、内部を隠す | 外から勝手に状態を壊しにくくする |
| 継承 | 既存クラスの性質を引き継ぐ | 共通部分を再利用する |
| 多相性 | 同じ操作名でも対象により振る舞いが変わる | print() が対象ごとに異なる処理をするイメージ |
UML でよく問われるのは、クラス図は構造、シーケンス図は時系列のやり取り、ユースケース図は利用者から見た機能 という対応です。何を表したい図か を先に決めてから選びます。
OSS ライセンスの比較
OSS の問題では、無料かどうか ではなく、改変物の公開義務があるか 著作権表示や特許条項がどうなっているか を見ます。
| ライセンス | 特徴 | 受験での着眼点 |
|---|---|---|
| GPL | 改変物や派生物も同じ GPL で公開する義務が強い | コピーレフト が最重要。派生物の非公開化はしにくい |
| MIT | 著作権表示と免責表示を残せば、改変・再配布・商用利用がしやすい | 最も緩やかな代表例 |
| BSD | MIT と同様に緩やか。条項数に違いがある | 再配布しやすい緩いライセンス と押さえる |
| Apache License 2.0 | 緩やかな利用条件に加え、特許に関する扱いが明示される | 企業利用で選ばれやすい理由を問われやすい |
コンパイル型とインタプリタ型
プログラミング言語の実行方式は、事前に機械語へ変換するか 実行しながら解釈するか の違いです。
| 方式 | 処理の流れ | 強み | 注意点 |
|---|---|---|---|
| コンパイル型 | ソースコードを一括変換して実行ファイルを作る | 実行速度が速くなりやすい | 変更のたびに再コンパイルが必要 |
| インタプリタ型 | 1 文ずつ解釈しながら実行する | 試行錯誤しやすい | 実行時のオーバーヘッドが大きくなりやすい |
試験では、コンパイル = 事前変換、インタプリタ = 実行しながら解釈 をまず押さえます。個々の言語名は時代で変化しても、この軸は安定しています。
スケールアップ、スケールアウト、リフト・シフト、コンバージョン
クラウド移行やシステム更改の問題では、性能の上げ方 と 移行時にどこまで作り替えるか を分けて読みます。
| 用語 | 意味 | 受験での着眼点 |
|---|---|---|
| スケールアップ | 1 台のサーバの CPU や主記憶を強化する | 垂直 に強くする。台数は増えない |
| スケールアウト | 同等サーバを複数追加して負荷分散する | 水平 に増やす。台数が増える |
| リフト・シフト | 既存システムを大きく変えずに実行環境だけ移す | 早く移行しやすいが、クラウド最適化は弱い |
| コンバージョン | 移行に合わせて構造や方式も見直す | 効果は大きいが、工数とリスクも増える |
典型的なつまずき
最重要:要件定義と設計の混同
❌ よくある間違い:「要件定義でも設計でも、どちらでもシステムの仕様を決める工程」として扱う
✅ 正解:
- 要件定義:「何を」(What)。ユーザーが何を必要としているか。機能要件と非機能要件
- 設計:「どう」(How)。その要件を技術でどう実装するか。基本設計と詳細設計
この違いが分かると、試験の大半の問題が解けるようになります。
ウォーターフォール と V字モデルの関係
❌ よくある間違い:「ウォーターフォール」と「V字モデル」は全く別の開発方法
✅ 正解:
- ウォーターフォール:企画→要件→設計→実装→テスト→運用の流れ。各工程は順に進む
- V字モデル:ウォーターフォール + テスト工程との対応を明示したもの
つまり、V字モデルは「ウォーターフォールの進め方を保ちながら、テストをどう対応させるか」を視覚化したものです。別物ではなく、ウォーターフォールの品質管理版です。
アジャイル、スクラム、DevOps を同じレベルで覚える
❌ よくある間違い:「アジャイル、スクラム、DevOps はどれも短期反復の開発方法」
✅ 正解:粒度と対象範囲が異なります
- アジャイル(考え方):短期反復で顧客フィードバックを受けながら進める、という開発哲学
- スクラム(実装方法):アジャイルを実現するためのフレームワーク。開発プロセスに焦点(PO、SM、イベント、アーティファクト)
- DevOps(文化):開発と運用の境界を取り払う。CI/CD、IaC、監視を自動化。対象範囲は開発~運用まで
開発手法を「新しい / 古い」だけで見てしまう
❌ よくある間違い:「アジャイルは新しいからいつでも使える。ウォーターフォールは古いから避けるべき」
✅ 正解:プロジェクトの特性で選ぶ。アジャイルが向かないプロジェクトもあります
- ウォーターフォール向き:要件が固い、大規模公共事業、医療・金融システム
- アジャイル向き:要件が変わりやすい、Web / スタートアップ、顧客と毎日対話できる環境
スタブとドライバの役割が逆
❌ よくある間違い:スタブは「上の代役」、ドライバは「下の代役」
✅ 正解:
- スタブ:「呼ばれる側(下)の代役」。下位モジュールがまだできていないとき、上のモジュールをテストするために、下の役割を担当するダミープログラム
- ドライバ:「呼ぶ側(上)の代役」。上位モジュールがまだできていないとき、下のモジュールをテストするために、上の役割を担当するダミープログラム
覚え方:スタブ = sub(下)、ドライバ = drive(駆動)= 上から下を駆動する
テストカバレッジ(C0, C1, C2)で C2 が最高だと思う
❌ よくある間違い:「C2(パスカバレッジ)>C1(ブランチカバレッジ)>C0(ステートメント)だから、C2 を目指すべき」
✅ 正解:
- C0:全ての実行文が1回以上実行される。最も基本。でも漏れが多い
- C1:全ての if 分岐(True/False)が両方実行される。実務的な基準。試験に出やすい
- C2:全ての実行経路を網羅。理想的だが、複雑なプログラムでは実現困難。実務では使わない
試験のポイント:実務では C1 が基準になります。
ホワイトボックステストとブラックボックステストをテストレベルで混ぜる
❌ よくある間違い:「ホワイトボックステストは高度、ブラックボックステストは簡単」という混同
✅ 正解:これは「テストの視点」であり、「テストレベル」ではありません
- ホワイトボックステスト:ソースコードの内部構造を知ってテストする。単体テストで使用(開発者が実施)
- ブラックボックステスト:内部構造を知らず、入出力だけでテストする。統合テスト以降で使用(QA・ユーザーが実施)
つまり、開発の進み方によって、ホワイトボックスはいつ使い、ブラックボックスはいつ使うかが決まります。
見積手法を「どれも規模を見積もる方法」で終わらせる
❌ よくある間違い:「LOC 法も FP 法も、どちらも同じようなもの」
✅ 正解:
- LOC 法:コード量を使う
- FP 法:利用者から見える機能量を使う
- パラメトリック法:過去実績の統計モデルを使う
- ボトムアップ法:個別タスクを積み上げる
何を材料に見積もっているか を先に見ると混同しにくくなります。
プロトタイピングとスパイラルモデルを同じ反復だと思う
❌ よくある間違い:「どちらも何度も作り直すから同じ」
✅ 正解:
- プロトタイピング:要件理解のための試作品
- スパイラルモデル:反復ごとにリスク分析と低減を行う進め方
反復していること自体ではなく、何のために反復するか が違います。
OSS ライセンスを「無料かどうか」でだけ判断する
❌ よくある間違い:「OSS はどれも無料で使えるから差は小さい」
✅ 正解:実務では 派生物の公開義務 と 再配布条件 が重要です。特に GPL は、改変物の扱いに強い条件があります。MIT、BSD、Apache は比較的緩やかですが、Apache は特許条項まで見ます。
問題を解くときの観点
- 問われているのは
工程の位置、進め方、テスト対応、契約、役割分担のどれか - 要求変更が多いのか、最初に固めやすいのか
- テストまで含めて整理しているか
- 開発だけの話か、運用まで含めた話か
- スタブとドライバが出たら、
呼ぶ側か呼ばれる側かを先に確認する - UML・DFD が出たら、
何を表現しているか(構造か動作か)で図を選ぶ - 契約が出たら、
要件の確定度とリスク配分を見る - 見積手法が出たら、
コード量、機能量、統計モデル、作業積み上げのどれかで判断する - ライセンスが出たら、
派生物の公開義務があるかを最初に確認する - 開発モデルが複数並んだら、
要件の不確実性とリスクの高さのどちらを解決したいのかを見る - 移行用語が出たら、
性能拡張の話かクラウド移行の話かを先に切り分ける
確認問題
問1:スクラム の役割と責任
プロダクトオーナー(PO)、スクラムマスター(SM)、開発チームの 3 つの役割のうち、バックログの優先度付けと管理 を責務とするのはどれか。
解答:プロダクトオーナー(PO)。PO は利用者要望を聞き取り、機能の優先度を決め、バックログを管理します。SM はルール遵守と障害除去、チームは実装を担当します。
問2:V字モデルとテスト対応
以下の組み合わせのうち、正しいのはどれか。
① 要件定義 ↔ 単体テスト ② 詳細設計 ↔ システムテスト ③ 基本設計 ↔ 統合テスト
解答:③。V字モデルでは、要件定義 ↔ UAT、基本設計 ↔ 統合テスト、詳細設計 ↔ 単体テストが対応します。
問3:統合テストの方式選択
下位モジュール A、B が完成し、上位モジュール C が未完成の場合、ボトムアップ統合を採用するのが効率的である。上位モジュール C の代役として用意するべき テスト用プログラム の名称は何か。
解答:ドライバ。ボトムアップ統合では、未完成の上位モジュール(呼ぶ側)の代役として、ドライバを用いて下位モジュール(呼ばれる側)を検証します。
問4:見積手法の選択
要件はほぼ固まっているが、使用言語や内部設計はまだ決まっていない。利用者から見える入力・出力・照会などの機能量をもとに、早い段階で概算したい。このとき、最も適した見積手法は何か。
解答:ファンクションポイント法。コード行数ではなく、利用者から見える機能量で見積もるため、実装言語が未確定でも使いやすいです。
問5:OSS ライセンスの判定
自社で OSS を改変して製品に組み込む。派生物の公開義務が強いライセンスを避けたい。GPL、MIT、BSD、Apache License 2.0 のうち、最も注意が必要なのはどれか。
解答:GPL。改変物や派生物にも同系統の公開義務が及ぶため、商用製品への組み込みでは条件確認が特に重要です。
問6:性能拡張と移行方式の判定
既存の業務システムをクラウドへ短期間で移したいが、アプリケーションの構造は当面変えない。また、処理能力不足には同等サーバを追加して対応したい。このときの組み合わせとして適切なのは何か。
解答:リフト・シフト と スケールアウト。前者は大きく作り替えずに環境だけ移す方法、後者はサーバ台数を増やして水平に処理能力を上げる方法です。
関連ページ
このページは役に立ちましたか?
評価とひとことを残してもらえると、内容と導線の改善に使えます。
Last updated on