バックナンバーはこちら

today&tomorrow

Technology Update

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

2018 Mar. vol.109

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

シノプシス システム・レベル・ソリューション・グループ テクニカル・マーケティング・マネージャー Victor Reyes

概要

現在の組込みシステム開発では、ほぼ間違いなくソフトウェアの開発とテストが最も時間のかかる重要なタスクとなっています。これは、組込み機器に搭載されるソフトウェアの量が増え続けていること、そしてソフトウェアが安全とセキュリティに密接に関係していることに理由があります。 ソフトウェアの統合とテストを適切に行わないと、プロジェクトの最終盤にバグが見つかって再設計を余儀なくされたり、法的責任を問われたり、市場への参入が遅れたりするなどの形で多大な損害を招く可能性があることは、業界全体ではずいぶん前から認識されています。また、ソフトウェアの複雑さに対処するには統合とテストをなるべく早い段階で開始するのが最善の方法であることも業界全体で認識されています。 1つのコード・ベースに対して多くのソフトウェア開発者が同時に作業をする場合、統合の複雑さは想像を絶するものがあります。この問題を解決する手段として、エクストリーム・プログラミングなど先進のソフトウェア工学手法では継続的インテグレーション(CI)の導入が提唱されています。 CIは何らかのテスト自動化(およびビルド・サーバ)と組み合わせて使用することを前提としており、これによってテストを定期的に、またはコミット後に毎回自動で実行できるようにします。CIは一般的な単体テストの手法と相性がよく、最終的な実チップが完成する前にテストを開始できます。 しかしハードウェアに近いソフトウェア・レイヤや、物理デバイスを必要とするようなソフトウェア・レイヤのテストの場合、必要とするすべてのソフトウェア開発者が利用できるようにテスト環境を用意するのは非常に困難です。これは、プロジェクトの終盤にならないと物理的なハードウェア・プロトタイプまたは最終デバイスが完成しないこと、そしてその数量も限られることに主な理由があります。 本稿では、こうしたハードウェアへの依存を解消し、ハードウェアに依存するソフトウェアおよび完全なソフトウェア・スタックの継続的インテグレーションとテストを可能にする上で理想的なテクノロジとなるシミュレーション・ベースのVirtualizer Development Kit(VDK)についてご説明します。 また、Linuxカーネルおよびデバイス・ドライバの開発において最も代表的なCIフレームワークであるJenkins、およびLinux/ARMベースSoCのテスト・フレームワークとして最も代表的なLAVAにVDKを統合する方法をケース・スタディとしてご紹介します。

はじめに

現在の組込みシステム開発では、ほぼ例外なくソフトウェアの開発とテストに最も多くの工数がかかります。これは、組込み機器に搭載されるソフトウェアの量が増え続けていること、安全やセキュリティを含む品質面での要求が厳格化していること、そしてコンセプトから量産までの開発期間が短縮傾向にあることに直接的な理由があります。 こうした中、ソフトウェアの統合とテストを適切かつ効率的に実行していないと、開発の終盤になってバグが見つかることによるプロジェクトの遅れや、製品発売後に不具合が見つかることによる法的責任のコストといった大きなリスクを抱えてしまうことになります。

組込み業界では、なるべく早い段階でソフトウェアのシステム統合とテストを始めることがソフトウェアの複雑さに対処する最善の方法であることが知られています。ソフトウェアのアジャイル開発、単体テスト、継続的インテグレーション(CI)、テスト自動化などの手法は、いずれもソフトウェア開発者が「シフト・レフト」によって早期に作業を開始することによってプロジェクト期間の短縮を図ることを目標にしています。 しかし多くの場合、組込みプロジェクトではターゲット・ハードウェアが完成するまでソフトウェア開発を開始できません。このような依存性があると、早期に統合とテストを行うことのメリットを存分に引き出すことはできません。この問題を緩和する手法の1つにフィジカル・プロトタイピングがあります。この方法なら、ソフトウェア・チームはより早い段階で作業を開始できます。 しかし一般に物理ハードウェアは扱いが面倒で、適用規模の拡張も困難なためCIやテスト自動化といった先進のソフトウェア・エンジニアリング手法にはなじみません。

これに対し、バーチャル・プロトタイピングはデジタル・ハードウェアを模したモデルを使用するシミュレーション・ベースの手法です。バーチャル・プロトタイプは十分な詳細度があるため、実際の物理ハードウェア上で動作するのと同じ組込みソフトウェアを、修正なしにバーチャル・ハードウェア上で実行できます。 CIなど先進のソフトウェア・エンジニアリング手法を導入したソフトウェア・チームのニーズに合わせて拡張できる柔軟性と使い易さを備えているのは、シミュレーションをベースにしたバーチャル・プロトタイピングしかありません。

継続的インテグレーション(CI)の概要と組込みソフトウェア特有の課題

1つのコード・ベースに対して多くのソフトウェア開発者が同時に作業をする場合、統合の複雑さは想像を絶するものがあります。エクストリーム・プログラミングなど先進のソフトウェア工学手法では、この問題を解決する手段としてCIの使用が推奨されています。 CIの利点は、システム統合後のバグを早期に検出し、製品発売直前の混乱を防ぐことにより、プロジェクトのライフサイクル全体で時間とコストを節約することにあります。CIでは次のようなライフサイクルが提唱されています。

  • 変更をソース・バージョン管理システムに定期的にフィードバックする。
  • フィードバックのたびにソフトウェアを自動でビルドする。
  • ビルドのたびにソフトウェアを自動でテストする。
  • すべての開発者に結果をレポートする。

このプロセスをプロジェクトに携わるすべてのソフトウェア開発者が利用できるようにするにはコンピューティング・パワーと自動化が必要なため、ビルドおよびテスト・サーバを使用します。

画像

図1:継続的インテグレーション(CI)のライフサイクル

CIフレームワークでは、ビルドが正常に完了した後、自動的にテストが実行されます。ハードウェアに依存する組込みソフトウェア(デバイス・ドライバなど)や完全な組込みソフトウェア・スタックをテストするには、ソフトウェアをターゲット・システムで実行する必要があります。 このようなケースで物理ハードウェアを使用する場合、実行プラットフォーム以外に特別なハードウェア・デバイス(テストを継続的かつ自動的に実行できるようにターゲット・システムを制御、シミュレート、モニタするためのハードウェア・デバイス)も必要になります。こうした物理ハードウェアはセットアップとメンテナンスの手間がかかる上、プロジェクトに携わるすべてのソフトウェア開発者が利用できるように配備を拡張するのも非常に困難です。

カテゴリートップ