如何对我的单元测试进行有意义的代码覆盖分析?

Sal*_*ley 5 python testing

我管理着一个非常大的金融定价系统的测试.最近我们的总部坚持要求我们验证项目的每个部分都有一个有意义的测试.至少他们想要一个系统,保证当我们改变某些东西时,我们可以发现对其他子系统的无意改变.他们最好想要一些能够验证系统中每个组件正确性的东西.

这显然是相当多的工作!这可能需要数年时间,但对于这种项目来说,这是值得的.

我需要找出我们的代码的哪些部分不在我们的任何单元测试中.如果我知道我的系统的哪些部分未经测试,那么我可以着手开发新的测试,最终将达到我完全测试覆盖的目标.

那么我该如何进行这种分析呢?我可以使用哪些工具?

我在Windows 32位XP上使用Python 2.4

UPDATE0:

只是为了澄清:我们有一个非常全面的单元测试套件(加上一个单独且非常全面的regtest套件,超出了本练习的范围).我们还有一个非常稳定的持续集成平台(由Hudson构建),旨在在我们的测试设施中拆分和运行标准的python单元测试:根据公司规范制造大约20台PC.

本练习的目的是填补我们的python单元测试套件(仅)套件中的任何空白,以便每个组件都具有一定程度的单元测试覆盖率.其他开发人员将负责项目的非Python组件(也在范围之外).

" 组件 "有意模糊:有时它会成为一个类,有时则是整个模块或模块组件.它甚至可能涉及单一的金融概念(例如,单一类型的金融期权或许多类型期权使用的金融模型).这种蛋糕可以多种方式切割.

" 有意义的 "测试(对我而言)是验证该功能是否符合开发人员最初的意图的测试.我们不想简单地在纯python中重现regtests.开发人员的意图通常不是立即显而易见的,因此需要研究和澄清任何看似模糊的东西,然后在单元测试中将这些知识包含在内,这使得原始意图非常明确.

Raz*_*zie 6

仅对于代码覆盖,您可以使用coverage.py.

至于coverage.py与figleaf:

figleaf在几个方面与Python覆盖工具('coverage.py')的黄金标准不同.首先,figleaf使用与"有趣"代码行相同的标准作为sys.settrace函数,这消除了coverage.py中的一些复杂性(但确实意味着你的"loc"计数下降).其次,figleaf不会记录在Python标准库中执行的代码,这会导致显着的加速.第三,保存coverage格式的格式非常简单易用.

如果您从多种类型的测试中记录覆盖范围并且需要以有趣的方式聚合覆盖范围,和/或控制何时记录覆盖范围,您可能希望使用figleaf.coverage.py是命令行执行的更好选择,它的报告更好一点.

我想两者都有其优点和缺点.

  • coverage3修复了许多以前的缺点,即没有执行stdlib等. (2认同)