『継続的デリバリー』 第8章 学習メモ

自動受入テストの概観

1.はじめに

継続的デリバリーにおける、自動受入テストについての調査記録です。
継続的デリバリーの中での、自動受入テストについての概観を記載します。
『継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化』の第8章に対応します。

2.概要・目的

自動受入テストは、ドメインの観点でシステムをテスト・表現する。
ドメインの要求に対してサービスを検証し、またリグレッションから保護する。

3.対応概要

自動受入テストの観点は以下の通り。

保守しやすい受入テストスイートのために、受入テストをレイヤ化する。
実装レイヤでは、ドメインの言語を使用し、アプリケーションとのやりとりの詳細を含まずAPIやUIを参照しない。

また、GUIに対するテストの回避のために、APIをテストハーネスから呼び出す。

4.対応詳細

(1)受入テストの作成

受入テストの作成の観点は以下の通り。

  • アナリスト・テスターの役割
  • イテレーティブな分析プロセスにおけるメンバの役割
  • 受け入れ基準の表現
  • DSLの役割・ふるまい

(2)アプリケーションドライバレイヤの実装

アプリケーションドライバレイヤの実装の観点は以下の通り。

  • DSLによる、抽象化・エイリアスの使用・再利用
  • シンプルなケースから作成
  • 外部/内部DSLともに長短がある
  • ウィンドウドライバパターンで抽象レイヤを導入し、テストとGUI疎結合にする

(3)受入テストの実装

受入テストの実装の観点は以下の通り。

  • 状態を扱う
    • 最小限のデータ
    • 可能ならアトミック
    • アカウントなどでスコープを分離
    • 状態へのガードと状態の相対的表現
  • テスト用のバックドア(特権アクセス)を作らない
  • 非同期処理を同期的に検証
  • 外部システムへのテストダブルの使用とあわせて、外部システムとのインターフェースを表すインタラクションテストを実施
    • 統合ポイントへの小粒のテストスイートを作成。完全でなくてよく、実行タイミングを分ける。

(4)受入テストステージ

受入テストステージの観点は以下の通り。

  • 受入テストの記録
  • ステージに失敗したときはデプロイ不可
  • 受入テストをグリーンに保つ
  • 受入テスト前にデプロイメントテスト・スモークテストを実施し、受入テストの前提を検証する。このテストが失敗したとき、ステージをすぐに失敗させる。

(5)受入テストのパフォーマンス

受入テストテストのパフォーマンス改善のための観点は以下の通り。

  • テストヘルパークラスを分離
  • 高価なリソースを共有
  • 並列テスト・コンピュートグリッドを使用
  • 受入テストのためのクラウドコンピューティング

5.影響・作用

受入テストによって、デリバリーチームはユーザがシステムに求めるふるまいに集中できる。
自動受入テストをユーザの視点から見たシステムのふるまいを保証するテストとして用いることで、リグレッションによる問題への重大な防御策となる。
受け入れ基準が駆動するテストを採用することで、以下を達成できる。

  • ソフトウェアが目的にかなうことを保証
  • リグレッションへの防御
  • 自動リグレッションテストを包括的に実施し、品質を大幅に改善
  • 欠陥を素早く検出・修正
  • テスターの労力を仕様の開発・探索的テストやユーザテストの実行に移せる
  • サイクルタイムを減少させ、継続的な開発を可能にする

6.おわりに

以上が、継続的デリバリーの中での、自動受入テストについての概観です。

7.参考文献

『継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化』 第8章 自動受け入れテスト