SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

テスト自動化研究会の『システムテスト自動化 標準ガイド』を15倍あなたの力にする話

『システムテスト自動化 標準ガイド』の第2章 ~ 原書の刊行当時から変わったこと/変わらないことと補完すべきこと

テスト自動化研究会の『システムテスト自動化 標準ガイド』を15倍あなたの力にする話 第2回


第2章の補完「手動テストスクリプトからの組み替え」

 第2章には、手動テストスクリプトから自動テストスクリプトへの組み替えを解説しているところがあります。しかし、経験のない、あるいは少ないテストエンジニアがこれに取り組むと、思わぬ落とし穴にはまり込む場合があります。ここでは、筆者の経験からあらかじめ知っておきたい知識を、第2章の補完説明としていくつか紹介します。

テストケース間の依存関係の排除

 第2章の「2.2.3 詳細な手動テストスクリプト」では、詳細な手動テストスクリプトがあれば、自動化は容易であると述べられています。しかし、筆者の経験上、詳細な手順で書かれた手動テストスクリプトであっても、そのまま自動化するのは正しい選択とはいえません[1]。それは、次表に示す方針とそれをもたらす理由があるためです。

テスト
スクリプト
方針 理由
手動テスト
スクリプト
・テストケース間に依存関係を持たせる ・テスト実行が遅い
・事前条件(事前状態)を作るのに時間がかかる
・途中に障害があっても柔軟な対応(別のテストケースを実行し事前状態を作る、SQLで直接データを挿入する、別のテストケースを実施するなど)ができる
自動テスト
スクリプト
・テストケース間は個別に完結する
・事前条件は個別もしくは共有で設定する
・テスト実行が速い
・ドミノ効果により後続のテストがまとめて失敗することが続くと自動実行の効果が減る
・依存関係を持たせた場合の柔軟なリカバリーを作り込むのが難しい
・障害はテストスイートの実行後に調査するためにテストケースが個別に完結しているほうが調査しやすい

 テストケース間の依存関係を図に示すと以下のようになります。

「手動テストスクリプト」におけるテストケース間の依存関係
「手動テストスクリプト」におけるテストケース間の依存関係

 

「自動テストスクリプト」におけるテストケース間の依存関係
「自動テストスクリプト」におけるテストケース間の依存関係

 

 手動テストスクリプトがすでにあり、それを元にテスト自動化を図るときには、その手動テストスクリプトを組み替える必要があります。

[1] 手動テストスクリプトをそのまま自動化しようとする問題は、『システムテスト自動化 標準ガイド』の原著者らがまとめている「Test Automation Patterns」(テスト自動化パターン)の1つ「SORCERER'S APPRENTICE SYNDROME」でまとめられています。

テストスイートの単位

 テストケース間の依存関係によって手動テストスクリプトと自動テストスクリプトはテストケースをまとめるテストスイートの単位も異なります。手動テストスクリプトから自動テストスクリプトへのテストスイートの組み替えは、共通の事前条件を持つテストケースを抽出してテストスイートとしてまとめることによって実施します。

テスト
スクリプト
方針
手動テスト
スクリプト
・前のテストケースの事後状態を次のテストケースの事前状態としてテストケースをまとめる
・上位の分類は何らかの別のテスト観点(エンティティ、業務、業務の実施部門など)を使う
・エンティティ(商品や契約など)のCRUD
・業務のライフサイクル(サイクルテスト)
・ユーザーが一般に実行する画面遷移
自動テスト
スクリプト
・共通の事前条件を持つテストケースをまとめる ・エンティティが作成されたときに、エンティティに変更を加える
・ある時間やタイミングになったとき
・ある画面にいるとき

事前条件の設定

 手動テストスクリプトでは主に前のテストケースの実行結果が次のテストケースの事前条件(事前状態)となるために、特別な考慮は不要ですが、自動テストスクリプトはテストケースもしくはテストスイート単位で事前状態を個別に作成しますので、複数の設定方法があります。以下に2つの方法を示します[2]

方針 メリット デメリット
テスト対象と同一のレイヤーを利用する ・テスト対象のレイヤーのインターフェースのみを理解していれば作成できる ・テスト対象がGUI経由の場合、GUIの変更で事前状態の設定(以降、Fixture)が失敗する可能性がある
・Fixtureの実行が下のレイヤーで実装する場合に比べて遅く、更にテスト対象がGUIの経由の場合、非同期処理など安定させるのが難しい
テスト対象より下のレイヤーを利用する ・Fixtureの実行が同一レイヤーを使う場合より速い
・ビジネスドメインにもよるが、ユーザーインターフェースより、APIやデータベースのスキーマのほうが変更頻度が低い場合が多いため、アプリケーションの変更によりFixtureが失敗する可能性が減る
・下のレイヤーに対して自動テストが存在する場合、部品として再利用できる
・テスト対象の下のレイヤーのインターフェースの理解が必要である
・下のレイヤーのチームとテスト自動化チームが連携してない場合、下のレイヤーのインターフェース変更によってFixtureが失敗する可能性がある

[2] 事前状態の設定も含めて、自動テストスクリプトがどのようにテスト対象と通信するべきかは、Test Automation Patternsの1つ「RIGHT INTERACTION LEVEL」で解説されています。

おわりに

 第2章の大部分は、現状でも有用な示唆を含んでいます。本稿ではテスト自動化を専任とする筆者の経験から、第2章に現在の実務レベルで必要な知識を補完しました。筆者の印象では、本書を補完する経験則は前述のTest Automation Patternsとして体系化されつつあります。本書を読んだ後、実務で課題にぶち当たったときには、Test Automation Patternsサイトの「Test Automation Issues」で解決策を探してみるとよいでしょう。

 本稿をきっかけに『システムテスト自動化 標準ガイド』やTest Automation Patternsに興味を持ってくだされば幸いです。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
テスト自動化研究会の『システムテスト自動化 標準ガイド』を15倍あなたの力にする話連載記事一覧

もっと読む

この記事の著者

太田 健一郎(オオタ ケンイチロウ)

大手SIerおよびWebサービス会社にてツール開発、自動テスト、自動ビルドの導入などを経験。現在、株式会社SHIFTにてCIやテスト自動化の導入、コンサルティング、トレーニングを担当。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/8594 2015/07/23 22:17

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー