120トンのスペースシャトルが打ち上げられようとしています。コントロールセンターに座り、スペースシャトルの打ち上げボタンを押そうと待っている人はいません。その代わりに、スペースシャトルに搭載された4つ同じ機械に命令を下し、何千ものセンサーから情報を引き出して何百もの決定をミリ秒で下すソフトウェアがあります。

 

FastCompanyの報告によると、スペースシャトルのソフトウェアはバグがなく、クラッシュせず、再起動する必要がないといいます。それは人間の最善を尽くした、完璧なソフトウェアと言っても過言ではありません。42万の連続したプログラムの最後の3つのバージョンのうち、エラーがあったのはそれぞれ1つずつだけでした。

 

もしそのソフトウェアにバグがあれば、人が死ぬのです。終わりです。そのソフトウェアは来る日も来る日も働く260人の男女によって支えられ、彼らがソフトウェアをちゃんと想定通りに動くようにし、誰も死なせないようにしているのです。

 

そこで、この質問にたどり着きます:人はバグのないアプリケーションを書くことができるのか?技術的には出来ます。一方で、現実的な答えとしては難しいです。この背景にある理由として、極めて重要なアプリを作ったり、人生を賭けているような場合でない限り、採算が合わないのです。

 

なぜバグのないアプリやソフトウェア開発を期待することが非現実的なのか理解するために、どのようにソフトウェアが作動するのか理解しましょう。ソフトウェアやアプリケーションの一部はそれ単体では完璧なデバイスやシステムとして稼働しません。それは制御不能なプラットフォームと依存関係にあり、ライブラリがあることによってさらに複雑になっています。

 

もしバグのないアプリを作りたいなら、利用している全てのライブラリも完璧にバグのないものにする必要があります。つまりサードパーティー製で開発すれば簡単に実現可能です。しかしサードパーティーと言えども、アプリケーションにほんのわずかに複雑なところがあるだけで実装時にAPI 1)あるコンピュータプログラムソフトウェア)の機能や管理するデータなどを、外部の他のプログラムから呼び出して利用するための手順やデータ形式などを定めた規約のこと を調節しなければいけません。サードパーティー製もまた、制御不能な外部依存というわけです。

 

ガイ・カワサキの最新著作である「Art of the Start 2.0」の中で彼は、「まあ、いいんですよ。後に改良する時間がありますから。どのくらいうまくスタートしたかではなく、どれくらいうまく終わるかなのです。」と、言っています。これは会社がゼロから作っているプロダクトをあなたが設計する際に参考になる考え方です。成功しているテック起業家に聞いてみてください、きっと初期のアプリやウェブにはどんなにバグがあったか教えてくれるでしょう。

 

プロダクトの初期の使用例を一つ一つ見ていたら、それは退屈ですし他の重要なことが頭から抜け落ちてしましますー製品検証など。最善の策としては、想像できる典型的な使用例を分析し、それらのバグをなくすようにすることです。

 

バグは報告された時のみバグなのです。ここではどのようにあなたの初めての、または次のアプリケーション開発プロジェクトに取り組むべきかお伝えします。

 

1. ゴールとして開発者がバグのないコードを書くことを期待するべきではありません。それよりも、初期の購入者に対し問題を解決できるような機能的なプロダクトを提供することに重点をおいてください。

 

2. 多くのバグは単純にソフトウェアの動作と、エンドユーザーが期待していることとのズレによって起こります。これは、単一のコードを書き込む前に詳細な機能仕様書 2)ソフトウェア開発においてプログラムや大規模なソフトウェアシステムの動作を記述した一連の文書 を作成することで簡単に解決出来ます。このサンプル機能仕様書を参考にしてみてください。

 

FastCompanyの記事では、シャトルの搭乗グループはコードを書く前にソフトウェアの機能仕様の1/3を書き終わっていると報告しています。

 

3. 開発会社全体で多くのプログラマーがユニットテスト 3)1つ以上のコンピュータプログラムモジュールが使用に適しているかどうかを決定するために、関連する制御データ、使用手順、操作手順とともにテストする手法 を行わず、どうやるのかさえ知りません。それはつまり会社としてさらにコストのかかる人(新たにユニットテスト行う専門家)を雇わなければいけないということです。

 

 

4. 全てのコストを考慮し、何が重要なのか自身のために決定してください–99%うまく機能する高くないソフトウェアなのか、100%うまく機能する高いソフトウェアか。それと、10年、20年先ではなく、あなたは「今」このアプリケーションを稼働させたいんですよね。

 

 

 

この記事は、Entrepreneurのブログ “There’s No Such Thing as a Bug-Free App” を著者の了解を得て日本語に抄訳し掲載するものです。 Repro published the Japanese translation of this original article on Entrepreneur in English under the permission from the author.

 

 

注釈   [ + ]

1.あるコンピュータプログラムソフトウェア)の機能や管理するデータなどを、外部の他のプログラムから呼び出して利用するための手順やデータ形式などを定めた規約のこと
2.ソフトウェア開発においてプログラムや大規模なソフトウェアシステムの動作を記述した一連の文書
3.1つ以上のコンピュータプログラムモジュールが使用に適しているかどうかを決定するために、関連する制御データ、使用手順、操作手順とともにテストする手法