ページナビゲーション
- ページの先頭へ
大規模化、複雑化する自動車等の組込ソフトウェア
急速に大規模化する自動車のソフトウェア開発 継続的インテグレーションが現場を救う?
――自動車開発の高機能・高性能化に伴い、ソフトウェア開発の規模が拡大する中で、開発現場にはどのような変化が求められているのでしょうか。
森本 組込ソフトウェア開発と言えば、従来は規模が小さく、数人から数十人程度のチームで行うのが一般的でした。しかし、近年の自動車は情報家電のように豊富な機能をソフトウェアで実装するようになり、コード量も大幅に増加しました。ADASや自動運転のような機能は、特にプログラムが複雑になりがちで、開発メンバーが数百人規模になるということも珍しくありません。
コード量と開発メンバーの増加は、バグの増加につながります。バグフィックスのための変更でまた別のバグが発生することもあります。それらが重なって、大規模開発では修正に要するコストや時間だけでも膨大なものになりかねません。
ADASや自動運転などのソフトウェアは、安全性や信頼性の観点からも高い品質が求められるため、一般的なカバレッジテストではなく品質向上のための入出力値のテストが欠かせません。ですので、納期と品質を両立させるためには、より効率的にテストや修正を行えるようプロセスやツールを工夫する必要があります。
自動車以外のソフトウェア開発現場で近年広く用いられているのが、継続的インテグレーション(CI:Continuous Integration)という手法です。CIは様々な要素を含む幅広い概念ですが、特にテスト・修正プロセスに関しては、こまめなテストを繰り返し行う「回帰テスト」がポイントと言えます。
自動車のソフトウェア開発では頻繁に仕様が変更されがちですが、従来のような修正を重ねた後に最後の工程でテストを行う流れだと、大量のバグがまとまって発見されることもあり、手戻り量も大きくなってしまいます。

それに対し、コードを修正するたびに単体テストを行えば、結果的にバグフィックスの作業量を減らすことができるのです。もちろん、こうした頻繁なテストをいちいち手動で実施していては、かえって手間が増えてしまいます。回帰テストを実践するうえでは、必要なタイミングで自動的にテストを行えるよう、適切なツールを活用することが重要です。
多くの業界で回帰テストのニーズが拡大 自動車分野にも回帰テスト実施の兆しが見え始める
――自動車のソフトウェア、あるいは組込ソフトウェア業界全般では、どれくらい回帰テストが採用されているのでしょうか。
森本 海外での自動車開発では回帰テストを行っている企業は多くあります。まだアジア地域では回帰テストを実施しているところは少数ですが、中国や韓国の自動車OEMでは自社開発のソフトウェアに対して回帰テストを導入し始めている会社もあります。
一方で、自動車以外の多くの分野では回帰テストを行うことが当たり前のようになってきました。最近では自動車ソフトウェア開発の大規模化に伴い、より多くの人材が必要となり、情報家電など他分野で経験を積んだソフトウェア開発者が自動車分野に移ってくる例も増えています。こうした人材を通じて、回帰テストを実施しようという風潮が自動車業界にも広まってきています。
当社にも、家電や産業用機器など自動車以外の分野で経験を積んだエンジニアが所属しています。例えばデジタルカメラの開発現場では、金曜日にビルドを行い、月曜日には最新ビルドをもとに開発を進める、といったプロセスで開発しているとのことです。ソース量が多くなるとビルドにも時間を要しますから、作業をしていない時間帯にビルドをして静的テストまで自動で済ませておく手法は、非常に効率的だと言えます。
Jenkinsによる回帰テスト自動化は一般的 VectorCASTもプラグインでJenkinsと容易に連携可能
――回帰テストを実践するうえで適切なツール活用が重要との話がありましたが、具体的にどのようなツールが効果的なのでしょうか。
森本 テストを自動化するツールとしてはオープンソースソフトウェアの「Jenkins」があります。組込系に限らずソフトウェア開発やシステム開発の現場において、CIやそれに関連した継続的デリバリ(CD:Continuous Delivery)、DevOpsなどを実践するうえで、広く用いられているツールです。
Jenkinsは、あらかじめ設定した条件やタイミングに応じて外部ツールを実行します。例えば、「コードを修正したタイミング」や「毎週金曜日」といった条件でテストツールを実行するよう設定しておけば、回帰テストを自動化できるというわけです。
ただし、Jenkinsによる回帰テストでは、テスト対象やテスト条件などのパラメーターを引き渡したり、結果をJenkinsに返すなど、ツール間の連携も必要です。Jenkinsに対応していないツールを使う場合は、その連携プログラムを自作しなければなりません。現状、Jenkinsは、自動車ソフトウェアの開発現場ではあまり普及していませんので、テストツールについても自動車分野向けではJenkinsへの対応も限られます。
そんな中、ベクターの単体テスト自動化ツール「VectorCAST(ベクターキャスト)」ではJenkinsに対応しています。VectorCAST用Jenkinsプラグインを提供しているだけでなく、関連するアドバンストマニュアルもリリースしています。これらを活用することで、JenkinsとVectorCASTを連携させた「回帰テスト自動化」を容易に実現できるようになります。
連携も簡単で、プラグインにジョブを登録・設定するだけ。簡単な設定であれば、1~2日で問題なく使えるようになるはずです。このプラグインはVectorCASTのあらゆる機能をJenkinsジョブとして登録できるように作っており、テスト結果をメールするといった処理にも対応できます。
最近行ったプラグインのバージョンアップでは、新たにJenkinsパイプラインにも対応しました。Jenkinsパイプラインは、スクリプトに沿った順次実行や並列処理を行うもので、ステージの進捗を可視化する機能もあり、より複雑な処理を自動化できます。
――Jenkinsを用いた回帰テストでVectorCASTを使うと、どのようなメリットがあるでしょうか。

森本 VectorCASTをJenkinsで自動化している実践例の中では、やはりVectorCASTの最大の特徴でもある「変更ベーステスト機能」が、特によく使われています。コードの変更範囲に応じてVectorCASTが自動的に必要な影響範囲を検出してテストを実行することで、テスト実行時間を大幅に短縮できます。Jenkinsによる自動化とVectorCASTの変更ベーステストの組み合わせが、修正とテストを繰り返すCIにおいて非常に大きな効果を発揮するのです。
先に説明したように、そもそも回帰テストはトータルでのバグフィックス作業量を減らすための取り組みですから、Jenkins+VectorCASTは相乗的に効果を高める組み合わせだと言えるでしょう。
テスト自動化の将来
――今後ベクターでは、回帰テスト自動化をどのように推進していくお考えでしょうか。
森本 カメラやプリンターといった開発を行っている企業では10年前からJenkinsが導入されています。ビルドを行うだけでなく、実機環境にデプロイし、システムテストを自動化することまで行っており、自動化が非常に進んでいると感じます。例えば操作画面全てのボタンが自動で操作され、システムの動作のテスト結果が自動で送信されるようなシステムを、Jenkinsと連携して使用するケースもあります。自動車開発でも同様の自動テストが将来的には導入されると思います。
ベクターではクラウド上で動作をする「CANoe(キャヌー)」といった製品も発売予定で、ソフトウェア上でのテストに対してフォーカスしていくことを考えています。また、CANoeをJenkinsと連携して使用するような事例も、ヨーロッパでは出てきています。
回帰テストを自動化することのメリットは、リリースのスピードを上げること、仕様変更に対して迅速に対応できること、正確なテストを行うこと、信頼性のあるテストレポートを作成することなど多くあります。導入する際は非常にコストと時間が掛かりますが、将来のために、自動化を検討することは重要ではないかと思います。
自動車業界だけでなく 様々な分野に適用可能なVectorCAST
――VectorCASTは“自動車向け”という印象が強いツールですが、自動車以外の分野では、どういった利用例があるでしょうか。
森本 欧米などでは、自動車以外の分野でVectorCASTを採用している例がかなりあります。広く活用されているのが情報通信機器分野であり、当社では「ビジネス系」と呼んでいる領域です。
まだ少数ではありますが日本でも、信頼性や安全性を最重視する医療や鉄道などでの利用例もあります。市場には、回帰テストや単体テストを恒常的に行っていない分野もまだまだありますが、組込ソフトウェア全般の傾向を考えると将来的に必要になってくる可能性も高いため、こういった分野でのVectorCAST導入も増えてくるでしょう。