摘要
互联网行业的产品大多要求快速更新迭代,为保证产品的质量,单测越来越受到了开发和测试人员的重视。对于一个非全新的项目,补全原有代码的单测成本非常大,并且收效不明显。目前,对于非全新项目,开发人员一般只会对增量(新增修改)代码做单测。现有的覆盖率统计工具只能够统计出单测用例对所有代码的覆盖程度,而开发人员和测试人员往往关注的是增量代码的覆盖率信息(增量行覆盖率和增量函数覆盖率)。本文将介绍一种针对PHP模块的增量覆盖率统计方法,该方法能够快速、准确的统计出模块的增量覆盖率信息,并将最终结果用报表的形式展示。
2.方法详解
增量覆盖率统计方法的详细步骤:
获取增量代码信息
svn是一款非常优秀的版本管理工具,很多项目都使用该工具进行版本管理。本文通过svn diff的方式获取基线版本(默认是线上运行版本,也可以是用户指定的版本)和提测版本之间的变化信息。
解析svn diff结果,过滤文件
解析svn diff出来的结果,提取发生变化的文件名称并记录这些文件中发生变化的行号,过滤发生了变化但文件名称后缀非php的文件。
提取增量行和增量函数信息
将提测版本部署在本地,分析上一步中得到的发生变化的文件,提取文件中发生变化函数名以及发生变化的函数的起始行号(被注释的代码不会被提取),统计发生变化的总行数和发生变化的函数总数。
获取提测版本的整体覆盖率信息
用phpunit+xdebug工具运行模块的所有单测用例,生成xml格式的覆盖率信息文件,该文件中记录了所有代码文件中的每一行代码被覆盖的次数(该文件同时记录了代码文件中函数被覆盖的次数,但是只有部分函数的覆盖次数信息,本文中介绍的方法没有用到该数据)。
解析覆盖率文件
解析上一步中获得的xml文件,从该文件中提取被修改的文件的每一行的覆盖次数。
统计增量行和增量函数的覆盖率
将第3步和第5步中获取的数据进行对比,增量行被覆盖的次数大于0表示该行被覆盖到,增量函数中只要有一行被覆盖说明该函数被覆盖到。统计被覆盖到的增量行的总数和被覆盖到的增量函数的总个数,计算出增量行的覆盖率和增量函数的覆盖率。计算公式为:
增量行覆盖率=至少被执行一次的新增和修改的代码行数/新增和修改的代码行数总和
增量函数覆盖率=已被覆盖到的新增和修改的函数个数/新增和修改的函数总和
生成覆盖率结果报表
将计算得到的增量覆盖率结果以html格式的报表输出,如表1所示:
表1
如表1所示,报表中包括了增量行总数为42、被覆盖到的行数为15、增量行覆盖率为35.71%、增量函数总数为43、被覆盖到的函数数量为3、增量函数覆盖率为9.30%、被覆盖到的函数名称以及未被覆盖到的函数名称等信息。文件1为“/abcd/cde/sadfasdf/***/file1.php”,包括函数“func1”,对应“yes”表示函数被覆盖到,文件2为“/abcd/cde/sadfasdf/***/file1.php”,包括多个函数“func2”至“func10”,“func2”至“func3”对应“yes”表示函数被覆盖到,“func4”至“func10”对应“no”表示函数未被覆盖到,没有被覆盖到的函数用红色标记。
增量覆盖率统计方法的具体流程如图1所示:
图1
3.方法优点
该方法能够快速准确的统计出提测模块的增量覆盖率信息,使得开发和测试人员都能够快速地获取增量覆盖信息,并根据增量覆盖信息有针对性的设计测试用例,提高测试效率和准确率,减少漏测。