Software Designing in Hamburg steak
1枚目 ハンバーグ
定義的なメタファー
- Hardware
- 料理の皿や鍋。最近は皿も食べられるようになってきた。
- Software(広義)
- HWではない部分全部。つまりはハンバーグ。材料や調理法も含める。
- Software(狭義)
- ハンバーグの味付け。
- 要求仕様
- ハンバーグの注文
- 概要設計
- 献立決定(ハンバーグは洋風か和風か。おかずはポテトとサラダにしようか)
- 詳細設計
- 食材決定・調理法決定
- テスト設計
- 味見をどう行うか。注文どおり作れたかをどう調査するか。
良いハンバーグ
- 腐らない(保守性 maintainability)
- おなか壊さない(信頼性 dependability)
- 栄養価高い(効率性 efficiency)
- 食べやすい(受容性 acceptability)
2枚目 ハンバーグと調理法
- 方法論
- どういうハンバーグを食べたいか、から調理法を導き出すこと。
- SW開発論
- 調理を始める前にあれこれ悩むこと。
- 分割統治
- たまねぎはたまねぎ、ひき肉はひき肉で分けて考え、最後に混ぜてハンバーグにする。
- モジュール方式
- それぞれの食材の性質を見つめなおす。
- 抽象化
- 目の前にある食材ではなく、その種の食材について考える。
ハンバーグ作ること=SW開発、ならば、調理器具=ツール。
3枚目 ハンバーグと食卓
- フォン・ノイマン型食器
- ハンバーグを上に乗せて使う食器(当たり前か)。
- 手続き型
- 一口ずつ食べる。
- 関数型
- ハンバーグを食べる。そのためにナイフで切ったり、フォークで刺したり、持ち上げたりする。
- 論理型
- 私はハンバーグを食べる。食べるとは口に運ぶという行為である。口とは人間の摂取機関である……
論理型がマイナーな理由が伺えますね。
- パラダイム
- ハンバーグという料理の本質の変化を時代で見たもの。
- ハンバーグの機能(具象)
- 味覚を励起する。栄養になる。
- ハンバーグの機能(抽象)
- 献立としてのハンバーグ。
- ハンバーグの機能(メタメタ)
- ハンバーグという料理の社会的なんか。
4枚目 ハンバーグの抽象化
食事(計算機)の抽象化
- 転送
- 口に運ぶ。飲み込む。→代入
- 演算
- 味わう。→式
- 制御
- 次に何を食べるか決める。→制御
制御だけ抽象度が低い気がするので抽象化↓
構造化プログラミング
- 連接
- 違うものを次々食べる
- 選択
- どっちか食べる
- 反復
- 同じものを何回か食べる
↓
客が口にするメニューの制御 → フランス料理のフルコース的な概念
↓
味のケンカを意識せずに複数の食材を扱うことが出来る。
5枚目 ハンバーグの食材とフルコース
- 情報隠蔽
- 物理・化学的な実体ではなく、食材として扱うことでやりやすくなる。
フルコースをさらに抽象化 〜本当かどうかは知らんがね〜
- 手続きの抽象化
- 定食とかじゃね。
- 制御構造の抽象化
- 実際に口に運ぶ順番(動的構造)とメニュー(静的構造)が一致していればOK
- データの抽象化
- 栄養価や味を定義
- サブルーチン
- 味がまとまってないので、後味を気にしないといけない。
- 関数
- 味がまとまってるので、任意のメニューと組み合わせられる。
6枚目 ハンバーグの特性
- 不可視性
- 栄養や味は目に見えない
- 不良率・故障率
- 腐らない。(ほんとか?)
- 修正コスト
- 味付けは濃い薄いなら多少変更できる。でも洋風を和風にするのはメンドイ。
- evolutional SW/incrimmental Dev
- 新しい肉料理→太る→カロリー下げる。
- 波及効果
- 調味料かえると他の味付けも変更が必要
- 十人十色
- 料理人によってハンバーグは色々ある。
ハンバーグ(SW)工学
- 要求された味・栄養価のものを作る
- 時間内に、限られた食材で。
- てきぱき作れたか。食材に無駄はないか。
- 属人性の排除
- 誰がやっても条件に従いハンバーグを作れる
7枚目 ハンバーグの時代変遷
1969 Recognition of Problem(問題提起) 大規模な献立(フルコース)になると、バグとか品質の問題が。 いい食器を用意しても、料理が足を引っ張るんじゃないか! 1970年代 Principle Era→Methods Era→Quality Era→Specification&Design Era(SW工学の芽生え) 構造化プログラミング(フルコースの登場) ボトムアップ→トップダウン(食材優先から、嗜好優先へ) 構造化言語(フルコースを表現できるメニューの出現) 作るだけではなく、評価もされねば料理ではない。 味や栄養価を定量的にはかることにする。 1980年代 Application Era→Industrialization Era 調理器具 直感的で分かりやすい調理器具の出現。(ミキサーとか) 教育 ハンバーグの作り方を体系的に論じる ハンバーグの量産。 以後、ダウンサイジング。
- EUC(End User Computing)
- 普通の人でもハンバーグぐらい食べられないとね。
- CASE(Computer Aided Software Engineering)
- 献立をつくるのにコンピュータソフトを使う。(さすがにここもハンバーグにしたら謎杉)
- プロダクトとプロセス
- ハンバーグと調理法
8枚目 ハンバーグ工学の技法の成果
作ってから味付けを整えるより、最初から味付けを決めたほうが楽
9,10,11枚目 ハンバーグのデータ化
Proccess Programming
- 味を明確にする。どの食材を、どうやって、誰のために。
- それぞれの料理がよければ、全て良いわけではない →局所解から大局解へ。
- 調理法が明確ならばレシピに出来るはずだ。→形式化プログラミング
- プロダクトの可視化→プロセスの可視化
- プロダクトの可視化
- ハンバーグのデータ化
- プロセスの可視化
- レシピ化
誰が作っても美味しくできるように。レシピは再利用可能。でも下手な人は居るわけで。
コストモデル
- Function Point
- 考慮する栄養などによって見積もり。
ハンバーグの要求モデル
- システムの構成 ハンバーグと、おかず。
- データフローモデル ハンバーグを硬さ・舌触り・後味・ノド越しなどで記述。
- 状態遷移 ハンバーグが出来立て→半分食べた→全部食ったと遷移する(違うよなぁ)
11,12枚目 食材
- モジュール強度
- モジュール分割の可否。 その食材はもう少し分けて考えようぜ
- モジュール結合度
- モジュール分割の妥当性。 キャベツとたまねぎは同じ野菜だけど、使い方が違うがな。
- インターフェイス
- 栄養・味覚的観点からみた食材
- 実装
- 食材の実体。育て方、生産地。
12,13枚目 食材の組み立て
- STS分割
- 口に入れる(Source)、味わう(Transform)、飲み込む(Sink)
- TR分割
- 噛んで食べる系(ごはんなど)・飲み込む系(スープ)・切って食べる系(肉)・よく噛む系(野菜)
- GOTO有害論
- 何か食べてる途中で突然別のものが食べたくなる→行儀が悪いので構造化
結局フルコース。