2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

本記事は、テスト作成における技法の話ではなく、
それら以前の根本的な理念や心得の話です。
要するに、テストの作成や設計、そのための技法・技術を
知る前に知っておいた方が良いであろう話です。

「テスト作成は底知れない、難しいものだ」と思ってる方は、
テスト作成に対しての心理的ハードルが下がってくれると嬉しいです。

テストとは「0から創る」ではなく「100から削る」もの

テスト作成における根幹の話からです。

テストを「0から創る」のは難しい

勝手な想像ですが、多くの人はテスト作成を
「何もないところから創り上げる」と考えていると想像しています。

例えるなら、広大な森から必要な木々を探して拾い上げて、家を創るような。
目の前にあるシステムから、必要な因子水準を探してきてExcel上に広げて、どう組み合わせようか悩んでいる。

それは非常に難しいです。
何故ならば、すべてはバラバラであり、
小さな一因子を相互に正しく組み上げなければなりません。
それも、実施したいテストに合わせて都度0から考えなければなりません。
そして、完成するまで全体像が見えず、
どこまで大きくなるか、大きくしてよいかの想像ができず、着地点を見失います。

「全数テストは不可能」

少し話は逸れますが「全数テストは不可能」という話を聞いたことはありますか?
これは「ソフトウェアテストの7原則」のうちの1つです。

その理由は細かいのを除くと、

  • すべての因子水準を掛け合わせるとケース数が膨大になり、莫大なコストがかかる
  • 技術的に難しい/不可能なケースが含まれる

の2点に概ね集約されます。

「じゃあその理由を払拭すればできるじゃないか」という話は一旦置いといて、
この「全数テストは不可能」は正しく言い直すと
「全数テストの作成は概ねできるが実施は不可能」です。

テスト設計や作成というものは、
「全数テストの実施は不可能だから、可能な数に絞る」という行為です。

話が見えてきたでしょうか?

テストとは「100から削る」もの

つまりテスト作成とは、
「森から木々を拾い集めて家を建てる」ような創作ではなく、
「大きな岩から余分な個所を削り取る」ような、彫刻的な創作です。

「どこまで大きくしよう/なっちゃうかな」ではありません。
そもそも全数テストという最大サイズが存在しており、
そこから小さくしていくことがテスト作成です。

  • 巨大な岩山(全数テスト)から、
    石材をある程度の大きさに切り出す(全数テストの一部を切り出す)
  • 切り出してきた石材から不要な部分を削って彫刻を創る(テストを作る)

という大きく2つの手順があります。
それぞれについて引き続き話していきます。

「テストの目的」を忘れない

作り始めるとついつい忘れる「テストの目的」

「このテストの目的をはっきりしよう」ということはよく注意すると思います。
何を確認するのか、保証するのか、そういったことが決まらないとテスト作成は始まりません。

しかし、作り始めていると、本来のテスト目的を忘れてしまい、
「テストを作ること」が目的になる場合があります。
人はついつい忘れる生き物なのでやりがちですが、
これをすると、重要なものを忘れてしまったり、
逆に不要なものを付け足してしまったりします。

すると、最終的にテストの作り直しになったり、
不要なテストを大量に実施してしまうなど、
工数を無駄にしてしまいます。

「テストの目的」とは「全数テストから切り出してくる」こと

テストの目的を決めるということは、
全数テストから切り出してくることです。

特定機能についてなら、その周辺領域を。
脆弱性についてなら、セキュリティ関連を。
全数テストから切り出してくる場所が大きく異なります。

切り出してくるべき場所を決めて、
正しく切り出しましょう。

そして、決めたテスト目的のために切り出してきたものは、
その目的のためだけに使うようにしましょう。

「テストの目的」を忘れないこと、そしてブレないこと

例えば、特定機能のテストのために切り出した後、
「セキュリティもやりたいな」などとそこからテストを削っていくと、
上手くいきません。
上述の通り、切り出してきた中には全部が含まれていないからです。

だからといってそこに付け足すと、
歪な彫刻になってしまったり、
美しくないものになったりしてしまいます。
歪や美しくないというのは、
必要なテストが抜けていたり、
実行し辛いという形で表れてきます。

「テストの目的」を忘れないようにするのも必要ですが、
「当初の目的からブレないこと」も重要です。
他の目的を思いついたら、新たに切り出してきましょう。
それが綺麗な彫刻、もとい綺麗なテストを作るのに必要です。

「テスト設計技法」は、創る技法ではなく削る技法

「テスト設計技法」の用途

先述の通り、そして掲題の通り、
「テスト設計技法」は一見して組み立てる創造の技法に見えますが、
その実は削る技法です。

全数テストから、テスト目的を元として大まかに切り出してきたものから、
不要な部分を削り取って、テストを作成します。

分かりやすいもので行けば、

  • 多く存在するデータ入力値を数個に削る「同値分割法」「境界値分析」
  • 不要なテストを事前に削れるデシジョンテーブルの「簡単化」
  • 膨大な掛け合わせを大きく削る「ペアワイズ法」「オールペア法」

などになります。
一見して「掛け合わせる」ということをするので0から創るように見えますが、
その実は「全数テストは無理だから効率の良い掛け合わせをする=削る」ということです。

テスト設計技法の各詳細については今回割愛します。

必要なテストからさらに削る場合もある

今までの記載で、必要なテスト設計≒彫刻を創るようなイメージはついたかと思います。

QAではコストや納期の関係上、さらに削らざるを得ないことがあります。
その場合、テスト技法ではなく「テスト目的を果たせるか」という観点で削ります。

例えば「彫像が重すぎるからもっと軽くしてくれ」という話です。
どう削ってよいのか、はテスト目的を崩さないようにです。
彫像なら「美しいように作ったなら、美しいまま削れ」ということです。
詳細は割愛しますが、ミロのヴィーナスが美しいように、実現することです。

さいごに

テスト作成というものは、
「0から創る」ではなく「100から削る」ものであると、
感じていただけたでしょうか。

今すぐ実践に持ち込むのは難しいかもしれませんが、
どこまでも無限に膨らむような底知れないなものではなく、
どんどん小さく削っていく理解の及ぶものであると、
心理的ハードルが下がってくれていると嬉しいです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?