我经常使用 TDD 实现库的 100% 覆盖率,但并非总是如此,而且应用程序中似乎总是有一些未测试和未被发现的部分。
在某些情况下,您从测试很少且覆盖范围很小的遗留代码开始。

请说明您的情况以及至少哪些方法有效 改进的 覆盖范围。
我假设您正在单元测试期间测量覆盖率,但请说明您是否正在使用其他技术。

有帮助吗?

解决方案

删除代码。

这不是讽刺,但实际上很严重。任何时候我都会看到最少量的代码重复,甚至是我无法执行的代码,我删除了它。这增加了覆盖范围并提高了可维护性。

我应该注意,这更适用于增加旧代码库与新代码库的覆盖范围。

其他提示

我假设你读过“代码覆盖对比已测试代码“, 正确的 ?

正如该问题中所述,

即使使用 100% 块覆盖 + 100% 弧线覆盖 + 至少一条路径直线代码 100% 无错误,仍然会有输入数据以表现出更多错误的方式执行路径/循环。

现在,我用 埃克莱玛, ,基于 EMMA,该代码覆盖工具解释了为什么 100% 的代码并不总是可能的:因为 部分覆盖线 由于:

  • 同一行上的隐式分支。
  • 共享构造函数代码。
  • 由于finally 块而导致的隐式分支。
  • 由于隐藏的 Class.forName() 导致的隐式分支。

因此,所有这 4 种情况都可能是重构的良好候选者,从而获得更好的代码覆盖率。

现在,我同意弗兰克·克鲁格的回答。一些未覆盖的代码也可能表明需要进行一些重构,包括一些实际删除的代码;)

对我所参与的项目影响最大的两件事是:

  1. 定期“提醒”开发团队实施单元测试,并审查如何编写有效的测试。
  2. 生成整体测试覆盖率的报告,并在开发经理之间传播。

我们使用 Perl,所以 开发::封面 对我们非常有用。显示单元测试期间的每条语句覆盖率、分支覆盖率和条件覆盖率,以及 POD 覆盖率等内容。我们使用 HTML 输出,其中易于识别的绿色表示“100%”,黄色和红色表示较低的覆盖水平。

编辑: 稍微扩展一下:

  • 如果条件覆盖不完整,请检查条件的相互依赖性。如果存在,请重构。如果不是,您应该能够扩展测试以满足所有条件。
  • 如果条件和分支覆盖看起来完整,但语句覆盖不完整,则您要么写了错误的条件(例如当您无意时总是从子程序中提前返回)或者您有可以安全删除的额外代码。

FIT测试改善了我们的代码覆盖率。它很棒,因为它完全不同。

背景:我们混合使用旧代码和新代码。我们尝试尽可能地对新内容进行单元/集成测试,但由于我们正在迁移到Hibernate / Postgres并远离OODB,因此测试遗留代码没有多大意义。

对于那些不知道的人,FIT是一种从用户角度测试软件的方法。实际上,您可以在HTML表中指定所需的行为:表格指定针对软件的操作和所需的结果。我们的团队编写了“胶水代码”(又名FIT测试),将操作映射到针对代码的调用。请注意,与单元测试相比,这些测试在“空间”视图中运行。

使用这种方法,我们将代码覆盖率提高了几个百分点。另外一个好处是,这些测试将跨越多个版本:它们将测试遗留代码,然后再测试新代码。从某种意义上说,它们可以作为回归测试。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top