組み込み型自動車ソフトウェアというダイナミックな分野において、高い品質、安全性、そしてパフォーマンスの確保は妥協できない要素です。特に、ソフトウェア定義車両(SDV)といったトピックを考慮すると、その重要性はさらに増しています。
当社は20年以上にわたり、自動車メーカー(OEM)やサプライヤーが開発プロセスの初期段階からテストを開始できるよう支援してきました。近年では、これを「シフトレフトテスト」と呼ぶようになっています。
最近、インド・チェンナイで開催された当社の「BTCソフトウェア品質サミット」にて、「早く失敗し、安く失敗する(Fail early, fail cheap)」というタイトルのプレゼンテーションを行いました。
この記事では、なぜ早期のテストが重要なのか、その利点、そしてソフトウェアのテストを後回しにすることの落とし穴について探っていきます。
シフトレフトテストとは何か?
シフトレフトテストとは、ソフトウェア開発ライフサイクルの中で、できるだけ早い段階からテスト活動を組み込む実践手法です。
不具合の修正がより高コストかつ複雑になりがちな後工程にテストを集中させるのではなく、シフトレフトは開発の最初から継続的にテストを行うことを推奨します。
早期テストの利点
開発プロセスの初期段階で不具合を発見・修正することは、統合中や統合後に問題へ対処するよりも、はるかにコストがかかりません。バグを早期に発見すればするほど、プロジェクト全体への影響は小さくなり、時間的・金銭的コストの両方を削減できます。
多くの企業に対する知見を持つ大手のコンサルティング会社やエンジニアリング企業も、このテーマを取り上げています。たとえば、この記事などがその一例です。
どのようにしてシフトレフトを実現するのか?
早期テストとは何を意味するのかを見ていきましょう。
多くの場合、テストはHIL(Hardware-in-the-Loop)上で直接行われますが、これにはいくつかの課題があります。このような状況では、統合されたシステムのインターフェースしか観察できないため、バグの特定が困難です。さらに、バグを修正するにはV字モデル全体をさかのぼる必要があり、これが複雑さを増します。
最初の「シフトレフト」のステップは、デジタルツイン(統合されたSIL:Software-in-the-Loop)です。
このスケーラブルなソリューションは、まだハードウェアが関与していないため、より安価で効率的です。しかし、この段階でもシステムはすでに統合されているため、デバッグは依然として複雑です。
より良いアプローチは、ユニットテストの段階でSILに直接移行することです。
この段階では、個々のユニットはまだ統合されておらず、個別にテストできます。これにより、シミュレーションやエラー解析がはるかに迅速になり、時間とコストの節約につながります。その後の統合テストでは、統合そのものにのみ集中できます。
ただし、この方法の欠点は、テストを実行する前にコードを「コンパイル可能な状態」にしてコンパイルする必要があることです。
プロジェクトでCコードを直接開発している場合、これ以上左に移動することはできません。
モデルベース開発(MBD)の場合、テストはMIL(Model-in-the-Loop)に移行すべきです。
なぜなら、コードはモデルから生成され、最終的にはバグもモデル内で修正する必要があるからです。この方法の利点は、コード生成の設定がまだ存在しない段階でも、テスターがモデルを機能的に非常に早い段階でテストできることです。
MBDで実現できる最後の「シフトレフト」ステップは、テスト駆動開発(TDD)です。
この手法では、開発中に開発者がモデル内で直接テストを行います。テストケースは開発の最初の段階から定義できるため、開発の取り組みが期待通りに動作しているかを最初から検証できます。
開発中に継続的にテストを行うことで、開発者とテスターは迅速なフィードバックを受け取り、重大な問題をできるだけ早く発見することができます。
このような継続的なチェックは、コードの品質を向上させるだけでなく、最終製品の堅牢性と信頼性を確保することにもつながります。これは、ユニットが環境の変化にも強くなければならないソフトウェア定義車両(SDV)の新しい世界において、必要不可欠なことです。
また、欠陥を早期に発見できれば、手戻り作業も最小限に抑えられます。
この効率的なプロセスにより、開発サイクルは短縮され、市場投入までの時間も早まります。とはいえ、現実として、ソフトウェア開発のプロセス自体もそれに合わせて適応させる必要があります。私たちは過去において対応が遅すぎましたが、市場からのプレッシャーによって、そして今もなお、より迅速な対応が求められています。
MIL(Model-in-the-Loop)での早期テストに関する詳細は、以下のブログ記事でご覧いただけます。
私達の前進を妨げるものは何か?
「中国スピード」に到達すべきだという声をよく耳にします。しかし私たちは、過去の経験に基づいたパターンにとらわれています。そこでは、開発サイクルを早めすぎると、未検出の不具合が増えるという教訓がありました。私たちはこうした思い込みを捨て、品質を維持しながらスピードを上げる方法を見つけなければなりません。競合他社は待ってくれません。
これには、企業文化の変革が必要です。そして「文化は変化を朝食にしてしまう(Culture eats change for breakfast)」という言葉があるように、この変革は経営層から現場の従業員に至るまで、関係者全員が内面から納得し、支援する必要があります。
早期テストは、開発者、テスター、その他の関係者の間における協働の文化を促進し、むしろそれを必要とします。つまり、部門間の壁(サイロ)を取り払うことです。テストが最初から統合されていれば、全員が品質に対して責任を共有することになり、コミュニケーションが改善され、より一体感のある開発プロセスが実現します。
さらに、これにより、複数のコンポーネントに不具合が広がってしまった後でようやく発見されるという問題も回避できます。そうした場合、デバッグは非常に複雑になります。
誤解しないでください。上位レベルでのテストが不要になるわけではありません。ただし、ソフトウェアユニットがすでに十分にテストされていれば、上位レベルでのテストはより迅速で、複雑さも少なく、容易になるはずです。
また、統合テストやシステムテストの段階でユニットに起因する不具合が見つかった場合、結局はユニットに戻って修正し、その修正が他に影響を与えていないかを確認するために、すべてのステップを繰り返す必要があります。さらに悪いのは、不具合が見逃され、製品が出荷された後に発覚することです。
シフトレフトテストアプローチを導入するにはどうすればよいか
1.開発ライフサイクル全体にテストを統合する:
ユニットテスト、統合テスト、コードレビューを開発の初期段階から取り入れ、このアプローチを支援するツールを開発プロセスに導入しましょう。
2.自動テストを活用する:
テスト駆動開発(TDD)アプローチを確立することで、初期段階からの自動化が可能になり、リグレッション(既存機能の不具合)の早期発見や、テストカバレッジ維持に必要な手作業の削減につながります。
3.継続的インテグレーション/デリバリー(CI/CD)を導入する:
堅牢なCI/CDパイプラインを構築することで、すべてのコード変更が自動的にテストされ、即座にフィードバックが得られ、自動テストステップが自動的に実行されます。
4.マインドセットを変える:
開発者、テスター、その他の関係者の間で密接な協力を促し、品質が全員の責任であるという意識を持たせましょう。これはV字モデルの左側(要件定義や設計)も含めて取り組む必要があります。実装やテストの質は、要件の質に依存するのです。
5.トレーニングに投資する:
チームが早期テストを受け入れられるよう、必要なツールと知識を提供しましょう。顧客とのミーティングでは、経験豊富なユーザーでさえ、私たちのテストツールに備わっているすべての機能を知らないことがよくあります。長年使いたいと思っていた機能が、実はすでに存在していたということもあるのです。
結論
自動車の組み込みソフトウェアにおいて、早期テストは単なるベストプラクティスではなく、「必要不可欠なもの」です。
シフトレフトアプローチを採用することは、不具合を早期に発見し、コストを削減し、より信頼性が高く安全な製品を提供することを意味します。テストを後回しにすると、複雑さの増加、コストの上昇、安全性の低下につながります。一方で、開発のあらゆる段階にテストを統合することで、市場投入までの時間を短縮し、よりアジャイルで協調的なワークフローを実現できます。
ソフトウェア定義車両(SDV)の開発といった新たな課題は、従来の考え方を見直す必要があることを示しています。
過去とは異なり、ソフトウェアコンポーネントははるかに長いライフサイクルと変更期間にさらされます。今日の顧客は、購入後も定期的なソフトウェアアップデートを期待しており、新機能や改善の恩恵を受けたいと考えています。
自動車システムがますます複雑化する中で、シフトレフト戦略は、品質と安全性の高い基準を維持するための重要な要素であり続けます。
早期テストを優先することで、企業はリスクを軽減するだけでなく、イノベーションを推進し、競争の激しい市場で一歩先を行くことができるのです。