WhatIsTesting
テスティングとは?
テストとテスティング
XPの出現以来、それ抜きの開発は考えられないほど、テスティングフレームワークは必須のものとなりました。
「テスティングフレームワーク」
しかし、この呼び方になにやらうさんくさいものを感じる人もいるでしょう。
なぜ、「テスト」ではないのか?
ここでは、テスティングという言葉の感覚を伝えたいと思います。
なお、アジャイル開発における「言葉」についてはAgileNaKotoBaを参照してください。
テストとはなんでしょうか?
私たちが日常的に利用する「テスト」という言葉は、品質保証テストのように、既に存在する仕様に基づいて実装された完成品が、基準を満たしているかを検査するという意味で使います。
同じように学校の期末テストは、既に学習した内容が学生の身についているかを判定します。
ここにあるのは、静的な基準であり、テストは既に完成した製品や知識に対して動かしがたい事実の判定を下すものです。
ユニットテストは、テストでしょうか?
ユニットテストは、まだ存在しない実装、まだ確定しきっていない仕様について、「こうあれば良い」「こうあるはずだ」という状態を表明としてプログラムしていきます。
実装状況によっては、テストそのものを変える必要さえあります。
ここではテストは静的で確定した冷たい検査機械ではなく、動的で状況に合わせて柔軟に変化するいきいきとした活動です。
つまりアジャイル開発で採用するテスト駆動開発において、テストと実装は、開発を支える両輪として、相互にフィードバックすることで回り続けます。
私たちは、このことを言葉で表現しなければなりません。
アジャイルなテストをどう表現すれば良いのでしょうか
ここで、英語のtestには、名詞の「テスト」と、動詞の「テストする」の2つの意味があることを思い出してみましょう。
そこから前者の静的なテストに名詞のtestを、後者の動的なテストに動詞のtestを割り当てて、さらに動詞のtestを名詞化するために現在進行形のingを付けてtestingとすることで、前者のテストと後者のテストを言葉で区別できるようになります。
すなわち、テストとテスティングです。
なぜテスティングレームワークと呼ぶのでしょうか
「テスティングフレームワーク」という呼び方には、検査目的のテストではなく、開発を駆動するための動的でいきいきとしたテストのためのフ レームワークなのだ、という意思が込められています。
それが、アジャイル開発で利用するユニットテストフレームワークのことを「テスティングフレームワーク」と呼ぶ理由です。
この文章について
この文章は、まだ上梓されていないある書籍の中でテスティングフレームワークという言葉を説明するために作成したものを、独立させて再構成したものです。
ライセンス
このページの上記文章に関してはクリエイティブ・コモンズ 表示 2.1 日本ライセンスを適用します。
公開の理由
気分的な意味での「テスティング」という言葉を説明したものをあまり見かけないこともあって、ここで公開します。
ただし、この文章は、英語のtesting frameworkを説明したものではありません。あくまでも、日本語の「テスティングフレームワーク」についての文章です。
成り立ちと謝辞
この文章の成り立ちは、twitterにおける問いかけに対する、t-wadaさんからのリプライおよび角谷さんからのリプライをヒントにしています。さらに、t-wadaさんとのメールディスカッションにより洗練させたものです。(ただし文中に含まれる誤った解釈などの文責はartonにあります)
t-wadaさんと角谷さん、最初にテスティングレームワークについて教えてくださった助田さんと故石井さんに感謝します。
Keyword(s):
References: