BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース JUnitMaxは、ソフトウェア開発のフィードバック サイクルを短くする

JUnitMaxは、ソフトウェア開発のフィードバック サイクルを短くする

原文(投稿日:2010/11/13)へのリンク

私が Hamburgで開かれたResponsive Design ワークショップに参加した時、Kent氏が親切に、彼の最新製品、最近 再リリース された JunitMaxについて、質問に答えてくれた。

JUnitMaxは 、Eclipse (3.5+)用の、継続的にテストを走らせるプラグインで、ファイルがIDEによって保存され、コンパイルされる度に、ユニットテストを走らせる。開発中のシステムの健康状態を直ちに提供することで、フィードバック ループを短くする狙いがある。

JUnitMax Screenshot

JUnitMaxは、できる限り控え目にしている。IDEの隅にある小さな赤かグリーンのエリアが現在のテスト状態を示している。小さな赤線とグリーンの点がテスト実行の履歴を表している。失敗したテストは、問題ウィンドウに現れ、該当のコードラインでエラーとしてハイライトされる。

氏が JUnitMaxの開発を始めたのは、開発中のよりよいフィードバック ループの必要性からだった。ユニットテストを手動で実行するのは、つまらなく、苦痛で、しばしば忘れられる。もしユニットテストが失敗した時に、余りに多くの変更がシステムにあったら、どれが問題の原因なのかを見つけるのは、非常に難しい。プログラマーとして、彼は、タイムリーにフィードバックを得たいとイラついていたので、Maxは多いに役立つものになった。 JUnitMaxは、Responsive Design 戦略 を使って、少しづつ開発され、反復によるオーバーヘッドは、なかった。

IDEの隅に小さな四角いグリーン色は、癖になる。できるだけ早くグリーンにしたい、と思うようになる。このグリーンは、開発中、一種の安心を与えるサインで、安全に進んでいい時は、グリーンになる。ちょうど信号機と同じである。

テストは、連続的に走ることができるフィードバックのツールであるばかりでなく、現在最も高い価値を与えてくれる。このようなフィードバック ループを与えてくれる、他のアプリケーションを想像してみるのは簡単である。例えば、コードメトリクス、スタイル チェッカーなど。 JUnitMaxは、IDE内で走る小さな組み込みの継続的統合サーバーと考えることができる。コンパイラーはコードの構文上のフィードバックを提供するが、Maxは、意味的なフィードバックを提供する。

JunitMaxのビジネスモデルは、商用である。サイド プロジェクトとして始まり、一般的に使えるツールに進化したが、安定して、成熟したものにするには、多くの工数が必要である。そこでKent氏は、意図的に年間契約の有償ツールとして JUnitMaxを提供することにした。現在、個人(年100ドル)と企業用の契約がある。

多くのソフトウェア開発者は、オープンソース プロジェクトやベンダーから無償で開発ツールを入手することに慣れていて、払いたがらない。しかし、払う人達は、ツールを使って節約できる時間の価値と比較すれば、ツールの値段は、非常に安い、と知っている。一方、正しいツールを使えば、その生産性は、劇的に向上する。ツールのコストを議論する人は、働いている時間の相対的な価値とツールから得られることになる利益について考えるべきである。

JunitMaxを実装している時に、最も大変だったのは、技術的な面ではなく、ビジネス面だった。売れる製品を作り、実際にそれを売ることは、プログラマには、大変だった。(ライセンス マネージャのような)ビジネス用のフィーチャをツールに加えることは、他のユーザ中心のフィーチャを加えたり、拡張したりすることより、面白いことではなかった。

JunitMaxの役立つフィーチャの一つが、「最後のグリーンに戻す」ことである。バージョン コントロール システムのように、各グリーンのテスト ランでのシステムの状態を憶えており、グリーン状態からのすべての変更を効果的に破棄して、開発者がこの状態に戻ることができる。ツールを常に動かしておけば、それは非常に短い時間間隔をカバーするので、常に(gitやmercurialのような)バージョン管理システムにチェックインしなくても、小さな変更セットを戻すのに役立つ。

JUnitMaxは、テストが実行される順番を考慮していおり、それは、Kent氏が膨大な数のユニットテストの実行をサンプリングして、導き出した結果に基づいている。テスト実行の長さとテストの失敗確率は、指数関数的な分布となる(べき法則)。

新しく追加されたテストや失敗したばかりのテストは、また失敗することが多い。一つのテストが失敗するか、多くのテストが失敗する。長い間失敗しないテスト(ホットスポットでない)は、ほとんど失敗しない。このような結果から、実行前に、実行結果と最近失敗したテスト順で、テストを並び替えると、劇的に早くテストの失敗する確率が増加する。このために、 JUnitMaxは、早いフィードバックができる。

JUnitMaxは、使用する開発者に価値あるフィードバックを提供するだけでなく、そのコードベースで起きている例外をレポートする。Kent氏がツールを改善するために、自動的にフィードバックするわけである。彼はまた、フィードバック、提案そして更に情報を収集するために、JUnitMax のユーザー達に積極的にアプローチしている。Javaプロジェクトを意図していたが、他のJVM言語で開発している人々は、テストを実行するのに JUnitMaxを使っている。

JUnitMaxが動いているのを見たければ、Jason Gormanの Code Smells and SOLID principles シリーズのスクリーンキャストが非常にお薦めである。興味のあるユーザには、メーリング リストがある。

これまでのところ JUnitMaxに関する唯一の問題は、 aspectjプロジェクト上のSTS内で、それを走らせ、共有のセットアップを使って同じテストをマニュアルで走らせる時に、リソース アクセスで競合することである。

この記事に星をつける

おすすめ度
スタイル

BT