4

Let me qualify this question. I'm working on a "classic" ASP.NET application (Web Forms) that doesn't use Model-View-Presenter and was not written using TDD. It's also using an antiquated data access strategy (hand written DAO layer that invokes stored procs to populate and persist objects) that is unlikely to be upgraded to an ORM despite my strong desire to do so.

Since I took over development of the application, most new features have been implemented using TDD. That still leaves the old code base, DAL layer and entire UI as untested. Before I figure out how far away the application is from that mystical 70% code coverage goal, I'd like to get clarity around what kind of code is typically included when determining code coverage.

Business logic code is clearly included, but how about WebForms code? Additionally, how about data access code? As mentioned above, our data access layer uses stored procedures to populate object graphs and persist them back to a DB. Is object persistence and re-hydration something that should be included?

I apologize if this question is too open ended, I just feel a little overwhelmed and confused about how to get this brownfield application in better shape.

Thanks!

4

3 回答 3

6

不要为代码覆盖率或任何其他代码指标设置目标。事实证明,硬目标造成的伤害大于好处

如果您给其他开发人员硬编码指标目标,如果他们不了解目标的根本原因,他们只会玩弄目标。

作为一个平行的例子,你不会相信我在职业生涯中见过多少“让 FxCopy 开心”的代码注释。

如果您为测试覆盖率设置了一个硬目标,懒惰的开发人员可能会跳过编写空检查等,因为如果他们不编写相应的测试,这会降低他们的覆盖率。最终结果是代码质量较差。

相反,了解 TDD 好处的开发人员不需要目标,因为无论如何他们都会做正确的事情。

这并不意味着代码覆盖率指标无关紧要。这是非常相关的,但我认为你应该有一条规则,说它绝不能减少,而不是设定一个硬目标。

所以定期测量它并确保它只会上升。这并不妨碍你拥有自己的个人目标,但不要设定一个硬性目标。

于 2010-01-12T18:09:59.303 回答
0

代码覆盖率与应用程序稳定性的相关性不高。错误报告的涌入率(以及错误的严重程度)确实与应用程序稳定性有很高的相关性。

当我谈论代码覆盖率时,我绝对包括所有内容,并且假设 100% 是不现实的。关于这个主题可能有很多不同的意见,所以对我来说似乎很主观。

如果我处于你的位置,我会更担心在担心代码覆盖率之前构建手动和自动回归测试库。

于 2010-01-12T19:52:35.393 回答
0

在棕地项目中,达到任何绝对阈值可能不值得,无论是源代码指标还是测试覆盖率。在代码质量方面,最推荐的方法被称为童子军规则,即让代码(营地)比你找到的更干净。这样,代码会逐渐完善。

在测试中,情况类似。核心功能已经被高效使用了很长时间,因此该区域出现错误的可能性很低。研究表明,与整个系统相比,最近更改的错误概率是系统的五倍。因此我建议从最近更改的代码开始。

您可以使用源代码管理系统中的信息来识别更改,或者例如将最近构建的二进制文件与最后的生产版本进行比较。为了进一步缩小范围,您可以忽略仅源自重构的更改。然后,您可以将测试重点放在这些领域。此博客文章中概述了此方法的一个示例。由于这个想法与实际的测试方法无关,它甚至可以结合单元测试和手动回归测试的结果。

于 2015-06-20T20:07:11.553 回答