5

最近終わったばかりのプロジェクトを振り返ってみると、非常に深刻な問題が見つかりました。私は銀行の時間のほとんどをコードのテストに費やし、コードエラーを「引き起こす可能性がある」さまざまな状況を再現しました。

テストに費やす時間を短縮して開発をよりスムーズにする方法について共有するアイデアや経験はありますか?

私はすべてのコードでテスト駆動の概念に従おうとしましたが、これを達成するのは非常に困難であり、ここの先輩たちの助けが本当に必要です。

ありがとう

再:すべて

上記の回答に感謝します。最初の質問は、一般的なテストの時間を短縮する方法でしたが、今では、効率的な自動テストコードの記述方法に問題があります。

この時間を短縮するために、テストスーツの書き方のスキルを向上させていきます。

ただし、エラーの再現に費やす時間を短縮する方法にはまだ苦労しています。たとえば、標準のブログプロジェクトでは、状況を再現するのは簡単ですが、エラーが発生する可能性がありますが、複雑な特注の内部システムをテストすることはできません。簡単に理解できますが、それは価値がありますか?この種のプロジェクトでテスト計画を立てる方法について何か考えがありますか?

まださらなる答えをありがとう。

4

9 に答える 9

6

テスト駆動設計は、テスト(品質保証)に関するものではありません。当初から名前が付けられていませんでした。

これは、マシンで実行可能な仮定とプログラムの動作の仕様を設定することであり、プログラミング中にプログラマーが実行して、仮定が明示的であることを確認します。

これらのタスクは製品ライフサイクルのある時点で実行する必要があるため、それは単に作業のシフトです。それが多かれ少なかれ効率的であるかどうかは、別の時間の議論です。

あなたが言及していることは、私はテストとは呼びません。強力なTDDがあるということは、テストビルドに到達するずっと前にキャッチされるエラーについて、テストフェーズに大きく依存する必要がないことを意味します(TDD以外の優れた仕様と応答性の高い利害関係者を持つ経験豊富なプログラマーの場合のように)環境)。

先行テスト(実行可能な仕様)が深刻な問題であると考える場合、開発の相対的な段階で時間と費用がかかると予想される作業量にかかっていると思いますか?

于 2009-05-30T01:34:57.677 に答える
3

私は理解したと思います。開発者テストレベルより上には、顧客テストレベルがあり、そのレベルでは、多くのバグを見つけているようです。

見つけたすべてのバグについて、停止し、テスト用の帽子を脱いで、繁殖用の帽子をかぶって、正確な繁殖戦略を理解する必要があります。次に、バグを文書化する必要があります。おそらく、バグ追跡システムに配置します。次に、テスト用の帽子をかぶる必要があります。その間に、あなたはあなたが取り組んでいたどんなセットアップも失い、あなたがどんなテスト計画をたどっていたとしてもあなたがどこにいたのかを見失いました。

さて、それが発生する必要がなかった場合、バグが非常に少ない場合は、テストをすぐに実行できますよね?

GUI駆動のテスト自動化がこの問題に役立つかどうかは疑わしいです。テストの記録と保守にはかなりの時間を費やします。これらの回帰テストは、投資を回収するのにかなりの時間がかかります。最初は、GUIを駆使した顧客向けテストの方がはるかに遅くなります。

したがって、(私が提出する)本当に役立つのは、開発活動から得られる/initial/コードの品質の向上です。マイクロテスト(元の意味では開発者テストまたはテスト駆動開発とも呼ばれます)は、これに本当に役立つ可能性があります。役立つもう1つのことは、ペアプログラミングです。

他の誰かとペアを組むことができないと仮定して、私はあなたのバグ追跡システムを調べるのに1時間を費やします。私は過去100の欠陥を見て、それらを根本的な原因に分類しようとします。「トレーニングの問題」は原因ではありませんが、「1つのエラーでオフ」が原因である可能性があります。

それらを分類してカウントしたら、スプレッドシートに入れて並べ替えます。最も頻繁に発生する根本的な原因は、最初に防止する根本的な原因です。あなたが本当に空想を得たいのなら、根本的な原因にそれが引き起こす痛みの量であるいくつかの数を掛けてください。(例:これらの100個のバグで、メニューに30個のタイプミスがあり、修正が簡単で、再現が難しいjavascriptエラーが10個ある場合は、最初にjavascriptの問題を修正することをお勧めします。)

これは、これらの根本原因のそれぞれに魔法の「修正」を適用できることを前提としていますが、一見の価値があります。例:IE6の透明なアイコンは、IE6が.pngファイルを簡単に処理できないことが原因である可能性があります。したがって、チェックイン時に.gifを拒否するバージョン管理トリガーを用意すると、問題が修正されます。

それがお役に立てば幸いです。

于 2009-06-09T13:17:41.393 に答える
2

あなたが書いた:

「上記の回答に感謝します。最初の質問は、一般的なテストの時間を短縮する方法でしたが、今では、効率的な自動テストコードを作成する方法に問題があります。」

複数の経験的研究でテスト効率を最大化するために非常にうまく機能することが証明されている1つの方法は、組み合わせテストです。このアプローチでは、テスターはどのような種類のものをテストする必要があるかを識別し(そしてそれを単純なツールに入力し)、ツールはアプリケーションをテストする方法を識別します。具体的には、ツールは、どのテスト条件のどの組み合わせをどのテストスクリプトで実行するか、および各テストスクリプトを実行する順序を指定するテストケースを生成します。

たとえば、Rick Kuhn博士、Raghu Kacker博士、Jeff Lei博士と共同執筆した2009年8月のIEEEComputerの記事では、あるグループのテスターが標準のテスト設計を使用した10のプロジェクト調査に焦点を当てています。メソッドとテスターの2番目のグループは、同じアプリケーションをテストし、組み合わせテストケースジェネレーターを使用して、それらのテストケースを識別しました。コンビナトリアルテストケースジェネレーターを使用しているチームは、平均して、テスター時間あたり2倍以上の欠陥を発見しました。これは効率の強力な証拠です。さらに、コンビナトリアルテスターは全体で13%多くの欠陥を発見しました。それは品質/徹底性の強力な証拠です。

これらの結果は珍しいことではありません。このアプローチの詳細については、http://www.combinatorialtesting.com/clear-introductions-1およびツールの概要をご覧ください。スクリーンショットと、カバレッジを最大化するテストのサブセットを特定することにより、ツールがテストをより効率的にする方法の説明が含まれています。

また、Hexawiseテストケースジェネレーターの無料バージョンは、www.hexawise.com / users/newにあります

于 2009-09-18T15:04:15.963 に答える
2

Subversionチームは、プロセス全体を自動化することにより、かなり優れたテストルーチンを開発しました。

私はこのプロセスを自分で使い始めました。たとえば、新機能を実装する前にテストを作成しました。これは非常にうまく機能し、プログラミングプロセス全体を通じて一貫したテストを生成します。

SQLiteには、それがどのように行われるかについての非常に優れたドキュメントを備えたまともなテストシステムもあります。

于 2009-05-30T00:57:44.290 に答える
2

テスト駆動開発の私の経験では、時間の節約は、テストを書き留めた後、または少なくとも基本テストケースを書き留めた後にうまくいきます。ここで重要なのは、実際に自動テストを作成する必要があるということです。あなたの質問の言い回しは、あなたが実際に自動テストを書いているのではないと私に信じさせます。テストを作成したら、後で簡単に戻ってテストを更新し、以前は検出されなかったバグをカバーすることができます(回帰テストを改善するため)。また、コードが簡単かつ比較的迅速にリファクタリングできます。大幅に変更した後も、期待どおりに機能します。

于 2009-05-30T01:32:53.187 に答える
1

生産的にテストしている場合、テストに多くの時間を費やしても本質的に問題はありません。テスト駆動開発とは、(ほとんどが自動化された)テストを最初に作成することを意味します(完全なテストスイートを作成する場合、これには合法的に長い時間がかかる可能性があります)。テストの実行にはそれほど時間はかかりません。

于 2009-05-30T00:52:30.307 に答える
1

自動テストを行っていないことが問題のようです。自動化されたユニットテストと統合テストを使用すると、テストに費やす時間を大幅に短縮できます。

于 2009-05-30T01:24:36.543 に答える
1

まず、あなたが助けを必要としていることを認識しているのは良いことです-今すぐ行っていくつかを見つけてください:)

アイデアは、テストを使用して、コードが何をすべきかを考えるのに役立つことです。テストは設計時間の一部です。

また、コードの総所有コストについても考慮する必要があります。バグを最初に修正するのではなく、本番環境に移行するためのコストはいくらですか?あなたが銀行にいる場合、数字を間違えることについて深刻な影響がありますか?時々、正しいものはただ時間がかかります。

于 2009-05-30T17:57:17.660 に答える
0

かなりの規模のプロジェクトで最も難しいことの1つは、基盤となるアーキテクチャとAPIを設計することです。これらはすべて、単体テストのレベルで公開されます。最初にテストを作成する場合、プログラムロジックではなく、テストをコーディングするときに設計のその側面が発生します。これは、コードをテスト可能にするための追加の努力によってさらに複雑になります。テストを取得すると、通常、プログラムロジックは非常に明白になります。

そうは言っても、地平線上に いくつかの興味深い自動テストビルダーがあるようです。

于 2009-05-30T01:40:58.070 に答える