うさぎ組

kyon_mm with software

このエントリーをはてなブックマークに追加

ドメイン知識がないとテストできないということを無視されているという悲しい現実 #SWTestAdvent

はじめに

このエントリはソフトウェアテストAdventCalendar2014の10日目の記事です。

http://connpass.com/event/4544/

テスト対象について知らないとテストできない

ドメイン知識という言葉はあまり使いたくないのですが、なるべく多くの人に伝わるかなぁということで使いました。つまりは、テスト対象に関する知識。くらいでよいです。それは業務かもしれないし、ソフトウェアのつくられ方かもしれません。

そういう意味では、テスティングというものはプログラミングより広範な知識を必要とされるイメージがあります。本来的にはどちらにおいても同じような範囲かとも思いますが、まぁそれはソフトウェア開発においてロールというものをどう捉えるかだと思いますし、今回のメインテーマとは違うのでおいておきます。

なんにせよ、テスト対象について知らないとテストすることは難しいわけです。これが仮にテスト仕様書にそってテスト実施するだけの役割であって、しかもそのテスト仕様書が懇切丁寧に書かれていれば別だと思います。

テキストエディタのテスト

例えばテキストエディタを開発しているとして、そのシステムテストを誰かに任せるとしましょう。いろんな操作をしてもらうわけです。その中で、ドキュメント化するにしろしないにしろ、その人はどんなテストケースを考えるのでしょうか?

ソフトウェアを入力と出力としての状態遷移のようにして考えた場合、どのような入力を与えるでしょうか?またどのような出力を想定するでしょうか?

ここでテストを任せた人が仮に「ファイルとフォルダの区別がつかない人」だとしましょう。おそらくその人が考えるテストには「文字コード」「ファイルパス」を気にするようなテストケースはありません。偶然にして発見されることはあるかもしれません。

テストに必要な知識

現状のテキストエディタにおいて少なくとも「文字コード」「ファイルパス」は必須の概念です。ですが、知らないことはテストできません。

テキストエディタの例は非常に簡単ですが、実際にソフトウェア開発の現場で行なわれていることにおいては、様々なことを知らなければいけません。使っているミドルウェアのデッドロックが発生するパターンは知っているでしょうか?フレームワークとサーバーそれぞれのログ出力は安全でしょうか?ユーザーに与えられている振舞いのおおくを理解しているでしょうか?

先の例で言えば、テストケースを考えるというのは多くの場合において、どのような入力と出力を考えられるですが、それを妥当な品質にまで網羅させるには、相応の知識がないと発見できません。

もちろん知識から列挙するだけではなく、何らかの類推などで発見することはあります。私が言いたいのは「素人には素人のテストしかできない」ということです。それが求められているとき以外には全く意味がありません。

まとめ

新人にやらせることがないからと言ってテストをやらせるくらいなら、CleanCodeの写経でもさせてあげるほうがよい。

Clean Code アジャイルソフトウェア達人の技