開発者テスト vs.QA チームのテスト - 適切な作業分担は何ですか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/14040

質問

より多くの開発者のテストを提唱しようとしている間、私は「QAの仕事ではないですか?」という議論を見つけます。たくさん使用されています。私の考えでは、QA チームにテストのすべての責任を与えるのは意味がありませんが、同時に Spolsky 氏やその他の人々は、1 時間あたり 30 ドルのテスターができることを、1 時間あたり 100 ドルの開発者を使うべきではないとも言っています。 。専任の QA チームを持つ会社の他の従業員はどのような経験をしていますか?仕事の分担はどこに描くべきでしょうか?

説明:QA とは検証および検証チームのことを指します。開発者は検証 (顧客中心のテスト) を行うべきではありませんが、検証 (機能テスト) の分割点はどこでしょうか?

役に立ちましたか?

解決

これは、「ブラック ボックス」テスト (コードが何を行うべきかはわかっていますが、どのように機能するかはわかっています) と「ホワイト ボックス」テスト (コードがどのように機能するかを知っていることがテスト方法を決定する) の違いです。品質保証というと、ほとんどの人が思い浮かべるのは「ブラック ボックス」テストです。

私は QA チームがソフトウェア開発者でもある会社で働いています。(そうすると分野が狭くなります たくさん 会社を推測したい場合は。) 私はジョエルの意見を知っていますが、私の経験から部分的には同意しません。「ホワイト ハット」ハッカーがセキュリティ ホールを見つけるのがより効果的であるのと同じ理由で、特定の種類のエラーは、コードの書き方を知っているホワイト ボックス テスターに​​よってより効果的に発見されます (したがって、よくある間違い - たとえば、リソース管理)メモリリークなどの問題)。

また、QA 指向の開発者は初期設計段階からプロセスに参加するため、理論的にはプロセス全体でより高品質なコードを推進するのに役立ちます。理想的には、機能に精神的に焦点を当ててプロジェクトに取り組んでいる開発者ごとに、コードを破壊する (つまりコードをより良くする) ことに精神的に焦点を当てている反対側の開発者がいるということです。

その観点から見ると、これは開発者をテスターとして使用するというよりも、1 人の開発者が品質の管理に重点を置く、ある種の切り離されたペア プログラミングの問題です。

一方、多くのテスト (基本的な UI 機能など) では、率直に言って、そのようなスキルは必要ありません。そこはジョエルの言い分も一理ある。

多くの企業では、プログラミング チームが互いのコードのコード レビューとテストの義務を交換するシステムが見られました。たとえば、ビジネス ロジック チームのメンバーは、UI チームのコードのテストとレビューに時折ツアーを費やすことができますし、その逆も同様です。そうすれば、フルタイムのテストで開発者の才能を「浪費」することはなくなりますが、コードを(できれば)専門家の精査と処罰にさらすという利点が得られます。その後、より伝統的な QA チームが「ブラック ボックス」テストに取り組むことができます。

他のヒント

適切な場合、開発者ではなく、品質管理チームがセキュリティ、リグレッション、ユーザビリティ、パフォーマンス、ストレス、インストール/アップグレードのテストを実施できる必要があります。

開発者は、最小限の目標として、作成中のコードのコード カバレッジを設定して単体テストを実行する必要があります。

その間、まだかなりのテストが必要です

  • 完全なコードパスのテスト
  • コンポーネントのテスト
  • (コンポーネントの) 統合テスト
  • システム(統合)テスト

これらに対する責任は、何が最も合理的であるかについての相互合意に基づいて、QA と開発の間で混合されます。一部のコンポーネントのテストは単体テストでのみ実行できますが、その他のコンポーネントは統合テストなどで「十分に」テストされます。

お互いに話し合って、全員が最もやりやすいことを見つけてください。時間はかかりますが、それだけの価値は十分にあります。

常に何らかの開発者テストが必要です。開発者があまりにも多くのバグを生成すると、後でそれらのバグを修正するために時間を無駄にすることになります。開発者が、「バグを放置しておけば、いつかは見つかるだろうし、修正するチャンスがあるだろう」というような態度をとらないことが重要です。

私たちは、発生するバグのしきい値を維持するよう努めます。テスト中にこのしきい値を超えた場合は、開発者が責任を負います。このしきい値を決定するのはあなた次第です (私たちの場合、しきい値はプロジェクトごとに異なります)。

また、すべての単体テストは開発者によって行われます。

私は業界に入ってまだ 1 年しか経っていませんが、私の経験では、開発者は機能の単体テストを担当し、QA はシナリオのテストを担当します。QA は境界条件をテストすることも期待されます。

社内フォーラムの質問に対する私の回答を貼り付けます。1時間くらい時間があれば。。メアリー・ポペンディークの曲を聴いてください スピードで勝負する ビデオ。 推奨

注(テスターに​​よる - QA チームを指します)

開発者 / 単体テスト ________=_______ ユーザビリティテストと探索的 テスト

'==================================================================

受け入れ/顧客テスト ___=_____ 特性試験

それが 4 つの象限を持つ正方形であると想像してください。:)

左半分は自動化する必要があります。

  • 開発者テストでは、コードがコーダーの意図どおりに動作するかどうかを検証します。ツール:NUnit / xUnit / あらゆる自作ツール
  • お客様のテストでは、コードがお客様の希望どおりに動作するかどうかを検証します。テストは非常に簡単に作成できる必要があり、顧客が .NET/Java を学ぶ必要はありません。そうしないと、顧客はそれらのテストを作成しません (ただし、開発者の助けが必要になる場合があります)。たとえば、Fit は Word で記述できる HTML テーブルを使用します。ツール:フィット回帰ツールもここにあります。記録再生。

右半分は、優れたテスターの時間と労力をより有効に活用します。例えばX ダイアログが使用可能かどうかを判断できる自動テストはありません。人間は機械よりもこの点で優れています。

  • 使いやすさ。システムを破壊してみます (未処理の障害シナリオを捕捉し、null 値を入力します)。基本的に、開発者が見逃していたものをキャッチします。
  • 特性テストには再び人間が必要です。ここでは、システムに必要な顧客必須のプロパティを確認します。例えばパフォーマンス - 検索ダイアログは 2 秒の応答時間を満たしていますか?セキュリティ - 誰かがこのシステムにハッキングすることができますか?等可用性 - システムは 99.99% の時間オンラインですか?

テスターは、左半分のテスト計画の実行に時間を費やすべきではありません。コードが顧客と開発者の意図どおりに動作することを確認するのは開発者の責任です。実際、テスターは顧客が受け入れテストを作成するのを支援できます。

テストは可能な限り自動化する必要があります。そのため、テスターが自動テスト スイートに追加されるコードを作成している場合、テストは開発作業に戻ります。

また、コード レビューでは多くの QA が行われていることがわかりました。人々は、レビュー対象の単体テスト (もちろんテストするコードも一緒に) に追加してほしい特別なエッジ ケースやコーナー ケースを提案するからです。 。

私の一般的なスタンスは、テスターはユニット レベルのバグ (境界ケースを含む) を決して見つけるべきではない、というものです。テスターが発見するバグは、コンポーネント、統合、またはシステム レベルである必要があります。もちろん、最初はテスターが「ハッピー パス」バグやその他の単純なバグを見つけるかもしれませんが、これらの異常は開発者の改善を支援するために使用されるべきです。

問題の一部は、1 時間あたり 100 ドルの開発者と 1 時間あたり 30 ドルのテスターを使用していることかもしれません:}。しかし、コストに関係なく、開発サイクルの早い段階で見つかったバグのほうが必然的に安く済むことを知っていれば、開発者がより多くのテストを行うことでおそらくコストを節約できると思います。高給取りの開発チームとハックテスターがいる場合は、おそらく大きな明白な問題の多くを見つけることができるでしょうが、後で戻ってきて悩まされることになる、より目立たないバグの多くを見逃すことになります。

したがって、あなたの質問に対する答えは、テスターはあなたが望むだけテストすべきだということだと思います。すべてのテスターを解雇して開発者にすべてのテストを行わせることも、テスターの軍隊を雇って開発者が望むものをすべてチェックインさせることもできます。

qa グループには 2 つのタイプがあり、現状維持を希望するグループがあります。私たちはいつもそうしていました。彼らは当然、物事をより効率的にしようとするため、自分たちの快適ゾーンを超えようとする人々を嫌い、排除します。それは私に何度も起こりました。残念ながら、qaマネージャーはqaチームと同じくらい無能です。したがって、過去 6 年間管理してきた QA マネージャーは、あらゆる自動化を廃止し、その存在を正当化するためだけに多くのプロセスを導入します。これは、それを認識する上層部の責任です。ツールに精通した、ある程度専門的な QA 担当者もいます。残念ながら、プログラミング言語はツールではなく、ビジョンです。そうした人々と仕事ができるかどうかは、彼らがどれだけ学ぶ意欲があるか、そして経営陣が物事を変えるリスクをどれだけ引き受けるかにかかっています。テストはメイン コードと同じ方法で記述し、保守が容易なオブジェクト指向構造にする必要があります。開発者は QA テストを見直すべきだと私は思います。ほとんどの場合、自動化では何もテストされていないことがわかりました。残念ながら、qa の仕事は下位クラスとみなされているため、開発者は気にしません。私自身、幸運なことに、グループ内の影響力のある開発者からサポートを得て、マネージャーに私の取り組みを喜んで説明してくれることがあります。残念ながら、半分の時間しか機能しません。テスターの個人的な意見としては、開発マネージャーに報告する必要があります。そしてチーム全員が、qa テストが実際に何をテストするかについて責任を負う必要があります。

開発者テストが最も効率的で最大の利益をもたらす方法をいくつか紹介します。

  • 開発者は機能の作業中に共有ライブラリを変更します - 開発者は、QA/検証では得られない潜在的な副作用について洞察を持っています
  • 開発者はライブラリ呼び出しのパフォーマンスに確信が持てず、単体テストを作成する
  • 開発者は、コードがサポートする必要がある仕様で考慮されていないユースケースのパスを発見し、コードを作成し、仕様を更新し、テストを作成します

3 番目の例で開発者がどの程度のテスト義務を実行すべきかについては議論の余地がありますが、ドキュメントとコードの多くの層からの関連する細部のすべてがすでに短期記憶にあるため、開発者にとってはこれが最も効率的であると私は主張します。この完璧な嵐は、事後にテスターが達成できるものではないかもしれません。

QA または検証について話しているのでしょうか?私は QA を検査チェックリスト、コード標準の適用、UI ガイドラインなどに沿って考えています。検証について話している場合、開発者が正式なテスト ケースの作成と実行に多くの時間を費やすのは意味がありませんが、開発者は適切なテストを作成するために必要なすべての理論的根拠と設計ドキュメントを提供する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top