ソフト開発を職人技にしない、「エンジニアリング」と「工場」にする:車載ソフトウェア(3/4 ページ)
「ソフトウェアを職人技からエンジニアリングへ」と題した講演を、ウーブン・バイ・トヨタのジェイエフ・バスティエン氏がAUTOSARオープンカンファレンスで行った。
「ソフトウェアの制約はハードウェア」ではない!
ソフトウェアエンジニアリングが成熟していく上での課題は、「ソフトウェアの制約」を十分に受け入れていないことだとバスティエン氏は指摘した。
エンジニアリング上の制約とは、土木工学や機械工学では物理に当たる。物理の法則を克服することはできないが、物理の法則は土木工学や機械工学の解決方法も導く。ソフトウェアエンジニアリングでは数学がそれに当たる。コンピュータリソースなどの制約も存在するが、コンピュータリソースはソフトウェアの課題を解決する手段ではないのだという。
家は、屋根が欠けていると機能的に完全ではない。電車の場合、車両のサイズと線路が合っていなければ相互乗り入れはできない。ノートPCは割れた画面を交換できなければ修理はできない。オフィスビルは大きな地震に耐えられないと安全ではない。これらのエンジニアリングの制約や品質上の問題のカギは物理の法則にある。
一方、ソフトウェアの品質特性に関するISO25010では、9つの品質特性についてまとめられている。機能的合成、セキュリティ、パフォーマンス効率、保守性、互換性、安全性、信頼性、対話機能、柔軟性という大きな特性が、複数の属性に分解される。ただ、こうした品質を確保するに当たってソフトウェアには物理的な制約はほとんどないとバスティエン氏は主張する。
ソフトウェアを実行するハードウェア(メモリ、帯域幅、ストレージ、コンピューティング能力)には限りがあるが、ソフトウェアにとって物理の法則を尊重しなければならないのはハードウェアだけで、ソフトウェアの最適化のために努力するか、ハードウェアが1世代進化するのを待つことでハードウェアの制約は解決できるため、物理的な制約は実際には存在しないのだという。
航空機は2年待っても2倍の速度にならないが、ソフトウェアなら実現する
バスティエン氏は、ソフトウェアは物理システムのエンジニアリングに比べて自由で豊かだと語った。「航空機メーカーが2年待つことで航空機の速度を2倍にすることはあり得ない。音速という定義に異議を唱え、全く違う航空機を設計しなければならない。ソフトウェアなら、2年待てばプロセスが2倍速くなる。物理的な制約は航空機よりも克服しやすい。制約について考えるのではなく、ソフトウェアの自由度について考えていきたい。ソフトウェアの自由度を考慮することは、制約を理解し、それに対処する上で非常に重要だ」(バスティエン氏)。
バスティエン氏は、ソフトウェアには3つの自由があると語った。1つは無形であることだ。人が物理的にソフトウェアに触ることはできない。これは他のエンジニアリング分野にない特徴だという。2つ目は、正確に複製できることだ。物理システムを正確にコピーするのは難しい。コストがかかるにもかかわらず全く同じにはならず、かなりの労力を費やす必要もある。3つ目のソフトウェアの自由は、リモートで変更できることだ。飛行中の航空機の機体を修正することはできないが、ソフトウェアは離れた場所から修正できる。
この3つの自由を踏まえることで、エンジニアリングの概念をソフトウェアに合わせて調整できるようになるという。ソフトウェアはバーチャルで簡単にテストや検証を行うことができ、ソフトウェアを配布するコストは低い。また、1台1台の自動車の製造にかかるようなコストはソフトウェアには発生せず、スケールアップも容易だ。
また、「ムーアの法則は終わったといわれており、以前ほど進化のスピードは強力ではなく減速している。しかし、ハードウェアは依然として大幅に高速化している」とバスティエン氏は述べ、ソフトウェアにとっての数少ない物理的な制約に対してもポジティブな見通しを示した。
ソフトウェアエンジニアリングはプログラミングができない人のためのもの
こうしたソフトウェアが持つ自由を理解することが、職人に頼らないソフトウェアの安定した“生産”につながる。「ソフトウェアエンジニアリングはプログラミングができない人のためのもの」という言葉をバスティエン氏は紹介した。機械は生産設備が製造するが、ソフトウェアはツールとプロセスによって生産される。
ソフトウェアの工場である「ソフトウェアファクトリー」は、ソフトウェアが変更されるたびに全てのソフトウェアコンポーネントをまとめて構築し、テストする必要がある。最終製品として提供される結果に対して、バーチャルでこれらを実行できることが求められる。
ソフトウェアファクトリーの中にあるのは、自動化されたビルド、テスト、統合、展開の工程だ。小規模なシステムではなく、完成品となる最終製品としての大きなシステムを生産する。ソフトウェアファクトリーにソフトウェアを入れ、ソフトウェアのソースコードを入れ、コードをビルドし、毎回同じバイナリが出てくるようにすべきだという。最終製品のソースコードだけでなく、必要なツールやライブラリ、コンパイラなどツールチェーンも含めて“工場”の中に入れる。工場から“出荷”されたソフトウェアは、無線でそれぞれの車両に配布できる。
Copyright © ITmedia, Inc. All Rights Reserved.