一般の事務処理での情報システムと比較して、組込みソフトウェアは次の特徴があります。
- 機器に関する知識
組込みソフトウェアとは、センサからの信号を受けて機器の制御信号を渡す機能だといえます。組込みソフトウェアの開発は、センサや機器などのハードウェアの開発と並行して行われ、双方の仕様が互いに密接に関連しています。
そのため、設計段階でもハードウェアの知識や回路図の知識が必要です。開発段階では、信号の受渡しを確認するためにデジタルアナライザやオシロスコープなどの機器の操作が必要です。テスト段階では、不具合がハードウェアとソフトウェアのどちらにあるのか、あるいはインタフェースに問題があるのかを切り分ける能力が必要です。すなわち、組込みソフトウェア技術者には、ソフトウェアだけでなく電子工学や機械工学の知識能力が求められるのです。
- 高速処理が必要
組込みソフトウェアは稼働している機器の制御に用いられることが多く、処理が遅れるとその間に機器が暴走する危険があります。そのため高速処理が求められ、例えばエンジン制御では200μ秒程度の処理が必要だとされています。さらに、エンジン制御をしている間にブレーキ制御やステアリング制御など、多様な処理を並行して行い、それらを統合する必要があります。
- 信頼性への要求
自動車や電車、医療機器などの組込みソフトウェアに不具合があると、直接に人命や災害につながります。ATMや電力・水道機器での故障は社会問題にまで発展します。組込み製品のリコールがあれば、その経済的損失が膨大になるだけでなく、社会的信用を失います。そのため、品質管理が重要になります。
しかも、組込みソフトウェアが無線により外部との情報交換を行う機能が増加してきました。家電機器がインターネットから不正操作が懸念されます。自動車の走行中に外部から無線で不正信号を受け取る危険も考えられます。最近は、セキュリティ対策が重視されるようになりました。
- テストの困難性
組込みソフトウェアが作動する状況は多様です。例えば自動車のブレーキ制御では、運転の状況や路面の状況などを想定して正常に作動することを確認するテストが求められます。その状況が多様であるだけでなく、あらゆる状況をすべて想定することは現実的に不可能なこともあります。
ときには、機器の利用者が取扱説明書に従わず、あるいは故意に、無謀な操作をすることも考えられます。このような場合にも安全側に作動するようにすることが要求されるのです。
- 特殊化と汎用化のバランス
量産品に組み込まれれるので安価である必要があります。特にCPUなどのハードウェア費用やOSやミドルウェアのライセンス費用は、個々の製品にかかるので極力安価にする必要があります(一般の情報システムOSでは、WindowsやLinuxが圧倒的なシェアをもっていますが、日本での組込みOSでは日本製のITRONが30%以上のシェアをもっています)。
CPUのメモリ制約により、ソフトウェアのサイズをコンパクトにする必要があります。しかも性能の低いCPUで高速処理するため効率の良いソフトウェアにする必要があります。OSやミドルウェアを無料あるいは安価なものにする必要があります。容量を小さくしたりオーバヘッドを減らすために、自作する必要が生じる場合もあります。すなわち、特殊化する必要があり、以前はこれが組込みソフトウェア技術で重視されていました。
ところが、新製品開拓、機能追加の要求が激しいので、ソフトウェア開発の短縮化が求められます。そのためには、ソフトウェアの部品化による再利用が効果的です。それには標準化、汎用化をする必要があります。CPUの価格性能比は向上しますし、組込み用のOSやミドルウェアは軽くなります。そのため、標準化・汎用化のほうが重視されるようになってきました。
特殊化と汎用化のバランスを考えたシステム設計が、通常の情報システム以上に重要なのです。