マエカワの備忘録的な何か

思い立ったが吉日

ソフトウェア工学 其の四 20171026

 ここまででソフトウェアの種類が四つほど出てきたが、もう少し分類することができる。

テスラについて

 テスラにはバカでかいタブレットがついているらしい。世間の認識は「タブレット付きの車」だろうが、実際は「車付きタブレット」のほうが正しい。組込みシステムの説明でもあった通り、今やブレーキ・アクセルなどのあらゆる制御系はワイヤでつながっている。既にコンピュータが無ければ、実現しないことばかりになっている。

コンピュータは借りる時代に

 今までは、「スペックの高いコンピュータが欲しい」となったとき、秋葉原で部品を買って、OSをインストールして、どこに置いたら一番いいか…などを考える必要があり、大変だった。しかし、今やコンピュータは大元から借りる時代になっている。時代は常に変わっていき、そのうち「え、今更コード書いてるんですか?www」なんていわれる日が来るかもしれない。新しい技術とは常に触れ合っておかなきゃならんということです。

世界を変えるために

 今はアイデアとテクノロジー、執念深さがあれば世界を変えることができる。
 「こうなったらいいなぁ」という世界をありありと想像できると、資金が調達できる。今はクラウドファンディングとか、資金調達は比較的しやすくなった。しかし、自分で想像できていないことには誰も投資しない
 クレイジーなアイデアが出てきたら、とにかく「どうしたらいいですか」と聞きに行くことだ。それに対しての応答パターンはいくつかある。

  • イデアをくれる
  • 技術をくれる
  • 金をくれる
  • 人脈をくれる
  • バカにされ、取り合ってもらえない

上四つに当てはまるところへ聞きに行こう。

適度な抽象度

 ものを考えるために適した抽象度がある。認知工学で出てきた「基本レベル」がこれに当たる。想像しやすく、かつ応用がききやすい適度な抽象度。うまいところを取るのは大変だが、ここを抑えれば物事をスムーズに考えることができる。

ソフトウェア工学で頭がよくなる

 ソフトウェアの適切なテストの仕方、その効果を適切に理解することで、ものの考え方が分かる。結果として頭がよくなる。そして、この考え方はソフトウェアだけでなくテスト(確認)が必要なあらゆることに適用することができる。

バグは連鎖ででかくなる

 トラブルは早めに対処するべし。最初の1は最後の1000.実際に、一つのバグがとんでもない損失を生んだ事例がある。

  • ソースコードが1行余分だったことで11億円の損失
  • 浮動小数点のオーバーフローで自爆コマンドが軌道→自爆→4億円の損失

他にもきりがない。

Vモデル

 ここから本命のVモデルについてやっていきます。Vモデルとは、ウォーターフォール型モデルの一種で、上流に分析・設計、下流にテスト工程が配置されているものになる。Vモデルの工程は全部で8種類。

  1. 要求分析:顧客の要求を分析する
  2. 基本設計:大まかな方向性を決める
  3. 詳細設計:実装する機能を決める
  4. コーディング・実装:実装する
  5. コードインスペクション:プログラムが約束通りに書かれているかの確認
  6. 単体テスト:一つ一つの機能が正常に動くのかテスト
  7. 結合テスト/機能テスト*1:それぞれの機能の関係が正しいかテスト/それぞれの機能が動くかテスト
  8. システムテスト:あらゆる環境下で動くのかテスト

この8個のプロセスをV字に並べたものがVモデルになっている。

f:id:maekawa_yoshimiki_1119:20171102200417j:plain:h400

 何をすればいいのかが明確にわかっているときは、このVモデルプロセスを1度回せばいい。しかし、明確にわかっていない場合はシステムを小分けにして、それぞれについてVモデルを回す方法をとる。この方法をスパイラル開発モデルと呼び、ウォーターフォール型モデルと並ぶ基本的な開発モデルになっている。

技術指向から品質指向へ

 お客様がいかに満足するかを第一に考える
 結局、一番コストをかけずにシステム開発をするためには、高品質なシステムを作らなければならない。バグを残してしまうと、その後のデバッグに時間を取られてしまい、手戻りが発生する。これが余計なコスト増加の主な原因だ。バグのない、品質が高いシステムを納品することで、結果的にコストを減らすことができる

銀の弾丸はない

 では、高品質のシステムを作るにはどうしたらいいのだろうか。これには近道はない。そういった意味で「銀の弾丸はない」。地道にテストを回して、作り上げていくしか方法はない。

簡単な考えるテスト

 ここで、簡単な考え方のワークをやったので、紹介。

 12階建てビルのオーナーからの依頼。

エレベーターの回転率が悪く、社員の不満がたまっている。どうにかして不満をなくしてほしい。

とのこと。エレベーターは二台あると仮定する。さて、どのように改善するのがいいだろうか。コストはなるべくかけないように。

 答えは多様に存在。途中「理系だろー?」の声を聞いて、やっぱアルゴリズムかぁと思って考えていたら、答え聞いて「だまされた…」と。鉄のカナヅチで木のクギを叩くべからず
 一応、自分で考えた解決案をいくつか…。

  • 1~3階にはエレベーターが止まらない
  • 片方のエレベーターを上り専用にする

ここで公開しているってことは、これが答えではないってことですよね…。もっと、簡単に解決を図ることができます。

レポート課題1

 ここで、一回目のレポート課題が出されました。課題は

いい感じに通信して、儲かるシステムの提案をせよ

です。自由度高すぎてどないすればいいのか…。とりあえず考えています。
 これまでの講義でも出てきた通り、「見えないものを見る能力」「価値とは何か」「ブランディング」ということを念頭に置いてやっていくのがよさそうです。ネットワーク外部性なんかも考慮に入れるべきでしょうね。
 最悪な回答は「oooな機能を持ったシステム」。どのようなことが問題点で、そこにどのようなアプローチができて、その中から最善・現実可能なシステムの「提案」をしろということです。多分。
 これができる人を企業も欲しがるんだろうな、なんて思っています。

付けたし

 とうとう課題が出されましたが、提案するシステムによって何を追求するべきなのか、どのような路線で戦略を練っていくのかなど考えていかなきゃならなそうです。ただ提案するだけじゃなく、ビジネスを見据えた提案をいかにしてするのか。これから研究、プレゼンテーションなど、様々なシチュエーションで求められるスキルだと感じます。

*1:会社によってはやっていない、またはシステムテストと同時にやっている