本文へ移動

基本情報技術者試験 · 学習ガイド

開発技術

要件、設計、テスト、レビュー、開発モデルのつながりを学びます。オブジェクト指向では同じ呼び出し方と種類別の実装を分け、多相性を理解します。

仕組みを理解する

システム開発の全体像

システム開発とは、利用者の目的を明らかにする要件定義から、設計・実装・テストを経て成果を確かめるまでの一連の流れです。

エルくんが説明する図解。要望→測定可能な要件→設計→実装→要件に戻る受入確認の流れ。
考え方の例:「利用者が空き枠を選び予約完了できる」は機能要件、「繁忙時も3秒以内に一覧を表示する」は条件を定めた非機能要件の例です。

依頼者の「使いやすい予約システム」という言葉だけでは、何をもって完成とするか決められません。具体的な利用場面から必要なことを明らかにします。

基本の仕組み

基本の仕組みの図解。中央に予約画面を1つ置き、左側に「空き枠を選んで予約を完了できる」機能要件、右側に「繁忙時も3秒以内に一覧を表示する」非機能要件を、同じ画面へ向かう線で対応づける。左右は細い仕切りで分け、別々の場面にはしない。
覚えること:空き枠予約/繁忙時も3秒以内に一覧表示

「利用者が空き枠を選び予約を完了できる」は機能要件、「繁忙時も3秒以内に一覧を表示する」は条件を定めた非機能要件の例です。

要件定義で必要なことを合意し、設計で実現方法を決め、実装とテストで確認します。受入テストでは依頼者の目的を満たすかを評価します。

実装が仕様書どおりでも、仕様が利用者の必要とずれていれば目的は達成できません。各要件に確認方法を対応させておきます。

要件から保守まで

要件から保守までの図解。左から「要件」「設計」「テスト」のカードを矢印で並べ、各カードの下を一本の対応線でつなぐ。工程の順序と、後から対応をたどれることを描き分ける。
覚えること:要件→設計→テストの対応をたどる

開発は、企画→要件定義→設計→実装→テスト→移行→運用・保守の順に進みます。機能要件は「何ができるか」という処理の内容、非機能要件は性能・可用性・信頼性・セキュリティ・保守性など「どの程度の品質で動くか」の条件です。

要件定義の段階で受入れの条件(何を満たせば完成とするか)を決め、利用者側の承認を得ておきます。要件→設計→テストの対応を後からたどれるようにしておくことを追跡可能性(トレーサビリティ)といい、要件の漏れや過剰な機能を見つけやすくなります。

要件から保守まで
工程主な成果
要件定義必要な機能と品質、受入れの条件
設計方式・構成、画面や処理の仕様
実装プログラム
テストテスト結果と修正の記録
移行・運用・保守本番での稼働と変更への対応

試験に出る

  • 要件定義は「利用者と合意する」段階、設計は「実現方法を決める」段階として区別します。工程の取り違えに注意します。
  • 機能要件と非機能要件の分類。応答時間や性能など条件を定めたものが非機能要件です。
  • 受入テストは、仕様書どおりかではなく依頼者の目的を満たすかを評価する点が問われます。
  • 仕様どおりの実装でも、仕様が利用者の必要とずれていれば目的を達成できないという考え方。
  • 要件ごとに確認方法を対応させておくことが、後戻りを減らす点。

重要な言葉

要件定義
利用者と合意して、何を実現するかを明らかにする工程。
非機能要件
応答時間や負荷条件など、機能以外の条件を定めた要件。
受入テスト
依頼者の目的を満たすかを評価するテスト。

確認問題

確かめよう応答時間の上限は機能そのもの?

主に非機能要件です。どの負荷条件かも併記します。

応答時間の上限は、主に非機能要件に分類される。

実装が仕様書どおりなら、利用者の目的は必ず達成される。

「繁忙時も3秒以内に一覧を表示する」はどの要件ですか。

受入テストで評価する観点は?

依頼者の「使いやすい予約システム」という言葉だけでは、何をもって完成とするか決められません。具体的なから必要なことを明らかにします。

「利用者が空き枠を選び予約を完了できる」は、「繁忙時も3秒以内に一覧を表示する」は条件を定めたの例です。

で必要なことを合意し、設計で実現方法を決め、実装とテストで確認します。では依頼者の目的を満たすかを評価します。

実装が仕様書どおりでも、仕様が利用者の必要とずれていれば目的は達成できません。各要件にを対応させておきます。

ソフトウェア方式設計

ソフトウェア方式設計とは、変更に強い構造を目指して、モジュールの責任や依存関係を決める設計です。

エルくんが説明する図解。画面A/Bから公開入口だけで送料計算を呼び出し内部を箱で隠す。
送料計算を一つのモジュールへまとめれば、送料ルール変更時に画面ごとに修正する必要を減らせます。呼出し側は必要な入力と結果だけを扱います。

一か所を変えたら無関係な機能まで壊れる設計では、変更のたびに負担が増えます。部品の責任を分けることが大切です。

基本の仕組み

基本の仕組みの図解。左に複数の画面、右に一つの送料計算モジュールを置き、仕切り上の公開インタフェースを通る「入力→」「←結果」の矢印だけで結ぶ。送料ルールはモジュールの内側に置く。
覚えること:送料計算を集約し入力・結果だけ扱う

送料計算を一つのモジュールへまとめれば、送料ルールの変更時に画面ごとに修正する手間を減らせます。呼出し側は必要な入力と結果だけを扱います。

凝集度は一つのモジュール内の仕事のまとまり、結合度はモジュール間の依存の強さです。責任が明確で、内部実装への依存が少ない構造を目指します。

単にファイルを細かく分けても、互いの内部状態を直接書き換えるなら依存は強いままです。境界と公開するインタフェースを考えます。

結合度と凝集度の段階

結合度と凝集度の段階の図解。左に利用側、右に利用される側のモジュールを一組だけ置く。上の青い矢印は必要なデータだけを右の引数口へ渡し、下の赤い矢印は引数口を通らず右の内部へ直接入り込む形にして、二つの経路を細い線で仕切る。
覚えること:必要なデータだけ渡す結合が望ましい

モジュールの独立性は、結合度が低いほど、凝集度(モジュール強度)が高いほど高いと評価します。外部に見せるインタフェースを明確にして内部の実装を隠す(情報隠蔽)と、内部を変更しても利用側を直さずに済みます。

結合度は、モジュール間で何を受け渡すかで段階が分かれます。必要なデータ項目だけを引数で渡すデータ結合が最も弱く望ましい結合で、他のモジュールの内部を直接参照・変更する内容結合が最も強い結合です。

凝集度は、高い順に機能的強度、情報的強度、連絡的強度、手順的強度、時間的強度、論理的強度、暗合的強度です。一つの機能だけを実行するモジュールが最も望ましく、「初期化処理をまとめただけ」のように実行時期が同じだけのもの(時間的強度)や、無関係な処理の寄せ集め(暗合的強度)は低い評価です。

結合度と凝集度の段階
結合度(弱い順)受け渡し・依存のしかた
データ結合必要なデータ項目だけを引数で渡す
スタンプ結合構造体(レコード)ごと渡し、その一部だけを使う
制御結合処理を切り替えるフラグなどの制御情報を渡す
外部結合外部で宣言した単一のデータを複数のモジュールが参照する
共通結合共通域の構造化データを複数のモジュールが参照する
内容結合他のモジュールの内部を直接参照・変更する

試験に出る

  • 凝集度は「モジュール内のまとまり」、結合度は「モジュール間の依存の強さ」として区別します。
  • 変更に強い設計は、責任が明確で結合度が低い方向を目指す点。
  • ファイルを細かく分けても、内部状態を直接書き換えれば依存は弱くならない点に注意します。
  • 公開するインタフェースを決め、内部実装への依存を減らす考え方。
  • 送料計算のように変更が多い処理を一つにまとめる例の理解。
  • 結合度はデータ結合が最も弱く(望ましく)、内容結合が最も強い。凝集度は機能的強度が最も高い、という段階の順序。

重要な言葉

凝集度
一つのモジュール内の仕事のまとまりの度合い。
結合度
モジュール間の依存の強さ。低いほど変更に強い。
インタフェース
モジュールが外部へ公開する入力と結果の窓口。
データ結合
必要なデータ項目だけを引数で受け渡す、最も弱く望ましい結合。

確認問題

確かめよう他の部品の内部変数を直接変更する設計は変更に強い?

いいえ。内部の変更が利用側へ波及しやすくなります。

凝集度はモジュール間の依存の強さを表す。

他の部品の内部変数を直接書き換える設計は、変更の影響が広がりやすい。

モジュール内の仕事のまとまりの度合いを表すのは?

変更に強い設計が目指す方向は?

モジュール結合度が最も弱く、望ましいとされるものは?

一か所を変えたら無関係な機能まで壊れる設計では、変更のたびに負担が増えます。を分けることが大切です。

送料計算を一つのモジュールへまとめれば、送料ルールの変更時に画面ごとに修正する手間を減らせます。呼出し側は必要なだけを扱います。

は一つのモジュール内の仕事のまとまり、はモジュール間の依存の強さです。責任が明確で、内部実装への依存が少ない構造を目指します。

単にファイルを細かく分けても、互いの内部状態を直接書き換えるなら依存は強いままです。と公開するインタフェースを考えます。

テスト技法

テスト技法とは、誤りを見つけやすくするために、試す入力を工夫して選ぶ方法です。

エルくんが17歳・18歳・19歳のカードを受付で試し、18歳以上という条件の境界を確かめる図。
考え方の例:18歳以上を受け付ける処理なら、17・18・19を試すと境界前後を確認できます。19だけでは「18より大きい」と実装された誤りを見逃すかもしれません。

大量の入力をすべて試すのは難しいため、誤りが出やすい代表値を選びます。特に条件が切り替わる境目は重要です。

基本の仕組み

基本の仕組みの図解。中央に「18歳以上を受け付ける」判定の帯を横向きに置き、左から17歳・18歳・19歳を並べる。17歳と18歳の間に境界線を引き、17歳側を「受け付けない」、18歳・19歳側を「受け付ける」と示す。
覚えること:18歳以上なら17・18・19を試す

18歳以上を受け付ける処理なら、17・18・19を試すと境界の前後を確認できます。19だけでは「18より大きい」と実装された誤りを見逃すかもしれません。

同値分割は同じ扱いになる入力をグループ化し、境界値分析はその境目を重視します。ホワイトボックステストでは、分岐や経路など内部構造を基に確認します。

テストに通っても誤りが一切ないと証明できるわけではありません。正しい入力だけでなく、異常値や欠落、操作順の違いも仕様に沿って考えます。

テストの段階と結合テストの進め方

テストの段階と結合テストの進め方の図解。画面中央に上位モジュールを上、未完成の下位モジュールの枠を下に置き、上から下への矢印を描く。下の枠にはスタブを差し込み、下位モジュールの代わりに使う関係を示す。
覚えること:上位から進め、未完成の下位はスタブで代用

単体テストはモジュール内部の処理、結合テストはモジュール間のインタフェース、システムテストは性能や負荷を含めた要件全体、受入テスト(運用テスト)は発注者や利用者が業務で使えるかを確かめます。修正後に、変更していない部分へ悪影響が出ていないかを確かめるのが回帰テスト(リグレッションテスト)です。

結合テストを上位のモジュールから進めるトップダウンテストでは、まだできていない下位モジュールの代わりにスタブを使います。下位から進めるボトムアップテストでは、呼出し元となる上位モジュールの代わりにドライバを使います。

テストの段階と結合テストの進め方
テストの段階主な確認対象主に実施する側
単体テストモジュール内部の処理開発者
結合テストモジュール間のインタフェース開発者
システムテスト性能・負荷を含む要件全体開発者(開発側)
受入テスト(運用テスト)業務で使えるか発注者・利用者
テストの段階と結合テストの進め方
進め方テストする順序代わりに用意するもの
トップダウンテスト上位から下位へスタブ(下位モジュールの代用)
ボトムアップテスト下位から上位へドライバ(上位の呼出し元の代用)

ブラックボックステストと網羅の基準

ブラックボックステストと網羅の基準の図解。中央に「AかつB」の判定装置を置き、左の2枚の入力カード「A真・B偽」「A偽・B真」から矢印を通す。右側では両方の矢印が「判定は偽」に着き、その先の処理Xには進まない構図にする。
覚えること:この2ケースは条件網羅のみ

ブラックボックステストは内部構造を見ずに仕様から入力を選びます。「18歳以上を受け付ける」なら、18以上が有効同値クラス、17以下が無効同値クラスで、同値分割ではそれぞれから代表値を一つずつ選びます。境界値分析(限界値分析)では、境目の17と18を必ず含めます。

ホワイトボックステストは、内部の命令や分岐をどこまで実行したか(網羅、カバレージ)を基準にします。「AかつBなら処理Xを行う」という判定一つなら、命令網羅はAとBがともに真の1ケースで満たせますが、判定条件網羅(分岐網羅)には判定が偽になるケースも必要です。

条件網羅は、AとBがそれぞれ真と偽をとればよいので、(A真・B偽)と(A偽・B真)の2ケースでも満たせます。ただし、この2ケースでは判定がどちらも偽になるため、処理Xが一度も実行されず、判定条件網羅も命令網羅も満たしません。条件の真偽のすべての組合せを試す複数条件網羅が最も強い基準です。

ブラックボックステストと網羅の基準
網羅の基準満たす条件「AかつB」での最少ケース数
命令網羅すべての命令を1回以上実行する1
判定条件網羅(分岐網羅)各判定の真と偽を1回以上実行する2
条件網羅各条件の真と偽を1回以上とる(判定結果は問わない)2
複数条件網羅条件の真偽のすべての組合せを試す4

試験に出る

  • 同値分割は同じ扱いになる入力のグループ化、境界値分析はその境目を重視する点の区別。
  • 18歳以上なら17・18・19のように、境界の前後と境界値そのものを試す考え方。
  • ホワイトボックステストは分岐や経路など内部構造を基に確認する点。
  • テストが通っても誤りがないと証明できるわけではない点。
  • 異常値・欠落・操作順の違いも仕様に沿って試す必要がある点。
  • トップダウンテストでは下位の代わりにスタブ、ボトムアップテストでは上位の代わりにドライバを使う点。
  • 条件網羅を満たしても判定条件網羅を満たすとは限らず、複数条件網羅が最も強い基準である点。

重要な言葉

同値分割
同じ扱いになる入力をグループに分けて代表値を試す技法。
境界値分析
条件が切り替わる境目の値に注目して試す技法。
ホワイトボックステスト
分岐や経路など内部構造を基に確認するテスト。
スタブ
トップダウンテストで、未完成の下位モジュールの代わりに呼び出される仮のモジュール。
ドライバ
ボトムアップテストで、上位の呼出し元の代わりにテスト対象を呼び出す仮のモジュール。
回帰テスト
修正や変更によって、変更していない部分に悪影響が出ていないかを確かめるテスト。

確認問題

確かめよう18歳以上の条件で境界の直前の値は?

17です。境界値18と組み合わせます。

境界値分析では、条件が切り替わる境目の値を重視する。

テストに通れば、誤りが一切ないと証明できる。

条件が切り替わる境目を重視するテスト技法は?

ホワイトボックステストが基にするのは?

トップダウンテストで、未完成の下位モジュールの代わりに使うものは?

大量の入力をすべて試すのは難しいため、誤りが出やすい代表値を選びます。特に条件が切り替わるは重要です。

18歳以上を受け付ける処理なら、17・18・19を試すと境界の前後を確認できます。19だけでは「18より大きい」と実装された誤りをかもしれません。

は同じ扱いになる入力をグループ化し、はその境目を重視します。ホワイトボックステストでは、分岐や経路など内部構造を基に確認します。

テストに通っても誤りが一切ないと証明できるわけではありません。正しい入力だけでなく、異常値や欠落、の違いも仕様に沿って考えます。

レビュー技法

レビュー技法とは、プログラムを実行せずに成果物を他の目で確かめ、欠陥を早期に見つける活動です。

エルくんが説明する図解。作成者の説明→参加者の具体質問→仕様漏れ発見→修正の循環。
作成者が予約の取消し処理を順に説明し、参加者が「取消し後の在庫は戻るか」と質問すると、実装前に仕様漏れを見つけられます。

実行前でも、設計書の抜けやコードの読み違いを発見できます。レビューは成果物を他の目で確かめる活動です。

基本の仕組み

基本の仕組みの図解。中央に予約取消しの手順書を大きく置き、左の「作成者の説明」から、手順書上の「予約の取消し」→「在庫は戻る?」→「仕様漏れ」へ矢印をつなぐ。右端の発見箇所に「実装前」を添え、在庫が実際に戻るかは描かない。
覚えること:取消し後の在庫を問い実装前に仕様漏れ発見

作成者が予約の取消し処理を順に説明し、参加者が「取消し後の在庫は戻るか」と質問すると、実装前に仕様漏れを見つけられます。

ウォークスルーは作成者の説明を基に確認する方法、インスペクションは役割や手順を定めて系統的に欠陥を探す方法です。目的と進め方を区別します。

作成者の能力を評価する場にすると、問題を隠したり議論が脱線したりします。成果物の具体的な不整合と修正判断に焦点を当てます。

レビューの種類

レビューの種類の図解。1つの机上で、左上の事前に読んだ資料と役割・手順の表から、中央の欠陥記録、右の修正確認欄へ矢印をつなぐ。作成者以外の進行役であるエルくんを中央に置き、記録と修正確認を一連の手順として示す。
覚えること:欠陥を記録し、修正まで確認

ウォークスルーは作成者が主催し、成果物を順に説明しながら参加者と検討します。インスペクションは、作成者ではないモデレーター(進行役)が主導し、事前に資料を読んだ参加者が決められた役割と手順で欠陥を指摘し、結果を記録して修正まで確認します。

ほかに、参加者が持ち回りで進行役を務めるラウンドロビン、同じ立場の開発者同士で見るピアレビュー、作成者自身が見直す机上チェックなどがあります。レビューは実行しない静的な検証、テストはプログラムを動かす動的な検証です。レビューの場では欠陥の指摘に集中し、直し方の議論や修正作業は分けて行います。

レビューの種類
方法進行役特徴
ウォークスルー作成者作成者の説明に沿って参加者が検討する
インスペクションモデレーター役割・手順・記録を定めて欠陥を検出し、修正を確認する
ラウンドロビン参加者の持ち回り全員が進行役を担い、主体的に参加する

試験に出る

  • レビューは実行せずに成果物を確かめ、早期に欠陥を見つける活動である点。
  • ウォークスルー(作成者の説明を基に確認)とインスペクション(役割・手順を定めて系統的に探索)の違い。
  • レビューを能力評価の場にすると、問題が隠れたり議論が脱線したりする点。
  • 成果物の具体的な不整合と修正判断に焦点を当てる姿勢。
  • 実行しない確認でも設計漏れを発見できる点。
  • インスペクションは作成者ではなくモデレーターが進行を主導する点。

重要な言葉

ウォークスルー
作成者の説明を基に成果物を確認するレビュー方法。
インスペクション
役割や手順を定めて系統的に欠陥を探すレビュー方法。
レビュー
成果物を他の目で確かめ、欠陥を早期に発見する活動。
モデレーター
インスペクションの進行を主導する調整役。作成者以外が務める。

確認問題

確かめようプログラムを実行せず設計漏れを調べるのは無意味?

いいえ。静的な確認で早期に欠陥を発見できます。

レビューはプログラムを実行しないと欠陥を見つけられない。

インスペクションは、役割や手順を定めて系統的に欠陥を探す方法。

作成者の説明を基に成果物を確認する方法は?

レビューで焦点を当てるべきものは?

実行前でも、設計書の抜けやコードの読み違いを発見できます。は成果物を他の目で確かめる活動です。

作成者が予約の取消し処理を順に説明し、参加者が「取消し後の在庫は戻るか」と質問すると、実装前にを見つけられます。

は作成者の説明を基に確認する方法、は役割や手順を定めて系統的に欠陥を探す方法です。目的と進め方を区別します。

作成者の能力を評価する場にすると、問題を隠したり議論が脱線したりします。成果物の具体的なと修正判断に焦点を当てます。

開発プロセスと開発モデル

開発モデルとは、要件の固まり方や変化への向き合い方に応じて、開発を進める型のことです。

エルくんが予約画面の試作品に改善部品を取り付け、計画・実装・確認・振り返りを繰り返す図。
予約画面の試作品を利用者に触ってもらい、短い周期で改善するのが反復的な進め方です。動く成果を使って認識のずれを小さくします。

仕様を最初に固めやすい仕事と、利用者の反応を見ながら決める仕事では、適した進め方が違います。

基本の仕組み

基本の仕組みの図解。中央に予約画面の試作品を1台置き、画面を試す位置から「短い周期で改善」の円形矢印を回して画面へ戻す。左側には「優先順位」「完了条件」「振り返り」を縦に並べ、3つとも反復を支える条件として矢印につなぐ。
覚えること:優先順位・完了条件・振り返りが必要

予約画面の試作品を利用者に触ってもらい、短い周期で改善するのが反復的な進め方です。動く成果を使って認識のずれを小さくします。

ウォーターフォールは工程を段階的に進め、アジャイルは短い反復で価値ある成果を届けながら変化へ対応します。どちらも品質管理や関係者との合意は必要です。

アジャイルは計画も文書も不要という意味ではありません。優先順位、完了条件、振り返りがなければ、ただ作り直しを続ける状態になります。

開発モデルの使い分け

開発モデルの使い分けの図解。左のエルくんが中央の試作品を右の利用者に見せる構図。試作品と利用者の下に「要求の認識」を置き、両者からそこへ向かう矢印を合流させて、認識を合わせる流れを示す。
覚えること:試作品で利用者と要求の認識を合わせる

ウォーターフォールモデルは工程を順に確定させ、原則として前の工程へ戻らない前提で進めます。プロトタイピングモデルは試作品を利用者に見せて要求の認識を合わせ、スパイラルモデルはリスクを評価しながら設計・開発を繰り返します。

システムを機能ごとに分け、段階的に作って順次リリースするのが段階的モデル(インクリメンタルモデル)、全体を作ってから要求の変化に合わせて改良を重ねるのが進展的モデル(エボリューショナリモデル)です。DevOpsは開発チームと運用チームが連携し、自動化されたビルド・テスト・リリースで迅速に改善を続ける考え方です。

開発モデルの使い分け
モデル中心となる進め方
ウォーターフォール工程を順に確定させて進める
プロトタイピング試作品で要求の認識を合わせる
スパイラルリスク評価と開発を繰り返す
アジャイル短い反復で価値を届け、変化に対応する
DevOps開発と運用が連携し、継続的に改善・リリースする

スクラムの役割とイベント

スクラムの役割とイベントの図解。左に「スプリントゴール」とその「進み具合」、右に「直近の作業計画」を置き、左から右への矢印で確認から調整への流れを示す。中央にエルくん、右上に「15分」を配置する。
覚えること:15分で目標への進捗確認・直近計画調整

スクラムでは、プロダクトオーナーがプロダクトの価値を最大化する責任を持ち、プロダクトバックログの項目や順序を明確にします。例えば予約機能と通知機能のどちらを先に届けるかを、利用者の価値から整理します。開発者へ実装手順を一方的に命令する役割とは区別します。

デイリースクラムは、開発者がスプリントゴールへの進み具合を確認し、直近の作業計画を調整する15分のイベントです。管理者へ一人ずつ成果を報告するだけの会議ではありません。障害を見つけたら、必要な詳しい議論を別途行うこともできます。

バーンダウンチャートは、横軸に時間、縦軸に残作業量を置いて進捗を見る方法です。完了した量の累計を描くグラフと混ぜないようにします。線が下がらない場合は未完了の作業や見積りの変化を確認しますが、グラフだけで価値や品質を保証することはできません。

スクラムマスターは、スクラムの理論と実践をチームや組織が理解できるよう支援し、チームの有効性に責任を持ちます。スプリントは1か月以内の固定期間で、その中にスプリントプランニング、デイリースクラム、スプリントレビュー、スプリントレトロスペクティブが含まれます。

スクラムの役割とイベント
イベント目的
スプリント1か月以内の固定期間で、ほかのイベントを含む
スプリントプランニングスプリントで何をどう進めるかを計画する
デイリースクラム開発者が15分で進み具合を確認し、直近の計画を調整する
スプリントレビュー成果を関係者に示し、次に何をするかを検討する
スプリントレトロスペクティブチームのやり方を振り返り、改善策を決める

XPの代表的なプラクティス

XPの代表的なプラクティスの図解。一つの作業机の左にテスト用紙、右にコード編集画面を置き、左から右への矢印で「先にテストを書く→それを通すコードを書く」の順序を示す。場面を仕切らず、右端に「テストを通す」をゴールとして添える。
覚えること:先にテストを書き、通るコードを書く

XP(エクストリームプログラミング)では、テスト駆動開発(先にテストを書き、それを通すようにコードを書く)、ペアプログラミング(二人一組で一つのコードを書く)、リファクタリング(外部から見た動作を変えずに内部構造を改善する)、継続的インテグレーション(頻繁に統合し、ビルドとテストを自動で実行する)などを実践します。

今必要でない機能は作らないというYAGNI(You Aren't Gonna Need It)の考え方や、特定の担当者に限らず誰でもコードを修正できるソースコードの共同所有もXPの特徴です。リファクタリングは機能追加や不具合修正とは目的が違う点に注意します。

試験に出る

  • ウォーターフォールは工程を段階的に進め、アジャイルは短い反復で変化に対応する点の対比。
  • アジャイルは計画や文書が不要という意味ではなく、優先順位・完了条件・振り返りが必要である点。
  • プロダクトオーナーは価値を最大化し、プロダクトバックログの項目と順序を明確にする責任を持つ点。
  • デイリースクラムは進み具合を確認して直近の計画を調整する15分のイベントで、報告会ではない点。
  • バーンダウンチャートは横軸に時間・縦軸に残作業量を置く点と、グラフだけで品質を保証できない点。
  • リファクタリングは外部から見た動作を変えずに内部構造を改善することで、機能追加ではない点。
  • スプリントは1か月以内の固定期間で、レビュー(成果の確認)とレトロスペクティブ(進め方の振り返り)の目的が異なる点。

重要な言葉

ウォーターフォール
工程を段階的に進める開発モデル。
アジャイル
短い反復で価値ある成果を届け、変化に対応する進め方。
プロダクトオーナー
プロダクトの価値最大化に責任を持ち、バックログの順序を明確にする役割。
デイリースクラム
進み具合を確認し直近の計画を調整する15分のイベント。
リファクタリング
外部から見た動作を変えずに、プログラムの内部構造を改善すること。
テスト駆動開発
先にテストを書き、そのテストを通すようにコードを書き進める開発手法。

確認問題

確かめよう反復の最後に動く成果を確認する目的は?

利用者の反応を次の優先順位や改善へ反映するためです。

プロダクトオーナーは、プロダクトバックログの項目と順序を明確にする責任を持つ。

デイリースクラムは、管理者へ一人ずつ成果を報告する会議である。

プロダクトの価値最大化に責任を持ち、バックログの順序を明確にする役割は?

デイリースクラムの説明として正しいものは?

外部から見た動作を変えずに、プログラムの内部構造を改善するXPのプラクティスは?

仕様を最初に固めやすい仕事と、利用者の反応を見ながら決める仕事では、適したが違います。

予約画面の試作品を利用者に触ってもらい、短い周期で改善するのがな進め方です。動く成果を使って認識のずれを小さくします。

は工程を段階的に進め、は短い反復で価値ある成果を届けながら変化へ対応します。どちらも品質管理や関係者との合意は必要です。

アジャイルは計画も文書も不要という意味ではありません。、完了条件、振り返りがなければ、ただ作り直しを続ける状態になります。

スクラムでは、がプロダクトの価値を最大化する責任を持ち、プロダクトバックログの項目や順序を明確にします。例えば予約機能と通知機能のどちらを先に届けるかを、利用者の価値から整理します。開発者へ実装手順を一方的に命令する役割とはします。

は、開発者がスプリントゴールへの進み具合を確認し、直近の作業計画を調整する15分のイベントです。管理者へ一人ずつ成果を報告するだけの会議ではありません。障害を見つけたら、必要な詳しい議論を別途行うこともできます。

は、横軸に時間、縦軸に残作業量を置いて進捗を見る方法です。完了した量の累計を描くグラフと混ぜないようにします。線が下がらない場合は未完了の作業や見積りの変化を確認しますが、グラフだけで価値や品質を保証することはできません。

オブジェクト指向と多相性

多相性とは、同じ呼び出し方でも、実際のオブジェクトの種類に応じて異なる処理が選ばれる性質です。

エルくんが面積()の共通スタンプを円と長方形へ押すと、それぞれの計算式カードが出る図。
同じ面積操作でも、実際の図形の種類で計算方法が変わります。呼び出し方を共通にし、種類別の実装を利用できる性質が多相性です。

似た処理を種類ごとに条件分岐で書き続けると、新しい種類を追加するたびに修正箇所が増えます。共通の呼び出し方と、種類別の実装を分けます。

基本の仕組み

基本の仕組みの図解。上部の「面積を求める」ボタンから矢印を二股に分け、左の円と右の長方形につなぐ。各図形の下には別々の計算処理枠を置き、図形によって処理が変わることを示す。
覚えること:同じ操作でも図形で処理が変わる

図形に面積を求める操作を定め、円と長方形で計算方法を実装すれば、利用側は同じ操作で面積を求められます。実際の図形の種類によって処理が変わるのが多相性です。

クラスは属性と操作を定義し、オブジェクトはその具体的な実体です。カプセル化は内部状態へのアクセスを管理し、継承は既存の定義を引き継ぎます。継承先で操作の実装を置き換えるのがオーバーライドです。

同じ名前でも引数が違うオーバーロードと、継承した操作を再定義するオーバーライドは別です。継承すれば常に良い設計になるわけではなく、親として扱ったときに約束した振る舞いを守れるかを確かめます。

オブジェクト指向の基本

オブジェクト指向の基本の図解。中央の縦線で左右を分ける。左は下の「円」から上の「図形」へ「一種」の矢印を伸ばし、右は「自動車」の輪郭の内側に「エンジン」を配置して、種類の関係と全体・部分の関係を対比する。
覚えること:is-aは種類、part-ofは部分

クラス間の関係では、汎化と特化(is-a関係)と、集約(part-of関係)を区別します。「円は図形の一種」のように共通の性質を上位のスーパークラスにまとめるのが汎化、その逆に下位のサブクラスへ具体化するのが特化です。「エンジンは自動車の一部」のような全体と部分の関係が集約です。

委譲は、あるオブジェクトが受け取った処理の要求を、別のオブジェクトに任せて実行させる仕組みです。継承を使わずに機能を再利用する方法として使われます。

オブジェクト指向の基本
概念意味
カプセル化データと操作をまとめ、内部を隠す
継承スーパークラスの性質をサブクラスが受け継ぐ
多相性同じ呼出しで、実際の種類に応じて実装が変わる
汎化・特化(is-a)共通の性質を上位にまとめる・下位で具体化する
集約(part-of)全体と部分の関係
委譲処理の要求を別のオブジェクトに任せる

試験に出る

  • 多相性は、同じ呼び出しでも実際の種類に応じて処理が変わる性質である点。
  • クラス(属性と操作の定義)とオブジェクト(その実体)の違い。
  • カプセル化は内部状態へのアクセスを管理する考え方。
  • オーバーロード(引数が違う同名の操作)とオーバーライド(継承先での再定義)の区別。
  • 継承すれば常に良い設計になるわけではなく、親として扱ったときの振る舞いを守れるかを確かめる点。
  • 汎化・特化(is-a関係)と集約(part-of関係)の区別。

重要な言葉

多相性
同じ呼び出しでも実際の種類に応じて処理が変わる性質。
カプセル化
内部状態へのアクセスを管理する考え方。
オーバーライド
継承先で親の操作の実装を置き換えること。
オーバーロード
同じ名前で引数の異なる操作を定義すること。
汎化
複数のクラスに共通する性質を上位のクラスにまとめること(is-a関係)。

確認問題

確かめよう利用側が円か長方形かを毎回判定しなくても面積操作を呼べる性質は?

多相性です。

多相性とは、同じ呼び出し方でも実際の種類に応じて処理が変わる性質である。

オーバーロードとオーバーライドは同じ意味である。

継承先で親の操作の実装を置き換えることを何といいますか。

利用側が種類を判定しなくても同じ操作を呼べる性質は?

似た処理を種類ごとに条件分岐で書き続けると、新しい種類を追加するたびに修正箇所が増えます。共通の呼び出し方と、種類別のを分けます。

図形に面積を求める操作を定め、円と長方形で計算方法を実装すれば、利用側は同じ操作で面積を求められます。実際の図形の種類によって処理が変わるのがです。

は属性と操作を定義し、はその具体的な実体です。カプセル化は内部状態へのアクセスを管理し、継承は既存の定義を引き継ぎます。継承先で操作の実装を置き換えるのがオーバーライドです。

同じ名前でも引数が違うと、継承した操作を再定義するは別です。継承すれば常に良い設計になるわけではなく、親として扱ったときに約束した振る舞いを守れるかを確かめます。

覚えるポイント

  • システム開発の全体像:要件定義で必要なことを合意し、設計で実現方法を決め、実装・テストで確認します。受入テストでは依頼者の目的を満たすかを評価します。
  • ソフトウェア方式設計:凝集度は一つのモジュール内の仕事のまとまり、結合度はモジュール間の依存の強さです。責任が明確で、内部実装への依存が少ない構造を目指します。
  • テスト技法:同値分割は同じ扱いになる入力をグループ化し、境界値分析はその境目を重視します。ホワイトボックステストでは、分岐や経路など内部構造を基に確認します。
  • レビュー技法:ウォークスルーは作成者の説明を基に確認する方法、インスペクションは役割や手順を定めて系統的に欠陥を探す方法です。目的と進め方を区別します。
  • 開発プロセスと開発モデル:ウォーターフォールは工程を段階的に進め、アジャイルは短い反復で価値ある成果を届けながら変化へ対応します。どちらも品質管理や関係者との合意は必要です。
  • オブジェクト指向と多相性:クラスは属性と操作を定義し、オブジェクトはその具体的な実体です。カプセル化は内部状態へのアクセスを管理し、継承は既存の定義を引き継ぎます。継承先で操作の実装を置き換えるのがオーバーライドです。

出典・参考資料

試験の公式案内と、この記事の参考にした学習資料です。

編集:Pinternet Works · 更新日:

教材の編集方針・訂正について