組み込みソフト開発のITスキル

目次

1.組み込みソフトとは
 組み込みソフトとは特定用途向けに特化した機能を持つハードウェアに搭載するソフトウェアです。

2.組み込みソフトウェアの開発環境
 組み込みソフトウェアが動作するハードウェアに組み込まれるOSはプログラム開発に使用するマシンのOSと異なることも多く、Windowsマシンなどの開発環境で作成したプログラムを組み込みOS向けのコードにコンパイル(クロスコンパイル)します。また、組み込み機器には、通常、キーボード、マウス、モニタなどの入出力装置が接続されていないため、組み込み機器に搭載したプログラムに条件を与えた動作確認ができません。このため、組み込み機器のCPUを模擬する装置(キーボード、マウス、モニタなどの入出力装置がついている)に置き換えて動作試験を行なうICE(In-Circuit Emulator:米インテル社の登録商標)があります。また、半導体チップに検査用端子を付ける規格JTAGがあります。

3.組み込み機器のプラットフォーム
 組み込み機器のOSとして下記のものがあります。
(1)TRON(The Real-time Operating system Nucleus):
 コンピュータやソフトウェアのアーキテクチャの構築プロジェクトで、組込み機器用リアルタイムOSとしてITRON(Industrial TRON)仕様が策定されている。

(2)μITRON (micro ITRON)
 TRONプロジェクトから派生したサブプロジェクトで仕様化され、ITRONはμITRONが規格になっている。

(3)T-Kernel
 ITRON互換性と拡張性を重視してトロンフォーラムで開発されたプリエンプティブマルチタスクの組込み用リアルタイムOS。

(4)VxWorks
 米Wind River Systems社が開発・販売する組み込みシステム向けリアルタイムオペレーティングシステム

(5)QNX
 米QNX Software Systems社が開発した商用のリアルタイムUnix系オペレーティングシステム。

(6)Windows CE/Windows Embedded
 米Microsoft社が開発した組込機器向けのOS。

(7)OSEK
 自動車のECUで用いるプログラムの業界標準作成を目標に設立されたドイツ自動車産業のプロジェクトが策定したOSの仕様。

(8)Rt-Linux
 Linuxのカーネルにリアルタイムモニタを追加してOS全体をプリエンプティブプロセスとして実行するようにしたマルチタスク組込み用OS。

4.プログラミング言語
 組み込み機器のソフトウエアはハードウェアを直接制御することも多く、デバイスハードウェアに対するローレベルのアクセスができるプログラミング言語を使い、一般的な言語としては、アセンブリ、C、C++、Python、Javaなどが使われます。

(1)アセンブリ
 CPUの機械語と一対一で対応し、人間が理解しやすいようニーモニックという単語で表現したもの。

(2)C
 1970年代初期の開発されたコンパイル型言語で組み込み機器で最も多く使われている。ISOで1999年に「C99」、そのC99の後継として2011年に「C11」として規格化された。

(本サイトのコンテンツ)
 ・C言語

(3)C++:
 C言語にオブジェクト指向などが追加されたものでC言語のほとんどの要素を継承している。

(本サイトのコンテンツ)
 ・C++言語

(4)Python
 インタープリター型言語のため、CやC++、Javaと比べて実行速度が遅い。

(本サイトのコンテンツ)
 ・Pythonの基本

(5)Micro Python:
 マイクロコントローラ上での動作に最適化されたPython。

(6)Java
 Javaで作られたプログラムは仮想マシンJVM(Java Virtual Machine)がJavaバイトコードを解釈して、コンピュータが実行できる形式のコードに変換して実行する仕組みのため、実行速度はCなどのコンパイラ型言語に対して遅い。

5.コーディング規約
 C言語などを用いて組み込みソフトウェアを作成する場合、品質向上、脆弱性が作り込まれるのを回避するなどの目的で、ソースコードのコーディングルールを決めるための「コーディング規約」を策定することが行われます。
 特に車載機器や産業機器、医療機器などミッションクリティカル分野の組み込みソフトウェア開発では、サプライヤーが順守すべきものや企業内で独自に策定するものがあります。下記に国際的な団体などで策定されているコーディング規約を記載します。

(1)MISRA C、MISRA C++:
 自動車メーカー、部品メーカー、研究者からなる欧州の自動車業界団体のMISRA (Motor Industry Software Reliability Association、ミスラ) が開発したC言語のためのソフトウェア設計標準規格。ANSI/ISO/IEC規格のC言語で記述する組み込みシステムで安全性と可搬性 (ポータビリティ、移植性) と信頼性を確保することを目的としている。

(2)CERT
 CERT Secure Coding Standards は、CERT (Computer Emergency Response Team) が作成するプログラミング言語のコーディング規約で、脆弱性につながる恐れのある危険なコーディング作法や未定義の動作を削減することを目的にルールをまとめた規約。
 JPCERT/CC
 https://www.jpcert.or.jp/

(3)AUTOSAR
 AUTOSARコンソーシアムが策定する車載電子制御ユニット用の共通標準ソフトウェアアーキテクチャ。

(4)IPA情報処理推進機構
 組込みソフトウェア開発におけるコーディングの際の注意事項やノウハウをルール集として、「組込みソフトウェア開発向けコーディング作法ガイド」にまとめている。

6.組み込みソフトウエアの開発プロセス
 製品の特長によって様々な開発プロセスがありますが、大まかに要求分析から設計、実装、テストと段階的にソフトウェアを作り込んでいく「ウォーターフォールモデル」と部分的に作ってテストを繰り返しながら完成させていく「スパイラル方式(反復プロセス)」があります。ここではプロセスの実施順序に関わらず、組み込み開発で必要となるプロセスについてポイントと設計ツールについて整理します。
 ウォーターフォールモデルの場合にはV字モデルとして表わされます。

6.1 システムエンジニアリングプロセス1
(1)要求定義と要件定義
 当該製品に求める要求内容を明確に定義して、「要求仕様書」としてドキュメント化します。この要求仕様を基に技術的観点から製品を動かすための仕様を定義して、「要件定義書」としてドキュメント化します。
(要求定義のツール)
 企業内では要求定義の手順をフレームワーク化しているものもありますが、一般的な方法としては製品のモックアップを用意し、顧客の利用シーンを想定して、要求内容を明確にしていく作業が行われます。

(2)非機能要件の定義
 前記の要求内容を実現するために必要なシステムの機能要件以外に、信頼性などの品質要件、開発環境などの技術要件、運用方法などの運用・操作要件などを非機能要件として定義します。
(非要件定義のツール)
 要求分析法の1つであるゴール指向要求分析(ゴールを決めてゴ ールまでの過程を分解して要求を導き出す手法)のNFR(non-functional requirement)フレームワーク、KAOS法などがある。

(3)アーキテクチャ設計
 開発する組込みシステムを実現するためのハードウェアとソフトウエアの役割分担と実現方法を明確にします。
 具体的には、システム構成図、外部インターフェース、内部インターフェース(システム内部の機能ブロック間などのインターフェース)、機能ブロックの役割と機能ブロック間の動作を決めます。

6.2 ソフトウェアエンジニアリングプロセス
(1)ソフトウエア要件定義
 前記のシステムの要件定義、アーキテクチャーの設計を踏まえ、当該製品を実現するためにソフトウェアとして必要な要求内容を明確にします。
 UMLアクティビティ図などを使ってドキュメント化します。

(2)ソフトウェアのアーキテクチャ
 ソフトウエアの構成品(コンポーネント、クラスなどの機能ユニット)とその構成品間の動作の決めます。
 UMLのコンポーネント図、クラス図、シーケンス図、状態遷移図などを使ってドキュメント化します。

(3)ソフトウエア詳細設計
 ソフトウェア・アーキテクチャ設計で定義された機能ユ
ニットをプログラムユニットに分割し、詳細な振る舞いや
論理構造などを設計します。
 プログラムユニットは、実装・コンパイルおよび単体テストを実施する最小レベルまで分割します。
 プログラムユニットの処理内容、プログラムユニット間のインターフェース、ハードウェアとのインターフェースの実装方法などの設計を行い、モジュール設計書などでドキュメント化します。

(4)コーディングおよび単体テスト
 プログラムユニット(モジュール)単位でコーディングを行い、単体テスト仕様書に従ってテストを行います。
 このとき他のモジュール間と動作する機能について、モジュール単体ではテストできないため、スタブプログラムなどを作成してテストを行います。
 また、デバッグツール(デバッガ、ICE:In-Circuit Emulator)、ソースコード解析ツールなどを使い、プログラムのテストを行います。

(5)ソフトウェア結合およびソフトウェア結合テスト
 単体テストを終えたプログラムユニットを結合し、結合テスト仕様書に従って、結合テストを行います。

(6)ソフトウェア総合テスト
 結合テストを終えた全てのプログラムユニットを結合し、
総合テスト仕様書に従って、総合テストを行います。

6.3 システムエンジニアリングプロセス2
(1)システム結合テスト
 ソフトウェア総合テストを終えたソフトを当該製品ハードウェアに組み込み、結合テストを実施します。
 結合テスト仕様書は、システム・アーキテクチャ設計書の内容を網羅したものとします。

(2)システムテスト
 システム結合テストを終えた当該製品を使い、システムテストを行います。
 システムテスト仕様書はシステム要求仕様書をもとにテスト項目を作成します。

(参考文献)
・「【改訂版】 組込みソフトウェア向け開発プロセスガイド」
独立行政法人情報処理推進機構
ソフトウェア・エンジニアリング・センター

7.プロジェクト管理
 組み込みソフトウェアの規模が大きくなり、多人数で開発するためには計画的に作業を管理することが必要になります。プロジェクトで管理すべき内容をプロジェクト計画書としてまとめます。下記にプロジェクト計画書で管理する項目について記載します。

(1)プロジェクト概要
 プロジェクトの目的、プロジェクトの前提条件、プロジェクトの目標、プロジェクトの成果物、目標達成のための方針・手段、スケジュールと予算、プロジェクトの範囲を明確にします。

(2)プロジェクトの体制
 製品開発プロジェクトの体制、ソフトウェア開発プロジェクト内部体制、外部(業務委託先など)インタフェース、役割分担を明確にします。

(3)リソース計画
  開発規模と工数の計画、プロジェクトの人員研修計画、
人員計画、予算計画書、設備、機器等の調達計画を決めます。

(4)作業計画
 開発作業の洗い出し、開発作業担当者の割付、開発作業の順序付けなどの作業を計画してWBS(Work Breakdown Structure)にまとめ、可視化します。

(5)品質保証計画
 品質目標、品質保証に関する主要なイベント、品質保証の体制と仕組みを明確にします。

(6)リスクマネジメント
 リスクマネジメントの方針と仕組みを明確にします。リスク一覧表でリスクの洗い出しを行い可視化します。

(参考文献)
・「組込みソフトウェア向けプロジェクトマネジメントガイド[計画書編]」
独立行政法人 情報処理推進機構

8.組み込みシステム開発のワーキング団体、資格など
8.1 組み込みシステム関係団体
(1)一般社団法人 組込みシステム技術協会
 https://www.jasa.or.jp/
・組込み総合技術展 ET(Embedded Technology)、IoT総合技術展 (IoT Technology)
・ETEC組込み技術者試験の実施

8.2 資格
(1)ETEC(組み込み技術者試験)
一般社団法人 組込みシステム技術協会が実施し、知識を得点として数値でグレード(A、B、C)化する。

(2)OCRES(オークレス、OMG認定組み込み技術者資格試験)
 http://omg.or.jp/qualification_test/
 130ヶ国で実施されている世界標準の技術者試験

(3)エンベデットシステムスペシャリスト試験
 独立行政法人情報処理推進機構(IPA)の国家試験
 https://www.ipa.go.jp/

The end