本稿では、「単体テストとは何か?」「なぜ単体テストが必要なのか?」「どのようにすれば効率的に単体テストを行うことができるのか?」といった観点から、近年の組み込み業界の現状や単体テストについての基本的な知識を分かりやすく説明していきます。
本稿では、「単体テストとは何か?」「なぜ単体テストが必要なのか?」「どのようにすれば効率的に単体テストを行うことができるのか?」といった観点から、近年の組み込み業界の現状や単体テストについての基本的な知識を分かりやすく説明していきます。
過去数十年にわたって、ソフトウェアは自動車システムの設計において重要な役割を果たしてきました。自動車は、ハードウェアベースからソフトウェアベースへと変化し続けています。近年のマッキンゼーの調査(※1)によれば、2010年には1車両に対して約1000万行のコード数であったのが、2016年にはその数が15倍に増加して1億5000万行ものコード数に達しているとのことです。
(※1)McKinsey&Company;「Rethinking car software and electronics architecture」;Burkacky、Deichmann、Doll、Knochenhauer;2018年2月(参照:ベクター・ジャパン資料「Following the ISO 26262-6:2018 Guidelines with VectorCAST」;Whitepaper | V1.1 2019-10)
こうした背景のなか、各自動車メーカーはソフトウェアの機能で市場での差別化を図っています。マッキンゼーは、ソフトウェアがどのように自動車の進歩を実現しているかの例として、「コネクティビティ」「自動運転」「電動化」「多様なモビリティ」の4つの言葉を挙げています。これら全ての機能において、ソフトウェアの安全性と品質が大きな役割を果たすことは言うまでもありません。
要件が厳しく、複雑なシステムになっていくなかで、開発コストをどう低減していくかは自動車ソフトウェア開発における重要な課題となっています。また、実装工数が増えることでテスト工数も増えることとなり、より効率的なテスト環境を構築することが求められています。
また、ADAS(先進運転支援システム)や自動運転などの安全に関わる分野では、製造者の責任が問われる可能性があります。テストを行うだけでなく、テストを行ったことをドキュメント化していくことも求められており、信頼性のあるツールを使用することが重要になってきています。
ひと口に「単体テスト」といっても、会社によって意味するところは少しずつ違います。本稿では、関数単位で行うテストを「単体テスト」と定義します。
単体テストでは、ホワイトボックステストやブラックボックステストといったテスト手法を使って、ソフトウェアが要求通りに動作するか、不具合を発生させても異常動作とならないか、コードカバレッジが100%となるか、などをテストします。
単体テストは実機上で行うこともできますが、実機の代わりにテストツールを使用することで、実機に近いシミュレーション環境でテストを行うことができます。この手法については、自動車分野の機能安全規格ISO 26262にも定義されています。
「自動車−機能安全」というタイトルが付いたISO 26262は、自動車に搭載される電気/電子システムの機能安全に関する国際規格として、国際標準化機構(ISO)によって2011年に定められました。ISO 26262規格の第6部には、ソフトウェア開発規格の一部として、動的なソフトウェアテスト・検証に関する推奨事項が記載されています。
推奨される活動には、関数テストなどのユニットレベル・統合レベル・システムレベルのテスト(要件ベースのテストとパーティションテスト)と、構造的カバレッジテストの両方が含まれます。各種認証と、そこに求められるカバレッジレベルの関係は図1のような構成になっています。ここで、図1で使用しているDAL、SIL、ASILとは、以下の指標を表します。
Copyright © ITmedia, Inc. All Rights Reserved.