バックナンバーはこちら

today&tomorrow

Technology Update

  • T&T HOME
  • Technology Update
  • Virtualizer Development Kitを使用したソフトウェアの継続的インテグレーションとテスト自動化

2018 Mar. vol.109

Virtualizer Development Kitを使用したソフトウェアの継続的インテグレーションとテスト自動化~ Jenkinsのケース・スタディ

故障注入機能

VDKには、スクリプト実行レイヤを使用して故障を注入する機能が標準で用意されています。このレイヤを使用して、ユーザー(対話形式の場合)またはテスト(自動化の場合)からメモリー内容、レジスタ、信号など、 内部でモデル化したすべてのハードウェア要素にアクセスでき、これを利用してハードウェアまたはロードした組込みソフトウェアの任意の場所に故障を注入できます。 VDKを利用した故障注入の最大の利点は、他の手法のように組込みソフトウェアを変更する必要がない(完全に非介入)という点です。更に、このスクリプト実行レイヤでは複雑なシナリオや実際のハードウェアでは再現が難しいコーナー・ケースの定義も完全に制御できます。 これは、複数のトリガーを連結して複雑な状況を記述して行います。トリガーは、時間、ハードウェア、およびソフトウェア・イベントに基づいて動作させることができます。 またVDKは完全に確定的であり、ハードウェアを使用した場合とは異なり、故障シナリオを繰り返し実行することや、組込みソフトウェアに変更を加えるたびにリグレッション・テストを実行することが可能です。 VDKを使用した故障注入に関する詳細は、故障モード影響解析(FMEA)に関する以前のホワイトペーパー[3]をご参照ください。

コード・カバレッジ機能

VDKには、CIおよびテストの観点からもう1つの重要な機能としてコード・カバレッジがあります。コード・カバレッジは、ソース・コード全体に対してどの程度までテストが完了したかを測定する重要な指標の1つです。 コード・カバレッジが高いほどソフトウェアにバグが含まれる可能性は小さくなります。VDKのオン・ターゲット・コード・カバレッジ計測ソリューションは、ソフトウェアのアダプテーションもインストルメンテーションも必要ありません。 実際のハードウェアを使用した場合とは異なり、VDKではハードウェア・リソースを一切使用せずにコード・カバレッジを計測できます。これらの機能によってカバレッジ計測の品質が改善するため、VDKはテスト・スイートの継続的改善に向けた完璧なツールとなります。 VDKはステートメントおよび関数カバレッジ、コール・カバレッジ、および分岐カバレッジなどのカバレッジ尺度を幅広くサポートしています。VDKには、複数のテストを並列に実行し、その結果を収集して1つにまとめることのできるXMLベースのフローが用意されています。 このフローは、たとえばCoberturaなどのプラグインを使用してJenkinsなどのCIシステムにも組み込むことができます[4]

ケース・スタディ:VDKをJenkinsおよびLAVAに統合

ここでは、ARMv8 Cortex-Aマルチクラスタ・リファレンス・プラットフォームへの組込みLinuxソフトウェアのポーティングをケース・スタディとして紹介します。このプロセスの概要、および使用したツールを図3に示します。 Linuxカーネルおよびデバイス・ドライバのソース・コードをソース・バージョン管理システムのSubversion[5]に追加します。CIシステムとしてJenkinsを使用し、ソフトウェア・テストのための自動化フレームワークとしてLAVAを使用します。 LAVAはターゲット・システムとしてVDKを使用します。VDKはARMv8 Cortex-Aマルチクラスタ・プラットフォームをモデル化したものです。

画像

図3:VDKをJenkinsおよびLAVAに統合

[3] "Is Your Automotive Software Robust Enough for Hardware Faults? Part 1: Fault Mode and Effect Analysis Using Virtual Prototyping, Physical Modeling and Simulation",
https://www.synopsys.com/cgi-bin/proto/pdfdla/pdfr1.cgi?file=automotive_software_p1_wp.pdf

[4]Cobertura, https://wiki.jenkins-ci.org/display/JENKINS/Cobertura+Plugin

[5] Subversion: エンタープライズ・クラスの集中型バージョン管理システム。https://subversion.apache.org/

Jenkinsの設定

Jenkins[6]は最も代表的なオープンソースCIツールです。JenkinsはJavaで記述されており、デフォルトでJavaベースのプロジェクトを幅広くサポートしています。 また、Jenkinsの拡張プラグインを使用するとJava以外の言語で記述されたプロジェクトをサポートすることや、さまざまな種類のバージョン管理システム/データベース・システムに統合することも可能です。

今回のケース・スタディでは、新規Jenkinsプロジェクト(アイテム)を「フリースタイルのプロジェクト」として作成します。 次に、この新規Jenkinsアイテムで組込みLinuxソースへのSubversionリポジトリ・リンクを使用するように設定します(図4)。次に、リポジトリでコミット・アクションが発生するたびにソフトウェアを再ビルドするようにJenkinsプロジェクトを設定します。 ここでは、プロジェクトの「Build Triggers」セクションで「Poll SCM」を選択し、Subversionリポジトリに「post-commit」フックを追加します。 このように設定すると、ソフトウェア開発者がメイン・リポジトリに対して変更をフィードバックするたびにJenkinsが新規ビルドをトリガーします。

画像

図4:Jenkinsのソース・コード管理に関する設定

カテゴリートップ