APP下载

应用软件补丁测试问题研究

2020-03-23姜文刘立康

软件工程 2020年2期

姜文 刘立康

摘  要:在软件维护阶段,需要处理软件存在的各种问题,其中软件补丁是软件维护的核心环节。首先介绍了软件补丁的相关概念与分类。详细叙述了软件补丁测试,内容包括补丁程序开发与测试、补丁包制作、补丁包测试;介绍了补丁包测试过程中遇到的几个典型问题;最后介绍了一个补丁测试案例,叙述了软件补丁测试的完整过程。工作实践表明软件补丁测试是保证软件补丁质量的重要步骤。做好补丁测试有助于的保证与提升软件产品质量。

关键词:软件维护;热补丁;补丁测试

中图分类号:TP311.5     文献标识码:A

1   引言(Introduction)

软件维护[1-4]是软件生命周期的最后一个环节,是持续时间最长的环节。应用软件维护的成本是开发成本的四倍左右。在软件交付用户使用后,需要做好软件维护工作,不断处理和解决用户在软件使用过程中提出的各种问题,从而延长软件产品的使用寿命。

软件补丁是软件维护的核心环节,补丁测试是保证软件补丁质量的重要环节。文中介绍了软件补丁的相关概念与分类、软件补丁测试过程,最后介绍了一个软件产品热补丁测试的工作案例。

2  软件补丁的相关概念和分类(Related concepts and classification of software patch)

2.1   软件补丁的相关概念

(1)补丁问题

补丁问题是软件在客户局点使用过程中发现的软件缺陷问题,或者软件产品研发部门自行对软件产品进行的自主改进问题,这些问题需要修改软件代码才能解决。

(2)补丁程序

补丁程序是为了修复补丁问题开发的软件代码,每个补丁问题都有对应的补丁程序,这种小程序俗称“补丁”。过补丁程序修改或者更新软件,处理补丁问题称为“打补丁”。

(3)补丁包

软件企业会定时发布补丁包解决客户局点存在的软件缺陷,通常一个补丁包中包含处理多个补丁问题的补丁。对于需要客戶局点紧急处理的补丁问题,也可以发布由单个补丁组成的应急补丁包。

2.2   补丁问题来源

软件补丁问题来源主要有客户局点使用过程中发现的问题、研发部门内部测试发现的问题、软件产品自主改进、客户定制需求、软件安全性加固、在研版本同步改进等方面的问题。

2.3   软件补丁分类

根据软件补丁实施方式,软件补丁可以分为冷补丁、热补丁。

(1)冷补丁

开发工程师编写补丁程序,提交版本库,对软件产品的整个工程文件进行重新编译,生成软件补丁版本。在需要在设备上停掉原有的软件版本,重新安装软件补丁版本。

软件冷补丁包实际上是指打了补丁之后的软件补丁版本,通过替换原有的软件版本来处理补丁问题。

(2)热补丁

热补丁[5-8]安装的过程中,并不需要停止软件系统运行。通常热补丁适用的软件系统是广泛使用的实时操作系统,虚拟机化软件Openstack上也支持实施热补丁。

热补丁能够在不停止应用软件运行的情况下实施补丁安装,同时也支持在软件产品版本升级过程中以静默安装方式实施补丁安装。静默安装方式是指软件在模拟环境中加载热补丁包,然后在实际的使用环境中替换原来的软件版本。

软件热补丁包通常由多个补丁程序(函数)组成,通过加载热补丁包替换当前软件中的对应函数来处理补丁问题。

3   软件补丁测试(Software patch testing)

软件补丁测试主要包括补丁程序开发与测试、补丁包制作、补丁包测试。

3.1   补丁程序开发与测试

(1)提交补丁问题单

通常由软件客户或者软件售后工程师提交补丁问题单。

(2)补丁问题复现

测试工程师根据补丁问题根因、发生的问题软件版本。搭建补丁测试环境,复现补丁问题。问题复现之后,由系统工程师与开发工程师确认补丁问题已正确复现。

(3)补丁问题澄清

开发工程师分析补丁问题发生的原因,并给出问题解决方案。由系统工程师负责补丁问题澄清,向开发工程师、测试架构师、测试工程师,以及资料工程师讲解补丁问题的现象与解决方案。资料工程师完成补丁资料编写。

(4)补丁程序开发

开发工程师编写补丁程序代码编写,对代码进行静态测试和单元测试,代码评审完成后提交版本库。

(5)补丁问题测试用例设计

测试架构师完成补丁问题测试用例设计,测试工程师编写自动化测试脚本。进行补丁测试用例和自动化脚本评审,系统工程师、开发工程师、测试架构师和测试工程师参与评审工作。

(6)补丁程序测试

测试工程师搭建测试环境,下载包含补丁程序的版本包,测试补丁程序的功能。然后连跑自动化脚本,对版本包进行回归测试,检测新增加的补丁程序不会影响版本包中其他代码的功能。若发现问题,与开发工程师共同定位处理。

3.2   补丁包制作

(1)制定补丁计划

应用软件补丁包是定期发布的,确定补丁包的版本号之后。补丁版本经理收集需要合入补丁包的补丁问题;主持制定补丁计划,补丁计划主要包括补丁包需要合入的补丁问题列表、每个补丁程序的开发和测试工作安排。

(2)设计开发补丁程序

系统工程师负责软件补丁技术设计,完成需求设计、架构设计和软件代码详细设计。将设计方案以规格文档形式提供给开发工程师。开发工程师负责开发补丁程序。

(3)补丁程序测试

测试经理根据补丁计划,准备测试环境,将补丁问题单分配给测试工程师处理,完成补丁程序的测试工作。

(4)制作补丁包

单个软件补丁程序的开发完成后,软件补丁程序合入版本库,对更新后软件源代码编译生成新版本软件产品的进程文件。将该进程文件与修改后的相关配置文件一起打包生成补丁包。通常在Linux操作系统下使用的补丁包制作成*.tar包,Windows操作系统下使用的补丁包制作成*.rar包。

可以通过持续集成工具完成更新代码、软件进程文件编译和补丁包出包。持续集成工具可以执行冒烟测试初步验证补丁包的基本功能,提高补丁包测试的效率。

3.3   补丁包测试

补丁包制作完成后,补丁包由版本经理内部发布。补丁问题单提交测试经理,补丁包测试不仅包含功能测试,还要完成补丁包性能和升级测试。

(1)功能测试

测试工程师从补丁包归档路径下,取出补丁包,将补丁包安装到执行补丁问题复现的环境上,首先观测补丁版本号是否正确,根据测试架构师给出的补丁测试用例进行测试,确保存在的问题已被解决,并没与引入新问题。如果发现新问题,知会该问题的软件开发工程师,问题定位邮件抄送版本经理、补丁测试组长、补丁开发组长、系统工程师与测试架构师。开发工程师负责定位发生的问题是否是软件缺陷。

(2)性能测试

测试环境安装补丁包,测试架构师制定性能测试用例,测试工程师执行补丁性能测试;将重点的性能指标(如性能背景下的性能规格、CPU占用率、资源占用率等)与基线版本比较是否保持一致,如果与基线版本的指标有差异则需要开发工程师定位处理软件性能问题。

(3)升级测试

补丁升级测试,测试软件产品可以正常的安装补丁,也可以正常的回退补丁,安装与回退之后业务功能正常。基线版本安装之后执行基本功能测试,基本功能测试运行正常。上传补丁包,进行升级前检查(如环境状态、补丁包是否正确上传、是否有异常告警等)检查通过之后,进行软件补丁安装,安装之后验证软件基本功能。执行回退测试,正常回退之后需要验证基本功能是否正常。升级测试过程中的升级前检查报告、升级报告与回退报告均需要作为补丁测试的交付件存留。

(4)自动化连跑验证

补丁包功能、性能、升级测试完成之后,自动化工厂测试工程师负责搭建补丁测试环境,下发全量软件功能的特性脚本,完成自动化功能验证。连跑完成之后,收集自动化连跑结果,将运行失败的脚本推送给测试工程师进行失败分析,失败分析结果有疑似软件缺陷导致的脚本失败,需要发给软件开发工程师进行定位,确保补丁包没有引入新问题。

3.4   测试回顾与验收

补丁包测试工作完成之后,测试组长组织进行补丁包测试回归与验收。版本经理、开发组长、系统工程师、开发工程师、测试架构师和测试工程师参与回顾与验收工作。总结补丁包开发测试过程中的优缺点。确认补丁包测试结果的准确性。验收工作完成之后,可以正式发布补丁包。

4  补丁包测试过程中的几个典型问题(Several typical problems during patches package testing)

在补丁包测试过程中遇到如下一些典型问题。

4.1   热补丁静默升级和软件升级工具不适配问题

测试工程师N对云化通信软件热补丁包5.19.0版本的热补丁SPH203进行静默升级验证,当软件版本部署完成,并完成升级前的产品功能验证,打开软件升级—补丁安装工具准备启动软件升级时,发现软件升级工具页面上不能正常勾选待升级的软件。经过软件开发工程师确认,发现该软件版本没有对软件升级—补丁安装工具进行适配处理。如果该软件版本进行升级,必须在软件升级—补丁安装工具上进行规避处理。经过规避处理之后,测试工程师顺利完成补丁包静默升级验证。

4.2   媒体消息环路时延阈值指标未上报问题

测试工程师J对云化通信软件热补丁包5.19.1版本的热补丁SPH205进行媒体消息环路时延阈值指标测试,该问题属于性能測试问题。通过NTE工具运行性能测试套来模拟同时进行多路呼叫的场景,并通过MML命令将环路时延阈值设置为250ms、500ms、1000ms及阈值不设限的场景。测试工程师在进行测试过程中发现这四个场景下呼叫正常,但是均没有任何阈值上报,联系该补丁问题的开发工程师定位之后,发现通过NTE工具模拟呼叫建立之后的媒体流使用的是默认的RTP流,而需要统计的媒体流为RTCP流。发送的媒体流修改为RTCP流之后,环路时延阈值指标可以正常上报。

4.3   第三方软件导致的安全漏洞问题

客户局点Q对某大型硬件通信软件冷补丁包V2R009C10SPC126采用绿盟扫描工具扫描,发现第三方软件OpenSSL 0.9.8w存在安全漏洞。测试工程师W负责问题重现和处理,搭建测试环境之后,测试过程中先在产品的WEB页面通过网页抓包工具确认目前使用的OpenSSL 1.0.1c版本是已经解决安全漏洞的新版本,接下来进行产品基本业务测试与性能基本场景验证;最后针对产品进行绿盟安全扫描,并对绿盟扫描结果进行分析,确认软件使用的低版本OpenSSL 0.9.8w相关漏洞问题已经被解决。但是软件使用高版本OpenSSL 1.0.1c之后,扫描出了新的安全漏洞,将新增漏洞反馈给开发工程师之后,开发工程师经过排查产品源码确认该漏洞所描述的场景,软件产品未使用,可以看作扫描误报。测试工程W将该分析结论归纳到产品安全分析结果库中。

5   补丁测试案例(Case study of software patching)

以下介绍一个热补丁案例,案例中只介绍软件补丁测试的相关内容。

5.1   制定补丁计划

某通信软件产品S,SPH206补丁版本计划合入10个补丁问题,如表1所述。

5.2   补丁问题复现与补丁程序测试

(1)补丁问题复现

补丁开发工程师向测试工程师讲解该补丁问题触发的背景、问题原因。测试工程师在测试环境上分别完成10个补丁问题的复现,问题复现完成之后与每个问题的开发工程师确认补丁问题,补丁问题成功复现之后,将问题复现场景如实记录到测试交付件中。

(2)补丁程序测试

在测试环境安装基线软件版本之后加载SPH206补丁,执行测试用例,如果测试结果与用例预期相符,则表示补丁问题已经被解决;如果测试结果与用例预期不相符,则需要联系补丁问题对应开发工程师定位处理。并将补丁测试过程记录下来,作为补丁测试的交付件。

5.3   补丁包测试

(1)制作补丁包

将10个补丁程序合入补丁包,在模拟的软件环境中安装软件版本,在线运行。加载补丁包,开始补丁包测试。

(2)性能测试

软件产品的性能测试使用华为自研的性能测试工具NTE,性能自动化脚本连跑过程中spider工具会自动调用NTE工具执行自动化性能测试,并将统计指定模块的CPU占用率、资源占用,以及丢包率统计结果自动写入excel文件。

性能自动化脚本连跑之后,需要分析CPU占用率、资源占用,以及丢包率是否符合要求;是否出现模块复位,以及不应该出现的告警等。一旦有异常告警、CPU占用率、资源占用,以及丢包率不正确的情况,需要及时联系开发工程师进行定位处理。

(3)升级、回退与配套测试

补丁配套测试是指在升级前、升级后,以及回退之后完成基本功能测试。

补丁升级方式分为补丁包升级与静默升级。补丁包升级方式是在客户局点的软件版本上通过升级工具加载补丁包实现补丁版本升级。静默升级方式是将补丁包与待升级的软件版本包一起上传之后,通过升级工具完成软件版本补丁包安装升级。

升级验证,完成升级之后,查看环境上是否有新增的告警信息,完成升级之后的基本业务验证。回退验证,完成补丁回退,也要完成基本业务验证。

(4)自动化脚本连跑测试

通过自动化功能脚本连跑来完成对安装SPH206补丁包的软件版本进行功能验证。自动化工厂的测试工程师搭建测试环境、自动化脚本连跑测试。

工作实践表明软件做好补丁测试工作,对于保证软件补丁质量是非常重要的。

6   结论(Conclusion)

软件补丁的开发与测试是软件维护的重要组成部分,在软件维护中占有很重要的一席之地。工作实践表明软件补丁测试是保证软件补丁质量的重要方法。软件补丁的测试过程是不断发现和解决客户局点各种问题的过程,不断扩展功能和提升软件性能的过程。做好软件补丁测试工作不仅有助于的保证与提升软件补丁版本的质量,同时也为开发软件产品新版本提供了良好的基础。

参考文献 (References)

[1] Qi Z,Long F,Achour S,Rinard M.An analysis of patch plausibility and correctness for generate-and-Validate patch generation systems[C].In:Proc. of the 2015 Int' l Symp. on Software Testing and Analysis.ACM Press,2015:24-36.

[2] Long F,Rinard M.An analysis of the search spaces for generates and validates patch generation systems[C].In:Proc. of the IEEE/ACM 38th Int' l Conf. on Software Engineering(ICSE).IEEE,2016:702-713.

[3] Tan SH,Yi J,MechtaeV S,Roychoudhury A.Codenaws:A programming competition benchmark for evaluating automated program repair tools[C].In:Proc. of the 39th Int' l Conf. on Software Engineering Companion.IEEE,2017:180-182.

[4] 李斌,賀也平,马恒太.程序自动修复:关键问题及技术[J].软件学报,2019,30(2):244-265.

[5] 姜文,刘立康.基于VXWORKS系统的热补丁技术研究[J].计算机技术与发展,2017,27(3):18-22.

[6] 姜文,刘立康.Oracle数据库补丁问题研究[J].电子设计工程,2014,22(20):10-13.

[7] 姜文,刘立康.应用软件维护中的补丁开发与管理[J].计算机技术与发展,2015,25(11):11-16.

[8] 姜文,刘立康.软件产品维护阶段的缺陷问题管理[J].计算机技术与发展,2016,26(12):35-44.

作者简介:

姜  文(1986-),女,硕士,高级工程师.研究领域:图像处理,软件工程和网络通信.

刘立康(1962-),男,硕士,副教授.研究领域:数字通信,图像处理和软件工程.