ソリューション
ソフトウェア
その他・お知らせ
本文までスキップする

モデルベースによるアジャイルな組み込みシステム開発(その1)

 

皆さま、こんにちは。

IDAJの小川です。

 

高度化かつ複雑化している昨今の組み込みシステムの開発において、近年「アジャイル開発」という、システムの要求仕様の変更に有利とされる手法が注目を集めています。

しかしアジャイル開発はその必要性が広く認められている一方で、組み込み開発への導入に対しては固有の課題が存在します。

ここでは、組み込みシステムに対するアジャイル開発の課題を挙げ、その解決のためにAnsys SCADEを使ったモデルベースによるアジャイル開発をご紹介します。

アジャイル開発とは?

アジャイル開発とは、迅速かつ適応的なソフトウェア開発手法群の総称です。

アジャイル開発ではできるだけ短期間に成果物を開発して顧客に提供し、顧客の評価を受けて機能の改善と追加を行います。この短期間での開発、提供、評価の工程を繰り返し、反復していくことで、徐々に成果物を顧客の望む完成形に近づけていきます。

アジャイル開発は顧客の真の要求を明確にして、それを実現するソフトウェア作りを、顧客とともに目指す手法だと言えますね。

 

アジャイル開発の説明のために、しばしば対比的に挙げられる開発手法が「ウォーターフォール開発」です。

ウォーターフォール開発はソフトウェア開発の伝統的な手法で、要求を開発初期段階に確定し、その要求に基づいて設計、実装、テストを順次行います。

 

ウォーターフォール開発

ウォーターフォール開発

 

ウォーターフォール開発は顧客の要求が開発スタート時に確定しており、変わらないことが前提です。要求が変わらないのでシステム仕様が最初から確定しているため、開発工数を見積もりやすく、最終リリースまでのスケジュールが立てやすいというメリットがあります。また各工程で必要な作業内容も予見しやすいため、開発メンバーの作業範囲は明確です。

したがって、顧客の要求とシステム仕様が明確であれば、ウォーターフォール開発はシンプルで有効な開発モデルであり、かつ合理的でもあります。

ただし要求が途中で変更されたり、リリース後に成果物が要求と異なることがわかった場合など、手戻りが発生すると、その修正には膨大な工数がかかり、当初の見積もりを大幅に超えた損失を生むことになるというデメリットがあります。

 

これに対してアジャイル開発は顧客の要求が変化することをあらかじめ許容する開発手法です。

プロジェクト発足時にわかっている要求の中で優先度の高い機能から開発を始め、設計、実装、テストを一定の短期間のうちに実施して、システムとして動作する成果物を顧客にリリースします。その成果物を顧客に実際に使ってもらい、その動作が要求通りであるか否かの確認や、使い勝手などの気づきをフィードバックしてもらい、システムの要件を調整します。

その調整後の新しい要件に対してまた設計、実装、テスト、中間リリースを行い、フィードバックと要件調整を繰り返し、徐々に完成形に近づけていき、最終リリースを達成します。

 

アジャイル開発

アジャイル開発

 

アジャイル開発は短サイクルの反復増加型開発であり、より要望の高い機能から実装していくため、顧客が利用したい機能をタイムリーに提供できます。

また中間リリース毎に顧客の評価を受けるため、要求と成果物との不一致があっても次回リリースでの修正が可能となり手戻りによる工数を抑えやすいのも大きなメリットで、最終成果物の顧客満足度は高いものに仕上がりやすい手法です。

その反面、プロジェクト開始時の要求・仕様が不明確であるため、最終リリースまでに必要な工数の見積もりが難しく、スケジュールを立てにくいというデメリットがあります。

また、サイクル1回分の開発分量は短期間で収まるように計画されても、「動くソフトウェア」として仕上げるためには、設計、実装、テストという工程をサイクル内で繰り返して成果物として完成させなければなりません。このため最終リリースまでに必要な仕事の分量としてはウォーターフォールよりも多くなる傾向にあります。

この開発サイクルを効率的にこなすためには、開発メンバー全員対して、高い開発スキルとともに、自らが考え判断して行動する自律管理のスキルが要求されます。

 

ハードウェアの存在が前提となる組み込み開発においては、プロジェクト発足時にはハードウェアの仕様が決まっていることが多く、それに伴ってソフトウェアの仕様が事実上固定され、プロジェクト開始時から要求・仕様が変わらないことがあります。このため組み込み開発においては長らくウォーターフォール型の開発スタイルが選択されてきました。

しかし近年の組み込みシステムにおいては、ハードウェアの電動化、ネットワーク・サービスとの連携、自動運転支援など、これまで以上にソフトウェアに求められる要求・仕様が高度化・複雑化し、プロジェクト発足後であっても要求・仕様が変化するケースが増えています。

この要求・仕様の変化に追従し、より高品質なソフトウェアの提供を迅速に行うために、アジャイル開発がますます注目されているのです。

 

組み込みシステムにおけるアジャイル開発の課題

アジャイル開発の有効性は現在広く認知されており、システム開発における一般的なフレームワークとなっています。しかし組み込み開発では長らく導入が進むことはありませんでした。

その理由は、「テスト駆動開発」や「リファクタリング」に代表されるアジャイルの開発プラクティス(経験則から産まれた手法)における技術的な課題です。

 

課題(1)組み込み環境におけるテスト駆動開発の難しさ


テスト駆動開発とは、コーディングを行う前にテストシナリオを書いて、そのテストをパスする必要最低限の実装を優先し、徐々にコードを洗練させていく開発手法です。

コーディングよりも先にテストシナリオを書く工程は「テスト・ファースト」と呼ばれており、最初にテストシナリオを確定することによって機能の要求・仕様を明確にします。これによって、仕様の理解があいまいなままに実装することが無くなり、仕様の理解不足によって発生する手戻りを防ぐことができます。

またテスト駆動開発では、テストを並行して開発を進め、テストがパスすることを確認しながら実装を進めるため、開発の初期段階で不具合を検知・修正しやすくなり、後工程での手戻りの発生を減らすことができます。

テスト駆動開発は多くのアジャイル開発手法で推奨されており、アジャイル開発のプラクティスの中でも特に効果的なものの1つです。

しかし、組み込みシステム開発においては、テスト・ファーストを徹底することと、テストを並行した開発を実施することがそれぞれ困難なことがあります。

組み込みシステムのソフトウェアにとってテストシナリオとは、ハードウェアから得られる入出力応答に相当しますが、プロジェクト発足時にはハードウェアができ上がっていないことが多くあります。

その場合にはソフトウェア開発を先行して進めることになりますが、まだでき上がっていないハードウェアの応答は得ることができないため、ハードウェア制御に直接関与する機能のテストシナリオ作成が難しく、これが組み込み環境においてテスト・ファーストの実現を困難にしている原因の1つです。

また、テスト駆動開発においてテストを並行した開発とは、一般的に「テスト自動化」までを含みますが、これが組み込み環境においてはより工数のかかる作業です。

テスト自動化は、機能の単体テストを自動的に実行する環境を構築し、ソフトウェアに変更が発生した際に自動的に回帰テストを実行する手法です。コーディングによってソフトウェアに変更が発生した際には既存機能も含めた単体テストが自動的に実行されるため、不具合が発生してもすぐに検出することができます。

したがって、頻繁に機能の追加・変更を繰り返すアジャイル開発においては必須のプラクティスとなっています。

テストの自動化にはテストコードの実装が求められますが、とりわけ組み込み環境においては前述したようにテストシナリオが無いことが多いため、ハードウェアの応答に依存した部分はテスト用のダミーコードで代用するといった回避策が必要です。

これはテストダブルと呼ばれ、組み込み環境においてテスト自動化を実現するためのテクニックの1つですが、機能ごとにどのようなダミー応答を返すコードとするかを検討して実装する必要があるため、工数が増えがちです。

このように、テストコード実装にかかる工数が膨らみやすいことも、組み込み環境へのテスト自動化導入の障害となっています。

 

課題(2)要求・仕様の変更に追従可能なコーディングの難しさ


要求・仕様の変更が発生すると、それに追従してソースコードを変更する必要がありますが、その変更を迅速に行うためにはソースコードが柔軟に修正可能な状態でなければなりません。

ソースコードをいつでも修正しやすく整理しておくことは、頻繁に要求・仕様が変更されるアジャイル開発ではとても重要なのですが、一方で組み込み開発においては、その実現が困難な状況がしばしば発生し、要求・仕様への追従が難しいコードとなることがあります。

それは、組み込み開発で主に使われるプログラム言語が手続き型言語であることと、組み込み開発がハードウェアに依存した開発であることが原因です。

手続き型言語とコード整理の関係について述べるために、アジャイルの開発プラクティスである「リファクタリング」について触れたいと思います。

リファクタリングは、プログラムの外部から見たふるまいを変えずにソースコードの内部構造を整理することです。

これによってソースコードの可読性と保守性が高まり、将来起こり得る新たな要求や不具合に対してプログラムが修正しやすい状態になります。要求・仕様の変更が頻繁に発生するアジャイル開発では、リファクタリングは重要なプラクティスです。

このリファクタリングを効率的に行うためには、ソースコード内の関連するデータとロジックが、機能もしくは機能を構成するサブルーチン単位でモジュール化されており、そのモジュール同士の依存性が低い状態になっていることが重要です。

一般にアジャイル開発でよく使用されるC++やJavaなどのオブジェクト指向型言語は、関連するデータとロジックをオブジェクトとしてモジュール化することに長けた言語です。

オブジェクト指向言語では、オブジェクトの分割・結合や対象範囲の修正のための機能とリファクタリング手法が充実しているため、要求・仕様の変更に対して柔軟に修正可能なコードを作成しやすいのです。

一方で組み込み開発ではC言語などの手続き型言語が主流です。

C言語自体は構造化設計に対応しているため、データとロジックを機能単位でモジュール化することで、要求の追加・変更に強いコードを作成することは可能です。

しかしオブジェクト指向型言語におけるオブジェクトのようなモジュール化に特化した基本機能が提供されているわけではないため、開発者自身がモジュール化を強く意識したコード設計を行う必要があります。開発者全員が自身の担当分の全機能とそれを構成するサブルーチンを、初めから適切な粒度でモジュール化していくことは容易ではなく、後から修正することもオブジェクト指向言語ほど簡単なことではありません。

このため十分にモジュール化されていないコードが作成されることが多く、リファクタリングが困難な状況が発生しやすくなります。

また組み込み開発においては、ハードウェアを制御するためのドライバAPIやレジスタにアクセスする必要があることもリファクタリングを困難にしています。

ドライバAPIやレジスタは、プログラム内でグローバルにアクセスでき、プログラマが必要だと考えたタイミングで呼び出すことができます。しかしグローバルな記憶域に依存した機能実装を行うと、その実装時点の処理順序でしか動かないコードとなり、後から処理順序や構成の変更がしづらくなります。

これらの理由から、組み込み開発ではリファクタリングによるコード整理を困難にする状況が発生しやすく、要求・仕様の変更に対して追従しづらいソースコードが生成され、効率的なアジャイル開発運用の障壁となるのです。

 

以上に挙げた技術的な課題が、組み込み開発にアジャイルは向かないとされてきた理由です。

テスト駆動開発とリファクタリングはそれ自身が有益なプラクティスであるだけでなく、アジャイル開発において効率的な開発サイクルの運用に有効とされるCI(継続的インテグレーション)環境の構築にも密接に関係します。

このためアジャイル開発を効率的に運用するためにはこれらのプラクティスの実現が避けては通れず、上記したような技術的な課題を解決する必要があるのです。

 

これらの課題に対する解決策となり得るのがモデルベース開発です。

次回は、弊社で取り扱っているモデルベース開発環境であるAnsys SCADEがアジャイル開発導入に対して適切なソリューションになり得ること、Ansys SCADEで構築したCI環境によるアジャイル開発についてご紹介します。⇒”その2”はこちら。

 

Ansys SCADEに関する詳細については、是非過去のブログ記事もご参照ください。

関連ブログ(記事)

認証取得済みコード生成機能を核とした、組み込みソフトウェアのモデルベース開発環境「AnsysSCADE」 のご紹介(その1) 

認証取得済みコード生成機能を核とした、組み込みソフトウェアのモデルベース開発環境「Ansys SCADE」 のご紹介(その2)

認証取得済みコード生成機能を核とした、組み込みソフトウェアのモデルベース開発環境「Ansys SCADE」 のご紹介(その3)

 

無料オンラインセミナー(Webinar)

弊社では、Ansys SCADEにご興味のあるお客様を対象に、常設で下記のオンラインセミナーを開催しています。

「開発責任者・管理職・シニアエンジニア様向けAnsys SCADEご紹介セミナー」

本セミナーでは、普段、Ansys SCADEを操作されることはなくても、組み込みソフトウェア開発を統括・推進されている開発責任者・管理職・シニアエンジニアの皆様に、Ansys SCADEがどのようなシーンでお役に立つのかをわかりやすくご説明しています。IDAJは単にソフトウェアのご提供だけでなく、機能安全規格に準拠した開発プロセスへのツール適用や効率的なモデルの作成などをコンサルティングサービスとしてご提供します。ぜひご都合の良い時間にご視聴いただければ幸いです。

 

追記・更新:2021年7月6日

■オンラインでの技術相談、お打合せ、技術サポートなどを承っています。下記までお気軽にお問い合わせください。ご連絡をお待ちしています。

株式会社 IDAJ 営業部

Webからのお問い合わせはこちら

E-mail:info@idaj.co.jp

TEL: 045-683-1990