モデルベース開発で技術者は楽になるのか?

ツールで自動生成が可能になったら、ほんの少しの間だけ開発者は頭を使わなくて済むようになるだろうが、すぐに開発対象の要求が高度になったり納期が短くなったりして、何らかの形で頭を極限まで使うようになるだろう。コンパイラによってメモリマップを書かなくて済むようになったがごとく、頭を使う対象は変化する。しかし頭を使うことそのものは、形は変わるものの、同じである。我々の欲望の進化は、技術の進化よりも常に速いのだ。

にし@swtest.jpという方が自身のブログで、モデルベース開発によるコード自動生成について書かれています。
これは、日経エレクトロニクスの記事「プログラミングは「設計」か「製造」か」に対する記事です。

「プログラミングは設計か製造か」では、

組み込みソフトウエア開発の分野は,ソフトウエアの仕様が比較的はっきりしているので,IT系のシステム開発より製造に近いという面はあります。でも,IT系も実は製造の考え方を適用できるんじゃないか。

と述べられており、スターロジックのサービスや、マイクロソフトのソフトウェアプロダクトラインの例を説明しながら、コード自動生成などのツールを活用し、ソフトウェア開発を「設計(特注生産?)」ではなく製造(オートメーション?)と捉え、ソフトウェア製造の自動化を推進するべきだと述べています。

対して、西さんは、簡単に自動化なんてできないと反論しています。曰く、

  • ものづくりの現場にいる人は、ものが自動で勝手にできるなんて思ってはいない。自動で作っているように見えるまでに大変な苦労をしている。
  • まだ完成もしていないハードとのすり合わせなんて日常茶飯事。仕様がはっきりしていて作りやすい組込みソフトなんて、ほとんどない。
  • 製造というのは、要件が確定すれば後は設備が勝手に作ってくれるのではなくて、生産工程の設計とか初期流動管理とか、山ほど色々知恵を絞る必要がある。


などなど。
(すごい現場の人の意見だなーと思います。僕も、早くこういう感じの子といえるようになりたい^^;なにせ、プロジェクト未配属の新人ですから)

一方で、モデルベース開発によるソースコード自動化については肯定的に捉えています。事実、現場で浸透しているから*1

実、制御系のソフトウェア開発では、Matlabなどを使ってCコードを自動生成するモデルベース開発という取り組みが盛んになりつつあるからだ。

ただし、モデルベース開発でうまくいくのは、『ドメインがかなり限られていて、要求と設計要素が1対1で対応し、リソース制約や性能要求が緩いアプリケーション』であれそうです。自動化するためには、すり合わせの部分が大半を占めているとやりづらいですからね。

ということで、モデルベース開発などでソースコードの自動生成など、ソフトウェア開発の自動化に関しては限定された場面では使えることが示されたわけですが、一般的な場合ではその条件は満たされないことが多いとのこと。ふむふむ。

そして最後に書かれていることが非常に興味深いです。ソフトウェア開発におけるパーキンソンの法則です。「ある資源に対する需要は、その資源が入手可能な量まで膨張する」というやつ *2

コンパイラが生まれたことで、プログラミングは無くなったか。否。では何が変わったか。それは、開発者の知的リソースに対するアウトプットが増加したのだ。つまり、同じだけ頭を使ってできるソフトウェアが、より複雑になったり、高機能になったりしたのだ。一方、開発者の知的リソースそのものは変わらない。

すなわちツールで自動生成が可能になったら、ほんの少しの間だけ開発者は頭を使わなくて済むようになるだろうが、すぐに開発対象の要求が高度になったり納期が短くなったりして、何らかの形で頭を極限まで使うようになるだろう。

モデルベース開発などで開発の抽象度が上がり、直にコードをぐりぐりやる労力が減ったとしても、コードを書く労力は減った分、設計や、モデルを考える行為に頭を使う必要があり、結局はソフトウェア開発は楽にならない、と *3

たぶん、結局は技術者は楽になることはないということでファイナルアンサーということで^^;

*1:実際、ETロボコンでもMatlabなどを使ったモデルベース開発されている方けっこういました

*2:途中まで、コード自動生成が実際には難しいという話をしていて、なぜこの話になったのかはちょっと分からないんですけど。仮に自動生成が可能でも、結局は開発の大変さは変わらないという話かな?

*3:僕もOJT形式で参加している業務で、モデルベース開発やっていますけど、コーディングをする人間からすれば相当楽になってますけど。モデルベースで議論できるし。でも、もっと一段階上のレベルの人たちはトータルの大変さは変わらないんでしょうね