使用phpunit测试遗留代码

时间:2011-04-06 10:27:02

标签: php unit-testing testing phpunit legacy-code

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

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

3 个答案:

答案 0 :(得分:10)

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

  1. 开始测试一些非常简单的类来感受编写测试
  2. 甚至可能会再次重写那些测试,然后做出正确的“这就是我们应该怎么做”的例子
  3. 选择整个系统中最大和最简单的类之一,尽可能地测试该类。这是向您的团队(也许是管理层)中的每个人展示单元测试您的代码库可以解决并且可行的重要一步。
  4. 之后我建议你专注于三件事:

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

    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

答案 1 :(得分:5)

系统中通常会有太多代码作为第一步测试它。但大部分代码已经有效。

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

如果你失业了(如果你有一个或多个开发人员积极在你附近工作,我会怀疑它在不久的将来),你可以采用使用修改方法的方法,根据软件指标具有高复杂性的方法,以及对安全系统操作至关重要的方法(使用密码登录,存储客户费用数据等)

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

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

答案 2 :(得分:0)

查看PHPure

他们的软件记录来自一个有效的php网站的输入和输出,然后自动为不访问外部源(db,文件等)的函数编写phpunit测试。

这不是100%的解决方案,但它是一个很好的开始