組込み、エンプラ/IT系という分類で大丈夫?
ソフトウェア開発の分類として、組込み系、エンタープライズ系(IT系)という分類が有名だ。転職紹介サイトに「Java技術者。組込みとエンタープライズどっちが有利?」というようなコラムがあるほどで、この分類は浸透しているのではないかと思う。他にも(準)パッケージソフトウェア/Webサービス/ASPサービス、ゲームがある。組込みにはもっと細かい分類が必要だと思う。いろいろな方が分類作業を進められていて、中にはコンセンサスが得られつつあるものもあるが、まだ普及しているという状況ではないと思う。
組込み開発に携わっていない方の多くは、組込み系開発というと、なんとなくコンシューマ向けのハードウェア(多様な環境で不特定多数のユーザに対して大量に生産するもの)でのソフトウェア開発をイメージされるのではないかと思う。組込み系開発でも請負で単発、特定仕向けのものも多く存在し、そこでは、エンタープライズ/IT系と似通ったものを求められることが多い。ミッションクリティカルなものからtime to marketなものまで多種多様だ。
エンタープライズ系では、システム停止や誤動作により生じるリスクによって、開発の分類がある程度できているように思う。業務に直接関わり、システム停止が業務の停止(一部停止)を含む基幹系と社内文書の検索システムや社内ポータルでは位置づけが異なるだろう。
組込み系開発では、プログラムやソースコードのサイズで分類しているものを見ることがあるが、求められる品質ごとにサイズ分類したほうがよいように思う。たとえば「車載ソフトウェアがついに100万行を超える」というような表現は調査結果やニュースの見出しとしては直感的であり、インパクトがあるが、ABS等の制御ソフトウェアとカーオーディオとiPodをつなぐのに必要なソフトウェアを同類に行数で扱うのは、ソフトウェア開発の観点からするとちょっと違うように思う。もちろん、何も分類のないところでサイズによる分類を試みようとした点は評価できることだし、すべきなのだが。
以下は分類の軸や要素になるのではないかと私は考える。このブログのポリシーは、気づきを提供することにあるので、以下は練りに練った一発というよりはこれをきっかけに、より優れた分類や細かい分類が出てくることを期待するものである。
- コンシューマ向けと非コンシューマ向け
コンシューマ向けでは、動作環境やユーザの想定等に応じた要求定義の検討に必要なコストが大きくなる点、(万一のときの)回収率と回収コストの点でそれ以外と異なる。また、どれくらい不特定多数に配布するのか、配布後のアップデート方法が存在するかどうかで、リリース時に求められる品質が異なるだろう。また、time to market型の製品かどうかの分類も必要になるだろう。 - 求められる品質とソフトウェア規模
品質に妥協が許されないものとそうでないもの(たとえば生命に関わる、ライフラインに関わるものとそうでないもの)の分類とそれぞれの分類におけるソフトウェア規模 - ソフトウェアのライフサイクル
派生が多種多様に広がるもの(特定仕向けごとに派生品が多いもの)とそうでないものでは開発プロセスや設計の仕方が異なる。10年以上にわたって保守が続くことが見込まれるソフトウェアと比較的短期で作りかえられるソフトウェアでは開発の仕方が異なるため分類が必要になるだろう。 - 求められる計算機リソースとリアルタイム応答性
CPUやメモリの制約の厳しさ、リアルタイム性がどの程度求められるかも開発に影響を与える。
その他、ハードウェアのディスコン対策や体制(1人プロジェクトか否か)などもあるが、分類項目として挙げるには細かかったり、上で挙げたものの中に含まれるように思ったので挙げていない。