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

ソフトウェアの品質、ソフトウェアテストなどについて学んだことを記録するブログです。

TABOK粗読による自動化の座学 - カテゴリー4「テスト自動化フレームワーク」(1)

 カテゴリー4: テスト自動化のフレームワークは、自動化に要するコストの話、ユニットテストの自動化の話、機能テストの自動化の「レベル」についての話の3つに分けられます。カテゴリー1に次いで長い章なので、2回に分けて紹介します。

4.1 自動化のスコープ

 自動化のコストを大きく2つに分けると、作成(development)と維持(maintanance)です。
 後述の自動化レベル1、記録/再生(Record & Playback)ツールをもっとも原始的に使うケースでは、作成のコストは最低限ですが、それを本気でメンテし続けようとすると途端に高い壁が立ちはだかります。一方、作成の時点でがんばって作りこめば、メンテのコストは下がる。
 ただ、永遠に再利用するのであれば最高レベルまで作りこむのがいいのでしょうが、利用回数が有限なら、作り込み過ぎがかえってコスト高につながることもあるということで、その均衡点(equilibrium)を見出すことが大事です。
 ここで、突如謎の数式が現れます。

均衡点AF
= An + VN + BN + TN + CN + EN + Ti + P + R

 ここでたとえばAnとは、「組織においてテストされることになるアプリケーションの数」、VNとは「それぞれのアプリケーションがもつことになるバージョンの数」という要素だそうで。ほとんどドレイクの方程式です。そもそも何故足し算?関数だというならわかるけど・・・。
 足し算はともかく、「考慮すべき要素」と考えるといいでしょうね。たとえばTN「テストが維持され続ける期間」とあります。これが短いなら、自動化の御利益は減ってしまうわけです。

4.2.1 ユニットテストのフレームワーク

 なんとなく、TABOKにおいてユニットテストの自動化って扱いが小さい?という気もしてます。全部は読んでいないのでわかりませんが・・・。どうなんでしょ。
 この節では、xUnitのフレームワークの構成について簡単に説明しています。自動テスト実行前に前条件をセットする test fixtures、実際のテスト実行部分である test body、動作を検証する assertion。
 test body が一般にどう訳されているか知らないため、全部原語のまま。どなたか教えてください。「テストボディ」?「テスト本体」?

4.2.2 自動化レベル1

 レベル1は、リニアな(linear)フレームワークです。
 「リニア」とは、どういう意味なのでしょう。以下のような記述があります。

each automated test is treated simply as an extension of its manual counterpart.

  おそらくは、1つのスクリプトが1つのテストの自動化にしか使えないという様子が、グラフでは線形になるためなのでしょうね。

 このレベル1自動化は概ね、記録/再生ツールで実現されます。単純に、ユーザの動作をなぞるだけ。再利用性がほとんどなく、自動化のフレームワークというのも怪しいものです。

レベル1の長所

 まず、作成が早い。Excelのマクロのイメージで、記録ボタンを押してから停止ボタンを押すまでの、ユーザの操作が記録される。これで終わり。再生ボタンで、記録した操作が再現されます。
 また、学習コストが低い。上と同じ話ですね。ボタンを押すだけです。ただしこの動作記録の実態はスクリプト。メンテをするのであれば、文法を学んで動作を理解する必要があります。

レベル1の短所

 記録/再生ツールは「analytical」でないため、期待した動作にならないことがあります。
 ここでいう「 analytical でない」とは、たとえば「座標(100,200)を左クリックする」と記録されているからといって、記録されたスクリプトはそこにボタンがあるかどうかなど知っちゃいないということです。何かの拍子にウィンドウのサイズが変わってレイアウトがずれたら、もうそこにはボタンはないかも知れないけど、ツールは愚直に座標(100,200)をクリックするでしょう。また、状況に応じて動作を変えたり、タイミングを測ったりなんてこともしません。
 コードが読みづらいという難点もあります。「座標(100,200)をクリックする」と書かれても、そのコードが本来何を意図しているかを他の人が理解することは難しい。画面を付きあわせしながら読まざるを得ない。長期のメンテはほとんど不可能でしょう。
 ということで、次回はもっと洗練された、レベル2とレベル3の紹介をします。そろそろ、単語や用語の訳し方にゆれが生じてきますが、許してほしいです。