「はじめよう!システム設計 ~要件定義のその後に」を読んでみて
今回は「はじめよう!システム設計 ~要件定義のその後に」を読んだので内容と感想をまとめました。
気になったところだけピックアップしてまとめていきます。
前のシリーズの感想は以下
システム設計とは
システム設計は、要件定義で決まったことをもとにアーキテクチャにマッピングすることです。
そして、システム設計はフロント層、バック層、DB層の3つの層に分けることができます。
要件定義で決まったことをUI設計に落とし込み、それを元にバック層へ。
またそれをもとにDB層の設計を決めていきます。
UIデザインの4つの基本原則
- 近接
- 関連する項目同士を近くに集めてグルーピングする
- 整列
- 各要素をばらばらに配置せず、直線に沿う形で配列する
- 反復
- テーブル形式で表現されるリスト
- ほげほげ一覧ページ等で用いられる
- コントラスト
- 各要素を視覚的に区別できるよう表現する
モジュール化
機能とは、複数の処理のあつまりです。
一度にすべてを設計せず、それぞれのモジュールを設計し、それを組み合わせる形で設計します。
プログラムの基本
コンピュータの機能は以下の3つの組み合わせでできています。
フローチャートで出てくる部品ですね。
- 順接
- 一方向に並べた処理を順番に行なっていく
- 分岐
- ある条件で判定した結果、次の処理が選択される
- 反復
- あると規定の条件を満たすまで同じ処理を繰り返す
モジュールの機能名を定義する
モジュール化する上で、機能名を明確にすることが重要です。
xx機能のように名詞で決めるよりも「xxを◯◯する機能」のように動詞と目的語を明確にしましょう。
5歳児が見ても理解できるように書くと良いです。
その上で以下のことを意識すると、より分かりやすくなります。
- 語尾まで書く
- 例:「申請承認機能」ではなく「申請を承認する機能」
- こうすると「何の申請?」「どう承認する?」といった疑問が浮かびやすい
- 例:「申請承認機能」ではなく「申請を承認する機能」
- 受動態ではなく能動態で書く
- 例:「計算ボタンが押下されたら、消費税を計算する」ではなく「ユーザーが計算ボタンを押下したら、消費税を計算する」
- 主語が曖昧になることを避ける
- 例:「計算ボタンが押下されたら、消費税を計算する」ではなく「ユーザーが計算ボタンを押下したら、消費税を計算する」
- 否定表現を避け、肯定表現で書く
- 例:「平日でなければ、日次締め処理はしない」ではなく「平日であれば、日次締め処理をする」
モジュールのインターフェースを定義する
モジュールの連鎖がひとつの機能を作ります。
モジュール同士の連結にはインターフェースが必要となります。
ひとつのモジュールの役割を決める上で、どういったデータが必要か、処理の結果としてどういったデータを出力するのかを決める必要があります。
例えば保険料を計算する機能だと以下のようになります。
- 入力
- 性別
- 年齢
- 出力
- 保険料
また今後、入力値に過去の病歴や家族構成が必要になるかもしれません。
そういった場合に都度入力値の定義を変更する必要がないように、データ型を決めておくと良いです。
今回の例だと、「保険料審査情報」としておくとモジュールのインタフェース定義が以下のようにシンプルになります。
- 入力
- 保険料審査情報
- 出力
- 保険料
順接、分岐、反復に関する縛り
末端の機能に辿り着くまで以下の縛りを設ることで、スムーズにモジュール化ができます。
- 順接
- 「他のモジュールを呼び出す」ことだけできる
- 呼び出すモジュールは3つまでとする
- オープン、メイン、クローズのような3部構成として考える
- 分岐
- 条件の判定は、別モジュールの呼び出しのみとする
- 条件による分岐はTHENのみとする
- ELSEは使わない
- ELSEを使うと、隠れた条件を見逃すことがあるため
- 反復
- ループ内で実行するのは別モジュールの呼び出しのみとする
- ループを回すことと、ループ内の処理を切り離して考えるため
- ループ内で実行するのは別モジュールの呼び出しのみとする
tips
- 操作手順を確認する
- UI設計時に、画面レイアウトを見ながらユーザーの操作手順を確認しましょう。
- この時点で操作に疑問があがる場合は、設計を見直す必要があります。
- 賃借一致の原則と入出力
- 誰かの入力は、その相手の出力になる。
- モジュールの結合において、片方の出力値はもう一方の入力値になるということ。
- まずは正常系を書き切る
- 機能を設計する際、異常系の洗い出しもしたくなりますが、まずは正常系を最初から最後まで書き切りましょう
感想
設計と言いつつ実装も意識した内容になっていました。
設計時点でモジュール化ができていれば、実装内容が実装者によらないものになって良いな〜と思いました。
特に今後はAIに実装を依頼することが増えていくので、設計時点で整理ができていると実装依頼もスムーズにできそうです。
参考
- 羽生章洋. (2018). はじめよう! システム設計 ~要件定義のその後に.
Discussion