ソフトウェアの品質を学びまくる2.0

旧ブログからゆっくり移行中です。http://blog.livedoor.jp/prjmng/

TABOK粗読による自動化の座学 - カテゴリー9「自動化の対象」

 スキルカテゴリー9は「Automation Objects」。画面上の部品を、テストスクリプトにどう認識させるかについての話です。この部品のことを「オブジェクト」と呼んでいます。

オブジェクトの特定

 画面上のオブジェクトを特定する方法。一番クラシックなのは、「座標」ですね。6.2の記事でも少し触れた、「アナログな」アプローチです。画面のデザインが変わると即座にオブジェクトを見失うこの儚い方法は、カテ7の品質特性のうち、信頼性に欠けます。
 そこで、画面オブジェクトがもつプロパティを利用して、オブジェクトを一意に特定することを考えます。プロパティには、オブジェクトのクラス・形・キャプションなど、色々あります。9.1では、オブジェクトを特定するためのプロパティ(群)の定め方に関するノウハウを紹介しています。
 たとえば、アプリケーションを使用するうえで激しく値が変わるようなプロパティは選ぶべきではないし、単なる英数字の組み合わせぽいIDより、ニモニックな名前の方がよい、など。

オブジェクトマップ

 さあ、オブジェクトを特定するためのプロパティが決まったと。たとえば、保存を実行するためのボタンは、
class = 「button」
text = 「保存」
と指定すれば一意に特定できるとわかったとする。
 で、しばらく調子よく特定していたある日、開発チームから「『保存』じゃなくて『save』っていうテキストに変えるわ。英語の方がかっこいいから」と告げられたらどうしましょう。上の方法でオブジェクトを特定していたテストスクリプトを、泣きながら1つ1つ修正しますか?
 外出ししましょう。
 オブジェクトを特定するための情報は、1箇所に集めておく。各テストスクリプトは、オブジェクトの特定に必要な情報をそこからもらう。それが、オブジェクトマップです。
 プロパティの設計が変わっても、ここだけをメンテすればよい。考え方は、自動テストフレームワークの「データ駆動」と同じですね。

ダイナミックなオブジェクト

 画面オブジェクトの特定にtextを使って、それをオブジェクトマップに書いたとする。でもそのtextの値が、たとえばログインユーザの名前に応じて変わるとしたらどうでしょう。
 TABOKにある例だと、「ヨハネ」というユーザだと画面に「John Profile」というリンクが出てくるような場合です。ペテロだと「Peter Profile」になってしまいます。泣きながらユーザごとにスクリプト書きますか?
 このようなケースを解決する手段を2つ紹介しています。
 1つは、ユーザ名を変数としてオブジェクトマップに埋め込むこと。もう1つは、正規表現を使うこと。
 なおこの後、2ページくらいまるまる、正規表現の基本文法の説明・・・。TABOKって、何かいきなり初心に立ち返りますよね。