测试过程可视化——谈程序覆盖率监控技术
作者:严羽楠 邹然
来源:《中国金融电脑》 2017年第6期
    目前,软件测试工作在测试方法、技术手段以及管理模式等方面不断完善与创新。如何更加高效、准确地掌握测试进度及测试全面性,一直以来是每个测试管理者所面临的难题。程序覆盖率工具的出现,实现了测试执行过程的可视化,给测试管理人员提供了直观的数据支持,有效地解决了上述问题。本文将围绕程序覆盖率工具的技术实现、具体应用及所获收益,进行深入地讨论。
    一、什么是程序覆盖率
    程序覆盖率是指针对测试环境中的程序级(包括文件级和分支级)的测试执行覆盖情况的数据。程序覆盖率按照统计方式,可以分为全量程序测试覆盖率和当期版本变动程序测试覆盖率,也称为增量程序覆盖率。全量程序覆盖率监控以应用系统全量程序为基础;当期版本变动程序覆盖率则以当期版本变动程序为基础。已测试程序的执行时间须晚于程序修改时间,方可作为有效测试。
    全量程序覆盖率 = 已测试程序清单 / 全量程序清单
    增量程序覆盖率 = 已测试程序清单 / 增量程序清单
    显而易见,要实现程序覆盖率监控,必须获得三类数据: 全量程序及分支、当期版本变动程序及分支和测试执行情况记录。
    二、如何实现程序覆盖率统计
    目前覆盖率工具可支持 jsp、class、pl/sql 三类程序,如图 1 所示。通过与应用服务器交互,获取应用的全量程序及分支、当期版本变动程序及分支和测试执行程序及分支。以下对具体实现方式进行阐述。
   
    1. 采集全量程序及其分支
    针对 jsp 和 class 程序,程序覆盖率工具通过对应用服务器程序路径进行扫描,获得全量程序及分支清单;针对pl/sql,程序覆盖率工具对存储过程中关键字(begin、if、else 等)进行打桩识别,获得全量程序及分支清单。
    2. 采集当期版本变动程序及分支
    针对 jsp 和 class 程序,程序覆盖率工具通过对应用服务器程序路径进行定时扫描,对应用服务器环境程序进行 md5 值运算,获取每个程序文件唯一 md5 编码,当程序发生变化,相应 md5 值也将发生改变,工具通过比对 md5 值,获取程序变化状态。针对 pl/sql,程序覆盖率工具通过打桩动作,对 oracle 数据库环境中存储过程进行 hash 值运算,将 hash 值与程序清单一一对应,当数据库程序发生变动后,打桩工具识别出程序所对应hash 值前后发生变化,获取程序修改变动情况。通过上述处理逻辑,程序覆盖率监控工具获得当期版本程序的变动清单及程序对应修改时间。
    3. 获取测试执行情况记录
    针对 jsp 的测试执行,程序覆盖率工具通过对system.out.log 里 JSP 初始化 Servlet 的记录来识别 jsp 测试执行记录;针对 class 执行,则通过采用 jacoco 工具获取测试执行环境内存中的痕迹,捕捉 class 执行明细;针对 pl/sql 存储过程的测试执行,则采用存储过程中的打桩语句执行记录来进行统计,当测试执行某个存过时,关键字后的桩自动插入执行记录进入明细统计表。通过对上述三类数据的获取,即
实现了覆盖率监控基础数据的产出,如图 2 所示。
   
    三、程序覆盖率监控的实际部署
    程序覆盖率部署包括监控执行机、监控客户端、监控数据库的部署。jenkins 工具定时调度自动化脚本的方式作为监控执行机,驱动部署在应用服务器上的监控客户端执行相关监控命令,获取数据信息写入监控数据库中。同样,针对 pl/sql 打桩工具,覆盖率工具通过在版本部署后串联打桩任务来保证应用数据库环境程序更新后能够及时打桩体现变动程序清单及修改时间,保证了在程序更新后的测试动作为最新状态。监控整体框架如图 3 所示。
   
    四、测试过程可视化的收效
    获取了程序覆盖率监控的基础数据后,程序覆盖率监控工具的报表系统将对数据进行组合,形成有价值的监控报表。通过监控报表,可以直观地展现测试进度,实现了测试过程的可视化。目前,我工商银行运用的程序覆盖率监控工具有以下四大优势:
    1. 客观准确地掌握测试执行进度及修改范围
    通过程序覆盖率监控进度报表能直接客观地展示当前版本的测试进度情况,而不依赖于测试人员手工勾选执行测试案例,更加客观准确地体现测试进度。同时,通过程序覆盖率监控报表,及时掌握当期版本程序修改变动清单,对比测试案例,发掘测试遗漏及开发修改漏通知。
    通过图 4 可以看出,测试案例执行率达到 92% 时,程序覆盖率仅 68%,原因是程序经过反复修改,
导致程序覆盖率曲线下降,测试人员需再次对程序进行验证,更客观地体现测试人员实际执行情况。
    2. 更好地协同管理不同测试阶段
    目前,工商银行软件开发中心的内部测试工作主要分为功能测试和流程测试两个阶段。传统的两阶段测试存在测试案例重复和测试边界不清等问题,导致两阶段测试团队存在一定程度上的资源浪费。通过在功能和流程测试环境分别部署程序覆盖率监控工具,获取各阶段程序覆盖情况,揭示两阶段重复测试内容,减少资源重复投入,提示两阶段遗漏测试内容,开展针对性的分工合作,加强测试互补。举例见表 1。
    3. 更好地提升测试完备性
    近年来工商银行测试团队进行了测试资产建设工作,旨在对各应用系统建立完备的测试案例库,通过运用程序覆盖率工具,将测试案例库中案例与程序建立对照关系。一方面确保全量案例库能覆盖该应用系统所有程序,保证完备性;另一方面当某个程序发生变动后,通过测试案例与程序对照关系,获取该程序对应的测试案例,实现需执行案例的自动检出,从而实现辅助自动化测试。
   
    4. 程序覆盖率监控带来的附加效益
    程序覆盖率监控工具的使用,不但丰富了测试管理的方法,帮助及时掌握测试进度,全面排查测试遗漏风险,协同管理功能、流程测试团队共同完成测试目标,而且也给测试管理带来额外的收益。通过程序覆盖率数据,可获取单个程序修改次数,掌握各应用研发质量水平,为开发团队提供了管理数据;通过测试执行明细结合大数据技术,分析测试人员测试行为,为管理层提供更多的决策数据支撑。sql软件是什么软件
    综上所述,覆盖率监控工具给整个研发团队带来了以往无法比拟的收益,为测试团队的管理提供了更多的技术手段和管理办法,是一款极具性价比的测试工具。