組み込みソフトウェアとは?言語や環境など開発に必要な基礎知識を徹底解説
目次[非表示]
- 1.組み込みソフトウェアとは?
- 2.組み込みソフトウェアの開発の特徴
- 2.1.信頼性への高い要求がある
- 2.2.特殊化と汎用化のバランスが難しい
- 2.3.C言語で開発されることが多い
- 2.4.開発環境と動作環境がそれぞれ別
- 3.組み込みソフトウェアを開発する流れ
- 3.1.指示書から環境の整備や計画を立てる
- 3.2.ソフトウェアの開発
- 3.3.テスト環境での動作テスト
- 3.4.実装
- 4.組み込みソフトウェアを扱うのに必要なスキル
- 4.1.C言語を始めとしたプログラミングの知識
- 4.2.電子基板に関する基本的な知識
- 4.3.クロス開発やセルフ開発などの開発環境の理解
- 5.組み込みソフトウェアの品質向上、要は「テスト」にあり!
- 6.まとめ
組み込みソフトウェアとは?
組み込みソフトウェアとは、「電子機器を動かすためのプログラム」のことです。電気で動作する機器の多くは、機器を制御する組み込みソフトウェアが内蔵されています。ソフトウェアを作って、ハードウェアに組み込むため、その特徴から「エンベデッド(埋め込み)システム」といいます。具体的には、マイコンというものにプログラミングをして、これをハードウェアに組み込むことで動作します。
マイコンは主にCPUとメモリで構成されているので、この点はパソコンと同じです。組み込みソフトウェアが搭載されている機器としては、家電や自動車などが挙げられます。
家電製品や産業機器などの機械を制御するソフトウェア
組み込みソフトウェアを組み込むことで、家電製品や産業機器などの機械をプログラミングした通りに制御できます。逆に言えば、身近な家電、電子機器のほとんどに組み込みソフトウェアが入っています。
自宅にある洗濯機、掃除機、アイロン、エアコン、カメラ、すべて組み込みソフトウェアが組み込まれています。パソコンやスマートフォン上で動作するアプリケーションソフトとは異なり、「機器を直接的に制御する」のが、組み込みソフトウェアの特徴といえます。組み込みソフトウェアは高機能なものもあれば、シンプルな機能性のものもあります。
最低限機能するハードウェアに組み込まれる
組み込みソフトウェアの機能は、組み込むハードウェアによって様々です。たとえば自動車の制御には高い機能が必要ですが、掃除機の制御機能はそれほど複雑ではありません。最近はスマート家電など機能性が高いものも増えていますが、昔ながらのスイッチ操作のみの掃除機であれば組み込みソフトウェアは簡易的で良いということです。
そして、組み込みソフトウェアの機能に応じてハードウェア、つまりマイコンの物理媒体も変わってきます。ハードウェアが高機能になると価格が高くなり、またサイズも大きくなります。
そのため、最低限機能するハードウェアを選択するのが一般的です。
組み込みソフトウェアの開発の特徴
組み込みソフトウェアの開発も、基本的な流れは他のシステム開発と同じです。具体的には、要件定義 → 設計 → プログラミング → テスト、といった流れでプロジェクトが進みます。しかし、組み込みソフトウェア開発ならではの特徴があるのでご紹介していきます。
信頼性への高い要求がある
多くの場合、組み込みソフトウェアを開発して組み込まれたハードウェアは、そのまま製品になります。つまり、市場に出回って消費者、もしくは製品を使用する企業の手に渡るということです。
機能性を満たしていることはもちろん、特に安全性が必須になります。組み込みソフトウェアの不具合によって製品が誤作動を起こし、利用者が怪我をするようなことがあれば大きな責任問題に発展します。
そのため、組み込みソフトウェアには高い信頼性が求められるということです。
特殊化と汎用化のバランスが難しい
家電や自動車は類似製品が複数ありますが、それぞれ機能が微妙に異なります。たとえばメーカーの洗濯機などをイメージすると分かりやすいですが、同じシリーズで機能のレベルごとにグレードが存在する場合があります。
このような場合、ベースとなるマイコンがもっとも安い型で、このマイコンに機能を足すとグレードアップします。汎用化のわかりやすい例なのですが、製品の展開によってはベースとなるマイコンも書き換えてカスタマイズしていきたい場合などもあります。
結果的にどこまで汎用化して、どこからを製品ごとの特殊なプログラムにすれば良いのかのバランスが難しくなります。
C言語で開発されることが多い
組み込みソフトウェアは今でもC言語で開発されることが多いです。「仕組みが単純で開発し易い」「処理速度が速い」という特性から、WEBアプリやゲームソフト、医療機器や信号機など、幅広いシステム開発に用いられています。特にC言語は、CPUやメモリ領域の管理など、ハードウェアを直接制御するプログラムの設計が行いやすく、組み込みソフトウェアやパソコンのOSのような「システムの根幹を担う開発業務」にも適した言語です。
しかし、その他のエンジニアにとっては古いプログラミング言語で、難易度が高いイメージが強いでしょう。実際、他のプログラミング言語とは異なり、CPUやメモリに直接指示を与える機械語に近い形で実装できるので、その分難易度は上がります。
同じく、C言語の設計にならい作られたC++やJavaなどのプログラミング言語が、組み込みソフトウェアの開発に使用されています。Javaは組み込みソフトウェア以外の開発でもよく使われる言語で、習得の難易度はC言語よりも低いです。
開発環境と動作環境がそれぞれ別
組み込みソフトウェアはパソコンやスマホで使用するソフトウェアではありません。家電などの機器に組み込むことを目的としているため、開発環境と動作環境が異なります。開発環境は、他のシステム同様にパソコン上です。
パソコン上でも組み込みソフトウェア開発のためのテスト環境などがありますが、最終的には本番の動作環境でテストする必要があります。
組み込みソフトウェアは機器を動作させるソフトウェアであることが前提のため、ソフトウェアを開発する時はハードウェアと同時に開発が行われます。
組み込みソフトウェアを開発する流れ
組み込みソフトウェアも概ね他のシステムと同じ流れで開発が進みます。しかし最終的には機器に組み込む必要があるなど、多少の違いがあります。
指示書から環境の整備や計画を立てる
組み込みソフトウェア開発は、クライアントから指示書を受け取るところから始まります。クライアントは、組み込みソフトウェアを使用するメーカーなどです。指示書を元に開発環境の整備や、計画を行います。
計画の内容は、「予算」、「開発メンバー」、「スケジュール」などです。指示書を元にこれらを決定し、クライアントにも情報共有します。クライアントとすり合わせを行い、合意を得ることができたら開発に進みます。
つまりここでの作業は、一般的なエンジニアにとっての要件定義と同じです。
ソフトウェアの開発
プロジェクト計画が定まったら、ソフトウェアの開発に移行します。ここで言う開発には、プログラミングだけでなく設計も含まれています。クライアントからの指示書にある程度設計が含まれていますが、詳細な設計はエンジニア側で詰めていく必要があるでしょう。
一般的な開発エンジニアと同様に、基本設計書と詳細設計書を作成し、詳細設計書を元にプログラミングしていきます。
テスト環境での動作テスト
ソフトウェアが完成したら、テスト環境で動作テストを行います。テスト環境とは、パソコン上に用意した疑似的な動作環境のことです。ここで不具合が生じている場合、実機に組み込んでも確実に不具合が生じます。
そのため、まずはテスト環境で完璧に動作するよう修正していきます。テスト結果に問題があった場合、設計書の修正、もしくはプログラミングの工程に戻ります。仕様上問題がある場合は、クライアントと再度すり合わせを行う必要が出てきます。
実装
テスト環境での動作テストに問題がなくなれば、実機に実装します。実機に実装し、製品として問題なく動作するかを確認します。動作に問題があった場合、パソコンから組み込み機器に通信して軽微な修正を行うことが可能です。
パソコンから組み込み機器への通信を行うには、ICE(インサーキットエミュレータ)や、JTAG(ジェイタグ)などの専用機器を用います。
組み込みソフトウェアを扱うのに必要なスキル
組み込みソフトウェアを扱うには、他のエンジニアとは異なる特殊なスキルが必要です。他のエンジニアと組み込みエンジニアのスキルはある程度互換性はありますが、たとえばWeb開発などとは使用言語もロジックもまったく別物です。
C言語を始めとしたプログラミングの知識
組み込みソフトウェア開発の中心言語はC言語なので、C言語の知識、スキルが必要です。C言語はかつては業務システムなどでも使用頻度の高いプログラミング言語でしたが、現在はあまり使われない言語となっています。その点でも組み込みソフトウェア開発は特殊と言えます。
C言語は他の言語経験者にとってもハードルが高く、他の言語では自動化されている部分も自分で考えて実装する必要があります。たとえば、ポインタのようにメモリの領域を意識してプログラミングする言語はあまりないでしょう。
また、組み込みソフトウェア開発にはJavaを使用する場合もあるので、Javaのスキルもあるとより良いです。Javaは今でも多くのシステム開発で使われているため、汎用性は高いです。
電子基板に関する基本的な知識
電子基板とは、プリント基板とも呼ばれる電子機器に組み込むチップのようなものです。緑色の薄いチップに細かい突起物がたくさん付いているものを目にしたことがあるかと思います。それが電子基板です。
組み込みソフトウェアの開発において、たとえば電子基板をはんだごてを使って作り上げるような必要はありません。すでに製造されたものを使用しますが、種類や、どのような開発ではどのような電子基板を使うのがベストなのかなどは把握しておく必要があります。
クロス開発やセルフ開発などの開発環境の理解
クロス開発とは、プログラムの実行環境とは異なる環境で開発を行うことです。組み込みソフトウェアをパソコンで開発する場合、クロス開発に該当します。一方で、実行環境と同じ環境で開発することをセルフ開発と言います。
クロス開発は組み込みエンジニア以外のエンジニアにとっては特殊な開発環境ですが、たとえばパソコンで使用する総合開発環境などは一般的なものになります。具体的には、EclipseやWideStudioを使用する場合が多いでしょう。
プログラムを機器に組み込む環境は特殊なので、理解を深める必要があります。
組み込みソフトウェアの品質向上、要は「テスト」にあり!
組み込みソフトウェアは市場に出回る機器に組み込むものなので、責任重大です。そのため、テストに力を入れて品質を向上させる必要があります。
組み込みソフトウェアを開発するためには、ハードウェアや電子基板に関する知識、C言語のような開発に必要なプログラミングの技術など専門的知識が必要です。
ソフトウェア開発では,「不具合発見が後になればなるほど修正に掛かるコストが増大していく」という法則があります(Boehmの法則)。つまり、前段階でソフトウェアをしっかりテストしておき、システム結合以降のテストに入るまでにソフトウェアの不具合を除去しておいた方が、全体のコストが少なくて済むのです。特に組み込みシステムの場合、システム結合後に不具合が出ると原因究明に苦労し、修正コストの増大とスケジュールの遅延を引き起こす可能性が高くなります。そういった意味で、できる限りソフトウェアそのものの品質を上げた上、システム結合以降の工程に入った方が良いでしょう。
■関連記事:
まとめ
組み込みソフトウェアとは、電子機器などに組み込むソフトウェアのことです。パソコンで開発した後に、実機に組み込むという点で他のシステム開発と大きく異なります。ソフトウェアを組み込んだ実機は市場に出回ることになるので、安全性という点でも責任は大きいと言えるでしょう。
そのため組み込みシステムでは、これらを満たすために結合してから全体のテストを行うのではなく、部品である一つ一つのコンポーネントの信頼性を高め、これらの部品を積み上げてからテストを進める必要があるでしょう。その効果を上げるか否かは、システムの構成要素である各部品に対して、きちんと要求を定義できているかにかかってきます。例えば、下位V字モデルのテストの効果を上げるためには、システム方式設計の段階で、ソフトウェアに対する要求を確立することが重要です。
そこがぶれてしまっては、テストの効果が下がってしまうからです。同様に、単体テストの効果を高めるためには、ソフトウェア設計時に、ソフトウェア部品に対する要求を明確に確立していく必要があります。
しかし、自社内のみでここまでを行うリソースや環境がない場合もあるでしょう。その際は、オフショア開発も含めて、テストに力を入れている会社に外注することを選択肢に入れても良いかもしれません。
最後に
「コウェル」はベトナムと日本に拠点を置いており、高品質なオフショア開発サービスを提供しています。
コスト・スピード・品質には自信があり、上流工程から開発、テストまでワンストップでサービスを提供しており、国内大手企業様からも開発依頼を多くいただいています。
開発実績としてはWebシステムの開発や業務システム・越境EC開発などが豊富です。
さまざまなニーズに応えた実績もあり、経験豊富なソフトウェア開発会社です。
「なるべくコストを抑えてソフトウェアを開発したい」
「納期が短いから国内のエンジニアだけでは難しい」
このようなお悩みがあれば、オフショア開発を検討してみてはいかがでしょうか。
なお、コウェルに関する詳細資料は以下でダウンロードすることが可能です。
このほか、弊社の具体的なサービスや導入事例については以下をご覧ください。
コウェルのサービスメニュー>>>
コウェルは、日本とベトナムから世界中のお客さまへ高品質なソフトウェアテスト・品質保証・オフショア開発サービスを提供しています。
コウェルの開発導入事例>>>
コウェルは情報通信、金融、流通・小売サービス、医療・ヘルスケアなど、さまざまな業界のお客様の導入を支援しています。