テスト容易性(Testability)にはシステムで明示的な設計が必要だ,とSiemens AGのPeter Zimmerer氏はいう。テストアーキテクトはテスト容易性を推進すると同時に,優れた設計とエンジニアリングプラクティスを採用するためにシステムアーキテクトや設計者,テスタともコラボレートしなければならない。
氏はQA&Test 2014カンファレンスで,組み込みソフトウェアにおけるテスト容易性の設計についてのチュートリアルを実施した。
氏はテスト容易性を,“システムが効果的かつ効率的にテスト可能な度合い”と定義する。効果性がテストの深さと質を向上することが必要である一方で,効率性はコストや労力,テスト時間の削減に関連している。テスト容易性とは検証の容易さであり,ソフトウェアが効果的にテスト可能なレベルなのだ。ソフトウェア開発の初期段階とメンテナンスにおいて役割を果たすものであり,修正したソフトウェアを検証可能にする能力のひとつと捉えることができる。
テスト容易性に影響する主要因として,氏は次のようなものを挙げる。
- コントロール(可能性): システムの(分離された状態で)コントロール性が高ければ,テストはより上質で,より自動化および最適化されたものになる。
- 可視性と可観察性: テスト可能なものとは,目に見えるものに他ならない。テスト対象となるシステムの入力と出力,状態,内部,エラー条件,リソース使用率,その他の二次作用を観察する能力。
多くの場合において,テスト容易性は自動化よりも優先して投資すべき対象だ,と氏はいう。自動化はまた,テスト容易性に依存している。システムがテスト容易な設計をされていれば,テスト自動化のための労力も少なくなるからだ。
テスト容易化設計とはなぜ重要なのか,それに投資するようにマネージャを説得するにはどうすればよいだろう?重要なメリットのひとつは,ソフトウェア開発サイクル全体におけるデバッグ,診断,保守のためのコスト,労力,時間を削減できることだ。氏はStefan Jungmayr氏がドイツのテストコミュニティで実施した,"Testbarkeitsfaktoren und Testaufwand: Auswertung dreier Umfragen" という調査に言及し,テスト容易性によって開発予算全体を10%削減可能であるという,プレゼンテーション "testbarkeitsanforderungen an die Software" からの結論のひとつを引き合いに出している。
テスト容易化設計はアーキテクト,開発者,テスタが共同で行うべきものだ。アーキテクトにとってテスト容易化設計は受け入れやすいものだ,と氏は言う。テスト容易性は設計基準のひとつであり,その要件はテスタが定義すべきものだ。アジャイルのテスト容易性はチーム全体の責任ではあるが,テスト容易性を推進するテストアーキテクトのような役割の人を決めておくとよいだろう。
プレゼンテーションの中で氏は,テスト容易性設計のためのチェックリストを公開した。チームないしプロジェクトがテスト容易性にどれほど取り組めているか,改善には何をすればよいか,といったことの議論に利用可能だ。
- 適切なテストアーキテクチャと優れた設計方針
- 明確に定義された制御点および監視点を通じた,テスト対象システムとのインタラクション
- テスト目的(セットアップ,コンフィギュレーション,シミュレーション,リカバリ)のための(スクリプト操作可能な)インターフェースやポート,フック,モック,インターセプタの追加
- コーディングガイドラインと命名規則
- ソフトウェア内部の品質(アーキテクチャ,コード)
- 組み込みセルフテスト(BIST)と組み込みテスト(BIT)
- 整合性チェック (アサーション,契約による設計,逸脱)
- ログとトレース(AOP,カウンタ,モニタ,プローブ,プロファイル)
- 診断およびダンプユーティリティ,ブラックボックス(内部状態,リソース使用率,ランタイム異常)
- テストファースト思考(xTDD): これはテスト可能か?
テスト容易化設計を行うには,優れた設計手法が必要だ。アーキテクトの役割が重要である理由がここにある,と氏はいう。よいアジャイルを行うというのは,つまりアジャイルのエンジニアリングプラクティスを行うということである。氏が言及したのは,よりよいソフトウェアのための原則とプラクティスを紹介した "Clean Code Developer Wiki” だ。
テスト容易化設計のための戦略には,要件とテスト,アーキテクチャをカバーすることが求められる。テスト容易性は一貫性を持って定義され,すべての関係者がそれを熟知し,リスクベースのテスト戦略で処理され,非機能要件とバランスの取れたものであることが必要だ。テスト容易性の詳細な指定と設計時の埋め込みには,テスト容易性ガイドラインを使用することができる。テスト容易性に基準を設けるには,マイルストンと品質ゲートが必要となる。さらには静的と動的テストの両方に対して,試験と調査を行わなければならない。
"テスト容易性を無視することは,技術的負債を増やすことに他なりません" と述べて,氏は自身のチュートリアルを結んでいる。