ソフト開発を職人技にしない、「エンジニアリング」と「工場」にする車載ソフトウェア(2/4 ページ)

» 2024年09月03日 09時30分 公開
[齊藤由希MONOist]

「ソフトウェアのバグはなくなる」という予言は実現しなかった

 ソフトウェアは、他の領域に比べて若い分野だといえる。「1968年の研究者たちはソフトウェアエンジニアリングの正当性を確立することが重要だと考えた。ソフトウェアエンジニアになり、ソフトウェアを設計したいと思っていた。その4年後の時点での課題認識が次のような言葉にも込められている」とバスティエン氏はあるスピーチの言葉を引用した。

 「主要な原因はコンピュータが何桁も強力になったことだ。コンピュータが存在しなかったころはプログラミングに全く問題がなかった。数台の遅いコンピュータがあった時代はプログラミングは軽度の問題。今、巨大なコンピュータを持つようになったことで、プログラミングは同様に巨大な問題になった。エレクトロニクス産業はこの意味において1つも問題を解決していない。製品を使う上での問題を生み出している」(Edsger Dijkstra, The Humble Programmer, ACM Tuning Lecture 1972)

 このスピーチでは、1970年代の終わりまでにソフトウェアのバグがほとんどなくなるという予測も示されていた。ソフトウェアでチューリング賞を受賞するような、その分野の巨人がそのように予測したにもかかわらず、もちろん今日のソフトウェアはバグフリーではない。なぜバグはなくならなかったのか。要因は次のようなものだとバスティエン氏は説明する。

  • 非現実的なスケジュール
  • 野心と成果の不一致
  • 研究と開発、生産の混同
  • 経済的圧力
  • プログラミング経験の欠如
  • システムの複雑化
  • 技術や方法論のギャップ

 これらの解決策として、デザインパターンやオブジェクト指向プログラミングが考案された。また、シミュレーションやテストの導入の他、ドキュメントの整備や標準化活動が進められてきた。こうした解決策は今日でも有効だ。ただ、バグの原因となった課題は以前とは違う原因で今も存在している。また、巨大なコンピューティングが問題を大きくするという意味では、AI(人工知能)が新たな課題もしくは解決策になろうとしている。

エンジニアは「社会に対して責任を負う存在」

 そもそもエンジニアとは何か、という話題にバスティエン氏は触れた。カナダや米国など、国によってはエンジニアは資格職であり、その定義や要件がある。認定を受けなければ名乗ることはできない。

 エンジニアとは、高度な知識や専門となる技術分野、知識豊富な同僚、トレーニングや改善を継続する能力を持っている存在だとバスティエン氏はいう。また、倫理規定に従って統制されることもエンジニアの一面だと述べた。エンジニアが果たす最高の義務は社会に対してであり、安全な製品やサービスを公衆に提供し、エンジニア同士がそのことに互いに責任を負うべきだという。ソフトウェアが、機械工学や土木工学のようなエンジニアリングを実践するには、こうしたポイントが重要だとしている。

 エンジニアリングという言葉の由来はラテン語の「天才」で、独創性や賢さをイメージさせる。ただ、それらはエンジニアリングの全てではないとバスティエン氏は語った。「私は賢いコードが大好きで、コードを書くのは楽しい。賢いアルゴリズムやデータ構造を書くのが本当に好きだ。しかし、エンジニアリングでやろうとしているのは賢さではない。賢さの追求は職人がすることであり、エンジニアがすることではないと私は思う」(バスティエン氏)と、エンジニアリングにおける“職人肌の天才エンジニア”というイメージ像を否定した。

社会や消費者に与える影響を考えるのがソフトウェアエンジニアリングの基礎

 ソフトウェアエンジニアリングに関する別の定義も紹介した。Googleは、ソフトウェアエンジニアリングとは、時間をかけて統合されたプログラミングであると考えている。バスティエン氏は「時間をかけて統合されたプログラミングとは、エンジニアリングではなく技術的な深さだ」と述べた。

 「エンジニアリングについて話すとき、2つの考慮事項がある。まず第一に、表面と深さについて考える必要がある。ソフトウェアエンジニアリングは若い分野で、表面の発展と、深さの追求が進んできた。2番目の基準は意図と結果だ。専門知識を求め、統制に従い、倫理的な行動をとることを目指すだけでは正しいエンジニアリングにはならない。私たちが作るソフトウェア製品の最終結果は、自分の小さな世界でソフトウェアを設計しようとして、それが消費者や実際の人々、人間に予期せぬ影響を与えるかどうかにかかっている。開発者が一生懸命努力したかどうかは、あまり重要ではない」(バスティエン氏)

 バスティエン氏は、消費者に与える影響に焦点を当てていないソフトウェアエンジニアリングの定義があることに言及し、消費者に与える影響を考えることこそがソフトウェアエンジニアリングの重要な側面だと語った。

 「技術の専門家でなくてもソフトウェアが特に優れているわけではないことは知っている。ソフトウェアは常に、または時々失敗すると私たちは受け入れている。再起動しなければ社会を救うことができないのはあまりいいことではない。ソフトウェアエンジニアは助けようとしている人や、最終製品を使う消費者に目を向ける必要がある」(バスティエン氏)

 「ただ、自動車に限らず深刻なソフトウェア障害が起きていることをみると、これらの問題は解決されていない。ソフトウェア開発はエンジニアリングレベルでは質の高い成果を生み出していない。しかし、ソフトウェアエンジニアは本当に努力している。よりよい成果を出そうとしていないとは言いたくないが、一般的にはうまくいっていない。ソフトウェアエンジニアリングは、まだ成熟しなければならない」(バスティエン氏)

Copyright © ITmedia, Inc. All Rights Reserved.