30代SEの自由帳

最初のタイトルは頓挫した

カレーで小難しい話をしてみる(その1)

慣れないC#追って疲れたから息抜き回

カレーいいですよね。好きです。
適当につくる分には簡単だし、かと言って外すことも基本的にないし。
一回は作ったことありますよね?

ってことで、よく見るあれ1ですが、ソフト開発+プログラミングをカレー作りで例えてみようと思います。

これ書いてる時は読んでないけど、昔似たような記事を読んだ記憶があるので、もしダダ被してた場合は息抜き回ってことで大目に見てね

導入

ソフト開発は凄くざっくり以下の流れ進んでいきます。

graph LR
要件定義-->設計-->製造-->試験-->リリース

これをざっくりカレー作りにあてはめて行きます。

要件定義

ユーザ「カレーちょうだい」

これがユーザ側の要求。

うん。ただこれだけだと、どんなカレーか分からないので、

メーカ「カレーできました」
ユーザ「あっま」「じゃがいも入ってないじゃん」

的な誰も嬉しくない展開に突入してしまうので、この段階でもう少し詰めてきます2
ここは基本的にユーザ側の要望をメーカ側が引き出す感じで進めていく。

辛さ:辛口
具材:鶏肉、人参、玉ねぎ、じゃがいも
量:多め

こんな感じで要望(要求)具体的な内容(要件)に変えて定義するのが要件定義。

設計

設計は、要件定義した内容を、じゃあ実際にどうやって作りましょうね。って段階。
つまりはレシピを考える段階って感じですね。

料理ガチ勢じゃない私の場合、ざっくりな方針決めだけして、あとは作りながら~ってのが多いけど、ソフト開発の場合はここで大体のことは決めてしまう。3

材料(データ,構造定義)

まずは要件定義にあるやつ 鶏肉、人参、玉ねぎ、じゃがいも

あとは要件定義には出てないけど、カレーって単語に暗に含まれてるやつ カレールー(辛口)、水、サラダ油

作り方(処理定義)

まずはざっくり

graph LR
材料を切る-->材料を炒める-->材料を煮る-->ルーを入れる-->煮込む

これでもまぁ雰囲気は伝わるけど、材料どれくらい使うの?とか材料って水も切るの?4とか、どのくらい炒めるの?とか
色々疑問が出てくるので詰めてく。

材料を切る

まず切る材料は、鶏肉、人参、玉ねぎ、じゃがいも 切る大きさは、一口大

材料を炒める

  1. フライパンに油を入れる
  2. 鶏肉を中火で焼き色が付くまで炒める
  3. 野菜(人参、玉ねぎ、じゃがいも)を追加して玉ねぎが透明になるまで炒める

材料を煮る

  1. 鍋に具材を入れる
  2. 鍋に水を入れる
  3. 強火で20分煮る
  4. 火を止める

ルーを入れる

  1. 鍋にルーを入れる
  2. ルーが溶けるまで混ぜる

煮込む

  • 弱火で10分混ぜながら煮込む

これ位で良さそう?
まぁ一旦これくらいにしよう。ただ、1つだけ追加で。

要件定義の量:多めここに関する言及が全くないですね。
なので、材料に分量を追加しましょうか。

材料(データ,構造定義)※修正版

  • 鶏肉:300g
  • 人参:1本
  • 玉ねぎ:2個
  • じゃがいも:1個
  • カレールー:30g
  • 水:250ml
  • サラダ油:大さじ1

製造(プログラミング)

ここはカレーを作"らせ"るところ。
自分で作るわけじゃなくて、作らせるために指示を出すって感じ。

設計をもとにひたすら指示していく。

処理フロー

本当だったら、このレベルの内容は設計段階で実施。
ただ、それだと今回の記事書けることなくなるから一旦ここの工程として記載

graph TD
材料を用意する-->
鶏肉を一口大に切る-->
人参を一口大に切る-->
玉ねぎを一口大に切る-->
じゃがいもを一口大に切る-->
フライパンに油を入れる-->
フライパンを中火にかける-->
分岐1{フライパンが温まったか}-- まだ -->
分岐1{フライパンが温まったか}-- 温まった -->
鶏肉を入れる-->
分岐2{鶏肉に焼き色が付いたか}-- まだ -->
分岐2{鶏肉に焼き色が付いたか}-- 付いた -->
野菜をフライパンに入れる-->
分岐3{玉ねぎが透明になったか}-- まだ -->
分岐3{玉ねぎが透明になったか}-- なった -->
フライパンの火を止める-->
フライパンの中身を鍋に入れる-->
鍋に水を入れる-->
鍋を強火にかける-->
分岐4{20分たったか}-- まだ -->
分岐4{20分たったか}-- たった -->
鍋の火を止める-->
鍋にカレールーを入れる-->
ルー混ぜ[鍋を混ぜる]-->
分岐5{カレールーが溶けたか}-- まだ -->
分岐5{カレールーが溶けたか}-- 溶けた -->
鍋を弱火にかける-->
分岐6{10分たったか}-- まだ -->
分岐6{10分たったか}-- たった -->
最後の煮込み[鍋を混ぜる]-->
完成[鍋の火を止める]

長い、けど実際はまだ足りない。ってことで続きは次回にして、試験へ

試験

まずは、ちゃんと要求を満たすものが出来てるか?をチェック。

次は、非機能要求のチェック。いきなり出てきたけど、実際の開発だと直接的な要求には出てないけど、満たしておきたい要件(非機能要求)ってのが色々あります。

カレーの場合だと、美味しいかどうか?とか、xx分以内に出来るか?とか。

リリース

あとは提供するだけ。

今日のまとめ

晩御飯考えている時にふとプログラムにしたらどうなるんだろ?的なことを思い立ったから書いてみた。
なので、まだ書きたかった内容に突入できてない。。。

導入書いてみたら、思ったり長かったから途中であk
ついでにmermaid使ってみたかったので使ってみた。

次回から本題、カレー作りをオリジナル言語でプログラミングしてみる。


  1. カレー ソフト開発で検索した結果、約19,700,000件ヒット

  2. ここのバランスは難しい。メーカとしてはユーザの要望ありきで作っているのでここで詰めたいけど、ユーザとしては「とりあえず美味い」のって感じで詰めるをウザがることもしばしば。

  3. ただ実際のところソフト開発でも設計そこそこに、製造してから設計にフィードバックってのも往々にしてある。主に速度重視の場合とか。

  4. まぁこれは意地悪系ではある