使用phpunit测试遗留代码

har*_*s h 4 php testing phpunit unit-testing legacy-code

我有一个遗留代码库,我需要使用PHPUnit测试该代码.所以我根据你的经验要求提出建议.我应该先测试哪些课程?还是优先考虑?

我应该从easy/small类开始还是使用base/super类?

edo*_*ian 10

我将单元测试引入现有代码库的一般建议如下:

  1. 开始测试一些非常简单的类来感受编写测试
  2. 甚至可能会再次重写这些测试,并在其中做出正确的"这就是我们应该如何做"的例子
  3. 采取的一个最大和最卑鄙的在整个系统中的类,并得到该类作为最好的测试,你可以.这是向您的团队(也许是管理层)中的每个人展示单元测试您的代码库可以解决并且可行的重要一步.

在那之后,我建议你专注于三件事:

  • 确保新代码获得测试
  • 如果您修复了一个错误,请在修复之前创建一个测试,以"证明"该错误实际上已得到修复
  • 触摸/更改旧代码时使用测试作为工具,以便更好地获得更好的测试覆盖率.

PHPUnit将为您提供CodeCoverage报告,显示您的代码库测试情况.可以很酷地看到这个数字在一个月内从0.3%上升到5%到20%,但它并不是一个真正强大的动力.

为了确保您测试新代码,我建议使用PHP_Change_Coverage作为described in this blog posting

此工具将帮助您生成有意义的覆盖率报告,因为它只显示NEWLY CREATED CODE as UNTESTED而不是您所有的旧东西.

有了这些东西,你可以轻松地"在很早的时候获得很高的百分比并继续测试新的东西",同时为旧的东西创建测试.

在PHP更改范围之前: http://qafoo.com/blog/images/phpccov_without_timerange.png

之后: http://qafoo.com/blog/images/phpccov_with_timerange.png


Ira*_*ter 5

作为第一步,系统中通常会有太多代码来测试所有代码.但大多数代码已经有效.

我将从最近修改过的方法开始.据推测,大多数其他软件都在某种程度上起作用,并且测试不会发现新的或新修订的代码中会出现的错误.

如果您运行的工作(我怀疑它在不久的将来,如果你有1个或更多的开发者积极努力靠近你),最多可以移动到该方法使用被修改的方法,以具有高根据软件复杂度的方法度量标准,以及对安全系统操作至关重要的方法(使用密码登录,存储客户费用数据等)

帮助决定接下来要考虑测试的一种方法是使用测试覆盖率工具.我们通常使用它来确定如何测试的软件,但如果你没有很多的测试,你已经知道它会告诉你:你的代码是不是很好的测试: - {所以这是早在运行它没有任何意义在你的测试施工过程中.(当你接受更多测试时,你和你的经理最终会想知道这一点).然而,测试覆盖率工具也倾向于提供的已行使或不作为测试的一部分代码完整列表,提供了一个线索,你应该考什么节点:代码已获行使.

我们的SD PHP测试覆盖率工具可与PHP配合使用,并将通过交互式查看器和生成的报告提供此信息.它将告诉您哪些方法,类,文件和子系统(按目录层次结构)已经过测试以及测试的程度.如果名为"login.php"的文件尚未经过测试,您将能够轻松地看到它.而这种明确的视图使得更容易智能地决定接下来要测试的内容,而不仅仅是根据您对代码的了解进行猜测.