前回は、組み込み(ET:Embedded Technology)ソフトウエア開発におけるテスト駆動開発の取り組みについて紹介した。今回は、IT分野でよく使われているモデル記法であるUMLを利用したモジュールの最適化方法や、ソースコードの価値を高める注釈(アノテーション)の導入などのテクニックについて解説する。
UMLを利用したソフトウエアの最適化
標準化団体JASPARの自動車向け共通基盤ソフトウエア開発で、筆者らが開発を担当した組み込みソフトウエアは、アプリケーションを動作するためのフレームワークに該当するものである。これは、組み込みソフトウエアにおいて重要となるハードウエア特性を考慮した制御やソフトウエアの制御理論は直接影響を受けない機能範囲であった。それでも、組み込みソフトウエアに対する求められる効率性(小消費資源量/高速動作)を確保する必要があった。
制御論理のモデリングを行う場合、UMLには適切な表記法がないため適さない。一般的にはSimlinkなどの制御モデリング・シミュレーション・ツールを利用することが多い。ただし、制御論理を含まないフレームワークやミドルウエアであれば、UMLで規定されている記法の範囲で必要なモデリングを行うことができる。今回の開発でも、以下のような流れで設計を行った(図1)。

(1)要求仕様や機能仕様に基づいて不明確な仕様部分を整理(アクティビティ図)
(2)ソフトウエア化する対象機能を構成するドメインモデルを作成(クラス図)
(3)ドメインモデル内の相互作業を検証(コミュニケーション図/シーケンス図)
開発当初は、このようにIT分野では一般的に用いられているUMLによるオブジェクト指向(OO:Object Oriented)設計を行い実装を進めたが、ソフトウエアコードをレビューしていたときに、OO設計通りに実装すると、効率性の点で改善できる点があることに気付いた。
OO設計では、各オブジェクトは独立しており、図2の例では更新されたデータの受信側(Receiver)はそれぞれが受信データ値をもつことになる。しかし、実際のデータ伝搬としては受信側の持つデータ値は同じとなり、各受信側でデータを共有できるはずである。そこで、オブジェクトの持つ「データ」と「振る舞い」を完全に分離した実装用のモデルを作成することで、このような個所がないかを洗い出し、詳細設計としての最適化を行うことにした。

データと振る舞いに分けて検討した結果、受信側にとってはデータが更新されたタイミング自体は重要ではなく、最新のデータが取得できればよいことが確認できた。そのため、送信側と受信側は完全に分離することが可能であり、それぞれが参照するデータが正しく識別できればよいことが分かった。最終的に実装に用いたドメインモデルは、図3のようになった。

このように設計した場合、受信側の数にかかわらず、データ領域は共有できるため消費するメモリー量を低減することができる。データの伝搬処理そのものも、受信側の数にかかわらず1回で済むため処理速度も向上することになる。
これまで筆者が開発してきたIT分野のソフトウエアにおいては、ほとんど実装用のモデル作成に該当するモデリングを行ったことはない。ここまで詳細化したモデリングを行うよりは、実際にプログラムコード作成を行いながら最適化していったほうが開発効率が良かったためだ。しかし、組み込みソフトウエアに求められる効率性を確保するためには、実装用のモデルを作成して検証する効果は高いといえる。