仕事で、自動化されたCucumberのシナリオを確認する仕事をしている。
数百あるシナリオを、地道に1行ずつ見ていると、そのスクリプトを作成するチームのリードから、
「数百のシナリオをある程度マージしたい。そうすることで効率的になると思うから」
と言われた。
ここで私は、ちょっと立ち止まって考えてみた。そのことを今日の日記に書きたいと思う。
考えたというのは、手動テストを自動化していくよりも、最初から自動化することに主眼を置いたテストシナリオを用意する方が良いのではないか、ということ。
まだ私の中で、自動化スクリプト(Selenium + Cucumber)の良し悪しを隅々まで理解していないので、なかなか上手いことは言えないのが心苦しいのだけれど、以下のような違いがあると考えた。
- 手動テスト:表示された画面やデータベースに保存された内容を見て、開発されたものが正しいかどうかを確認する。人の目で確認する。
- 自動テスト:画面表示テストだったら、画面を構成するものが正しいPATHとかで置かれているか、またデータベースの中にあるものだったら、適切なタイミングでストアされているかを確認する。機械で確認する。
やろうとしていることは同じように思えるのだけれど、人の目と、機械で確認するという違いは割と大きいように思う。
人の目だと、見逃す、勘違いする可能性がある。
一方、機械(コンピュータ)で確認すると、見逃しや勘違いすることはないだろう。ただ、きちんと期待結果を入力しておかないと、どれが正しいのか分からなくなってしまう。ここさえきちんとすれば、自動化の方が(きちんとメンテナンスされていれば)いつでもできるという点、間違いがないという点で、こっちをちゃんとやっておきましょう、というふうに考えることができるのではないか。
で、そうなると、手動テスト(人の目)をベースとして作ったテストシナリオよりも、自動テスト(機械の目)をベースとして作ったテストシナリオの方が、作りやすいなどあったりするのではないだろうか、と。
いや、テストシナリオの中にあるテストケースの、テストで確認したいポイントは同じでも良いのかもしれない。順を追って進んでいくテストステップのところで、わざわざ画面に表示されている「ボタンを押す」という行為を機械に押させるようなことはしなくても良いのではないか。
「ボタンを押した状態」を意図的に作り出せれば、その方がSelenium+Cucumberとしてやりやすいのであれば、メリットが多かったりしないだろうか。
私に自動化スクリプト作りのスキルがないから、これは仮説でしかなく、ここにスキルが加われば、仮説を検証することができるのになぁ。
Still Day 1、ここが始まりで、コツコツ勉強していけばいいんだろうけども。やろっかな。