コラム:ビジネス向けソフトウェア開発と組込みソフトウェア開発の違い(開発編)
業務システムなどのビジネス向けソフトウェア開発と制御系システムの組込みソフトウェア開発には、開発のアプローチや、必要となるもの、プログラミングなど、開発の要件(機能要件、非機能要件)によって大きな差異があります。ここでは、コラムとしてこれらの違いについて見ていきます。
開発のアプローチ
ビジネスソフトウェア開発(業務システム)
システムの対象となる業務情報がまずあり、その情報を効率よく処理することを最優先にして開発を行います。したがって、最も重要なのは扱う情報(データ)であり、次にそのデータを効率よく扱うための仕組み(永続化、印刷、表示)を考えます。
規模が大きく、人間が直接操作する画面なども合わせて提供されるため、操作を画面側/バックグラウンドで動作するサービス側などのように機能を分割し、それぞれの機能ごとにソフトウェアを設計・実装します。
組込みソフトウェア開発(制御システム)
データそのものは単純なセンサ値などで表現されることが多く、データ値などの条件(状態)に従って適切に制御を行うことが求められるため、処理実行の最適化を最優先にして開発を行います。したがって、最も重要なのは各処理の起動タイミングと処理時間です。どのような状態で処理が行れても、予定した時間で制御が完了するように処理の順番・優先度を考えます。
今回の記事で説明しているように、組込み開発でRTOSを利用する場合は「タスク設計」という工程が入ります。これは処理を実行するタスクとその優先順位などを設計する工程であり、異なるトリガによる処理(例:タイマーによる繰り返し処理、機器のボタン操作による処理)を効率よく実行するために、必要不可欠な工程です。
開発時に必要となるもの
ビジネスソフトウェア開発(業務システム)
開発環境と動作環境が同一であることが多く、統合開発環境(コンパイラ、デバッガが統合されたソフトウェア)を利用して開発することが可能です。動作環境のメモリやディスク容量などの制約が少ないため、高機能なOSやミドルウェア上でソフトウェアを動作させることが可能であり、開発時に利用するライブラリも豊富に用意されています。
また、標準的な動作プラットフォーム(例:JavaVM/WEBブラウザなど)も用意されており、動作する環境のハードウェアはあまり意識しません。
組込みソフトウェア開発(制御システム)
開発環境でコンパイルリンクを行って実行バイナリを生成し、動作環境に配置して動作させるクロスプラットーフォーム開発となります。したがって、統合開発環境に加えて、動作環境となるマイコンボード(ハードウェア)やデバッグ用のエミュレータ(ハードウェア)などが必要になります。また、ソフトウェアの要件も制御中心であるため、ライブラリやミドルウェアはあまり利用しません。必要な機能は、内容に応じてマイコンボードなどの機能を利用して自分で実装します。
なお、ソースコードの規約チェック(例:自動車業界向けソフトウェアに対するソースコード規約 MISRA-C)に対する機能は、組込みソフトウェア開発向け開発環境のほうが充実・徹底しています。これは、ソフトウェアの適用場所や保守作業の困難さに起因して高品質が求められることに起因しています。
プログラミング
ビジネスソフトウェア開発(業務システム)
開発環境/動作環境の制約が少ないことから、要求されている機能を実現するのに適した言語が選択されます。C++/Java/PHP/Ruby/JavaScript/VB など多様な言語が利用されます。
特に近年では、複数の言語で開発したソフトウェアによってシステムを構成することが多くあります(例:画面はJavaScript、バックエンドはJavaなど)したがって、各言語の特徴や、利用するライブラリの機能などを理解する必要があります。
組込みソフトウェア開発(制御システム)
動作環境の制約や性能要件(例:数マイクロ秒の処理時間)が求められるため、開発言語としてはCやC++を利用するのが一般的で、アセンブリ言語の知識も必要になります
マイコンを利用して機器の制御(センサ値の取得、モータの起動など)を行うため、動作環境のハードウェア/マイコン機能を理解する必要があります。
