InfoQ

News

良いテストの品質とは何か?

作者 Mark Levison , 翻訳者 大田 緑 - (株)チェンジビジョン 投稿日 2008年10月22日 午前12時11分

コミュニティ
Agile
トピック
ユニットテスト,
Delivering Quality
タグ
Best Practices,
TDD

良いテストとは何か? 良いテストを書いたかどうかどのように分かるのだろうか?

Kent Beck氏(リンク)が、テストとは次のようであるべきだと仮定した。

  1. 分離していること (他のテストが存在していようといまいと、その結果に影響を受けないこと)
  2. 自動化されていること
  3. 速く書けること
  4. 速く実行できること
  5. 一意であること (他のテストによって提供されたり、他のテストとの相関関係があったりすることなく、確実なものであること)
     

Roy Osherove氏(リンク)は、良いテストは3つの基本的なプロパティがあることを付け加えた。それは、維持可能なこと、信頼できること、可読性があることである。
 

Mike Hill氏(リンク)はもっとずっと長いリストを持っている。

  • 短いこと。一般的に1ダース未満のライン数であること。
  • .実行中のアプリケーションの内部のオブジェクトではなく、代わりに専用のテストアプリケーションをテストする。
  • コードの極めて小さな部分だけを呼び出す。それは、大抵、1つの機能の1つのブランチである。
  • グレイボックスとして書かれていること。言い換えれば、まるでブラックボックスであるかのように読み込むが、時々ホワイトボックスの知識を利用する。(大体は組み合わせの問題を避けるための重要な要素である)
  • 出荷するコードと同じ基準でコーディングする。言い換えれば、コーディングが優れていることをチームが現時点で最も良く理解していること。
  • アプリケーションの他のすべてのマイクロテストと組み合わせて、コミットのゲートウエイの役目をする。つまり、開発者は実行してグリーンになるマイクロテストはすべて、いつでもコミットするように奨励される。そうでなければ(強く、時には意地悪く)コミットしないように言われる。
  • テストするオブジェクトを完全にコントロールし、その結果、自己完結する。言い換えれば、テストコードと依存性グラフ以外に依存せずに実行される。
  • 非常に短い時間で実行する。
  • 通常、テストするはずのコード変更の前に書かれる。
  • 間違ったニセモノの技術がいろいろあるが、それら不適当なものをほとんど、またはすべて使うことを避ける。
  • ...

Mike氏とRon Jeffries氏は、TDDの主要な価値は、デザインを簡略化し、生産性を改善することだと思い出させてくれる。コード品質の改善とバグの削減は、重要な二次的影響である。

Jeremy Miller氏(リンク)は、良いユニットテストが以下のようなものであると付け加えた。
 

  • 順番に依存せず、独立していること。テストする人がどの順番を選んでもテストを実行できるようにすべきである。
  • 意図が明らかであること。もっとも良いユニットテストは、どのようにオブジェクトAPIが使われるように意図されているか、読む人に明らかである。
  • 設定が簡単であること。
     

最後に、Ed Burnette氏(リンク)が書く。どんな局面でもユニットテストが繰り返せるようにすること。境界の状態をテストし、いつも100%テストが通るようにしておくこと。

 

原文はこちらです:http://www.infoq.com/news/2008/10/qualities_good_test

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
slashdot+
Hatena

特集コンテンツ一覧

Flex 4の新機能トップ10

今週(2009年6月1日)AdobeはFlex 4の正式な初ベータ版をリリースしました。Flex 4はGumbo(オクラ)というコードネームで開発されています。今回のリリースには大きな変更が多数含まれています。このRIAフレームワークの最新バージョンにおいて変更された事柄についての概要を以下のリストで見ていきましょう。

Domain Driven Design(ドメイン駆動設計) Quickly 日本語版

ビジネス領域の深い理解を反映したドメインモデルを設計するための、ヴィジョンとアプローチです。この本は、Eric Evans氏の「Domain Driven Design」の主要点を短く読みやすく要約しました。

JavaプログラマがFlexとBlazeDSを学んだ方がいい13の理由

この記事ではJavaプログラマがなぜFlexとBlazeDSを学ぶべきなのかについて13の理由を述べています。なぜ高度にインタラクティブなWeb サイトからJavaで開発されたバックエンドをもつエンタープライズ・アプリケーションまでを含む、リッチ・インターネット・アプリケーション(RIA)の開発にFlexとBlazeDSの組み合わせが最適な選択肢となるのかについて述べています。

仮想パネル: バックログは重要な成果物とプラクティスか、それとも無駄か?

Mary Poppendieck氏、Ron Jeffries氏、Jeff Patton氏、David West氏、Steve Freeman氏、Jason Yip氏が、バックログに関する彼らの意見とアジャイルチームを成功させるために必要な事を語った。

Perf4Jを使ったパフォーマンス解析とモニタリング

この記事ではAlex Devine氏が、Java開発者がPerf4Jをどのように利用できるかと、タイミングステートメントにコードを追加し、ロギング、結果の解析とモニタリングを行うオープンソースツールセットの説明をします。

複雑な外部DSLを開発する

本稿では、Vaughn Vernon氏が内部DSLと外部DSLの違いを説明し、複雑な外部DSLを開発する際のステップを示します。

J2EEアプリケーションにおけるAOPを使ったフェッチ戦略の実装

この記事では低レベルのサービス・レイヤやリポジトリ・レイヤを肥大化させることなく、フェッチング・ストラテジによってモジュール化された方法でバックエンドにあるシステムからデータを取得する処理を最適化する方法について説明します。

実証済みのアイデアの融合: S#arp Architectureの裏側

この記事では、Web開発における多数の成熟傾向と、クライアントに価値を提供することに対するそれらのメリット、およびS#arp Architecture(最善の手法と技術を活用しようとするASP.NET MVCをベースとしたフレームワーク)内でのそれらの使用について取り上げます。