宇宙船のプログラム

Bugs In The Space Program (PDF)
制御プログラムのバグによって失敗したロケット打ち上げや惑星探査機の動作不良について、トロント大の教授がまとめた発表(講義?)資料。

ソフトウェア開発に特有の難しさについて、実例の分析と教訓を挙げている。現代科学の結晶である惑星探査プロジェクトでも想像以上に初歩的なミスが起こっていることがよく分かる。墜落したり行方不明になった惑星探査機は思ったより多いようだ。致命的ではなかったものの、かのマーズ・パスファインダーでもマルチスレッドがらみのエラーが起こっていたらしい。

宇宙探査機の開発には、その時代での最高の開発手法やマネジメントが導入されているのだと思うが、それでもしばしば単純なミスが起こる。より一般的な機器の開発ではなおさらだろう。
従来ならこの手の例に挙げられるのはタコマ橋の崩壊やデンバー国際空港の手荷物取り扱いシステムだったが、この資料で挙げられているのは最高レベルの機械制御プログラムの事例であり、組み込み系のソフト技術者として、非っ常ーに興味深い。


…いつも思う事だが、経営層やマネジャークラスの人達にこそこういった開発プロセスの失敗談を読んでマネジメントに生かしてもらいたい。だが実際は、そういう人達ほどこういう記事や本を読まない(しかも英語なので絶望的)気がする。特にハードウェアが専門のマネージャは自分の経験をソフトウェア開発に当てはめようとするので困る。いくらソフトウェアはハードウェアと違う部分が多いと言っても通じない。せめて資料の5ページ目(PDFではP3)のリストだけでも理解しておいてもらえたらありがたいのだが…。(訳は自前)

Why is software special?

  • Software is invisible, intangible, abstract(ソフトウェアは見えず、無形で、抽象的)
  • Software doesn't obey the lows of physics(ソフトウェアは物理法則に従わない)
  • Software has no repeated components(ソフトウェアには重複する部品が無い)
  • Software never wears out(ソフトウェアは磨耗しない)
  • Software can be replicated perfectly(ソフトウェアは完璧に複製できる)
  • Software is not manufactured(ソフトウェアは大量生産されない)

あと、34ページ(PDFではP17)の

It's(Software is) much harder to understand than other subsystems.

も。


愚痴はともかくこの資料を読んでいたら、買い控えてた『ローバー、火星を駆ける』を無性に読みたくなってきた*1。次に見かけたら買ってしまいそう。

おっと『はやぶさ』も未読のままだった

*1:「ローバー」とは探査車のこと