連載
» 2017年08月09日 11時00分 UPDATE

山浦恒央の“くみこみ”な話(MONOist10周年特別寄稿):組み込みソフトがこの10年で変わったこと、変わらないこと (2/3)

[山浦恒央 東海大学 大学院 組込み技術研究科 非常勤講師(工学博士),MONOist]

3.10年で何も変わらないこと

 現在、エレクトロニクス製品でマイクロプロセッサが入っていないものは、懐中電灯ぐらいでしょう。世界中の全てのソフトウェアが動作しないと、朝起きて学校や会社へ行くことさえ不可能です。そんな重要なソフトウェアの開発ですが、生産性と品質制御技術は10年前とほとんど変わっていません。

 ソフトウェアは社会の根幹部を形成していますが、ソフトウェア開発での生産性は10年前から、いや、50年前からほとんど向上していません。新規開発では、1人1カ月で1000ステップ前後しかソースコードを書けません。今から50年たっても、この数字が劇的に上がることは望めないと思います。なぜか? ソフトウェアの開発は、自動車や高層ビルのような工業製品の製造ではなく、小説の執筆に近いためです。

 小説の執筆とプログラム開発はよく似ています。小説では、まず、登場人物を決めて性格を設定します。これは、プログラム開発で、データの大きさ、内容、構造を設計するのと似ています。登場人物は、相互に入り乱れていろいろな「化学反応」が発生し、事件やエピソードが絡み合って物語が進みます。これは、プログラミングのロジック部に相当します。

 ここで、ギネスブックに載っている世界最古の長編小説「源氏物語」を例に、プログラムの開発にアプローチします。「源氏物語」は、第1帖の『桐壷』から最終の『夢浮橋』まで、54帖あります(ただし、第41帖は、『雲隠』という題名だけで本体がないため、コールされたらすぐにリターンする「スタブ」のようなものです)。

 「源氏物語」の登場人物は、主要な人だけでも100人近くいます。この人物は、帖をまたがって登場するので、一種の「グローバルデータ」でしょう。100人が相互に関係する場合、「コミュニケーションパス」は100角形の対角線の数なので、

(100−1)×100÷2=4950

にも上ります。登場人物が10人程度であれば、パス数は45ですが、10倍に増えると、nの二乗で効いてくるため、急激に複雑になります。

 このあたりの事情は、プログラミングでも同じです。複雑になると、品質制御が急激に難しくなります。簡単には検出できないバグも増えます。一方、テスト技法は10年前から(正確に言うと、グレンフォード・マイヤーズが、名著『ソフトウエアテストの技法』を発表した1978年から)ほとんど進歩していません。携帯電話系のソフトウェアのテスト件数は、平均して5ステップに1件前後設計し、実施するといわれています。3000万行もある携帯電話では600万件ものテストを実施せねばなりません。どれぐらいの年月が必要か、想像できません。

 「源氏物語」は、100万文字、22万文節(文節は、動詞や名詞など独立した言葉で、「私の名前は光源氏です」は3文節)、400文字詰め原稿用紙に換算すると2400枚になるそうです(ちなみに、日本最長の古典文学は、『南総里見八犬伝』で、『源氏物語』の1.5倍)。1文節を高級プログラミング言語の1行と見なすと、220KLOC。11人で20カ月を要する大プロジェクトになります。

 携帯電話機には、不必要、かつ、複雑怪奇な機能を雑多に詰め込んでいるため、かまぼこ板ほどの大きさの本体に3000万行を超えるプログラムを組み込んでいます。「源氏物語」の150倍のすさまじい量です。小説では、ページ数が2倍になると、ストーリーの複雑さは4倍になるといわれていますので、携帯電話機には、『源氏物語』の1.5×10の45乗も入り組んだストーリーが詰まっているのです。

 紫式部は、この大作を3年で書いたそうです。1年で原稿用紙800枚、1日に3枚弱は、現代の小説家の執筆速度と大差がないように思います。小説の執筆速度は、100年経っても大きく変わらないでしょう。プログラムの生産性も、1人1カ月で1KLOCが飛躍的に増えることは望めません。

 組み込み系製品の爆発的な普及により、ソフトウェア開発での生産性改善と、ソフトウェアの品質向上は、10年前に比べ、重要度が飛躍的に増えました。しかし、有効な対策ができていないのが現状です。

Copyright© 2017 ITmedia, Inc. All Rights Reserved.