デジタルトレンドナビ
システム開発

2023.12.04

組み込みソフトウェアとは?使用言語や組み込みシステムとの違いを解説

組み込みソフトウェアとは?組み込みシステムとの違いや開発委託の流れ

組み込みソフトウェアは、電気で動く製品に搭載されているプログラムで、一部の機能を制御するためのものです。日常生活のなかでも身近なところにたくさんあり、たとえばキッチンでは電子レンジや冷蔵庫、プリンターやデジタルカメラなどにも搭載されています。


この組み込みソフトウェアはいたるところに搭載されていますが、従来とは異なるプログラムにすることで、新商品の使用感も変わってくるでしょう。そこで、今回は組み込みソフトウェアについて詳しく解説するとともに、使用されている言語と外部に開発委託する際の流れを紹介していきます。

この記事でわかること

  • 組み込みソフトウェアとは
  • 組み込みソフトウェアの使用言語
  • 委託開発する際の流れ

組み込みソフトウェアとは

組み込みソフトウェアとは

組み込みソフトウェアとは、組み込みシステムを搭載する家電製品などの一部の機能を制御をするプログラムです。たとえば、電気湯沸かしポットであれば、スイッチが入ったときに何kwhの電力を出力するか、中の水が何度になったら加熱を止めるか、といった制御を行うのが組み込みソフトウェアの役割です。

組み込みソフトウェアの搭載例

前述したように家電をはじめ、電気で動く製品のほとんどに組み込みソフトウェアが使われています。身の回りでいえば冷蔵庫や洗濯機、電子レンジなどにも搭載されています。


そのほか、エアコンや扇風機、自動販売機・カーナビ・エレベーターなど一般家庭以外の場所でも幅広く使われているのです。イメージの近いものとして、スマホやパソコンで使用するアプリケーションソフトが挙げられますが、これらはデバイス上で動作するのに対し「機器にダイレクトに制御する」のが組み込みソフトウェアだといえます。


どんなに簡単な機能だったとしても、組み込みソフトウェアが搭載されていなければ、電子機器は動かないと考えていて問題ありません。新商品の機能の開発や既存の製品のバージョンアップなどにも、なくてはならない存在です。

組み込みシステムとの違い

組み込みシステムとは、その製品に搭載されたコンピュータシステムのことで、家電の保温機能やタイマー機能は組み込みシステムが管理しています。組み込みソフトウェアとの違いとして、機能を制御するか断定的な動作をするかが挙げられます。


たとえば、照明のスイッチという組み込みシステムがあった場合、スイッチを入れることで点灯するという、組み込みソフトウェアが作動するというイメージです。ただ、組み込みシステムは製品全体をコントロールしているわけではないので、その点も正しい理解が必要です。

組み込みソフトウェアの使用言語

組み込みソフトウェアの使用言語

組み込みソフトウェアを開発する際は、いくつかのプログラミング言語を使用します。発注する方は専門的な分野まで把握しなくてもOKですが、外注先に依頼するときのやりとりを考えると、基本的なことは理解しておくほうが良いでしょう。ここでは、主に使われる言語を紹介していきます。

C言語

C言語の最大の特徴は、リアルタイムでの動作に適した高速性です。組み込みソフトウェアでは、長きにわたり使われてきた歴史があり、特定の機能がまとまったプログラムセットであるライブラリが充実しています。代表的なのは、スイッチひとつで作動する家電や産業用ロボット、そのほかではパソコンの周辺機器などが挙げられます。


また、直接プログラムを実行するアセンブリ言語に近い記述が可能なので、ファイルを比較的コンパクトにまとめることができ、これらのことから高開発率である言語として使用されることが多いです。

C++

C++はC言語をもとに開発された拡張版で、オブジェクト指向を採用していることが特徴です。物と物の関係にフォーカスした概念があるため、複雑かつ規模が大きなソフトウェアの開発に用いられることが多いです。代表的なものでは自動車メーカーなどが挙げられ、組み込みソフトウェアを多用する業界で使用されています。


ただ、C言語に比べてライブラリは物足りない印象で、コードが長くなりやすい傾向があります。複雑な記述になるほどエラーやバグを起こしやすいため、この言語で発注する際は外注先のC++開発実績や経験・スキルが十分か確認すると良いでしょう。

Java

Javaは物と物の関係性にフォーカスしたオブジェクト指向の言語で、JVMという仮想マシンで動作することが特徴です。JVMに対応するコンピューターなら、どのような状況でも動かすことができます。


未使用メモリを自動消去するガベージコレクションを装備しているため、プログラムの高速実行が可能、リアルタイムで動いてほしいシーンによく使われています。また、ソフトウェアを動かす際にアクセス禁止領域の指定が可能なため、セキュリティの強化にも貢献する言語です。

組み込みソフトウェア委託開発の流れ

組み込みソフトウェア委託開発の流れ

組み込みソフトウェアを委託開発する際は、主に2つのプロセスがあります。1つは企画から実装を経てテストまで計画通りに進める「ウォーターフォールモデル」で、2つ目は企画から設計・実装までを繰り返し、発注側のフィードバックを経て修正を重ねる「アジャイル開発」です。


今回は、委託開発の流れへの理解度を優先させるため、ウォーターフォールモデルの委託の流れを解説します。


企画・提案依頼書作成

はじめにどんな製品をつくりたいかを明確にします。たとえば、人が行う業務を代行するロボットや、セキュリティを強化するためにオートロックの鍵にしたいなどが挙げられます。このとき、開発の目的とゴールを定めて企画書にまとめることが重要です。

記載する内容としては、次のようなものが挙げられます。

  • 開発の背景(開発する理由)
  • 自社の現状(現状の課題)
  • 開発スケジュール(たとえば企画から1年など)

そして外注先には提案依頼書(RFP)を提出して、なおかつ組み込みシステムの具体案の提案を求めます。提案依頼書(RFP)には次のような項目を記載するのが一般的です。できるだけ明確、かつ詳細な内容にすることが大切です。

  • システムの概要
  • 依頼内容
  • 提案手続き
  • 開発の条件
  • 契約事項

システムの要求定義・要件定義

システム要求定義は、企画の段階で出た案を組み込みシステムで実現する際の技術的な角度から検討することを指します。具体的には、次のようなことを決定する段階です。

  • 実装する機能
  • 必要な技術
  • CPUのスペック
  • 使用するハードの種類(センサー・ライトなど)
  • 導入と移行計画
  • 運用と保守の方法(自社管理または外注管理など)

このステップは、認識のずれがないようにじっくり行うことが大切です。外注先とのずれがあった場合、スケジュールが遅れたり、搭載する機能に漏れがあったりなどのトラブルが発生する恐れがあるため、注意が必要です。


要求定義と要件定義の違い

外注先によっては「要求定義」と「要件定義」の認識が異なることがあるため、これらの違いは打ち合わせの際に、しっかりすり合わせておくことが必要です。両者の示す範囲や意味が異なるケースは珍しくはないので、必ず確認することをおすすめします。


要求定義は、開発の「目的」を定義することです。主に要件定義の前の段階で定めます。具体的には開発することで何を実現したいか、といったことを可視化させるステップです。ただ、すべての希望を実現するわけではなく、発注先に最初に提出する要望という意味合いがあります。そして、これをもとに要件定義を作成します。


要件定義は、開発・構築する仕様を定義することです。実際に開発に携わる担当者がメインとなって行う作業となります。具体的には目的を実現するための機能や各種要件、予算やスケジュールなどを定めるステップです。要件定義以降は要件定義書の内容に沿って進む重要な部分であるといえます。

システムの基本設計

システムの基本設計は、要求定義で挙げた内容を具体化する工程です。主に必要な機能の洗い出しや扱うデータの整理、ハード・ソフトで実現する役割などを定めます。これらの内容は基本設計書を作成し発注者に提出され、ハードとソフトの実現すべきバランスなども考慮したうえで確認と修正を重ねます。

ソフトウェアの要求定義・要件定義

システムの基本設計を定めた後は、ソフトウェアとハードウェアそれぞれで要求定義を行います。ソフトウェア要求定義は、基本設計やハードの仕様を考えて実現したい機能を洗い出します。


また、ここではシステムに何らかのトラブルが発生したときのソフト側の処理についてを定めることが重要です。というのは、発注者が開発工程に携わる最終的なタイミングとなるため、漏れのないよう話合うことをおすすめします。

ソフトウェアの基本設計

ソフトウェアの基本設計では、要求定義で定めた仕様の実現を具体化します。各機能を実現するための機能ユニット同士のデータや構造を整理します。ここではハードの仕様に合わせて設計することが肝となり、消費電力やメモリ容量、反応速度や入出力ポートの数などに考慮することが重要です。

ソフトウェアの詳細設計

詳細設計では、基本設計を基準としたソフトウェアの仕様を具体化していきます。処理時間の監視やプログラム実行の優先度を付与するRTOSや、RTOSが動くためのCPUのプログラム単位、タスクからOSに出す命令であるシステムコール、これらの優先順位、実行中のプログラムを止めて優先度が高いものを実行する割込みなどを明確にします。

実装(プログラミング)

詳細設計が定まったらソフトウェアのプログラミングを行います。これまで打ち合わせを重ねてきた内容が具体化します。

ソフトウェアテスト

実装後はソフトウェアの動作を確認します。テストは主に3種類、外注側が行います。単体テストはプログラムの最少機能単位で行われ、詳細設計通りに動くか確認します。結合テストはプログラム同士を組み合わせて行われ、基本設計通りに動作するかを確認する工程です。統合テストは結合テストの結果を受けて、すべてのプログラムを組み合わせて行われます。

システムテスト

ソフトウェアのテストがすべて終了したら、次は組み込みシステム全体でテストを行います。システムとの統合テストでは、ハードとソフトを組み合わせて基本設計通りに動くか確認します。次に、システム要求定義通りに動作するかを確認する受け入れテストを行い、実際にシステムを使う環境で行われるのが一般的です。


操作性や負荷、システム障害の際の復旧時間などを確認し、不具合が見つかった場合はハードとソフトで分けて再検証を行い修正します。


まとめ

まとめ

今回は組み込みソフトウェアについて、その仕組みと開発する流れを紹介しました。日常生活のなかであらゆるシーンで使われている組み込みソフトウェアは、自社での開発が難しいなら外注することもできます。新製品をつくりたいときや、既存製品のアップグレードなどにも活用できるため、状況に合わせて検討することがおすすめです。


今後、組み込みソフトウェアの開発を考えているなら、株式会社テクノデジタルにお任せください。長きにわたりさまざまな開発に携わってきた実績と経験をもとに、ビジネスに沿ったオーダーメイドのご提案をいたします。


予算はもちろんスケジュールなども柔軟に対応いたしますので、組み込みソフトウェアでお悩みなら株式会社テクノデジタルにご相談ください。

投稿者

  • デジタルトレンドナビ編集部

    システム開発、Webサイト制作、ECサイトの構築・運用、デジタルトランスフォーメーション(DX)など、デジタルビジネスに関わる多岐の領域において、最新のトレンド情報や実践的なノウハウを発信してまいります。