智能保护装置软件模块动态仿真测试工具研制
2021-12-23张超永许英豪
刘 沛,张超永,许英豪,王 鹏
(许继电气股份有限公司,河南 许昌 461000)
0 引 言
软件模块具有结构清晰、可重用性高等特点,广泛应用于特高压交流、智能变电站保护装置、稳控装置等电力系统重点项目的智能保护装置中[1].针对模块开展软件白盒测试,是夯实保护装置产品软件基础的重要手段,在提升保护装置产品软件质量上发挥了重要作用.
目前,软件模块开展软件动态测试虽然取得一定的成效,但仍存在以下不足:
1) 模块测试主要针对软件内部源代码开展测试,对人员素质要求较高,同时当前缺乏适用的测试工具,依靠人工开展测试的效率有待提高[2].
2) 基础模块作为元件库的形式存在,数量庞大,质量要求高,随着批量测试需求的增加,需要创新测试方法和手段来保证测试进度.
3) 测试驱动、测试用例、测试数据等保存的方法和格式过于简单,不利于软件模块快速迭代开发对回归测试的需求,需要规范化建立完善的测试过程数据存储机制,以便于软件模块的回归测试[3,4].
4) 仅依靠人员的交叉覆盖测试难以控制人为的偶发性失误,容易造成测试不充分或测试质量参差不齐的情况.
5) 软件模块级的动态测试对应用产品依赖性高、针对性强,导致市场上很难出现针对软件模块动态测试通用工具[5].
针对以上测试现状,本文设计开发一套嵌入式软件保护模块动态仿真测试工具,旨在解决测试过程中的难题,提高测试效率和测试质量,支撑软件研发质量的持续提升.
1 动态仿真测试工具需求分析
1.1 功能性需求
软件模块的一般测试过程如图 1 所示,测试人员拿到一个软件模块后,首先,根据软件模块应用场景,开发测试驱动,确保软件模块能够编译通过、动态运行;然后,编辑测试用例,在测试驱动中执行用例;最后,查看测试结果给出判断,完成软件模块的动态测试[5].
图 1 软件模块测试过程图
在整个测试过程中,有3个核心步骤,① 编辑用例,② 开发测试驱动,③ 查看测试结果并给出判断.目前,这3个过程全靠测试人员手动完成,其中测试用例是测试人员在TXT中文本中手动编辑; 驱动是测试一个模块,测试人员开发一个驱动,测试执行完再由测试人员去查看结果.对此,工具应具备以下几种基本功能:
1) 测试用例自动生成:测试工具应能对被测源代码进行静态分析,挖掘出代码变量、逻辑等重要信息,并根据这些重要信息生成测试用例供测试人员选择;
2) 强大的用例管理功能:随着保护装置产品的不断升级,软件规模越来越大,模块数量越来越多,测试用例成指数级增长,如何管理好这些用例、维护好用例库已成为一个亟待解决的问题,测试工具应具备强大的测试用例管理功能;
3) 具备通用性强的测试驱动:测试工具应有一个通用性很强的仿真数据模型[6],以避免每次新软件模块的测试都需要重写测试驱动;
4) 测试过程自动化:工具应具备测试过程的高度自动化,一个软件模块设计完测试用例后,应能达到不需要人工干预的情况下完成测试自动执行、结果自动判别.
5) 测试信息灵活展示:工具应具备展示当前测试结果、历史测试结果、测试过程信息等功能.
1.2 非功能性需求
测试工具除了功能性满足基本要求外,还应满足以下非功能性要求:
1)易用性:测试工具的使用应符合测试人员的工作习惯,使测试人员不需要培训或进行简单的培训就能轻易使用工具[7].能达到简单易用、界面友好等基本要求;
2)可扩展性:随着保护装置产品的更新换代,软件模块的应用环境难免出现新的变化,测试工具应具备很强的可扩展性以满足新产品软件模块的测试需求;
3)高效性:测试工具一定要具备高效性,不能为了实现自动化而牺牲效率.另外,工具不应该出现卡顿、切换界面迟钝等现象[8].
2 动态仿真测试工具设计
2.1 仿真测试工具整体架构设计
根据需求分析,采用模块化、层次化的理念对仿真动态测试工具进行总体设计.
仿真测试工具的整体架构如图 2 所示,整体架构分应用层和数据仿真层.应用层主要包含测试用例编辑功能模块、测试用例管理功能模块、测试自动执行模块、测试自动判断、测试写过展示、测试报告生成、测试任务控制和系统配置等功能;数据仿真层主要包括智能保护装置采样通道仿真、品质因数通道仿真、开入开出通道仿真、通道状态仿真、采样连续状态仿真、采样跟踪频率仿真、CPU间通信状态仿真和遥控状态配置等仿真功能[9,10].以下对动态仿真测试工具的核心功能设计进行详细说明.
图 2 仿真测试工具整体架构图
2.2 动态仿真功能设计
项目团队结合多年的保护模块测试经验积累,对几十种智能保护产品软件进行深入研究、全面分析、反复论证,最终构建了一套通用性强的仿真数据模型,并通过测试任务链表动态控制数据模型工作,实现动态仿真功能,测试工具实现动态仿真的原理如图 3 所示.
图 3 本文研制工具实现动态仿真原理图
测试工具根据测试用例生成用例执行任务链表,并依据任务链表进行用例执行,在用例执行过程中,动态调用数据模型接口,实现对保护软件模块应用环境的仿真.
2.3 测试用例编辑功能设计
测试工具通过对被测软件模块的源代码进行静态分析,提炼出源代码中变量、参数、边界、条件语句等信息,根据这些信息生成测试用例供测试人员选择、编辑,并能根据变量类型边界值检测测试人员输入数据的合法性,确保测试用例能可靠执行.
用例编辑的过程如图 4 所示,测试人员选择、编辑用例的来源有3种:测试工具自动生成的用例,打开原有用例和纯手动输入用例生成条件生成的用例.
图 4 用例编辑过程图
自动生成的测试用例一般数量比较多,针对性不强,具体执行时需要测试人员通过选择、修改等手段优化测试用例集.回归测试时,特别是针对性回归时,测试人员可以选择打开原有的用例进行编辑优化等.测试工具支持没有加载任何测试对象情况下的纯手工编辑用例,以增加用例编辑的灵活性.
2.4 测试用例管理功能设计
测试用例是测试工作的灵魂,更是测试人员劳动成果的重要价值体现,做好测试用例管理十分必要.
测试用例管理主要包括测试用例的搜索,用例库导入、导出,及用例备份等.用例搜索主要是在用例库中搜索目标用例,然后导出,以供测试人员使用.用例导入支持测试人员完成测试后提交用例入库.用例备份支持测试用例的打包备份,保证用例数据的安全性.
2.5 测试工具工作流程设计
测试工具的工作流程设计如图5所示.
图 5 测试工具工作流程图
启动测试工具之后,首先是确定要执行的用例.有3种方式确定用例集:① 自动生成用例,然后人工选择、修改优化用例,这种方式需要加载被测对象,然后点击自动生成用例;② 纯手工输入生成用例条件,即纯手工编辑测试用例,前提是测试人员对被测对象很熟悉,测试工程已经建好,直接人工编辑用例,用例针对性强;③ 打开原有用例集进行修改、优化等.
确定完测试用例集之后,直接点击保存,即可接着点击执行,测试工具会自动检测用例合法性、自动执行测试、自动判别测试结果,最后,通过界面展示出当前测试结果,测试人员也可以通过工具查看历史测试数据.
3 本文设计中关键问题及其解决方案
3.1 智能装置保护功能的仿真
由于被测对象最终是运行在智能装置内的,所以对软件模块的测试中必须建立智能装置的部分功能的仿真环境.但建立一个功能齐全的智能保护装置仿真环境又不现实(特别是开发新产品时建立一个功能齐全的仿真环境所花费的时间足可以开发一个新产品).另外,作为测试人员来说,主要精力也不在此.所以只需要凭借资深测试人员多年积累的测试经验建立一个通用的、保护装置核心的功能仿真环境来保证被测对象的运行.具体设计方案在文章2.2节中已经详细给出,这里不再赘述.
3.2 测试用例的自动生成
测试用例自动生成技术是测试领域的一个重点也是难点,至今没有很好的解决方案,本文采用人工干预的测试用例自动生成,首先,测试工具通过静态分析被测对象的源代码得出基础信息,根据这些基础信息生成尽可能全的测试用例,最后,再由测试人员根据测试项目需要修改、完善测试用例.这样既提高了测试用例生成的效率,又保证了用例设计的准确性.
4 测试工具的实现
测试工具在windows系统中VS2010+Qt开发环境下实现,界面如图 6 所示.
测试工具界面包括菜单栏,工具栏.其中菜单栏位于主窗口的顶端,菜单固定不能拖动,包括文件、用例编辑、测试执行、测试结果展示、模式选择、系统设置和帮助等主菜单;工具栏位于窗口的顶部,可拖动.工具栏列出了菜单栏里的几个常用功能,包括加载测试文件、生成测试用例、打开测试用例、保存用例、打开测试工程、查看当前测试结果、测试报告生成、取报告号、系统配置、关于、添加一行、删除选中行.
图 6 保护软件模块动态仿真工具界面
4.1 用例编辑菜单的实现
用例编辑主要是实现试用例的生成、编辑等,菜单如图 7 所示.
图 7 用例编辑菜单
1) 生成用例:根据对被测源代码的分析,工具自动生成一部分测试用例.
2) 打开用例:打开原有的测试用例.
3) 保存用例,保存当前界面中显示的测试用例,并同时更新配置文件DataFileNameList信息.
4) 添加一行:在当前界面上添加一行测试数据.
5) 删除选中行:删除当前界面显示的选中行.
6) 用例另存为:与用例保存类似,但不更新配置文件.
7) 手工编辑用例:不打开被测对象,直接手动编辑用例.
4.2 测试结果展示菜单的实现
展示测试结果,如图 8 所示.
图 8 测试结果展示菜单
1) 测试结果查看:查看当前测试结果.
2) 测试报告生成:自动生成测试报告.
3) 取报告号:自动关联报告号管理网站.
4) 历史测试结果查看:支持选择打开查看历史测试结果.
5 测试工具实际应用及效果
智能保护装置软件模块动态仿真测试工具在某公司多个重大工程项目的软件模块动态测试中得到了广泛应用.测试工具具有跨平台特性,支持Linux、windows等系统,现以windows系统为例,动态测试工具部署在一台PC测试机上,具体配置如表 1 所示.
表 1 测试机配置信息
经过多个重大工程及科研项目近千次的软件模块具体测试应用发现,该动态仿真测试工具有以下特点:
1) 能显著降低软件模块测试难度.由于该工具有通用性很强的仿真数据模型,使用该工具测试,测试人员不需要自己开发驱动,只要能读懂被测源代码,设计好测试用例,不要求测试人员具有编程能力.大大降低了软件模块测试的难度.
2) 能明显提升测试用例编辑效率.由于该工具有测试用例自动生成功能,工具根据对被测源代码进行静态分析,挖掘出源代码中生成动态测试用例必要的信息,自动生成大量的测试用例,供测试人员选择、修改.没用工具之前,一个软件模块测试编辑用例一般不低于2 h,使用工具后一般30 min左右能完成用例,测试用例编辑效率明显提升.
3) 增强了测试流程规范性.测试工具固化了被测源代码加载、测试用例设计、用例规范性检查、用例执行、结果判断、结果展示等一系列测试流程,避免了用例执行完成后发现用例不合格等低级错误.使测试流程从原来的无序状态变成有序状态,进一步规范了测试流程.
4) 提高了软件模块测试的自动化程度.根据编辑好的测试用例,在无人工干预的情况下可以完成软件模块的全面测试,达到高度自动化效果.
6 结 论
对软件模块测试用例设计方法进行归纳总结,制定了自动生成测试用例规则;规范并固化测试工作流程;设计开发测试工具,实现保护软件模块源代码的静态分析、保护模块动态应用仿真、测试用例自动生成、测试自动执行、规范测试工作流程及测试结果的灵活展示等功能.经实际应用表明,该工具效果显著,为软件模块研发测试提供了技术手段,提高了研发测试整体能力,推进研发质量持续提升.软件模块测试的有效开展能够使大部分软件缺陷在研发阶段初期发现并修复,能够提高软件产品的竞争力和企业的声誉,同时大幅降低售后服务成本.