「実装実施時要検討事項」について自動テストを題材にして考えてみた #テスコン

はじめに

先日、テスト設計コンテストのチュートリアルに参加してきました。

aster.or.jp

aster.or.jp

チュートリアルが素晴らしい内容でした!

上記のリンク先に、チュートリアルの資料や当時のつぶやきもあるので見てもらえればと思います。

にしさんのツイートのおさらい

OPENクラスの講師をしていたにしさんが、テスト設計コンテストのあとにもツイートをしていましたので、その部分だけまとめました。

togetter.com

上記のまとめの中にある「実装実施時要検討事項」について、E2Eの自動テストを題材に再考してみます。

特にここらへんのツイートが深く関わります。

E2Eの自動テストで考える

今回はFacebookのログイン画面を題材にしました。

f:id:nihonbuson:20181029200226p:plain

テストケースを考えてみる

この画面を使ってE2Eの自動テストを作成する場合、どんなテストが考えられるでしょう?

例えば、ある開発者が以下のようなテストケースを考えたとします。

  • ログインIDとパスワードの組み合わせが実在するユーザーの場合
  • ログインIDとパスワードの組み合わせが実在しないユーザーの場合
  • ログインIDとパスワードの組み合わせが退会したユーザーの場合
  • ログインIDに何も入れなかった場合
  • パスワードに何も入れなかった場合

他にも色々と考えられると思います。

テストケースの作成意図を考えてみる

ただし、この画面についてE2Eテストで行う場合、どんな意図でテストを行うのでしょうか?

私ならば、

「ログイン成功ならばマイページへ、ログイン失敗ならば失敗画面へ、というようなページの出し分けを行いたい!」

と考えます。

この場合、テスト観点と実装実施時要検討事項は以下のようになります。

  • テスト観点…結果ページの出し分け
  • 実装実施時要検討事項…ログインIDとパスワードの組み合わせ

最初に挙げたテストケースについて見つめ直してみる

一方で、最初にあげたテストケースをもう一度みてみましょう。

  • ログインIDとパスワードの組み合わせが実在するユーザーの場合
  • ログインIDとパスワードの組み合わせが実在しないユーザーの場合
  • ログインIDとパスワードの組み合わせが退会したユーザーの場合
  • ログインIDに何も入れなかった場合
  • パスワードに何も入れなかった場合

この場合、先ほどは実装実施時要検討事項に入れていた「ログインIDとパスワードの組み合わせ」がテスト観点のように入ってしまっています。

これが、実装実施時要検討事項とテスト観点を混同した例です。*1

実装実施時要検討事項とテスト観点を分けた時のメリット

実装実施時要検討事項とテスト観点を分けると物事を整理して考えることができるため、色々なメリットがあると思います。

テスト観点を確認するタイミングを議論することができる

先ほどの題材では「ログインIDとパスワードの組み合わせ」を実装実施時要検討事項にしました。

すると、この「ログインIDとパスワードの組み合わせ」はどのタイミングでテスト観点として確認しよう?という議論にできます。

私の場合、これはログインIDとパスワードに関するロジック時点で確認すべきだと思っています。*2

つまり、以下のスライド内で重視すべきと言っている「多段式エラープルーフ」についても整理して考えることができるのです!

speakerdeck.com

しかも、この議論は基本設計時(プロダクトコードを実装する前)に既に議論できるはずです!

仕様・設計の変更にも追随できる

先ほど題材にしたFacebookログイン画面ですが、以下のように、ログインIDとパスワードで1つ1つ入力するページが異なるデザインに変わったとします。*3

f:id:nihonbuson:20181029201039p:plain

ログインIDを入力して「次へ」を押すと…

f:id:nihonbuson:20181029200926p:plain

パスワード入力画面に遷移する

この場合、テストも変更することになります。

そのとき、「ログインIDとパスワードの組み合わせ」をあたかもテスト観点に入れていた場合は困ったことになります。

別ページになってしまったことで、「組み合わせ」の概念が変わってしまい、網羅性も変わってしまうため混乱するかもしれません。

一方、テスト観点を「結果ページの出し分け」としていた場合、多少は結果ページの導線が増えますが網羅性の混乱は少ないでしょう。

おわりに

今回は実装実施時要検討事項とテスト観点の使い分けを、よくあるE2E自動テストを題材に考えてみました。

私は以前から、「テスト自動化にはテスト設計が重要」ということを常々思っていましたが、うまく説明できずにいました。

そこで、この「実装実施時要検討事項」という単語を用いることで整理して考えることができるようになったかなと感じました。

*1:と思ってます

*2:スパゲッティコードになっていてロジック部分で確認できない可能性もあります

*3:Yahooのログイン画面から拝借しました