こんにちは、さっしーです。

先週末は仕事のあと社内のボルダリング部に参加してきました。

初めての時はものの5分でギブアップしたのですが、
みんなにフォローしてもらいながら少し難易度が上のルートも登れるようになってきました。

登り方を考えるパズル的な面白さ、体を動かして登る清々しさ、
ルートを初めて登れた時の達成感など、
翌日の激しい筋肉痛のつらさを差し引いても非常に面白いスポーツだと思います。

 

テストってどんなイメージですか?

 

olivaの事業のひとつにシステム開発事業がありますが、
システムを開発する上で欠かせない工程のひとつが「テスト」です。

 

システムのテストと聞いてどういうイメージが思い浮かぶでしょうか?

 

面倒くさい、つまらない、裏方の仕事・・・など、
マイナスのイメージを持っている方もいるかも知れません。

私はテストは確かに大変だけど非常に刺激的でクリエイティブに富んだ仕事だと思います。

 

私がテストについて考える時にいつも何となくイメージするのは、
有名な4枚カード問題(ウェイソン選択課題)です。

片面にアルファベット、裏面に数字が書かれている4枚のカードが上のように置かれていた場合、
「母音のカードの裏面は必ず偶数である」
というルールを満たしていることを確かめるためにめくる必要があるカードはどれか?

といった内容の問題です。

システムのテストを考える上では
この問題を考えるのと同じような思考が必要なのではないかと思います。

 

テストってどんなこと考えるんですか?

 

例えば、信号機のシステムで、
『交差点の信号機が青の時は交差側の信号機は赤、赤の時は交差側の信号機は青である』
という仕様があったとします。

 

この仕様通りにシステムが作られていることをテストする場合、
何も考えずにテストしてしまうと、

・青の時に交差側が赤になっている
・赤の時に交差側が青になっている

という2点のみを確認して問題ないと判断してしまうかもしれませんが、
それだけでは十分なテストとは言えません。

 

十分なテストをするためには以下のようなことを考える必要があります。

 

1.  思い込みを排除して仕様を正確に理解する

 

「交差点の信号機」という言葉から、どんな信号機を思い浮かべましたか?

車両用の信号機?
歩行者用の信号機?

日本の信号機?
外国の信号機?

本物の信号機?
おもちゃの信号機?

上記の仕様には信号機の種類については何も触れていません。

どのような信号機なのか正確に理解しておかないと、
思わぬ勘違いをしたまま意味のないテストをしてしまうかもしれません。

 

2.  漏れなくダブりなくパターンを洗い出す

 

仕様には信号機の色は青と赤しか書いてありませんでした。

でも、それだけ確認すれば十分と言えるでしょうか?
青と赤以外のパターンはないでしょうか?

パターンを過不足なく洗い出してテストしなければ不十分なテストになってしまいます。

また、車両用と歩行者用ではパターンが異なるというように、
1がしっかりできていないと間違ったパターンを洗い出してしまうことになってしまいます。

 

そもそも1や2についてはすべて仕様として定義されているべき内容ですが、
仕様が完璧であるとは限りません。
仕様の間違いや漏れを発見するのもテストの重要な役割です。

 

3.  洗い出したパターンを取捨選択する

 

4枚カード問題では4枚すべてをめくれば確実に確認することができますが、
めくる必要のないカードもめくることになるため正解とは言えません。

テストにおいても同様で、
洗い出したパターンの中にはテストする必要のないパターンも含まれていることが多いです。

必要のないパータンをテストすることは時間とお金の無駄ですので極力省く必要があります。
不要なパターンを省くというのもテストをする上では重要です。

 

最後に

 

少し視点を変えてみると、
テスト駆動開発など開発手法としての取り組みや、
テスト環境の構築からデータの作成、テストの実施・結果の確認までを含めた自動化など、
テストに対するアプローチでシステム開発のやり方そのものを変えていくことができます。
そういうことを考えてみるのも面白いと思います。

 

また、例に挙げた信号機のように人命に関わるシステムも数多くあります。
テストは人の命を守る仕事といっても過言ではありません。

 

私もその気持ちを胸に、
「ひたすらテストケース書くのしんどいわー」とか思わず、
想像力を働かせて明日もテストに取り組んでいきたいと思います。