上流設計の不思議なところ
- 実験もしないでよくわかってないことまで決めようとする。詳細を無視して全体像を書こうとする。
- 抽象化 は あいまい にすること?上流工程では具体的な事象が見えてはいけない?
未知なものは経験するしか無いでしょ
- 経験が豊富で、ノウハウも豊富にたまっているのであれば、上流工程で整理するのがいい。ウォーターフォールプロセスが非常によく合う。
- 経験が不足しているなら、原理試作的に無理やり動かす、実験するしかない。
- 実験した結果を活かして、要求、仕様をブラッシュアップする。
実践からの学びはボトムアップ、帰納的だが、それを説明するにはトップダウンで演繹的に説明するほうが伝わりやすい。
抽象 = 木を見つつ森を見る
抽象 = 捨象。常識的な経験から類推可能な部分、普遍的な部分を削ぎ落とすこと。
あいまいにすることとは誰も言ってない!
- 基本設計には具体的な実装まで記載してはいけない?
- 具体的な構造体名、モジュール名まで削ってしまったら、トレーサビリティが取れなくなる
- なのに構造体名、モジュール名など具体的なエッセンスが不足した設計書が多い。
- もやもやとしたかたまりではなく、枝葉でもない。
オブジェクト指向三大要素
オブジェクト指向というと、汎化、継承、ポリモーフィズムやデザインパターンとかに注目に行きがちだが、これらは使う場面を選ばないとマイナスに働くことも多い。
カプセル化が重要。
おまけ UML 雑感
ロール名が変数名、インスタンスになる。多重度 配列の要素数になる。
よって双方向参照ではないなら両方にはいらない、記載しない方がいいのではないか。
アクティビティ図、責務をどこからどこまで実施するかがわかりやすいがトリガがわかりにくい。
シーケンス図、トリガはわかりやすいがトリガを受けて責務をどこからどこまで実施するかがわかりにくい。
擬似コード、箇条書き、文書で十分なことも多い。
分析と設計
分析とは、物事を細かく分解して、成分、要素、側面を明らかにすること。
分解する。細かな成分、要素を集める。
- 集めた要素を側面ごとにまとめる。→ モデル化。
- 関心事が似ている、近い、関連する度合いを距離感で表せる。KJ法に近い。
→ リファクタリング。クラスにまとめる。別クラスにする。ばらす。まとめなおす。
クラス化する、メンバ変数化する。