使用遗留代码时,单元测试生成器是否对您有所帮助?


10

我正在研究一个测试覆盖率非常低的小型C#(。NET 4.0,某些Silverlight)(约70kLOC,包括生成的)。该代码本身的工作方式是通过了用户接受性测试,但是它很脆弱,并且在某些方面没有很好的考虑。我想使用常见的疑问(NMock,NUnit,StatLight表示Silverlight位)在旧代码周围添加可靠的单元测试范围。

我通常的方法是开始进行项目,单元测试和重构,直到对代码状态感到满意为止。我过去已经做过很多次了,而且效果很好。

但是,这次我正在考虑使用测试生成器(尤其是Pex)创建测试框架,然后手动对其进行充实。

我的问题是:过去在遗留代码库上开始工作时是否使用过单元测试生成器?如果是,您会推荐它们吗?

我担心的是,生成的测试将错过代码库的语义细微差别,导致可怕的情况是出于覆盖率指标而进行测试,而不是清楚地表达代码中预期行为的测试。


我尝试了一次PeX,结果令人满意,YMMV并不令人满意。不要指望这样的工具可以“理解”您的代码及其功能要求-它不仅会错过“语义上的细微差别”,还会错过整个语义。此外,当您从旧代码库开始时,通常不会首先从单元测试开始,而要从系统或集成测试开始。绝对不是PeX创建的目的。
布朗

Answers:


9

我建议您对事物有所不同。毫无意外地将新的单元测试代码添加到现有应用程序中可能不会获得最佳效果。如果您这样做是为了熟悉代码库,或者您确实有时间杀死并想要测试测试生成器,请忽略我的评论。

务实的是,您应该浏览所有错误列表。然后为每个错误创建单元测试,从而确定其行为方式。理想情况下,仅在达到每个错误时才为其添加新代码。

添加单元测试代码的次数:

  • 添加新功能
  • 重构代码
  • 修复了一个错误
  • 学习代码的作用
  • 证明存在错误

事后很难量化添加单元测试的价值。

通常,我不允许自己写出与提问者想要的相反的答案,但是我觉得这是一个很好的经验教训。


我100%同意您的意见-这个问题是由我想知道如何最好地度过一些停机时间而引起的。我通常的做法是在修复错误或添加功能的过程中测试和重构。我希望有人能够在该地区分享一些战争故事……
邓肯·贝恩

1
+1,在事实发生后进行掩护射击通常没有效果。对防止回归的固定错误进行测试非常有成效。错误的消退对于所有参与的人来说都是非常沮丧的。测试确实适合帮助您编写更好的代码。用螺栓固定通常会导致测试不合格。我认为OP的担心已经建立,并且生成的测试中的信噪比将受到干扰。未经测试的代码中可能包含一些非常分支的位。指出代码气味的工具可能更有用。也许是FXCop和类似工具。
kevpie 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.