システムテストフェーズで単体テストレベルを実行する?!
テストフェーズとテストレベル
昨日受けたソフトウェアテストの資格試験で面白い問題があった。
縦軸にテストフェーズ、横軸にテストレベルをとってテスト計画を作れ
という趣旨のもの。
システムテストフェーズで単体テストレベルのテストを実行する?!
みたいなw
継続的システムテストのコンセプトが一般的にまだまだ理解されにくく、その原因は
- Myersの言う「テストフェーズ」[1]
- Beizerのいう「テストのスコープ・観点(テストレベル)」[2]
あたりを混同しているエンジニアが多いからなのかなとちょうど考えていたので、この問題は僕の心にクリティカルヒットした。このブログエントリでは、継続的システムテストをテストフェーズとテストレベルから整理し直してみる。
継続的システムストのテストフェーズとテストレベル
継続的システムテストのテストフェーズ
継続的システムテストでは、
・開発テストフェーズ (開発者の行うテスト)
・システムテストフェーズ (テストエンジニアの行うVerification)
・ユーザーテストフェーズ (プロダクトオーナーなどが行うValidation)
の3つのテストフェーズがある事を前提としている。
ここでのテストフェーズはMyersが言う通り、テスト活動の時間的順序を表しているわけではなく、工程の実施時期が重なっても構わない[1]。例えば自動化が進み1日に何回もデプロイとテストしているような環境であれば、これらのフェーズはそのほとんどが重なり平行に実施されるようになる。
フェーズがほとんど重なるのであれば、フェーズを分ける事のメリットは何だろう?という疑問が湧くと思う。フェーズを分ける事のメリットは、それぞれのテストフェーズによってもたらされる価値が明確になる事だ。この3つのテストフェーズは、ソフトウェア開発ライフサイクル内の実施される時期にもとづいて、それぞれ異なる価値をプロジェクトに提供する。
開発テストフェーズは開発者に「素早く実装可能な開発環境」という価値をもたらす。ユーザーテストフェーズは「ユーザーに価値のある正しい機能が提供されているか?」を確認する。
継続的システムテストが主眼を置くシステムテストフェーズの価値は3種類の受け取り手が存在する。
- 1つ目は開発者。継続的にシステムテストを実行し素早くテストからのフィードバックをする事で、開発者はバグの修正を短縮したりと開発のアジリティが向上する[3]。
- 2つ目はプロジェクトマネージャー。継続的にテストを実行しそのメトリクスをモニタリングする事でプロジェクトの進捗状況が見える化される[4]。
- 3つ目はユーザーテストの担当者。ユーザーテストフェーズの準備ができている事をシステムフェーズが保証する事で、ユーザーテスト環境の安定性が向上する。
継続的システムテストのテストレベル
継続的システムテストでは、各テストフェーズがそれぞれ適切なテストレベルを持っている。ここでいうテストレベルはBeizerの言う「テストのスコープや観点」だ[2]。なので、例えば
システムテストフェーズの中で
の両方を実施する
- 「単体テスト」や「インターフェースの結合テスト」といった低レベルのテスト
- 一般的にテストレベルの文脈の中でシステムテストと呼ばれる「パフォーマンステスト」「信頼性テスト」「運用性テスト」
という、言葉的には少し奇妙な事態が発生する。
しかし、この一見すると少し奇妙な現象がもたらすメリットは大きい。システムテストフェーズでも、単体テストレベルからシステムテストレベルまでのテストレベルを網羅する事で、
- テストの網羅性を担保する事
- 柔軟にテストレベルを変更したり、テスト設計のリファクタリングを行うことででテスト活動を効率化する事
が可能になる[5]。
アジャイルテストと従来のソフトウェアテスト
勘のいい人はお気づきだと思うけれども、僕は継続的システムテストは継続的デリバリーと同様にアジャイルテスト四象限と自動化にのっとってテストを整理し直したコンセプトだと考えている[6]。
アジャイルテスト四象限では「誰に」「どんな」価値をテストが提供するのかを考える[7]。次にそれらの価値の提供を「いつ」「どのスコープのテスト」によって実現するのかを考える。
この『「誰に」「どんな」価値を提供するのか』の部分が『V&Vとテストフェーズ』だし、『「いつ」「どのスコープのテスト」』の部分が『「テストフェーズ」「テストレベル」』だ。
これらのコンセプトや考え方は別にウォーターフォールやテスト自動化を前提としていない[8][9]。もちろんウォーターフォール開発でも実現可能だが、継続的デリバリーやアジャイルテストにおいても実現可能だ。
継続的システムテストやアジャイルテスト四象限は従来のテストの考え方を積極的に取り入れている。突然変異的に生まれたものではなく、むしろソフトウェアテストの発展の歴史の中で正統的に出てきたものだ。
お知らせ
継続的システムテストについて2015年9/18(金)にソフトウェア品質シンポジウムでお話しします。ご興味のある方は是非ご参加ください。
参考文献
- [1] ソフトウェア・テストの技法第2版 - グレンフォード・J.マイアーズ - 4764903296 : 本
- [2] ソフトウェアテスト技法: ボーリス バイザー, Boris Beizer, 小野間 彰, 山浦 恒央: 本
- [3] 継続的システムテスト - Test Automation
- [4] ソフトウェア品質シンポジウム2014参加レポート④ 継続的システムテストの実現とこれから - Test Automation
- [5] テストの期待値を分解すると言う事 ~Web Service QA Meeting Vol.1の感想~ #webqa - Test Automation
- [6] 楽天ブックス: 継続的デリバリー - 信頼できるソフトウェアリリースのためのビルド・テス - ジェズ・ハンブル - 4048707876 : 本
- [7] Agile Test Planning with Agile Test Quadrants
- [8] Guidelines for Verifying and Validating Software Requirements and Design Specifications
- [9] システムテスト自動化 標準ガイド - MarkFewster - 4798139211 : 本