4

この質問を修飾させてください。Model-View-Presenterを使用せず、TDDを使用して作成されていない「従来の」ASP.NETアプリケーション(Webフォーム)に取り組んでいます。また、時代遅れのデータアクセス戦略(ストアドプロシージャを呼び出してオブジェクトにデータを入力して永続化する手書きのDAOレイヤー)を使用しています。これは、私の強い願望にもかかわらず、ORMにアップグレードされる可能性は低いです。

私がアプリケーションの開発を引き継いだので、ほとんどの新機能はTDDを使用して実装されました。それでも、古いコードベース、DALレイヤー、UI全体はテストされていません。アプリケーションがその神秘的な70%のコードカバレッジ目標からどれだけ離れているかを理解する前に、コードカバレッジを決定するときに通常どのような種類のコードが含まれるかを明確にしたいと思います。

ビジネスロジックコードは明確に含まれていますが、WebFormsコードはどうですか?また、データアクセスコードはどうですか?上記のように、データアクセス層はストアドプロシージャを使用してオブジェクトグラフにデータを入力し、それらをDBに永続化します。オブジェクトの永続性と再水和は含まれるべきものですか?

この質問があまりにもオープンエンドである場合は、お詫び申し上げます。このブラウンフィールドアプリケーションをより良い形にする方法について、少し圧倒され、混乱しているように感じます。

ありがとう!

4

3 に答える 3

6

コードカバレッジやその他のコードメトリックの目標を設定しないでください。通常、ハードターゲットは良いよりも多くのダメージを与えることがわかります。

他の開発者にハードコードメトリックターゲットを与えると、ターゲットの根本的な理由を理解していない場合、彼らはターゲットをゲームするだけです。

並行した例として、私のキャリアで見た「FxCopyを幸せに保つ」コードコメントの数を信じられないでしょう。

テストカバレッジのハードターゲットを設定した場合、怠惰な開発者は、対応するテストを記述しないとカバレッジが低下するため、nullチェックなどの記述をスキップする可能性があります。その結果、コードの品質が低下します。

逆に、TDDの利点を理解している開発者は、ターゲットが必要ありません。なぜなら、彼らは関係なく正しいことをするからです。

これは、コードカバレッジメトリックが無関係であることを意味するものではありません。非常に関連性がありますが、厳しい目標を設定するのではなく、決して減少してはならないというルールが必要だと思います。

したがって、定期的に測定し、上昇しているだけであることを確認してください。それはあなたがあなた自身の個人的な目標を持つことを妨げるものではありませんが、厳しい目標を設定しないでください。

于 2010-01-12T18:09:59.303 に答える
0

コードカバレッジは、アプリケーションの安定性と高い相関関係はありません。バグレポートの流入率(およびバグの重大度)は、アプリケーションの安定性と高い相関関係があります。

私がコードカバレッジについて話すとき、私は絶対にすべてを含み、100%は非現実的であると仮定します。おそらく、このテーマについてはさまざまな意見があるので、私にはかなり主観的なようです。

私があなたの立場にあるとしたら、コードカバレッジについて心配する前に、手動および自動の回帰テストベースを構築することについてもっと心配するでしょう。

于 2010-01-12T19:52:35.393 に答える
0

ブラウンフィールドプロジェクトでは、ソースコードメトリックでもテストカバレッジでも、絶対しきい値に到達するために努力する価値がない場合があります。コード品質では、最も提案されているアプローチはボーイスカウトルールとして知られています。つまり、コード(キャンプ)を見つけたよりも少しクリーンなままにしておきます。このようにして、コードは徐々に改善されます。

テストでは、状況は似ています。コア機能は長い間生産的に使用されてきたため、この領域でバグが発生する可能性は低くなります。調査によると、最近の変更には、システム全体と比較して5倍のバグ確率があります。したがって、最近変更されたコードから始めることをお勧めします。

ソースコード管理システムからの情報を使用して、変更を識別したり、最近作成されたバイナリを最後の製品リリースと比較したりできます。範囲をさらに絞り込むために、リファクタリングのみに起因する変更を無視することができます。その後、これらの領域にテストを集中させることができます。このアプローチの例は、このブログ投稿にスケッチされています。このアイデアは実際のテスト方法にとらわれないため、単体テストと手動回帰テストの結果を組み合わせることもできます。

于 2015-06-20T20:07:11.553 に答える