プログラムでコードをテストする:プログラマーまたは他の誰かによって?

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

質問

だからここに状況があります - 私の上司からの引用:「[...]私たちはプログラミングに焦点を合わせる必要があります。 。」これは、3か月の困難なバグのリストがあり、最近、SeleniumフレームワークでWebテストを書くための非プログラマーを指定した後に言われています。

私の上司は非常にユニットテストが恥ずかしがり屋です(開発者を遅くすると、彼は費用のメリットを見ることができません)。一般的なWebテストとプログラムテストに関するあなたの意見はどうですか?それらは(またはa)プログラマーによって書かれるべきですか、それとも重要ですか?私の考えは、優れたソフトウェアを書くことの一部がテストを書くことだということでしたか?彼はMicrosoft Ivory owerのような男であるため、Microsoft(または一般的に良い記事)が設計によるテストに賛成したリソースは役立ちます。

役に立ちましたか?

解決

これが私がしたことです。

  1. とにかくテストを書きました。

  2. テストを書いた後にコードを書きました。

  3. コードは堅実で、(ほとんど)バグフリーでした(私の能力の限界まで)。

私はTDDをやっていると誰にも言ったことはありません。彼らが尋ねない限り。

TDDは、何かをデザインし、コーディングし、それが機能することを期待しようとすることをいじくり回すよりも、実際にはより速いことがわかります。

いくつかのことには、追加のステップ0:「テクノロジースパイク」が含まれているものが含まれます。これに続いて、いくつかのテスト開発が行われ、まだ作成されていない実際のソフトウェアを行使します。

デザインの開始に関しては、予定が少し遅れています。私のデザインは「そのデザインのデザインと書き込みのテスト」であるため、他の人々のデザインは「賢いアイデアを傷つけますが、本当の証拠はありません」。一部の人々は紙によくデザインすることができます。私はできません。しかし、私はテストを設計することができます。

コードの仕上げに関しては、私は一般的にかなり先です。それ以来 - 私がコーディングを終えたとき - すべてのテストが渡されます。

他のヒント

Code Completeは、Microsoftコレクションの一部である本です。これには、コンセプトとしてユニットテスト時のピアレビューとブラッシングを提唱するアドバイスが含まれています。ユニットテストではあまり詳細に進むことはありませんが、彼をアイデアに暖めることができ、そこからトピックをさらに探ることができます。

最終的には、テストの自動化に直接関与するプログラマーである人が必要です...つまり、それは定義上です。

ユニットテストは、書かれているサブシステムに最も精通している人々によって最も効果的に書かれています。他の誰かがユニットテストを書くために選択されたとき、彼らは時間がかかるのに時間がかかり、コードで文書化されたり明確ではない意図を見逃す可能性がありますカバレッジが悪化する可能性があります。反対に、サブシステムの所有者は特定の欠陥にも盲目になる可能性があります(しかし、これはピアコードのレビューの目的です!)


これの残りの部分は、本当に倫理についての単なる怠idleな議論ですが、考慮することが重要です。

一部の人々は、経営陣が馬鹿げた決定を下すときにビルドに「たわごとをこっそり」にしようとするのが好きです。これは私を不安にさせるだけでなく、それらのプログラマーについても少し警戒しています。私はモチベーションを理解しています、私たちは皆そこにいたと思いますが、最終的には、沈下に参加するのではなく、教育する必要があります。

経営陣はスケジューリングにおいて重要な役割を果たし、正確な見積もりと行われている仕事の一般的な理解の両方をあなたに依存しています。敷物の下で余分な作業を掃除するために見積もりを詰めると、それは本当に良いことですか?単純な嘘は、あなたがあなたのキャリアの進歩を支援するために直接関与している人々にプレーしているこの精巧なデマになります。

合法的な仕事のプロセスと推定の問題は、現在、粘着性のある倫理の問題になっています。

マネージャーに、マイクロソフトへの彼の愛に訴えることを通してあなたの視点を見るようにあなたのマネージャーに説得するというあなたの計画されたアプローチについて強くお勧めします。 ;)

長期的には、プログラミングプロセス(実際には決定を下すための仕事ではない)に関する決定について常に経営陣と戦っていることに気付いた場合、その履歴書を磨き、より良い仕事を見つけるのが最善でしょう。

プログラマーの仕事の一部は、専門知識が少ない関係者を教育することです。あなたのマネージャーにそれを説明することは、彼が主題に持っているいくつかの知的障壁のいくつかを打ち破り、彼が問題に関するあなたのアドバイスを受け入れるように柔らかくするのに役立つかもしれない。

私は、何かが「完了」するためには、少なくとも2人によって検証される必要があるという世界に行きます。チームの全員がソフトウェアの品質がすべての人の仕事であると信じている場合、チームのソフトウェアテスターが常に必要ではありません。

あなたがそれを非常に効率的にしたい場合、コードを書く開発者はテストを書き留めているはずであり、誰かが制作コードでそれらをレビューします。非常に効果的になりたい場合は、誰かとペアになり、「ペアのTDD」でコードを書く間、テストを書きます。

マネージャーに、バグのコストが発見された後、透明に拡大することを思い出させてください。

私はあなたの上司がどこから来たのか理解しています。結局のところ、プログラマーは、「機能する」だけのコードを解約できるはずです。ただし、テスト 意思 何があっても、ユニットテスト、会社での統合テスト、または顧客にインストールした後。これらの各段階でのエラーには、異なるコストと結果がありますが...

他の人があなたのコードを異なる方法で解釈する可能性があるため、他の人にあなたのコードをテストさせることをお勧めします。ただし、自分のコードのテストを書くことの利点は、それがどこに欠陥があるかを知っていることです。

効率的なアプローチは、両方の混合物である可能性があります。プログラマーは自分のユニットテストを書いており、コーナーケースと他の誰かが機能テストを行って、高レベルの仕様に焦点を当てています。

すべてのテストが平等に作成されるわけではありません。

  • ユニットテスト / TDD。それに反対するのは、それに反対するのは難しいです。「開発者が遅くなると費用のメリットを見ることができない」とは反対です。 S.ロットは詳細を調べます。
  • 焦点を絞った統合テスト。上記と同じですが、より速いです。完全に統合されたアプリを通じて一連のステップを実行する必要はありません。これは、あなたが書いたばかりの統合コードの非常に薄い層が機能しているかどうかを調べます。それはあなたがそこに行かなければならないことが何度も繰り返され、それが誤って異なるプロセスにしっかりと結合されたときにさらにそれ以上に繰り返されると考えると最悪です。
  • 完全なシステムテスト。上記を所定の位置に置いて、すべてのピースが正しくフックされているかどうか、UIが予想どおりに機能しているかどうかを知りたいだけです。早めには、非常に迅速に記述されるテストのほんの少しの量が必要です。それを(あなた自身を含む)人々が手動で何回行くかを比較し、あなたは勝者を持っています:)。後では、自動テストでキャッチするのが難しいものがいくつかあるので、それらに自動化を集中する必要はありません。
  • 探索的テスト。これらはまだ行われるべきです。この時点で追加の変更を行わないように機能が構築される前に、十分に考えられることを願っています。

現在、QAは通常、追加のシナリオを思いつきます。これは良いことですが、自動化されたテストで共同の方法に含まれている場合に最適です。

実際の問題の1つは、現在のチームスキルです。単体テストはコードの結合が多いほど困難です。これは通常、ユニットテストのない既存のコードで最悪ですが、最初はコードをゆるい結合/高を設計する方法をよく知らない開発者にとって前進することも困難になります。凝集コード。それは行う必要がありますが、コストがどこかに(チームメンバーまたは会社にとって)どこかに行くので、これに注意してください。

優れたテストスイートを作成するには、かなりの労力が必要です。これには予想よりも時間がかかります。

この点で、上司は正しいです。

ただし、製品(機能の追加)またはWebサイト(ページとJavaScriptコードの追加)を拡張する予定がある場合は、後でスイートを作成する必要があります。

あなたはそれを指摘することができます 単体テスト VS2005以来、.NETフレームワークに組み込まれています。

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