開発者は、単体テスト以外のテストを担当する必要がありますか?


35

現在、かなり大きなプロジェクトに取り組んでおり、JUnitとEasyMockを使用して、かなり広範囲のユニットテスト機能を使用しています。私は今、私が心配すべき他のタイプのテストに興味を持っています。開発者として、機能テストや回帰テストなどについて心配するのは私の責任ですか?これらをMaven / Ant / Gradleなどのツールで使用可能な方法で統合する良い方法はありますか?これらはテスターまたはBAに適していますか?私が見逃している他の有用なタイプのテストはありますか?


2
実際には単純化されていますが、実際に会話をしながら、通常は存在している隔離された状態を保ちながら、環境内で可能な限り外側に拡張します。エンドツーエンドチームは、分離以上のスキルセットであると考えてください。各チームは、エンドツーエンドの成功のために活用する必要のあるさまざまなスキルセットを表しています。チームはテストが達成するために必要とされるの成功のために責任を負わなければなりません。実装に関してどのように取り組むかは、スキルセットに基づく実装の詳細です。
アーロンマクアイバー

1
この質問への答えは、他のチームメンバーのスキルレベルにも依存します。たとえば、QAに強力なプログラミングスキルがないチームでは、開発者はQAが独自のテストハーネスを作成できるチームよりも多くのことを行うことに気付く場合があります。
neontapir

良い基準は、テストがどれだけ自動化できるかです。プログラマーはコードを使用して物事を自動化するのが得意です。
rwong

回答:


44

欠陥のないコードの提供に努めるのはあなたの責任です。提供するコードに自信を持たせるために、テストを作成、作成、またはテストの作成または実行を保証する必要があります。

注:欠陥のないコードを提供する必要があるとは言いません。むしろ、与えられた要件に応じて可能な限り最高のコードを書くことを試みるべきです。それができるということは、コードをテストする必要があることを意味します。

それが機能テストと回帰テストに個人的に責任があることを意味するかどうかは、主に会社がどのように組織されているかによって決まります。私が知っている最高の熟練したプログラマーのすべては、「タイプXのテストを書くことは私の責任ですか?」と自問しません。代わりに、彼らは「自分のコードが適切にテストされていることを確認するために何をしなければならないのか」と自問します。答えは、単体テストを作成するか、回帰にテストを追加するか、QAの専門家と話し、どのテストを作成する必要があるかを理解するのを助けることです。ただし、すべての場合において、適切にテストされていることを確認するために、作成しているコードに十分注意を払っていることを意味します。

結論:高品質のコードを提供する責任があります。そのため、機能テストまたは回帰テストを作成する必要がある場合は、実行してください。


高品質のコード部分を提供することに心から同意します。私は、「以上の」良いコードについて言及していました。たとえば、パースペクティブ内で「バグなし」と見なされる変更を行うと、どこか別の場所でパフォーマンスが低下します。私が考えることができる最良の例は、要件が負荷に対して適切に吟味されていないことです。そのため、私のコードは、「バグがない」にもかかわらず、サーバーで負荷の問題を引き起こします(ユーモアではないという議論ができます)。PSここであなたの自信の部分が重要だと思います。
ジャッキー

10
欠陥のないコードを提供するのはあなたの責任です。求められたものを構築するのは開発者の責任です。欠陥は不十分収集/解釈、与えられた展開における環境問題、OS内の葛藤など...根本原因分析はそれぞれ、すべての欠陥に対して行われていない限り、要件から表面を行うことができますし、欠陥のないコード、彼らはビジネスのための手段を期待しますユーザーが期待することを実行し、それ以下は欠陥です。開発者がSDLC全体に関与し続けることができると仮定して単純に信頼性を高めるのは非現実的です。それはスケールしません。
アーロンマクアイバー

2
「プログラムのテストは、バグの存在を示す非常に効果的な方法ですが、バグの不在を示すには絶望的に不十分です。」-エドガーW.ダイクストラ、「謙虚なプログラマー」(チューリング賞講演)、1972
。-ジョンR.ストローム

1
「欠陥のないコードを提供するのはあなたの責任です。」妖精の土地です。スコープに必要なものを提供することはできますが、エッジケースとビジネスロジックの解釈により、ステートメントを実現できなくなります。ソフトウェアのメジャーリリースごとにリリースやパッチなどがあると思うのはなぜですか?なぜなら、私たちはビジネスロジックを含めてすべて不完全だからです。
ジェイソンセブリング

4
ブライアンが「欠陥のないコードを提供することがあなたの目標です」と言っていたら、この答えの最初の文で問題を抱えている人はみんな幸せでしょうか?
Carson63000

13

これはあなたを助けるかもしれません:

アジャイルテスト作業領域

Q1は開発者によって作成されました。

Q2は開発者によって自動化され、ビジネスやテスターと共同で作成されます。


開発者は多くの場合、第4四半期のテストにも関与しています。
neontapir

リンクされたファイルが見つかりません。
ドゥシャンリッチノフスキー

3

私が見逃している他の有用なタイプのテストはありますか?

ガーキン言語を使用するBDDスタイルのフレームワークを推奨する受け入れテストがあります:JBehave(Java)、Cucumber(Ruby)、Behat(PHP)など。このタイプのテストには、単体テストよりもいくつかの利点があります。

  • テストは開発者以外でも簡単に読むことができるので、顧客に見せることができます
  • テストでは、実装の詳細に入らずにビジネスプロセスを明確に記述します(実装が重要ではないということではありません-確かです-しかし、ビジネス要件をコード自体から分離する方が良いです)
  • テストは、ユーザーがアプリケーションを使用して行うことを行います
  • 記述しやすい(IMHO、言語とフレームワークに依存する場合があります)::笑がなく、技術的な詳細が少ない

3

機能テストは、単体テストと同様に自動化でき、プロジェクトのさまざまなコンポーネントがどのように連携するか、システムがビジネスルールをどの程度反映しているかをテストするのに非常に役立ちます。

また、この自動化されたテストは、ソフトウェアに対して行う必要のある大きな(または小さな)変更(バグ修正、リファクタリング、ビジネス変更、新機能など)の回帰および受け入れテストスイートとして機能します。これにより、開発者はそのための自信を深めます。

この種のテストにはいくつかのフレームワークがあり、フィットネスを使用して非常に良い結果が得られています。Webページのテストに非常に優れたライブラリがあり(WebアプリとWebサービスのテストに使用します)、MavenおよびJenkinsと非常によく統合されています。

また、開発者間で「クロス機能テスト」を実行していましたが、この種のテストは「繰り返し可能」ではないため、その有用性は限られています...


2

開発者として、私は自分自身がすべてのコードを単体テストする責任があると考え、欠陥がないことを最大限に保証します。だからこそ、モッキングなどの自由に使えるツールがたくさんあります。テストでモックオブジェクトを作成する目的は、コードを「外部」の世界から隔離して、正常に動作し、何かが失敗しても「あなたのせいではない」ことを保証することです。

それはあなたのせいではなく、コードが正常に機能しているという事実にもかかわらず、それはあなたが残りのテストで助けられないという意味ではありません。他の人が行った仕事にあなたの仕事を助け、統合することもあなたの責任だと思います。IT開発チームは、信頼性の高いソフトウェアを提供するための大きなチームとして、他の部門(QAなど)と協力しながら、毎回油を塗ったマシンとして作業する必要があります。

しかし、それはあなただけのものではなく、チームの仕事です。


1

明らかに統合テスト。それらは単体テストよりも重要であり、書くのがより困難です。それは家を建てるようなものです。単体テストでは、レンガが固体であり、圧力、温度、湿度、その他の条件に耐えることのみを保証します。しかし、レンガを組み合わせて家がどのように見え、どのように振る舞うかはわかりません。

大規模プロジェクト、特にコンテナ内にあるJavaプロジェクトの問題は、統合テストが難しいことです。そのため、大規模プロジェクトでのシステム統合テストを容易にするには、プロジェクト専用に作成されたテストフレームワークが必要です。これは、開発者がそれをコーディングする仕事です。最近、この分野で大きな改善が行われ、Arquillianのようなプラットフォームは、テストフレームワークの記述を大幅に簡素化します(またはそれを置き換えます)。


1

現実の世界では、チーム/ボスが責任を負うのと同じくらい責任があるだけです。すべての隅々を探してビジネスロジックのバグを上司(またはマーケティングの悪い方)が解釈するという気まぐれに飛びつくために労力を費やしている場合は、すべての責任を負います。

言い換えれば、あなたに与えられた範囲で必要なことをしてください。何らかの常識を投げたり、他の人があなたが構築している製品を使用して修正するユースケースや考えられる問題を理解したり、それを「修正」する前にチームや上司に知らせたりするのは良いことです。これには、選択したツールが含まれます。すべての努力は、全員が参加しているものでなければなりません。

あなたの質問が有用なバグ追跡の場合、私はbugzilla、google docs、zendeskまたはbasecampが通信システムの観点から好きです。


1

私はこれがすでにカバーされている思わない-それを逃した場合は申し訳ありません。

1つの問題は、開発者の時間の効率的な使用です。

開発者は、特定の種類のテストに長けているスキルを欠いていることがよくあります。一部、これは自然なことです。著者が編集者を持っているのと同じ理由です。近すぎると何かの欠陥を見つけるのは非常に困難です。しかし、それはまた、異なるスキルセットと異なる専門性についてです。

そのため、テストに時間を費やす開発者は、コストとメリットの点で貧弱です。その開発者は他のことを行うと生産性が高くなり、専門のテスターはテストを行うと生産性が高くなります。

もちろん、それは必ずしも有効ではないさまざまな仮定を行っています。たとえば、小さな会社では、テストに特化した人を雇うのは意味がないかもしれません。ただし、追加のサポートスタッフを雇ってテストを行うか、少なくとも自分で作成していないコードをテストするようにさせる方が理にかなっています。


0

QA向けにリリースされる前に、考えられるすべてのテストシナリオを網羅するのは(開発者でもある)私たちの責任だと思います。QAの目的は、ソフトウェアを検証することです。さらに、エラーのために独自のコードをハンマーで打つことで、QAの時間をいつでも見栄えよくすることができます。


私が得ようとしているのは、効果的な「ハンマー」と考えられるものだと思います。
ジャッキー

それは間違いなく主観的です。私はあなたのプロジェクトに適用されるあらゆる種類のテストを言うでしょう(もちろん、すべての種類のテストがすべてのプロジェクトに適用されるわけではありません)。ここに適切なリストがあります:softwaretestinghelp.com/types-of-software-testing。あなたが自分で何をするか、そしてもちろんあなたが何を差し控えるかはあなた自身の時間、資源、能力に依存します。たとえば、ユーザーだけが従う必要がある特定のルールがあるため、受け入れテストを実行できない場合があります。要するに、時間内にできる限りのことをしてください。
ホヌスワーグナー

ほとんどがWebであるプロジェクトの場合、通常は、ユニット、機能、ユーザビリティ、回帰、パフォーマンスを何とかしようとしています。時間がある場合は、ホワイトボックス、ストレス、互換性、さらには十分に承知している場合は承諾に進みます。私のコーディングの一般的なスタイルは非常にパフォーマンス重視であるため、優先順位を下げています。QAは、これらのテストのいずれかのタイプの中で何かが間違っているを見つけることができませんことを、この手段のいずれも、それはちょうど彼らが少なく見つけて、はるかに簡単ラウンド2のために作ることを意味しない
ホーナス・ワグナー

0

どのテストケースが最も関連性があるかを開発者よりもよく知っている人。開発者は、すべての単体テストを行う責任があります。可能な場合、開発者はテストスクリプトの記述と実行を支援する必要があります。これは大規模プロジェクトではめったに可能でないため、開発者がすべてのテストケースをレビューするための時間を与える必要があります。さらに、開発者は知識を持ち、利用可能なさまざまな自動テストツールを使用する必要があります。

私の開発キャリアでは、開発チームとテストチームが緊密に統合されていれば、プロジェクトの成果が向上することがわかりました。

各チームの少なくとも1人のメンバーが、他の計画および実装会議にも参加する必要があります。


1
私がこれに関して持っている唯一の問題は、開発者とテストチームの間にある程度の隔離があるべきであるということです。さもないと、テストチームは開発者の「コードは働く」意見で汚染されます。QAと開発者には反対の目標があります。開発者はそれを機能させようとしていますが、QAチームはそれを破壊しようとしています。また、開発者常にテストの妥当性について最高の視点を持っていると限りません
ロバートハーベイ

私は100パーセントは同意しませんが、最近再びモバイルアプリケーションに携わっており、モバイルアプリケーションには従来のレベルを少し上回るレベルの統合が必要だと思います。統合という用語を使用していることに注意してください。隔離することもできますが、両方のチームがテストケースを確認して貢献する必要があります。開発者が適切なテストを行うために必要なすべてのテストリソースにアクセスすることはまずありません。また、テスターがセルラーネットワークを介したストリーミングビデオのような高度なテストケースを開発する知識を持っている可能性は低いです。あまりにも孤立=トラブル。
ミシェルキャノン

さらに、市場がより垂直になり、専門性が増すほど、チーム間の統合が必要になると思います。実際には、コードはいくつかのテストされた条件下で動作するが、欠陥がある可能性が高いという考えでテストフェーズに進む必要があります
ミシェルキャノン

これは機能しているようで、テストチームは機能仕様を使用してユースケースドキュメントを作成します。開発チームは、技術仕様と機能仕様に基づいてユースケースドキュメントをレビューし、必要に応じてケースを追加します。テストチームは、ユースケースからテストシナリオを開発します。開発テストレビューテストケース。確かに時間がかかりますが、展開または生産段階の後半でテストするよりも優れています。
ミシェルキャノン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.