ソフトウェアのモデル化ってなんだ?
生成AI前世の昨今、多くの方がモデルという言葉を毎日のように見聞きしているのではないでしょうか?
ところでモデルやモデルを作成するモデル化とは一体なんのことでなぜ大切なのでしょうか?この記事ではバズワードになりつつあるモデル(ここでは便宜的にモデル化)を紐解きたいと思います。
下記の書籍のChaper3が主な参照先です。
先ず、モデル化そのものを掘り下げる前に、モデル化の根本的なゴールであるデザインを改めて整理します。
デザインとは日本語で設計のことですが、定義が曖昧でどうとでも捉えることができる言葉かと思います。
私は、デザインとは、ある特定領域において利用者が探していることに応えること、と定義できると思っています。よくわからないかもしれませんが。
仮に、 利用者が探していることを、利用者自身が明確な言葉で定義して他社に淀みなく伝えることができれば、デザインは容易いことかもしれません。
しかしながら、多くの利用者はある特定領域の専門家ではないため、特定領域において自分が何をなぜ探しているかを、自身の言葉で定義することは困難かと思います。
この根源的なゴールを達成する手段として、ソフトウェアエンジニアリングやサイバーセキュリティの世界ではモデル化が必須の活動となっています。
モデル化とは物事の抽象化と言えます。電車の例を見てみましょう。
電車を抽象化して、その本質だけを抜き出すと以下のようになるかと。
色:電車の色は何色なのか?
相対サイズ:ドアや座席等、各々のパーツは他のパーツと比べてどのくらいの大きさなのか?
形:四角なのか丸なのか?
動き:レールの上を前後で動くはず。レールの外を動くことはあるのか?
上記4つの属性さえ明確に定義できれば、"電車とは何か?"に応えることができるかと思います。以下の電車の本質にはならない例です。これらは明確に定義できなくても、電車の本質ではないため問題ないですね。
素材、絶対サイズ、重量、稼働方式(例/ガソリンなのか電気なのか?)
モデル化とは厳格化のことでもあります。先にデザインとは、ある特定領域において利用者が探していることに応えること、と定義しました。
利用者は必ずしもソフトウェアエンジニアリングに精通しているわけではないため、利用者は自身が探していることを色々な言葉で定義します。
それらの言葉の多くは、曖昧さを持っていることがほとんどかと。"会員”をソフトウェアで実装するシーンの、利用者とソフトウェアエンジニアの会話例を見てみましょう。利用者は映画館の職員を想定しています。
利用者:会員をソフトウェアで実装して欲しいんですよ。オブジェクトでしたっけ?会員のオブジェクトってコードで実装できますよね?
エンジニア:はあ。。。まあできますが。そもそも"会員"って何ですか?
利用者:いや、会員は会員ですよ。性別とか年齢とか出生地とか趣味とか色々あるじゃないですか。
エンジニア:了解しました。その"色々"は曖昧なので、厳密に定義しましょう。先ず、映画鑑賞券の予約のために最低限必要な属性は、名前・住所・電話番号・年齢あたりですよね?
利用者:そうですね。
エンジニア:了解です。年齢についてもう少し掘り下げましょう。年齢を設定する意図は、年齢制限のある作品の予約を制御したいからですよね?映画作品の年齢制限バーは12歳、15歳、18歳ですよね?
利用者:そのとおりです。
エンジニア:了解です。であれば年齢の条件は、(Age <=12 or 12<= Age <= 15 or 15<= Age <=18 or 18 => Age) and Age not <=0 と表現すべきです。
利用者:?コードのことはよくわからないのですが、厳密に定義できれば不正な予約を排除できるので嬉しいですね。
取り留めのない長文に最後までお付き合い頂きありがとうございました。何事も曖昧さを排除した厳密な定義が必要ですよね。
この記事が気に入ったらサポートをしてみませんか?