モデリングの際に何を重要視するかを書きながら考える
モデリングをするのにいくつか目的があるとおもう
要求から開発までの思考のギャップを埋める
自分と他の人の認識のギャップを埋める
今日の自分と未来の自分の思考のギャップを埋める
たぶんこんな感じで、何かしらのギャップを埋めることが主目的になると思う。
じゃあ色んなギャップを埋めるときに何が重要なのかってのを考えてみる。
要求と開発のギャップ
自分と他者の認識のギャップは別に考えるとすると、要求と開発のギャップは
「こんな機能が必要」を充足できてるかってところにあると思う。
充足でき無くなる理由は各ステップである
要件を考える人の考慮不足
要件を考える人が言語化できていない
設計する人が要件を十分に理解できていない
設計での考慮不足
設計書への落とし込みで欠落
コーディングする人が要求と設計書を読み取れていない
コーディングでのバグ
どうしたらこういうのがなくせるか。
シナリオを正しく理解できる形にすればいいと思う。
だいたいの物事は順番に処理されると思うから、
頭のインプットから尻のアウトプットまでを順番にフローにする。
ここでいうアウトプットは開発したシステムの生み出した成果物だったり、システムで解決した問題だったり。
インプットはユーザ入力だったり、APIでどっかから取ってきたり。かな。
インプットは素直なインプットやけど、アウトプットは要求を持ってる人の体験的なところが強そう。
気を付けたいのは、アウトプットが一番欲しいものであって、
アウトプットに必要なものは全てインプットされている必要がある。
インプットが足りていなければすべては足りないままになるから、十分なアウトプットを得られないと思う。
いまあるインプットで何が実現できるかっていうのを考えたいのであればたぶん開発のモデリングとは別のところでやるべきやと思う。
最終的にこれがほしい。ってことは、こういうことをやっておく必要があって、
それをするには先にこういうことをやっておく必要があって、そのためにはこの情報が必要。
みたいなのを作ればいいと思う。
自分と他者の認識のギャップ
十分に話し合うことで解決できる問題だとはおもうけど、常に同期的にコミュニケーションが取れるわけではないから、その代わりになる媒体が必要になるんだと思う。
ってことで、誰がいつ見ても同じように読み取れる必要がある。
誰が見ても同じように読み取れるようにするには、解釈の余地を無くすことが必要になる。
円錐を上から見るか、横から見るかみたいなやつ。上からやと円に見えて、横からやと三角に見える。
なんで解釈の余地があるのかというと、得られる情報が十分じゃないからやと思う。
何で十分じゃないかというと
曖昧に書かれている
書かれていない
読み取り手の知識が足りない
とかかな。
書いてて思ったけど、これを完璧に実現するのは不可能ちゃうかなー
もしできたとしても、コストが高すぎる。
モデリングする人、ドキュメントを作る人がひたすら時間を使わなあかんし、
読み取る人が膨大なドキュメントを読み込む必要がでてくる。
ならせめて、解釈の余地を減らすことだけでもいいから頑張ってみる。
どんな時に解釈の余地があるかというと
使う用語が一致していない
持っている基礎となる知識が一致していない
他にも先入観とか読み間違いとかあると思うけど、それは自分と他者とのギャップとは違うと思うから除外。
ってことで、必要なのは辞書。
この用語はこういう意味ですよーってのを書いて、こういう意味ですよーの中で出てくる用語をまた説明して、
みんなが分からないものがなくなるまで繰り返す。
これは同期的でなくても、こんな用語を追加したよーってのが見えるようになっていれば、非同期的でも大丈夫やとおもう。
これで用語を一致させて、基礎となる知識を明確にできると思う。
こんぴゅーた?けいさんき?みたいなレベルは解決できひんけど。
今日と未来の自分の考え方のギャップ
今日モデリングしてる自分は今日持っている知識だけでモデリングしてて、
明日モデリングしたものを読み取る自分はモデリングした時の知識以上の知識をもって読み取る。
「モデリングした時の知識以上の知識」は、ドメイン理解だけじゃなくて、開発技術とかそういうのも含む。
すると、今日と未来の自分で実装が変わる可能性がある。
たぶん未来の自分が作る実装のほうが良いものができるとは思うけど、
今の自分が実装できることを考えてモデリングしてたら未来の自分は正しく実装できるかは分からない気がする。
まあ自分の間で発生するこれについては、そういうことがあるというのを頭のどこかにおいておけば大丈夫な気はするけど。
とりあえずまとめ
思考の整理をするためやったけど、とりあえず以下の2つを作ることが重要なのでないかという考えに至った
アウトプットからユースケースを遡りながら必要なインプットを特定する
プロジェクト内の辞書を作って用語について解釈の余地を残さないようにする
更新履歴