探索的テストの力を引き出す段取り、そしてTEXの改善

 これまで色々な立場で、色々なテスト案件を経験してきましたが、その中で一番生産性が高いテストアプローチが、精鋭テストエンジニア達による探索的テストでした。
 適切なタイミングで、必要な環境と必要な人材が揃った探索的テスト部隊がテストを始めると、猛烈な勢いでバグが見つけられ、品質リスクが潰されていきます。
 ただ探索的テストは流動的な要素が大きく、段取りや準備によって、効果やコスト・労力が大きく変動するのにも注意が必要です。
 今回は、そうした探索的テストの効果を引き出すための段取りや準備の経験則をまとめます。

探索的テストの効果を引き出す段取り

テスト環境確保を工夫する/テスト環境に応じてテストアプローチを工夫する

 探索的テストのスコープは、テスト環境の制約で制限されることが経験的に多いです。例えば機材不足や本番環境との差異でテストできないといった状況です。探索的テストのスコープを広げ、その効果を確保するためには、そのテスト環境の制約の緩和が不可欠になります。
 この実現アプローチとしては、早期にテスト分析を行って必要な環境を洗い出し、その環境を適時に使用できるように計画を組むのが重要になります。その手段の一つとして、スクリプトテストと探索的テストを並走させ、前者のテスト分析を早期から実施する形をよく実践します。
 
 また事前に段取りや準備に力を入れても、テスト環境に制約が出る場合があります。その際は、環境制約に応じた探索的テストの段取りの工夫が有効になります。例えば「本番環境の確保が終盤まで難しく、試作環境に頼らなければならない」のような状況なら、各環境ごとにどのようなテストをすべきかの段取りを事前に工夫することで、探索的テストの活躍どころを確保できます。

探索的テストの活躍どころを計画で確保する

 探索的テストにとって適時性は重要です。自分の経験として、早すぎるタイミングで探索的テストを実施してバグを大量に見つけた結果「作りかけだからそのテストは無駄」「バグを報告しないでほしい」などとフィードバックされたことあります。まだ逆に遅すぎるタイミング(最終盤のデバッグフェーズの空き時間でテストするなど)で探索的テストを実施した結果、そこで見つけたバグのデバッグが間に合わず、プロジェクトが遅延するといったこともありました。

 探索的テストの適時性を確保するためには、開発と連携して、適切なタイミングで適切なスコープの探索的テストを実行する期間を確保し、それを明示的に計画に組み込むのが重要になります。

 そこで探索的テスト期間は開発スケジュール中で明示的を設けるのが有効です。スクリプトテストのみを工数確保し、探索的テストは合間時間にやる計画を組むと、探索的テストの工数が流動的になるほか、理解が深まっていない間は遅延時に探索的テストを無駄な作業とみなす圧力が外部からかけられる場面に遭遇しがちです。

必要な知識と能力をチームとして確保する/学習機会を確保しチームを育てる

 探索的テストの効果は属人的であり、テスト対象や、それを取り巻くドメイン、ビジネス、品質についての、属人的な知識や能力に依存します。例えば派生開発なら派生元のプロダクトの知識が重要になります。
 そのため探索的テストを活用しようとすると、相応の知識・能力を持った人材確保が必要です。必要なすべての能力と知識を持つ万能人材を獲得するのが難しい場合は、様々な人を集めて、探索的テストチーム総体として能力・知識を確保していくアプローチをとります。

 さらに、知識・能力ある人の獲得のほか、プロジェクト中に必要な知識・能力を高める機会を設けて、探索的テストチームを育てていく段取りも有効です。
 例えば上流仕様のレビュー機会を設けて仕様理解を深める、プロトタイピングや反復開発で早期からテストして必要な知識・能力のフィードバックを得る、職種をローテーションして設計知識を深める、といった段取りです。そうした段取りを開発計画に組み込むと、探索的テストチームの知識・能力が高まり、探索的テストの効果向上につながります。

正しい方向にテストを方向付けする/フィードバックサイクルを回して方向性を正す

 探索的テストは流動的で、様々な要因で効果が変動します。悪い方向に倒れれば、モンキーテストと変わらなくなり、時間やコストを浪費する場合もあり得ます。
 そのため探索的テストの実施では、適切なテストへの方向付けが求められます。この方向付けには、次の2つがあります:

  • テスト分析を実施してテストチャータを作成する、セッションベースを取り入るといった形で、テスト実施の方向性を明示化する。
  • 実施したテストを評価して、それに基づいて方向を正しい方に改善する改善フィードバックサイクルを回す。テストを繰り返し実施したり、エラーシーディングを行ったりして、欠陥流出や生産性を評価し、自分たちのテストが妥当だったか確認して、問題があれば是正していく。

テストへのニーズ・シーズを継続的に把握する

 探索的テストは様々なテストのニーズやシーズに柔軟に対応できます。テストのニーズ・シーズを的確に把握すると、探索的テストを活躍させるチャンスを増やせます。

 テストのニーズやシーズは、例えば「開発中に特定のコンポーネントの品質が悪いことがわかり、それ起因のトラブルに困っている」「ユーザ要求を正しく認識できなかった可能性が出てきた」「特定のコードから不吉な臭いを感じた」などと、プロジェクト進展中にどんどん生まれ、移り変わっていきます。
 そのため、開発ライフサイクルを通じて、テストのニーズ・シーズを継続的に監視し、逐次探索的テストを投入していくアプローチが有効になります。

効率化のためのテスト技術を蓄積する

 探索的テストの適用可能な領域は広く、それに付随して様々な効率化手段を活用できる余地があります。
 その主な手段に自動化があります。煩雑な作業を自動化して、テストエンジニアの作業をより重要なテストに集中させる、手動で困難な作業を自動化で実現して探索的テストで活用する、といったアプローチは、探索的テストの過程で数多く活用できます。
 そのため、探索的テストを効率化する技術や手段を蓄積し、探索的テストで活用していくアプローチを組むと、技術蓄積に応じて、探索的テストのスコープをより広く、生産性をより高く改善できるようになります。

補足:TEX(Test Engineer eXperience)と探索的テスト

 上記で上げた段取りは、いうなればTEX(テストエンジニア体験:Test Engineer eXperience)を改善するための施策ともいえます。
 探索的テストの効果は、テストエンジニアの能力を発揮させることで生まれます。そのため、テストエンジニアの能力の発揮しやすさ、すなわちTEXは、探索的テストの効果や生産性に直結すると言ってよいと思います。
 そのため上記で上げた段取りの工夫に限らず、TEXを向上させることが、探索的テストの効果向上の基本と言えます。