| English | 意味 |
|---|---|
| structure chart/ˈstrʌktʃə tʃɑːt/ | 構造図 |
| state-transition diagram/steɪt trænˈsɪʃn ˈdaɪəɡræm/ | 状態遷移図 |
| pseudocode/ˈsuːdəʊkəʊd/ | 擬似コード |
| decomposition/ˌdiːkɒmpəˈzɪʃn/ | 分解 |
| subroutines/ˈsʌbruːtiːnz/ | サブルーチン |
| parameters/pəˈræmɪtəz/ | パラメータ |
| top-down design/tɒp daʊn dɪˈzaɪn/ | トップダウン設計 |
| states/steɪts/ | 状態 |
ソフトウェアが工学になった年
- 1968年10月、世界を代表する50人のプログラマがドイツ・ガルミッシュに集まり、大規模プログラムの失敗(遅延、予算超過、信頼性不足)の理由を議論した。彼らは欠けていたものを指し示す用語として ソフトウェアエンジニアリング を造語した。
- 不満は単純だった。建設家は建てる前に図面を描く。エンジニアは切断する前に計算を行う。プログラマは誰にも何を描かせていない状態でコードを入力していたのだ。
- その十年間で生まれた図面こそが、デザイン工程で使用するものとなる:構造化図(プログラムがどのように部分に分解されているかを示す)と状態遷移図(動作を示す)。
- この授業では、それらをどう読むか、どう作成するか、そして構造化図から擬似コードへどう変換するかを学ぶ。
デザインが決定すること
- 分析はプログラムが 何を(what) すべきかを定めた。デザインは どのように(how) を決定する: データ構造、アルゴリズム、モジュール、およびインターフェースである。
- デザイン工程で生み出される図面は、プログラマがコードにできるものである: 1つのアルゴリズムのロジック用 フローチャート、テキストによる同内容の 擬似コード、モジュール用の構造化図、動作用の状態遷移図。
- 各ツールは異なる質問に答え、試験ではどれが適切かを問う。
コード化される前に描かれたあるアルゴリズムのロジック
ソフトウェアプロセスラボ
開発例を、該当する段階またはツールに基づいて分類しなさい。
構造図
- 構造図は、プログラムがモジュール、サブROUTINES(サブルーチン)、およびそれら間で渡されるパラメータに分解された階層的な分解を示す。このトップダウン設計は、大きな問題をより小さな部分問題に分割し、それぞれが1つのモジュールとなる。
- 各モジュールは長方形で表される。上の呼び出し元と、下の呼び出されるモジュールを結ぶ線がある。同じレベルのモジュールは左から右へ呼ばれる。
- 線の横にある小さな矢印がデータを運ぶ: モジュール内へ 下 に渡されるパラメータ、呼び出し元へ 上 に返される結果。菱形は選択を、曲線矢印ループを表す。

Hierarchy on the lines, data on the arrows
構造図は次のように示す:
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
構造図はモジュールへの階層的分解であり、下向きにパラメータ、上向きに結果を示す。
問題をトップダウン方式でモジュールに分割することを何というか:
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
トップダウン設計はモジュール指向のソリューションを生み出す。
例題: 図からシグネチャーを読む
CalculatePay
/ | \
GetEmployee CalculateBonus CalculateTax
returns: takes: sales takes: gross
employeeID returns: bonus returns: tax
GetEmployeeは何も受け取らず従業員IDを返す:FUNCTION GetEmployee() RETURNS INTEGER。CalculateBonusは売上数値を受け取り、ボーナスを返す:FUNCTION CalculateBonus(Sales : REAL) RETURNS REAL。CalculateTaxは総支給額を受け取り、税金を返す。図上のすべての矢印はヘッダーのパラメータまたは戻り値である。図に示されていないパラメータを含むヘッダーは誤りである。
構造図において、呼び出し元からモジュールへ向かう小さな矢印は、そこに渡される____を示している。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
下向きの矢印は入力パラメータ、上向きの矢印は返される結果である。これらは合わせてモジュールヘッダーとなる。
例題: 構造化図を作成する
- あるプログラムは学生の得点を読み込み、平均値を計算して、グレードを出力する。構造図を描け。
- 最上位モジュール:
ProcessStudent。その下に左から右へ:ReadMarks(スコア配列を返す)、CalculateAverage(スコア配列を受け取り平均を返す)、OutputGrade(平均を受け取り何も返さない)。 - 3つが採点対象: 最上位に主要タスクがある階層、実行順のサブタスク、そして正しい方向の矢印上的名前付きパラメータ。ラベルのない矢印は最高でも半点である。
構造化図から擬似コードへ
- 最上位モジュールがメインプログラムとなり、その下の長方形は矢印から読み取ったヘッダーを持つプロシージャまたは関数となる。メインプログラムは左から右の順序でそれらを呼ぶ。
PROCEDURE ProcessStudent()
DECLARE Marks : ARRAY[1:10] OF INTEGER
DECLARE Average : REAL
Marks ← ReadMarks()
Average ← CalculateAverage(Marks)
CALL OutputGrade(Average)
ENDPROCEDURE
- 戻り値がある場合、それは
FUNCTION … RETURNSであり、何も戻さないモジュールはPROCEDUREである。パラメータリストはちょうど下向きの矢印に相当する。
構造図を用いたプログラムの設計手順を正しい順序で並べなさい。
難易度 3/5 · 200 コイン + 今日初回完了時に小ボーナス付与
トップダウン:タスク→サブタスク→データフロー→ヘッダー→呼び出し。コードの最初の行が書かれる前に図は完成する。
構造図の矢印で値が上方向に返されることが示されているモジュールは、PROCEDUREとして記述すべきである。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
返される値がある場合はFUNCTION … RETURNSとなる。PROCEDUREは何も返さない。
状態遷移図
- 状態遷移図 はシステムの 動作 を文書化する: あり得る 状態 と、それをある状態から別の状態へ移動させる イベント 。
- 各状態は円または角丸ボックス、各遷移は原因となるイベントでラベル付けされた矢印( sometimes 伴うアクション)である。始点状態を示すマーカーがある。
- イベントを待って反応するシステムに適している: 自動販売機、信号機、ドアロック、ユーザーインターフェース。

Every state, every event, every arrow
状態遷移図は次のように示す:
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
状態は円、遷移はイベントラベル付きの矢印である。自動販売機、錠前、信号機などに最適。
状態遷移図が示すものは何か?すべて選択しなさい。
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
状態、ラベル付き遷移、開始マーカー。タイミングは図に含まれない。
演習例:ドアロック図を読む
- 暗号2, 5, 9でロックが解除されます。Lockedから始めます。2を押すとOne digit correctに移動し、そこから5を押すとTwo digits correctに、さらにそこから9を押すとUnlockedになります。
- 待機状態のいずれかから他のキーを押すとLockedに戻ります: 図にはこれらの矢印も示されており、それらを省略した図には欠落があります。Unlocked状態で2を押したらどうなりますか? どの矢印にも書かれていない場合、設計側が未定義です。
- それが図の役割です: 各状態はすべてのイベントに対して何が起こるかを明示する必要があります。したがって、欠落している遷移は顧客ではなく、設計者が紙上で見つけ出します。
状態遷移図は、すべての状態とそれらの間のイベントが明確に描かれているため、欠落しているまたは処理されていない遷移を容易に見つけられる。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
すべての状態とイベントを可視化すると、処理できていないケースが発見されます。例:自動販売機での予期せぬ硬貨の投入など。
ツールの選択
- プログラムがモジュールに分割され、その間で何がやり取りされるかを示す: 構造図。
- イベントに対するシステムの時間的な挙動、特にモードを持つ機械やインターフェースの動作を示す: 状態遷移図。
- 1つのアルゴリズムの段階的なロジックを示す: フローチャートまたは擬似コード。どれを選ぶべきか、および理由を述べよ。
各設計ツールを、それが示す内容と対応させなさい。
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
各ツールは異なる視点で設計を示す—構造(モジュール)、振る舞い(状態)、流れ(フローチャート)、または手順(擬似コード)。
タイマーと歩行者ボタンに応答する交通信号コントローラーの振る舞いを最も適切に記録できる設計ツールはどれか?
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
赤、赤・黄、緑、黄は状態、タイマーとボタンはイベントである。構造図はモジュールを示すだけで、振る舞いは示さない。
見落としやすいポイント
- 構造図はフローチャートではない。階層とパラメータを示すものであり、モジュール内の意思決定の順序を示すものではない。
- 矢印すべてにパラメータ名または返り値の名前を付け、正しい方向を指し示せ。ラベルのない矢印は何も意味しない。
- 状態とはシステムが待機している状況であり、イベントとはそこに生じる出来事である。「5を押す」はイベントであり、状態ではない。
- 擬似コードの見出しは図と一致させる: 同じパラメータ、同じ返り値、同じ呼び出し順にする。
理解できましたか
- 構造図は、モジュールへのトップダウン分解を示し、パラメータは下向き矢印で渡され、結果はラベル付きの上向き矢印で戻ってくる。
- 擬似コードの見出しから読み取る: 下向きの矢印はパラメータリストであり、上向きの矢印がある場合は
FUNCTION … RETURNSとなり、メインモジュールは左から右へ呼ぶ。 - 状態遷移図は状態とそれらを結ぶイベントを示し、誰にも未定義の遷移を露呈する。
- 分解 → 構造図; 挙動 → 状態遷移図; 1つのアルゴリズムのロジック → フローチャートまたは擬似コード