Xunit
2006年1月17日
XUnitとは、ソフトウェア開発者間で広く知られるようになった多くのテストフレームワークの総称です。この名称は、最初に広く知られるようになったJUnitに由来しています。
これらのフレームワークの起源は、実際にはSmalltalkにまで遡ります。ケント・ベックは、ソフトウェア開発の中核となる自動化されたテストの大ファンでした。彼自身と彼のクライアントがこれを行うのを助けるために、彼はユニットテストを整理して実行するためのシンプルなフレームワークを構築しました。焦点は、プログラマーが通常のSmalltalk環境を使用してテストを簡単に定義し、部分集合または完全なテストセットを迅速に実行できるようにすることでした。ケントと彼のフォロワーは、Smalltalk IDEで迅速な編集とテストサイクルを実行しながら、システムに変更を加えるたびにユニットテストを実行しました。
私は当時、ケントに出会いました。私もすでに同じことをしていましたが、ケントのフレームワークは、ばかげたほどのシンプルさと、まさに私にとって最適な機能を組み合わせたものでした。基本的に、彼は私よりも良い仕事をしたので、私は彼のフレームワークを使用しました。特に、私たちはC3でこのフレームワークを使用し、そこでロン・ジェフリーズも紹介されました。
「それ」と言っていますが、それは実際には誤称です。ケント・ベック・スモールトーク・ユニットテストフレームワークという単一のフレームワークはありませんでした。ケントは人々が自分の環境を制御することを望んでいたので、彼は各チームが自分たちでフレームワークを構築することを好みました(わずか数時間かかりました)。そうすることで、彼らは自分の特定の状況に合わせて変更することに満足するでしょう。本質的に、それはまさにSeedworkでした。
それはまだSmalltalkコミュニティの外では知られていなかったので、JUnitにそのアイデアを広めた功績を与えるのは公平です。JUnitは、チューリッヒから1997年のアトランタで開催されたOOPSLAへのフライトで誕生しました。ケントはエリック・ガンマと飛行しており、2人のギークが長時間のフライトで何をすべきかといえば、プログラミングする以外にありませんでした。JUnitの最初のバージョンはそこでペアプログラミングで作成され、テストファーストで行われました(メタ循環的なギークの楽しい形です)。私はそれについて聞いてコピーを要求し、最初のアルファユーザーの一人になりました。気に入らないものを自由に変更し、ケントとエリックにいくつかの貢献を送り返しました。アサーションメッセージがJavaの慣例に従ってオプションの引数を最後に配置するのではなく、最初の引数である理由を疑問に思っているなら…
JUnitは、赤/緑のバーの進捗インジケーターも導入しました。C3では、テストが失敗するとウィンドウ全体を赤に、すべてパスすると緑に色付けしました。統合時に中央のビルドマシンのウィンドウを確認するのは簡単でした。JUnitはこれをプログレスバーとして導入し、ソフトウェア開発者に新しい語彙を追加しました。
JUnitはロケットのように普及し、エクストリームプログラミングとテスト駆動開発の成長運動を支える上で不可欠でした。過去10年間でテストに対する姿勢に大きな変化が見られ、JUnitはその中で大きな役割を果たしたと思います。小さくシンプルであることで、人々は学習して使用することを促されました。また、他の人がそれを拡張してツールに統合することも容易にしました。(ただし、SunがJDKにすべてをバンドルしてくれることを願っています。)
JUnitが普及するにつれて、他の言語もそれを望むようになりました。マイケル・フェザーズがC++用にCppUnitをまとめたことを覚えています。おそらくそれは最初の移植だったでしょう。その後大量の移植が行われ、ほぼすべての言語に少なくとも1つのJUnit移植があります。それが本物のフレームワークとしてSmalltalkに「移植」されたのも避けられないことだったと思います。
移植には違いがあります。いくつかは元のJUnitを逐語的に作り直し、ターゲット言語への配慮はほとんどありません。NUnitの最初のバージョンには、Visual Age for Javaの特別な処理に由来する「isVAforJava」メソッドさえありました。他のものはより洗練されていました。NUnit 2.0は、C#における属性の使用についてアンダース・ヘルスバーグから称賛されました。この経験は、Javaがアノテーションを開発するにつれて、JavaコミュニティとJUnit自体にフィードバックされています。