サイト内の現在位置
組込みシステム設計と開発について
組込みシステム組込みシステムは家電や自動車をはじめ、日常生活や産業活動で利用する電子機器に欠かせない技術です。昨今ではIoTやAIの普及が進んだことで、組込みシステムの需要が増すとともに、搭載する機能のニーズも変化しつつあります。
本記事では、組込みシステムの概要から設計・開発の流れ、近年の環境変化について詳しく解説します。企業として組込みシステムの開発や活用を進めるために、ぜひ参考にしてください。
多数の機器に搭載されている組込みシステムとは?
組込みシステムは機器を制御するコンピューターシステム
組込みシステムとは、特定の用途向けに特化した機能を制御し、実行するために電子機器に組込まれたシステムを意味します。例えば、炊飯器には米を炊くことに特化したシステムが組込まれています。
組込みシステムを構成する要素は、入力装置、制御装置、出力装置、電子回路です。炊飯器なら、入力装置である炊飯ボタンを押すことでセンサーが反応し、各装置をつなぐ電子回路を通じて制御装置のマイコンへと信号が送られます。マイコンが入力を判断し、出力装置の加熱機に作動指示を送ることで炊飯が開始します。
マイコンに搭載されたソフトウエアは、入力の受付以外にも、炊飯に適切な温度・圧力を維持したり、設定された予約スケジュールに合わせて炊飯を開始できるよう入力装置や出力装置を制御しています。
組込みシステムと汎用システムの違いは役割
特定の用途に特化したシステムである組込みシステムに対し、汎用システムと呼ばれるものがあります。
汎用システムは用途が限定されず、文書やイラストの作成、Webページの閲覧などの機能を自由に選べることに加え、キーボードやモニターといった入出力装置の追加・変更が可能です。代表的なものとしては、パソコンやスマートフォン、ワークステーションが挙げられます。
これに対し、組込みシステムは基本的に特定の動作を目的とした機能のみをもちます。例えば炊飯機のシステムは内部的な演算やパネルでの文字表示をしていても、基本的に計算機として用いたり、文書を作成する機能はありません。また、加熱機を外して冷却機を接続するといった入出力装置の追加・変更も不可能です。
組込みシステムは求められる動作を定められた時間内で確実に実行することを得意としており、一台で幅広い要求を満たすことを目的とした汎用システムとは役割が異なります。
組込みシステムの設計・開発の流れ
要求分析をおこない要件定義を明確にする
組込みシステムは機能が限定されるため、設計・開発の際は要求分析を通して利用者のニーズを明確にすることが重要です。ニーズが明確になったら、それを満たすためにシステムに実装すべき性能や機能を決める要件定義をします。
あとから機能の追加をすることが想定されていない組込みシステムの開発において、目指すゴールを可視化する要件定義は、無駄な手戻りを発生させないために欠かせません。要件分析および要件定義をおこなう際は、あいまいな表現や、実装すべき仕様の記載漏れを発生させないように注意することが大切です。利用者のニーズを満たすためには、どのようなハードウエアを用意し、どのようなソフトウエアを実装するのか、大まかな仕様を検討し、要件定義書にまとめます。
システムの基本設計書を作成する
要件定義書にまとめられた仕様を実現させるために、実装すべき機能を具体化していく工程が基本設計です。この工程では、利用者が操作する画面や、操作方法、データ出力方法など、主にユーザーインターフェースに関する設計をするため、外部設計とも呼ばれます。
注意が必要なのは、ハードウエアの仕様に合うようソフトウエアを設計しなければならないことです。例えば炊飯器であれば、ハードウエアが耐えられる温度を超えて加熱することのないようにしなければなりません。システムの全体像を意識して設計し、運用規定のほか、開発のスケジュールや費用なども盛り込んで基本設計書を作成します。
システムの詳細設計書を作成する
基本設計で決められた機能を実現するために必要な情報をまとめたものが詳細設計書です。詳細設計の段階では、エンジニアがスムーズにプログラミングへ取り組めるよう、システム内部の詳細な構造を設計します。なお、基本設計が外部設計と呼ばれるのに対し、詳細設計は内部設計と呼ばれます。
詳細設計書作成において重要となるのが、シンプルさと明確さです。求める結果がエンジニアに伝わらなければ意味がありません。基本設計で決定した機能に加え、実装するためにすべきことまでを理解しやすいように記載することが重要です。どのような仕組みで機能を実装するのか、各機能を分割して整理し、プラットフォームに合わせた設計を詳細設計書にまとめます。
システムを実装・開発する
詳細設計書に基づいて、ハードウエアおよびソフトウエアの実装を進めます。ハードウエアの実装では、基板の作成と部品の実装をします。ソフトウエアの実装としておこなうのは、プログラミングです。
組込みシステムは、目的を満たす範囲でハードウエアの性能を必要最低限に抑えることが前提となるため、ソフトウエアについても搭載できる機能に限りがあります。ハードウエア・ソフトウエアがそれぞれコンパクトかつ効率的に要件を満たせるよう、双方のすり合わせを必要とする点で、汎用システム向けのソフトウエア開発と比べて手間がかかります。
ハードウエア・ソフトウエアのテストを実施する
ハードウエアおよびソフトウエアの実装を終えても、開発完了とは限りません。システムが設計通りに動作するか、単体テスト・結合テスト・システムテスト・受け入れテストの四段階に分けて確認します。
テストは、V字モデルと呼ばれる、テスト前の各工程と各テストを紐づける方法でおこなわれるのが一般的です。詳細設計と単体テスト、基本設計と結合テスト、要件定義とシステムテスト、要求分析と受け入れテストというように、各段階で定めたニーズや機能を満たしているかを確認し、不具合が見つかれば修正していきます。
単体テスト
実装時点でまずおこなわれるのが単体テストです。システムの機能ごとに、詳細設計で定めた通りに動作するか確認します。個別の機能、ひとつの操作画面といった細かい単位でテストするため、不具合の発見と原因究明がしやすいのが特徴です。
結合テスト
単体テストの不具合修正が終わったら、複数の機能を組み合わせて確認する結合テストに移ります。実際にシステムを使うときに近い状態で、ソフトウエアが基本設計で定めた機能を果たしているか確認します。単体テストで各機能が問題なく動いているからといって、結合テストを省くことはできません。個別の機能に問題はなくても、機能を組み合わせた場合に不具合が発生することがあるため、欠かせない工程です。
システムテスト
単体テストおよび結合テストはソフトウエアに関するテストでしたが、システムテストはソフトウエアとハードウエアを組み合わせておこないます。要件定義で可視化された、システムが目指すべきゴールを実現できているか確認するためのテストです。機能の充足だけでなく、運用や保守の面も含めて問題がないかチェックします。
受け入れテスト
受け入れテストは、組込みシステムを搭載した機器を実際に利用する際の環境に近い状態でおこなうテストです。この段階では、要求分析で明確化した利用者のニーズを充足していることが求められます。ソフトウエアやハードウエアの動きといった開発者目線だけでなく、依頼者や利用者の視点に立って、利用時に不都合が生じないかをチェックします。
近年の組込みシステム設計・開発の環境変化
AIやIoTの普及で求められる組込みシステムが変化している
インターネットにモノを接続する技術のことをIoT(Internet of Things)と言います。いまやインターネットに接続できるものはパソコンに限られません。例えばスマートフォンで遠隔操作できる家電や、取得した身体情報をクラウド上で分析するスマートウォッチが普及するなど、IoTの分野は飛躍的に拡大しています。
また、AIの分野でもドライバーのルート選択を学習し最適なルートを提案するカーナビや、人を感知して適温にするエアコンなどの技術が生活の一部となりつつあります。
このような技術の普及とともに、組込みシステムのニーズにも変化が生じています。例えば、センサーによるデータ収集および分析、デバイスのインターネット接続およびデータの送受信、遠隔からの操作、データを活用したリアルタイムのデバイス制御、AI活用による状況に応じた臨機応変な稼働の実現などです。インターネットに接続できるようになったことに伴い、情報漏洩や乗っ取りの防止といったセキュリティ対策の必要性も生じています。
Pythonでの組込みシステムの開発が増えている
現在の組込みシステム開発では、主にC++やPythonなどの言語が使用されています。AIやIoT化の普及に伴いシステム開発の大規模化・高度化が進む昨今、特に注目を集めているのがPythonです。
Pythonは機械学習・画像認識・自然言語処理などの専用ライブラリが充実しており、AIシステム開発やIoT化と相性が良いという特徴があります。ほかのプログラミング言語と比較すると構造がシンプルで、コードの可読性が高いのもPythonの利点です。システムの開発がしやすいだけでなく、だれが見ても分かりやすいコードになるため、メンテナンスが容易にできます。
まとめ
特定の用途に特化した機能を制御、実行するために機器ごとに開発し、組込まれるシステムを組込みシステムと言います。組込みシステムが得意とするのは、特定の機能を定められた時間内で確実に実行することです。
AIやIoTの普及が進む昨今、情報の収集・分析やインターネット接続、遠隔操作、セキュリティ対策など、組込みシステムに求められる機能は大規模かつ高度になりつつあります。
組込みシステムの開発には複数の段階を要するため、自社のみで進めるのではなく、専門知識や技術を持った会社に委託することも選択肢のひとつです。NECソリューションイノベータでは組込みシステムのコンサルティングから、設計・性能分析までおこなっています。専門的なサポートが必要な際はぜひご相談ください。