モノ作りとしてのソフトウェア開発

書店のコンピュータ関係のコーナーへ行くと、「10日で覚えるxxx」など様々な入門書が並んでいる。プログラミング入門者には役に立つ情報だし、これで勉強する人も多いはずだ(私もその一人)。特に専門外の分野に関するソフトウェア開発が必要になった場合などに、手っ取り早く概要をつかむには便利な書籍だと思う。

しかし、「動くソフトウェアを作ること」と「商用製品としてソフトウェアを作ること」は全く別の作業であることに注意が必要だ。商用製品としてソフトウェアを開発する場合、例えば下記のような作業が発生する。

  • 不具合の件数、残存不具合の内容が出荷基準をパスしていること。
  • 機能を説明した資料を作成し、営業やサポート部門に説明すること。
  • トラブル発生時の調査、対応手順をまとめておくこと。
  • 将来のメンテナンスに備えて設計資料を更新すること。
  • 実装されている機能が他社の特許を侵害していないか確認すること。
  • 社外のソースやライブラリ使用について、ライセンス的に問題ないか確認すること。
  • 構成管理ツールでブランチを切ること。
  • 配布するソフトウェアがウイルスに感染していないか確認すること。
  • 次回以降のリリースで対応すべき課題をまとめておくこと。

こんな気の遠くなる作業を行った挙げ句、ようやく一つの製品として出荷できることになる。ソースコードを書くことは、実は製品開発の(重要だけど)一つのステップに過ぎないわけだ。何をどのように作るか?なんて製品コンセプトは、10日だけでは決められないしね。でも、こんなソフトウェア開発のプロセスなんて、学校では習った記憶がない。多分、学校の先生はソフトウェアを作ったことは有っても、製品として出した経験がないからだと思うけど、本当の理由は何なのだろう?