摘要:集成测试平台通过建设基于持续集成框架的基础架构平台,实现代码托管、版本控制、持续集成、静态分析、动态测试、自动化测试、缺陷管理功能,将当前的传统软件测试工具迁移到集成测试平台,达到提高测试资源利用率、降低测试成本、加强测试质量的目的。
关键字:持续集成;集成测试;版本控制;本地工具迁移;自动化测试
1 引言
随着信息技术的快速发展,用户对便捷、可靠、安全的应用系统需求越来越高。与此同时,对于软件测试的要求也日渐提高,软件的安全性、可靠性更是至关重要。但是当前企业的研发测试工具相对落后,彼此间的闲置测试资源不能跨越融合,导致大量的测试资源浪费。对于当前亟待提高的软件测试能力与资源配置能力,基于持续集成框架的软件集成测试平台能够较好解决这些问题。集成测试平台具备节约成本、按需提供、早期测试以及自动化测试的优点,能够帮助软件企业实现软件质量控制以及节约测试成本的目的。
2 技术研究理论概述
根据基于持续集成框架的软件集成测试平台的研究目标,以业务需求、安全可靠、经济适用、可扩展性强、规范标准化为原则,拟搭建一个具有代码托管、版本控制、项目持续集成、多测试工具辅助集成、自动化测试、缺陷管理、软件质量度量以及用户/任务管理功能的集成测试平台。集成测试平台的功能结构图如下图所示:
图1 集成测试平台功能结构图
2.1基于持续集成框架的集成测试平台架构
集成测试平台通过建设以持续集成框架为基础的架构平台,构建版本控制、代码托管、持续集成、自动化测试与测试管理功能,同时实现将当前的传统桌面测试工具迁移到集成平台进行集中管理。
2.2集成测试平台代码托管与版本控制功能
代码托管与版本控制模块为开发人员提供在线的源代码管理功能,具体包括代码推送、代码推送、分支合并、冲突解决等功能。
2.3集成测试平台持续集成功能
持续集成是频繁、持续的在多个团队成员的工作中进行集成、测试,并且给予反馈的能力,是集成测试平台的核心功能部分。该模块主要包括检出代码、编译构建、运行测试、结果记录、测试统计功能。
2.4集成测试平台测试工具迁移
解决本地测试工具(Testbed、Klocwork、C++Test等)迁移到集成测试平台服务器端的兼容性与接口问题,在集成测试平台对多个项目任务实现自动排队,调用测试工具按照一定顺序对提交的任务进行分析测试,并将测试结果反馈给相关开发测试人员,防止用户集中调用测试工具引起的资源冲突。
2.5集成测试平台自动化测试功能
定期或者由事件触发进行软件测试,在非工作时间进行重复性较大的静态分析与回归测试工作,实现对软件的自动化测试,减少大量重复、枯燥的人力测试工作。包括自动化静态分析功能开发与自动化动态测试功能开发。
2.6集成测试平台缺陷管理以及软件质量度量功能
缺陷管理功能包括缺陷生命周期管理功能与缺陷统计功能。软件质量度量能力包括SLOC(源代码行数)统计、单位缺陷数、代码覆盖率、设计开发约束、圈复杂度功能开发。
2.7集成测试平台用户管理、任务管理功能
提供用户管理服务与任务管理服务。用户管理包括用户注册、用户登录、角色/权限管理、用户分组等功能;任务管理包括任务创建、任务分配、任务追踪、任务删除以及任务信息展示等功能。
3 研究方案与技术路径
根据平台搭建的技术标准,研究集成测试平台的整体架构与具体实现,通过集成各种工具实现平台的各种集成测试功能。
3.1集成测试平台架构
集成测试平台的基本架构图与组成原理图如下图所示。
图2 集成测试平台组成原理图
集成测试平台通过持续集成服务作为中心节点,连接版本控制与代码托管服务、静态分析与动态测试服务、缺陷管理服务、软件质量度量服务所在节点,对各服务节点进行统一调度管理。
代码托管与版本控制服务获取源码信息,同时将源码信息推送到持续集成服务端。持续集成平台服务端按照项目对源码信息进行编译构建,并调用平台测试工具对构建后项目进行静态分析、动态测试等测试工作,测试工具在对项目进行软件测试与质量度量后,将产生的测试结果与度量结果推送到缺陷管理工具,同时平台对测试结果报告进行显示。
3.2集成测试平台代码托管与版本控制功能
代码托管与版本控制工具分为服务器端工具与客户端工具,本系统采用的代码托管与版本控制工具的服务器端工具采用gitlab,客户端工具采用git以及turtoise。
本方案将Gitlab工具部署在服务器端。Gitlab安装设置完成后,启动相关服务,通过浏览器登录gitlab服务端,为用户项目新建一个项目,为用户提供在线代码仓库,使用户可以通过客户端工具将本地代码提交到服务器端。
为了实现客户的本地计算机与服务器端代码仓库的交互,需要安装本地git客户端,为客户提供拉取、推送、确认、克隆等代码管理服务。在安装客户端时,需要为用户指定服务器的代码仓库地址以及对应的用户及项目,同时用户在客户端需要建立本地代码版本库,与服务端仓库进行同步。
为了向用户提供更加友好的版本控制工具界面,本方案使用TortoiseGit作为Git 图形界面操作工具,可以为不熟悉linux shell脚本或者命令行的新手用户提供快速上手的可能,降低用户的学习成本的使用阻力。
3.3集成测试平台持续集成功能
本方案采用jenkins作为持续集成的实现工具,典型的集成如下图所示。
图3 持续集成的典型流程
首先,将jenkins持续集成服务从gitlab版本控制中心/代码仓库获取最新的源程序代码,随后从测试参数配置界面读取用户设置的测试参数,并通过批处理命令调用测试工具对获取到的源程序进行测试,最后通过发布插件将测试结果反馈给用户,用户根据结果测试问题更改代码,再次提交代码到gitlab版本控制中心/代码仓库。整个流程形成闭环,持续集成促进代码质量提升。
3.4集成测试平台测试工具迁移
在本地测试工具的迁移过程中,需要研究集成测试平台软件对本地测试工具的支持情况与插件开发情况,将当前拥有的商用测试工具迁移到集成测试平台中,为集成测试平台提供测试服务与测试结果信息,需要迁移的工具包括Testbed、Klocwork、C++test,同时为增加软件测试工具的丰富程度,引入cppcheck工具作为程序静态分析工具的补充。
C++test工具的迁移思路是,将整个测试流程作为一个命令行/SHELL实现。在整个测试流程中,包括待测试源程序拷贝到测试工作空间、选择合适的测试策略或者分析准则、启动测试工具以及最终生成测试报告。
C++TEST工具的脚本执行流程如下图所示。
图4 C++test工具的集成测试流程
Testbed、klocwork、Cppcheck等其他工具的迁移过程与c++Test工具类似,通过命令行对工具进行调用,最终通过生成需要的测试报告。
3.5集成测试平台自动化测试功能
自动化测试是把以人为驱动的测试行为转化为机器执行的过程。集成测试平台自动化测试服务提供自动化静态分析、自动化动态测试功能。
自动化静态分析,提供定期或者由事件触发进行静态分析功能,在非工作时间进的静态分析工作,其主要工作原理如下图所示。
图5 自动化静态分析原理图
在持续集成服务器中配置版本控制服务器与静态分析工具运行服务器,在构建设置中设置静态分析任务的触发条件或者触发时间,设置测试结果/报告的推送端口/人员。
自动化动态测试,提供定期或者由事件触发进行动态测试功能,在非工作时间进的动态测试工作,其主要工作原理如下图所示。
图6 自动化动态测试原理图
在持续集成服务器中配置版本控制、测试用例/桩函数服务器与动态测试工具运行服务器,在构建设置中设置动态测试任务的触发条件或者触发时间,设置测试结果/报告的推送端口/人员。
3.6集成测试平台缺陷管理以及软件质量度量功能
集成测试平台缺陷管理服务包括缺陷生命周期管理、缺陷统计服务。缺陷生命周期管理包括缺陷产生、缺陷分派、缺陷修复、缺陷检查、缺陷管理、缺陷再开等多个步骤,追踪缺陷从产生到修复/关闭的整个流程,提供缺陷等级、缺陷类型等多维度的划分服务;缺陷统计提供缺陷汇总统计展示功能,将项目各个阶段甚至整个研发过程的缺陷动态通过不同的可视化工具统计展示,为相关人员提供度量参考。
集成测试平台的缺陷管理工具主要通过集成jira工具来实现缺陷管理。缺陷管理具备缺陷属性设置与缺陷流转的功能。缺陷的主要属性包括缺陷名称、缺陷描述、缺陷等级等信息,测试人员可以在开启缺陷时设置缺陷属性与缺陷信息。缺陷流转功能主要是通过缺陷在各个用户之间流转达到修复缺陷的目的,一般情况下参与缺陷流转的需要测试人员、管理人员、开发人员,测试人员负责开启缺陷与回归缺陷,管理人员负责确认缺陷,开发人员负责修复缺陷。
在软件开发中,软件质量是衡量软件是否符合需求、标准的重要体现。除了代码质量外,影响软件整体质量的因素还有很多。因此,要明确软件的整体质量,就需要在各个环节严格控制。软件质量度量服务主要包括一下功能:SLOC(源代码行数)统计、代码覆盖率、设计开发约束、圈复杂度。
平台的源代码行数统计通过集成第三方工具实现,本平台当前依赖的第三方代码行数统计工具为testbed工具与Cpp NCSS工具。
代码覆盖率主要用于衡量单元测试用例的设计好坏程度,设计良好的单元测试用例能够利用最少的用例达到最大的覆盖率,同时覆盖率也用于衡量软件测试的充分程度。本平台的代码覆盖率功能由cpptest工具的单元测试部分提供,每次执行完单元测试后根据用例执行情况生成单元测试的代码覆盖率情况,具体的实现情况与自动单元测试模块的实现功能一致。
本平台的设计开发约束内容主要包括:方法/函数个数、类/方法的长度、类中方法/属性的个数几项,度量的方法采用cpp ncss工具与testbed工具进行度量。
本平台的圈复杂度度量的方法采用Cpp NCSS工具与testbed工具进行度量。
3.7集成测试平台用户管理、任务管理功能
集成测试平台提供基本的用户管理功能。用户管理包括用户注册、用户信息变更、用户登录、角色/权限管理、用户分组等功能。
项目管理包括项目创建、项目配置、项目删除以及项目信息展示等功能。
4 试用效果评估
为评估该平台在实际应用的效果与能力,现已将该平台部署到测试部门与开发部门,为相关部门提供了集成测试服务。
在测试部门部署后,提升了测试人员的静态分析效率,解决了原先测试工具LICENSE的冲突问题,当前基本上已经不存在由于LICENSE抢占而导致的静态分析工作拖后的情况,比如:某部门利用该工具开展了某雷达软件15万行的代码多版本跟踪静态分析工作,将原先需要一周才能完成的静态工具分析工作压缩到两天内完成,使评测工作的效率得到了较大的提升;在开发部门部署后,为开发部门提供C/C++代码编码规则检查/运行错误检查等错误,将软件测试集成与编码的每个阶段,降低了软件在前期引入缺陷与错误的风险,同时平台提供的自动静态分析功能容许开发人员在非工作时间进行批量代码的静态分析,保证了代码集成的安全性。
5 结论
本文根据软件测试中的实际需求,对基于持续集成框架的集成测试平台进行了研究,并对其关键技术进行了深入的研究,结合当前测试实际情况提出了平台的机构以及具体功能的实现方法,同时选取测试部门与开发部门进行部署,验证集成测试平台在测试与开发过程中的提质增效能力。通过对基于持续集成技术的集成测试平台研究与实现,降低了软件测试成本,前移了软件测试工作、精简了测试工具数量、提高了软件测试效率,解决了当前测试过程中面临的诸多能力,为测试能力提升与建设提供了良好的思路。
参考文献
[1赵亚楠. 基于Jenkins的企业持续集成系统的设计与实现[D].西安电子科技大学, 2013
[2]朱侃逸. 基于Jenkins持续集成平台的毕业论文选题系统设计与实现 [D]. 复旦大学, 2014