陈雪
91550部队 116023
摘要:在复杂系统控制软件升级期间,主要利用Cantata工具实施单元测试,带有未变更函数脚本需要人工插桩,由此造成较大的人力与精力消耗。对此,本文结合Cantata工具测试过程与插桩特点,在C#基础上提供工具变更的优化措施,使测试脚本能够自动更新。根据本文研究可知,此种改进方式的应用可准确展现源码信息变更前后差异,并快速呈现未变更函数的自动插桩,节约大量大力与精力投入,使测试效率得到显著提升。
关键词:C#语言;Cantata工具;改进措施
引言:在科技飞速发展下,软件系统结构日益复杂。在产品开发的各阶段均要开展相应的测试工作。但因受到测试经费的制约,软件开发人员随意识到软件测试的重要性,但常常在产品质量与节约经费方面陷入两难。对此,可在C#基础上采用Cantata工具进行测试,使高效单元与集成测试需求得到充分满足,此举不但可提高产品质量,还可使生产率得到显著提升。
1工具变更管理
工具变更作为软件配置管理的重要内容之一,一般由变更请求传输、结果分析、角色定义等方面构成,通过创建软件变更管理基础与子集,使变更管理工具均可满足所需要求。在创建变更过程模型期间,其本质相当于工作流管理,可根据工作流参考模型对关键过程属性进行定义,如转移条件、开始与完毕条件等等,依靠一系列工具完成自定义流程。
在过程建模中,一般变更请求在用户提出后,可经过分配、解决与测试等流程,直至最终完成,这一过程被称为变更请求生命周期。在此期间,有多个角色参与其中,如测试人员、程序操作者与项目管理者等等,均根据权限不同进行相应操作,使生命周期状态发生变化,由此达到变更目标。要想完成自定义变更,先要创建变更过程模型,以图形的方式展现出来,如下图1所示。除中间两个黑实心圆之外,剩余圆角矩形均代表变更请求所处状态,用带箭头的细线表示请求状态的变化,上述变化均只能通过权限角色展现。从本质上看,图中主要包含两类信息,一种是变更请求状态集合,另一种是不同状态能够转移的集合,整个图将完整的变更请求周期充分展现出来。将整体变更过程用图形进行描述,虽然直观形象,但却无法传入计算机中进行处理。对此,可将变更请求看成模型活动,请求转移看成工作流模型内的转移,由此定义变更过程模型[1]。
2在C#基础上Cantata变更改进措施
2.1整体方案设计
Cantata工具单元测试主要包括测试搅拌、源代码、可执行文件与运行四项内容构成,不同活动在服务器执行后,将相应结果反馈给用户。在Cantata工具应用中,以C文件为自动封装单元,利用封装的C文件进行全局变量与函数调度,尽管被测函数未发生改变,仍要对其进行封装,再次隔离插桩后,才可使单元测试能够顺利完成。在测试用例管理中,主要利用ipg.cop文件对测试脚本进行管理。其中,test.mk属于脚本中的makefile信息,可利用其对Build构建器编译文件进行落实;利用ipg.cop对配置文件进行检测,还要对被隔离函数、全局变量等进行分析,利用Cantata工具自动生成隔离插桩值,并对覆盖率、环境定义等信息综合分析。在二次开发期间,可利用执行代码进行分析,将变更完的代码、全局变量、函数调用信息等综合展现出来,依照Cantata单元测试的相关要求,使被插桩代码得到有效优化。在二次开发完毕后,可在C#基础上摆脱服务器的控制,对源码变更信息进行识别,使被插代码、测试脚本等得到准确优化。
2.2变更编辑工具
在控制系统中,将变更管理模型以XML文件形式进行存储,使解释器能够妥善处理这一语言模型,对某变更过程进行解释。但是,要想让用户能够直接创建上述模型难度较大,很容易出现差错。对此,本文设计研发变更过程编辑工具,使用户能够在编辑区域通过拖拽的方式完成编辑工具变更。在文件存储过程中,可将变更图形转变为XML文件形式,将其存储到模板库内。在转化期间,由编辑工具对语法进行一次性检查,确保最后保存模型无语法错误。在新建模型之外,变更过程编辑工具还可开启存储在模板库中的XML模型,使其变为图形形式,为用户编辑与修改提供更多便利[2]。
2.3二次开发方式设计
在车C#基础上进行二次开发期间,重点在于源代码分析,并对变更差异进行对比。对此,可以文件为单位,对文件信息数据结构进行构建。数据结构还可通过引用文件、全局变量、函数声明、数据结构等方式,对相关信息分类整理,使变更差异被快速识别。为了利用正则表达式进行信息提取,先要使源码进行规范化处理,将编译忽视代码、不规范、冗余信息等进行规范。根据条件编译采用宏信息,可事先分析源码宏定义,再根据定制形式规划化处理,最终获得规范后的源码。在对源码规范化处理后,可根据不同结构类型与特点,使正则表达式得以明确,分别对引用信息、数据类型、全局变量以及源码数据结构进行提取。其中,特殊数据主要为结构体类型、位域结构体等内容,还要根据同义宏,采用递归方式进行分类存储。在变更完成后,对源码变换前后的信息进行采集,以文件为单位,以循环遍历的方式对文件内全局变量、函数调用状态等进行调用。根据记录变更情况,遵循插桩要求,对用例管理器中的函数测试脚本进行优化,使未变更之处能够自动隔离插桩。
3Cantata单元测试用例设计措施
3.1单元测试
软件质量主要受测试用例设计水平的影响,尽管技术人员水平高超、软件工程操作良好,但如若失去科学高效的测试用例支持,都会对最终软件质量产生不良影响。可见,测试用例设计属于核心与基础所在。在单元测试中,利用白盒测试技术,通常分为两种,由测试者自行编写脚本生成框架后,对测试数据进行维护。Cantata++工具进行脚本生成与维护,再对测试程序进行编译和运行,便可获得测试结果,对覆盖值进行查看。
3.2用例设计
在Cantata工具中,单元测试用例的应用方式较为简单,本文重点对复杂函数的测试用例进行分析,如若被测单元函数参数为结构体数组,并且成员为指针时,在测试用例期间的变量赋值方式如下。
3.2.1形参为结构体类型
采用测试工具自动生成测试用例,函数形参数值均为“NOT_SET”,如若测试脚本无法被识别,便可为形参赋予正确的值,进而取得准确的测试结果。在设计期间,对于带有结构体的形参用例,可开展以下实验。一方面,在C#中结构体变量的采用变量赋值方式;另一方面,还可利用C#结构进行赋值,将“->”变为“·”,使测试用例内的结构体被赋值。根据编译结果可知,上述两种赋值形式均无法被准确识别出来[3]。
3.2.2以数组变量为全局变量
在自动生成测试用例期间,可利用INITIALISE()函数为全局变量赋值,使其与常规测试需求相符合。为充分满足测试目标,还应为全局变量给予相应的数值,在全局变量为结构体数组变量、成员为指针情况下,可开展以下三种试验。一种是利用C#内的数组初始化,为结构体数组进行赋值;另一种是为一个数组元素中的数据元素赋值;还有一种是利用分配内存为结构体数组赋值。通过上述三种编译方式,仍无需对编译器进行准备识别。在形参赋值期间,因在形参赋值期间无法分配内存空间,进而影响赋值。结构体赋值情况还应利用测试工具严格筛选,务必采用相应编程规则,才可顺利编译通过。对此,可寻找大量编程规则资料,经过反复实践寻找问题的解决方式。
(1)假设函数形参为两种结构体,在测试用例脚本内,可采用以下方式为结构体赋值,即:
在赋值完毕后,可将脚本文件注入工程内编译通过,获得覆盖率结果,形参为结构体变量用例设计问题得到解决。
(2)假设定义为结构体数组:PORT_CB g_PortCbTable。在测试脚本内,要想对指针成员变量进行调整,可采用以下公式,即:
其中,无论是否带有后缀U均可赋予常量类型,但值得注意的是,转换类型不可忽视。在上述赋值完毕后,脚本文件可应用到测试项目中,经过编译审核后通过,可准确获得覆盖率的测试结果,全局变量为结构体数组量,在成员为指针情况下,使测试用例设计问题被妥善解决[4]。
3.3项目应用案例
以某复杂系统控制软件优化项目为例,在C#基础上采用Cantata工具进行二次开发,利用变更前后源码进行管理器。在正式运行后,在升级影响下非变更用例的插桩需要进行修改。根据修改结果可知,在本次变更之前,前后源码共计包括17个文件、81个函数与9个全局变量,在利用Beyond Compare工具后,对前后源码进行人工分析。根据结果可知,在C#工具进行二次开发期间,提取结果可与二次开发方式相符合,信息提取工程变更功能正常。
在本次变更之前,共包括436个测试脚本,在正式变更前后可对123个脚本关联修改,修改量在28.5%左右。以关联修改脚本为例,针对task.c文件内的五个函数相关,在对比前后源码后,新增函数调度ISM_Excute25ms(),可对C文件内的剩余变更测试搅拌产生影响。针对此类测试脚本进行修正后,可要求脚本严格遵循格式要求进行修改。在对81个发生变更函数的脚本修正完毕后,可在Score环境下对444个脚本进行批跑。根据测试结构可知,全部隔离插桩函数均可顺利通过,剩余11个未通过的函数主要受特殊因素影响,导致覆盖率难以满足函数需求,与隔离插桩的过程不存在关联。在Cantata服务器基础上,可通过手动方式进行隔离插桩,每个测试脚本的需要花费10min左右时间。在二次开发结束后,只需3分钟便可对全部未变更函数进行测试,脚本隔离插桩。例如,在123个测试脚本中,通过二次开发的方式可减少约20名人员,不但减轻了工作强度,还可使工作效率极大提升。根据上述结果可知,在C#基础上,利用Cantata工具二次开发的方式,可对前后源码差异进行对比,并可迅速完成未变更函数隔离插桩等工作。
结论:综上所述,本文对复杂系统控制软件升级进行研究,发现利用Cantata工具进行测试时,未变更函数测试脚本需要人工隔离插桩,造成较大的人力与时间投入。对此,本文提出在C#基础上进行二次开发的方式。根据实践结果可知,该方式可准确识别变更信息,对未变更函数插桩进行判断,在Cantata基础上促进单元测试效率提升,使目标要求得以满足。在实际应用中,因该方法不适用于函数内部语法分析,要求后续研究对此着重分析,对相同类型代码工具进行优劣对比,从而取得最佳应用效果。
参考文献:
[1]黄旭阳.基于CMMI的嵌入式软件过程改进模型的研究与应用[D].中山大学,2020.
[2]魏银英,杨苗.一种基于cantata的单元测试用例设计方法[J].电子世界,2019,000(007):119-119.
[3]谢春,郑显举.基于需求变更测试模型的研究[J].成都电子机械高等专科学校学报,2019(01):44-48.
[4]张捷,赵文耘,倪晓峰.基于工作流的变更管理工具[J].计算机工程,2020,031(011):50-51,145.