CheckとTest

最近はテストに関するお仕事が増えてるんだけど,その中で
「CheckとTest」
というワードがしばしば挙がるので,勉強してみることにした.
※例によって間違えている可能性があります.

とりあえずネタ元というか,
この2つのワードを提唱したブログはたぶん以下.
Testing and Checking Refined | James Bach’s Blog

正確に言えば,もっと昔にポストしたテーマを
議論してリファクタリングしたのが上記の記事とのこと.

まず,CheckingとTestingの関係性について触れているのが以下の一文.

Testing encompasses checking (if checking exists at all), whereas checking cannot encompass testing.
"CheckingとはTestingの一部である"

で,Testingの定義は次のように述べられている.

Testing is the process of evaluating a product by learning about it through exploration and experimentation
"Testingとは,探索や実験を通じてプロダクトについて学ぶことにより,そのプロダクトを評価する過程である"

……うーん,モヤッとするので,とりあえず次に行こうか.
Checkingの定義は以下.

Checking is the process of making evaluations by applying algorithmic decision rules to specific observations of a product
"Checkingとは,プロダクトに対する特定の観察結果に対して機械的な判定ルールを適用することにより,そのプロダクトを評価する過程である"

これはピンと来る.
というか,俺が普段「テスト」と呼んでいるものは,ほぼ全てこれだ.
テストケース表の記載を元にプロダクトを操作して,結果を観察し,
判定ルール(期待結果)に基づいて妥当性を「チェック」しているわけだ.

では,翻って,Testingとは結局何なのか.
個人的に一番理解を促したのは,以下の一文かな.

A check is describable; a test might not be (that’s because, unlike a check, a test involves tacit knowledge).
"チェックは記述できるが,テストはそうとは限らない.テストは暗黙知も含むのだから"

暗黙知」とは仰々しいが,
例えばプロダクトを色々操作しているときに
「仕様上は明記されてないけど,常識的に考えておかしいだろこれ」
という事象に遭遇することは,皆さんも割と経験あると思う.
ここで判断の尺度とした
「書いてないけど,常識的に考えて」
がまさに「暗黙知」の一種に相当する.
そうして暗黙知も含めた尺度でプロダクトを評価するのが「Testing」だ.

プロダクトの品質評価の尺度として,確かに仕様書は重要だけど
その枠組みにとらわれず,もっと広い視野で
製品を理解し,評価しましょう,というのが,この
「Checking vs Testing」というテーマに込められた思い,
という理解で良いんじゃないかな.

「どうやってやるの?」は,とても難しいテーマなので今回は触れません.
(Exploratory Testingとか)