前の章でも触れましたが、Simulinkのような制御設計ツールでは、「ブロック線図」で表現したロジックを実行するだけでなく、そこからCコードを自動生成することができます。この仕組みを導入して、一定の成果を出すためには、それなりの工夫が必要となります。
私が初めて、自動コード生成の仕組みの導入を決めたとき、「組込み制御ソフトウェア」の要求仕様を受け取って、期限内に「組込み制御ソフトウェア」のコードを作成し、実機(製品)で要求仕様通りに動かす責任がありました。シミュレーションで正しく動くことが確認されたロジックを、そのまま設計書として流用でき、また、そこから自動生成したCコードが、全てでは無いにしろ流用でき、さらに、そのソフトのテストデータも、簡単にシミュレーションから作成できるとあれば、採用しない手はありませんでした。ソフト開発の最初の時点で、新しい開発手法を導入すると、余計な作業が増えることから、採用に反対していたチームメンバーも、ソフト開発が進み、開発フェーズが後段になればなるほど、彼が従来ハンドコーディングで取り組んできた組込みソフト開発と比べて、苦労が圧倒的に少なくなることに気づいたようでした。実機を使った最終テストフェーズに入った頃には、彼はこの新しい開発手法を採用して良かったと、言うようになっていました。
この時は、最初から、自動コード生成機能のある制御設計ツールを導入して、成果を出すことができました。後で色々な方からお話を伺うと、導入が難しい場合や、導入成果を出すことが難しい場合もあるようでした。そういった会話を通じて、気付いた点を取り上げてみます。
1)しっかり開発体制を準備する
「ブロック線図」がらCコードを自動生成できる制御設計ツールを使わない「組込み制御ソフトウェア」の開発では、要求仕様作成チームが、少人数で要求仕様を作成し、彼らに比べて人数が多いソフトコード作成チームが、ソフト設計と、組込みCコード作成、ソフト単体テストを担当することが多いでしょう。ところが、「ブロック線図」がらCコードを自動生成できる制御設計ツールを利用した場合、要求仕様作成チームは、従来文書で表現するだけで済ませていた機能についても、シミュレーションで適切な結果を出す「ブロック線図」を作成する必要があり、作業量が増えます。その一方で、ソフトコード作成チームは、「ブロック線図」を流用することにより、ソフト設計、Cコード作成とテストの作業量が減ります。つまり、両チームの間で作業負荷が逆転するのです。それに合わせて、ソフトの要求仕様や設計を担当する「ブロック線図」を作成する人を増員し、ソフトコード作成担当者を減らすよう、開発体制を変える必要があります。別の表現をすると、開発に関わるチーム体制を、変更できるだけの力のある人が、率先して、制御設計ツールを使ったソフト開発手法の導入を進める必要があります。
2)プロジェクトに関わるチーム全体に、新しい開発手法に対して、前向きに取り組む意識がある
新しい開発手法を導入することで、今まで経験が無いこと、知らないことに起因するトラブルが発生する可能性が出てきます。そのようなトラブルが発生する中でも、新しい開発手法を使ったプロジェクトを、前へ進めるという強い意思が必要になってきます。そのためには、開発現場のやる気を高めるための、動機付けが必要です。例えば、航空宇宙業界で、最も技術が進んでいるイメージがあるNASAが、制御設計ツールであるSimulinkを使っているという記事を、ネット検索で見つけることが出来るはずです。その際、少なくともNASAと同じレベル、もしくは、さらに彼らより上手く「制御設計ツールを使いこなしてみせる」という、成長意欲から来る強い意志を、関わるメンバー全員が持つというようなことです。このような高いモチベーションがある開発現場では、新しい取り組み自体を成功させるために、可能な限りの努力をすることから、必然的に良い結果を出しやすいでしょう。
3)制御ソフトウェアの要求仕様の作成に、シミュレーションを使うことに慣れている
要求仕様作成チームにて、制御ロジックを考える際に、FORTRANやC言語などで作成した、シミュレーションプログラムを使っていた場合は、プログラムの代わりに、制御設計ツールを利用することに、比較的抵抗は少ないでしょう。どちらかというと、従来の慣れ親しんだシミュレーションプログラムの利用を止めて、制御設計ツールを使うことに、躊躇する場合の方が多いかもしれません。ただ、そのような自作の内製プログラムのメンテナンスや、新機能実現のための機能拡張作業を、長年続けることは、私自身も経験しましたが、中々難しいものです。そのため、ロジック検討に集中でき、プログラミング作業を減らせる、制御設計ツールを活用することが多いでしょう。一方で、要求仕様作成チームが、文章で要求仕様としての制御ロジックを記載するだけで、ソフトコーディング担当に、ロジックの妥当性確認と、必要に応じた改善までお任せするような、開発手法を採用している場合は、ソフトコードを自動生成できる制御設計ツールの導入は、簡単では無いでしょう。要求仕様作成チームは、余計な仕事を増やされることに抵抗を感じるでしょうし、ソフトコード作成チームは、仕事を減らされることを、強く警戒するからです。ただ、どんどん複雑で規模の大きくなっている「組込み制御ソフトウエア」の開発では、やはり、仮想的な試作に相当する「シミュレーション」を使って要求仕様の精度を向上し、後工程でのやり直しを減らして、開発効率を上げることを、重要な工夫の一つとして、取組んでいるでしょう。そこでは、自動コード生成機能のある制御設計ツールの活用意欲は高いはずです。
4)詳細なソフトウェア設計書して、ソフトコードを作成する開発プロセスを遵守している
採用しているソフトウェア開発プロセス上で、ソフトコード作成前に、必ず詳細なソフトウェア設計書の作成が、義務化されている場合もあるでしょう。そこでは、自動コード生成機能のある制御設計ツールの適用に、前向きになれるはずです。設計書を作成しないといけないのなら、制御設計ツールの「ブロック線図」を設計書とみなして、「シミュレーション」で事前に動作確認したものを、自動でコード生成できれば、作業効率を向上できるからです。実際のソフト開発では、要求仕様やソフト設計が変更されることも良くあるでしょう。ソフト設計書の「ブロック線図」を修正することで、そこから生成するソフトコードも修正できるため、変更が多い場合でも、トレーサビリティー(変更追跡性)を容易に確保できます。これは、ソフト設計書が必要な品質の高いソフト開発ではとても有利です。一方で、ソフト設計書を作成しない開発プロセスを採用している場合は、従来の開発には無い、制御設計ツールで「ブロック線図」を作成する作業が追加されてしまいます。そこでは、「ブロック線図」を作成するよりも、ソフトコードを作成した方が早いということで、自動コード生成機能のある制御設計ツールの適用は進まないでしょう。ただ、規模がある程度大きく、複雑なソフトウェアの場合は、ソフトコードだけで、設計書を作成しない場合は、設計が適切かどうかの判断、不具合原因の調査、そして、仕様変更への対応、再利用性など、様々な問題が発生した場合は、元々開発が難しい「組込み制御ソフトウェア」の開発の難易度を、さらに上げることになるでしょう。このことから、設計書を作成することが当たり前となっている開発現場も多いでしょう。繰り返しになりますが、そこでは、制御設計ツールの「ブロック線図」をソフト設計書として利用し、そこから自動コード生成して利用する開発手法は、開発効率を上げる画期的なアイデアとして採用されやすいでしょう。
5)「組込み制御ソフトウエア」を効率良く開発するためのソフト設計上の工夫がある
既に前の章で説明していますが、「組込み制御ソフトウエア」を効率良く開発するために、リアルタイム実行中に、グローバル変数を使うなどの、外からデータを見える化する工夫、見える化したデータを、固定周期でモニターして、再現性の確認ができるような計測の仕組みを作る工夫、PC上で動作確認できるアプリ部分と、組込みハードを使って動作確認するハード周辺部分を機能分割して、不具合発見の容易化をする工夫などが、あらかじめソフトウェアの構造的な仕組みとして、ソフト設計に反映されることが重要です。シミュレーションを実施できる「ブロック線図」を使う制御設計ツールでは、上手く使いこなしているユーザの意見が反映されているため、これら工夫を実現しやすくなっています。理想は、PC上でしっかり動作評価できる、シミュレーションの動きに合わせて、組込みシステムを実現することです。
上記のような工夫があると、「ブロック線図」から自動コード生成する制御設計ツールを利用して、開発効率を向上する成果が出しやすいことが分かってきました。また、実際の効果を出せた部分は、以下でした。
① シミュレーションで動作確認したことによる要求仕様ミスの削減
② 動作確認した「ブロック線図」を扱うことによる要求仕様の解釈ミスの削減
③「ブロック線図」をソフト設計書に流用できたこと
④ ソフトコードのテストに「ブロック線図」のシミュレーションデータを流用できたこと
コード生成機能は、実現したい処理内容に依存して、実行速度やメモリサイズが期待を満たさない場合もあり、必ずしも、全ての自動生成したコードが利用できるわけではありません。また、要求仕様の「ブロック線図」を、コード生成可能なソフト設計書とするために、編集作業が発生することがあります。そのため、自動でコード生成すること自体は、作業効率向上に、大きく貢献している訳ではありません。ただ、上記①から④による、開発効率向上の効果は大きいことから、「ブロック線図」から自動コード生成する制御設計ツール導入は正解という判断をしています。

