🙄

「はじめよう!システム設計 ~要件定義のその後に」を読んでみて

に公開

今回は「はじめよう!システム設計 ~要件定義のその後に」を読んだので内容と感想をまとめました。
気になったところだけピックアップしてまとめていきます。

前のシリーズの感想は以下
https://zenn.dev/kkyoka/articles/5a9747cc3f36a9
https://zenn.dev/kkyoka/articles/ee44da80e4926a

システム設計とは

システム設計は、要件定義で決まったことをもとにアーキテクチャにマッピングすることです。
そして、システム設計はフロント層、バック層、DB層の3つの層に分けることができます。
要件定義で決まったことをUI設計に落とし込み、それを元にバック層へ。
またそれをもとにDB層の設計を決めていきます。

UIデザインの4つの基本原則

  • 近接
    • 関連する項目同士を近くに集めてグルーピングする
  • 整列
    • 各要素をばらばらに配置せず、直線に沿う形で配列する
  • 反復
    • テーブル形式で表現されるリスト
    • ほげほげ一覧ページ等で用いられる
  • コントラスト
    • 各要素を視覚的に区別できるよう表現する

モジュール化

機能とは、複数の処理のあつまりです。
一度にすべてを設計せず、それぞれのモジュールを設計し、それを組み合わせる形で設計します。

プログラムの基本

コンピュータの機能は以下の3つの組み合わせでできています。
フローチャートで出てくる部品ですね。

  • 順接
    • 一方向に並べた処理を順番に行なっていく
  • 分岐
    • ある条件で判定した結果、次の処理が選択される
  • 反復
    • あると規定の条件を満たすまで同じ処理を繰り返す

モジュールの機能名を定義する

モジュール化する上で、機能名を明確にすることが重要です。
xx機能のように名詞で決めるよりも「xxを◯◯する機能」のように動詞と目的語を明確にしましょう。
5歳児が見ても理解できるように書くと良いです。

その上で以下のことを意識すると、より分かりやすくなります。

  • 語尾まで書く
    • 例:「申請承認機能」ではなく「申請を承認する機能」
      • こうすると「何の申請?」「どう承認する?」といった疑問が浮かびやすい
  • 受動態ではなく能動態で書く
    • 例:「計算ボタンが押下されたら、消費税を計算する」ではなく「ユーザーが計算ボタンを押下したら、消費税を計算する」
      • 主語が曖昧になることを避ける
  • 否定表現を避け、肯定表現で書く
    • 例:「平日でなければ、日次締め処理はしない」ではなく「平日であれば、日次締め処理をする」

モジュールのインターフェースを定義する

モジュールの連鎖がひとつの機能を作ります。
モジュール同士の連結にはインターフェースが必要となります。
ひとつのモジュールの役割を決める上で、どういったデータが必要か、処理の結果としてどういったデータを出力するのかを決める必要があります。

例えば保険料を計算する機能だと以下のようになります。

  • 入力
    • 性別
    • 年齢
  • 出力
    • 保険料

また今後、入力値に過去の病歴や家族構成が必要になるかもしれません。
そういった場合に都度入力値の定義を変更する必要がないように、データ型を決めておくと良いです。
今回の例だと、「保険料審査情報」としておくとモジュールのインタフェース定義が以下のようにシンプルになります。

  • 入力
    • 保険料審査情報
  • 出力
    • 保険料

順接、分岐、反復に関する縛り

末端の機能に辿り着くまで以下の縛りを設ることで、スムーズにモジュール化ができます。

  • 順接
    • 「他のモジュールを呼び出す」ことだけできる
    • 呼び出すモジュールは3つまでとする
      • オープン、メイン、クローズのような3部構成として考える
  • 分岐
    • 条件の判定は、別モジュールの呼び出しのみとする
    • 条件による分岐はTHENのみとする
      • ELSEは使わない
      • ELSEを使うと、隠れた条件を見逃すことがあるため
  • 反復
    • ループ内で実行するのは別モジュールの呼び出しのみとする
      • ループを回すことと、ループ内の処理を切り離して考えるため

tips

  • 操作手順を確認する
    • UI設計時に、画面レイアウトを見ながらユーザーの操作手順を確認しましょう。
    • この時点で操作に疑問があがる場合は、設計を見直す必要があります。
  • 賃借一致の原則と入出力
    • 誰かの入力は、その相手の出力になる。
    • モジュールの結合において、片方の出力値はもう一方の入力値になるということ。
  • まずは正常系を書き切る
    • 機能を設計する際、異常系の洗い出しもしたくなりますが、まずは正常系を最初から最後まで書き切りましょう

感想

設計と言いつつ実装も意識した内容になっていました。
設計時点でモジュール化ができていれば、実装内容が実装者によらないものになって良いな〜と思いました。
特に今後はAIに実装を依頼することが増えていくので、設計時点で整理ができていると実装依頼もスムーズにできそうです。

参考

  • 羽生章洋. (2018). はじめよう! システム設計 ~要件定義のその後に.

Discussion