テスト駆動開発-テストの作成者


12

もともと、テストを作成するのは開発者の義務ですが、多くの場合/ e-mature開発者では、これらのケースが80%のカバレッジでさえないことに気付きました。
開発者ではなく、特定のプロジェクトのすべてのテストを作成するQA担当者がいますか?
それに短所はありますか?


2
TDDは、すべてのコードのすべてのテストを作成してからコードを作成するという意味ではないことに注意してください。それは用語です。それでも実用的なアプローチは、テストを作成してから小さな反復でコードを作成することです。より並行してアプローチします。リファクタリングは必然的に表面化するため、すべてのテストを事前に記述することは時間の無駄です。
アーロンマクアイバー

回答:


19

テスト駆動開発では、テストは開発者が作成する必要があります。それ以外の場合は、開発者以外の誰かが開発を推進しています。

そのため、テストを書く仕事を開発者以外に任せるとすぐに、その人は開発者になります。

TDDでの私の経験では、テストコードを書くことは、実稼働コードを書くことと同じくらい難しいことがよくあります。したがって、優れた単体テスト/統合テストコードを記述できるリソースがある場合、それらのテストに合格する本番コードを記述する必要があります。


1
スキルセットのスタンスから同じ志を持つ人が2人いる場合は、おそらく、テストとコードの間でオフ/オンを切り替えるペアプログラミング方式でTDDにアプローチできます。それらをテスター/プログラマー/コードモンキーと呼んでください...それはあなたが触れたときのスキルセットについてです。
アーロンマクアイバー

そして、おそらく毎分write_test-write_code-run_testを考えると、進捗率を全滅させるでしょう。
フランクシェラー

7

QAの仕事は、まったく異なる種類のテスト(つまり、使いやすさ/統合テスト)を実行することです。彼らは実際にコードで使用されている技術を知る必要はありません。

コードカバレッジが低いことが心配な場合は、開発者を規律する必要があります。たとえば、コードカバレッジが増加するまで、新しい機能の作業を停止します。一部の組織では、リポジトリにpre-commitフックがあり、カバーされていないコードのチェックインを許可していません。

最後になりましたが、「純粋な」TTDでは、カバーされていないコードはまったくありません(最初にテストを記述するため)。ただし、より低いコードカバレッジが許容される場合があります(人々はそれについて議論しています)。たとえば、POJOのゲッター/セッターのテストを書くのは時間の無駄だと主張する人もいます。


2

それらのケースは80%のカバレッジすら与えていません

それは管理上の問題かもしれません。

またはそれは無関係かもしれません。

まず、80%と100%のカバー率の違いは、ほとんどコストがかからず、ほとんどメリットがないことです。

「カバレッジ」とは何でも意味します。コードの行、ロジックパスなど。コード行(ロジックパスではない)を意味すると思います。

一部のロジックパスは、「検査」によって非常によくテストされています。コードは明らかであり、if文がなく、複雑さが非常に低く、おそらく追加のテストは必要ありません。

テストを20%増やしても、常に品質が20%向上するとは限りません。

第二に。これは管理上の問題です。経営陣が100%の補償を望んでいる場合、80%の補償を「解放するのに十分」ではなく、100%の補償に報いる報奨制度を導入する必要があります。

より多くのテストを書くためにQAメンバーを追加しても、あまり役に立ちません。

開発者を追加してより多くのテストを記述することは、100%のテストカバレッジを得るために必要なことです。


誰が100%のカバレッジについて何か言ったのですか?
エリックウィルソン

@FarmBoy:この質問は、80%のカバレッジでは十分ではないことを意味しています。何がいいの?通常の魔法の数は100%のカバレッジです。
S.Lott

1
しかし、私のコーチは常に110%を与えるように言っていました。なぜその量の補償を要求できないのか... ;-P
ベリン・ロリッチ

@Berin Loritsch:200%遅れています。
S.Lott

1
@Job:「QAの人の中にはコードを書くことができる人もいます」。正しい。その後、彼らは開発者になります。これは良いことです。
S.Lott

2

私見単体テストはQAプロセスではありません。開発者のフィードバックループを短縮することにより、開発を高速化することが重要です。コンポーネントの使用(他の開発者)に重点を置いて、コンポーネント(別名ユニット)を作成する人が行う必要があります。

機能テストは、QAチームが実行できるQAプロセスです。これらは開発者が行うことができますが、開発者はユーザーがアプリケーションを使用するすべての方法を知らない可能性があるため、開発者以外の方が良いでしょう。

両方ともTDD方式で実行できます。


2

TDDはテストだけでなく、設計も目的です。通常、テストに合格するためだけにコードを記述すると、より小さく保守可能なコードになります。他の人にテストの作成を委任すると、適切なコードを作成する責任も委任されます。

また、カバレッジではコードの品質については説明されず、ドメインルールがカバーされているかどうかも通知されないことに注意してください。


0

少なくとも80%のカバレッジが必要な場合は、いくつかのことを行う必要があります。

  • 開発者に、彼らが持っているカバレッジのレベルを決定するために必要なツールを提供します-そして、それがりんごごとであることを確認してください。カバレッジを測定する方法は複数あります。
  • その偉業を達成するための報酬/インセンティブを提供します。プログラマーは、成果が得られると思うことだけを行います。50%のカバレッジが品質を確保し、すべての作業を完了するのに十分であれば、それは彼らがすることです。

最後に、意図した実行パスと意図しない実行パスには違いがあることを理解してください。テスト駆動型コードを作成する過程で、独立したifステートメントのペアが必要であることを証明したかもしれません。その結果、使用可能な潜在的な4つの実行パスのうち2つのテストがあります。独立したifステートメントをもう1つ追加すると、8つの実行パスの可能性があります(つまり、指数関数的に上昇します)。

TDDは必ずしも実行のすべての潜在的なパスを予測するわけではないことを理解してください。そのため、完了するために記述する必要があるかもしれないが、そのパスをテストする必要がなかったために記述されていない多くのテストがあります。要するに、TDDはカバレッジを保証しませんが、存在するコードの理由を証明するテストが少なくとも1つあることを保証します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.