テストの自動化やプログラムの自動生成などにかんして、いろいろな意見が出ているが、そもそも、どういう状態になるとできるのかというのを、明確に書いていないとおもう。
このような世の中だと、自動化ツールを作る人にも(一般人が過大な期待を寄せてしまうので)迷惑だと思うので、今日は「テストにしろ、プログラムにしろ、自動化できるための条件」をまとめてみたいと思う。
■自動化できる条件(1)出力内容が決まっていること
あたりまえだけど、自動化するものを造るって言うことはシステムなので、つくる対象物、出力が決まっていないとできない。
プログラムの場合、ソースプログラムなので明確なんだけど、テストの自動化の場合、キーボードやマウスイベントを記述して、実行するタイプ(MacのAppleScriptのSystemEventsみたいなやつ)のものなのか、それとも、単にバッチプログラムを書くのか?の問題がある。
前者の場合、そういうものがなければできないし、後者の場合、GUIはできない。ただし、Webのサーバーの確認のさい、クライアントからさーバーにHTTPコマンドを送って自動的に実行したいなら、クライアント側から、テスト用ファイルを書き、それを読み込んで、HTTPをプログラムで発生させればよい。
逆に、サーバーへの内容であれば、サーバー側で、クライアントから受けた内容をダンプすればいいんだけどね。
■2.出力に対する入力内容が、どこかに記述してあること。
たとえば、画面であったら、画面のイメージがどこかにドキュメントとしてあるとか、
DBアクセスであれば、あらかじめ入れておかなければいけないデータがシナリオなどにあらかじめ書いてあるとかということになる。
これがないと、当然作れない。
■3.入力から出力までの手順が明確であること
たとば、画面項目があって、テストを自動化したいとした場合、入力項目については、境界地チェックとSQLインジェクション、URLエンコーディングと漢字、外字について確認し、境界地については、。。。と、そのテスト内容がきまっていないと自動化できない。
決まってない、分からない、考えてない内容は、自動化できない。
■4.具体的に、テストの自動化で言うと
なので、テストの自動化で言うと、
シナリオに
・あらかじめ、DBにどのような値をセットしておくか
・バッチについての動きの内容
・GUIについて、どのように操作して、どうなるか
が書いてあれば、その言葉とプログラムを対応させることにより
・DBへのデータ挿入のためのSQLとそのSQLを動かすためのバッチなど
・バッチ処理部分、および、クライアントからGUIを入れた結果をサーバーへ送る場合、
それをバッチにしたもの
・(キーボードのイベントやマウスのイベントが発生できれば)GUI部分
となり、とくにGUIに関しては、
・画面仕様書に項目の属性(テキスト、コンボボックス)がかいてあり、
・その属性に応じて、どのようなテストをするか決まっていて
・協会地などに関して、画面仕様書に指定があれば、
(キーボードのイベントやマウスのイベントが発生できれば)自動化可能である。
ただし、回帰テストに関しては、
一回テストしたときのデータをはじめの状態に戻せて、
そのテストしたときのイベントを全部保存しておいて、
その順番に再度自動的に、動かせる場合は、
仕様書などがそろっていなくても、その「再度自動的に、動かせる」ものをつかって、自動的に再テストができる。
こんなんまとめときましたけど、どうでしょう。。