kaiyun官方注册
您所在的位置: 首页> 嵌入式技术> 设计应用> 一种多维度的软件系统可靠性测试方法研究
一种多维度的软件系统可靠性测试方法研究
2014年微型机与应用第19期
覃文闯, 郑丽娜, 胡一鸣, 马文斌
国家应用软件产品质量监督检验中心,北京 100193
摘要:传统的软件可靠性测试更多偏重于软件的功能方面。针对于这个不足之处,提出了结合操作剖面和性能测试的一种相对完善、全面的软件可靠性测试方法。归纳总结软件内部可靠性设计、外部高可用技术以及容灾恢复规范等诸多影响软件系统可靠性的因素,设计可靠性操作剖面要全面考虑这些因素。此方法是对传统方法的有用补充。最后通过一个案例简要介绍了该方法。
Abstract:
Key words :

摘 要: 传统的软件可靠性测试更多偏重于软件的功能方面。针对于这个不足之处,提出了结合操作剖面和性能测试的一种相对完善、全面的软件可靠性测试方法。归纳总结软件内部可靠性设计、外部高可用技术以及容灾恢复规范等诸多影响软件系统可靠性的因素,设计可靠性操作剖面要全面考虑这些因素。此方法是对传统方法的有用补充。最后通过一个案例简要介绍了该方法。

关键词: 可靠性测试;可靠性设计;高可用技术;容灾恢复;性能测试

0 引言

  对于软件可靠性不同的标准有着不同的定义,从国内标准和国外标准两个方面看:

  IEEE对软件可靠性做出了如下的定义[1]:

  (1)规定的条件下,在规定的时间内,软件不引起系统失效的概率;

  (2)在规定的时间周期内,在所述条件下软件执行所要求功能的能力。

  我国GB/T 16260.1-2006 《软件工程产品质量第1部分:质量模型》对可靠性的定义[2]:在指定的使用条件下,软件产品维持规定的性能级别的能力。该标准并解释软件不会损耗和老化。软件可靠性取决于软件产品的使用方式和所选择的程序选项,与时间无关,可靠性的定义已经被扩展为“维持所规定的性能级别的能力”,而不是“完成所需功能”。

  上述两种说法的侧重点略有不同,IEEE强调的是概论和能力,偏重功能,而国标强调的是能力,偏向于性能。虽然侧重点不一样,但是可以看出计算机软件系统是指由系统软件、支撑软件、应用软件以及相关硬件组成的计算机软件系统。作为一个综合的整体系统,其可靠性依赖因素不仅仅是其软件本身,还涉及多方面的因素,包括人员、技术、管理等。可靠性的评价不局限于功能性,应该扩展到性能方面。

  本文立足于分析影响软件系统特定使用环境下的可靠性的脆弱点,提出从软件本身和外部使用环境所涉及的高可用技术和管理制度等多方面设计软件可靠性测试操作剖面,并结合性能测试进行可靠性的验证测试。

1 软件可靠性测试操作用例设计的考虑因素

  1.1 软件内部可靠性影响因素

  通常软件内部可靠性问题是软件本身所固有的,与外部因素无关,只与软件本身的使用选项有关。例如一个有溢出错误的软件,不论软件的备份机制如何完备,当溢出错误的输入满足时,软件输出必将溢出。在严格遵循软件工程原理的基础上,为了保证和提高软件的可靠性,通常在软件设计过程中采用避错设计 、 查错设计 、 改错设计和容错设计等软件可靠性设计方法,所以从内部可靠性影响因素来说,软件可靠性测试用例应考虑如下设计以提高有效性和正确性。

(1)避错设计

  软件可靠性设计的首要方法体现在预防为主的思想。软件产品在设计过程中的避错设计目的是使软件不发生错误或少发生错误。原则是控制和减少程序的复杂性。下列方法可以在避错程序设计中参考,如参数化、公共数据和变量、非授权存取限制、无意指令跳转处理、程序检测点设置、寻址模式选用、数据区隔离、安全关键信息要求、信息存储要求、算法选择要求。

  下列的结构和技术容易引起系统的缺陷,设计测试用例时优先考虑如下操作和结构类型:浮点数、指针、动态内存分配、并行、递归、中断、继承、别名、默认输入的处理。

(2)查错设计

  软件查错设计是通过赋予程序自校验功能,使程序在运行中能自动发现错误的设计方法。包含被动式错误检测和主动错误检测。前者即在程序的若干部位设置检测点,等待错误出现时触发告警;后者能自动对程序状态进行检查。

  对于查错设计的验证,测试用例优先考虑如下操作进行设计:按照已知的数据极限值检查数据边界的输入输出;按照变量间恒定关系检验变量的输入和结果输出;检查所有多值数据的有效性;对冗余的输入数据进行一致性检验;循环等待次数控制。

(3)改错设计

  改错设计通过赋予程序自我改正错误的能力,减少错误危害程度。故障隔离技术是改错设计的常用方法。改错设计的关键前提是准确地定位软件错误原因和错误的代码,减少软件错误造成的损害,将损害限制在可以接受的范围内。

  对于改错设计的验证,可靠性测试用例可以参考如下方法:用户的应用程序或数据访问受控,其他用户不能轻易修改;应用程序引用或修改操作系统的编码或操作系统内部的数据应受控;操作系统的错误不应引起应用程序和数据的变更;应用程序不能终止操作系统工作; 应用程序不能触发操作系统修改其他程序或数据。

 (4)容错设计

  软件容错是程序在错误已被触发的情况下,系统仍然具有正常运行能力。常用的容错设计有时间冗余、结构冗余和信息冗余。

  时间冗余是以消耗时间开销为代价获取软件系统高可靠性的一种手段,如指令重复执行和程序重复执行。对于重复执行不成功时,通常发出中断,转入错误处理程序,或对程序重复技术计算、重新组合系统、放弃程序处理。

  结构冗余是针对软件系统不同版本的并行运行的冗余设计。对相同的初始条件、相同的输入操作,多版本结构的结果应一致,或者对不同的结果实行表决后决定是否继续执行(多数决定、一致决定)。

  信息冗余是为检测或纠正信息在运算或传输中的错误外加的一部分信息。如奇偶校验码或者类似MD5的完整性校验来确保数据完整和正确;信息之间应保持足够的安全Hamming 距离;安全关键信息的决策判断不得依赖于全“1”或全“0”的输入。

 1.2 软件外部可靠性影响因素

  计算机软件系统是指由操作系统软件、数据库软件、应用软件等基础支撑软件以及相关硬件组成的计算机软件系统。软件作为一个系统使用时,系统不仅仅是软件本身,还包含软件系统运行的外围载体,如操作系统、网络、服务器等。作为一个综合的整体系统,其可靠性依赖因素不仅仅是其软件本身,还涉及多方面的因素,包括人员、技术、管理等。针对软件可靠性的外部影响因素,本文从两个方面进行阐述,一是高可用技术保障,一是软件系统管理制度保障。软件外部可靠性测试用例设计可以结合上述两方面的具体情况进行设计。

  (1)高可用技术

  常用高可用技术主要有如下几种分类,不同的高可用技术对系统可靠性的贡献是不一样的。

  ① 高可用技术。高可用是系统高可靠的基础,主要有如下几种实现方式:冗余技术、集群技术、远程集群技术、多路技术和虚拟机技术。

  ② 数据备份技术。数据备份是系统高可靠的必要条件。数据备份从策略上来说有3种:全备份、增量备份和差异备份。基本上都是基于如下技术实现:Host-Based备份、LAN-Based备份、LAN-Free备份和Server-Less备份。

  数据复制技术是确保数据备份的前提。主要的备份技术有如下几种:基于复制软件复制、基于存储阵列复制、基于服务器复制、基于SAN复制和Server-Less备份。

  持续数据保护技术通过捕获或跟踪数据的变化,并将变化异地存储在生产数据之外,保证数据可以恢复到任意时间点。主要有如下几种类型:基于应用的持续数据保护、基于文件的持续数据保护和基于数据块的持续数据保护。

  (2)系统服务保证类因素

  对于应用级的保护,为保护系统连续正常的运行,避免系统受到未授权的修改、破坏而导致系统不可用,参考国标GB/T 22239-2008中的相关部分内容,可靠性测试中系统服务保证类的测试用例可以参考表1所列几个方面。

001.jpg

  (3)系统灾难恢复管理体系

  对于更高一级的系统级保护,可以参考GB/T 20988—2007《信息安全技术信息系统灾难恢复规范》。做为系统级的可靠性保证,容灾系统的建设必不可少。对于不同的容灾级别要求,该规范作出了明确的指导。而评估一个容灾系统的建设通常可以从表2所示7个方面进行评价。可靠性测试用例设计可以借鉴参考表2。

002.jpg

2 传统软件可靠性测试方法

  软件可靠性测试方法主要有两种: 基于运行剖面的可靠性测试和基于使用模型的统计测试。前者是AT&T贝尔实验室的Musa J D在1993年提出的[3],后者是由Mills H D[4]和whittaker J A[5]提出。这两种方法构造的测试模型从不同的角度来模拟软件真实的运行环境。

  这两种方法所用的术语虽有微小的差别,但它们的基本思想都是基于统计学的基本原理,即根据软件实际使用情况的统计规律的描述对软件进行随机测试。统计测试进行的前提条件就是生成如实反映系统使用情况的使用模型。以往使用模型的建立主要是通过预测和估计得出,不能如实地反映系统的真实情况。

  传统的软件可靠性测试方法借鉴了硬件的可靠性测试方法,更多是偏重功能实现的角度去测试。而软件不同于硬件,软件的可靠性测试除了依赖上述传统的可靠性测试方法外,应该结合软件的性能测试进行可靠性测试,这样的可靠性测试结果更为全面,更具参考性。

3 结合性能测试验证软件可靠性

  本文提出了一种可靠性的测试建议作为传统可靠性测试的补充,即建议在系统性能负载较重的情况下结合传统的可靠性测试方法进行可靠性测试。

  3.1 测试方法介绍

  同样以传统的基于操作剖面可靠性测试为例介绍测试方法:

  (1)构造测试操作剖面。操作剖面的构造要素来自于第1节本文作者从软件内部和软件外部两个方面总结的可靠性影响因素。综合上述的梳理分析,计算机软件系统作为一个整体,其可靠性测试剖面应参考内部和外部两方面的影响因素,涉及到技术、人员和管理多个方面。

  (2)模拟软件系统真实使用场景下的性能负载,此性能负载作为执行操作剖面的背景数据。

  (3)执行测试剖面操作,结合性能测试评价软件系统的可靠性。

3.2 案例介绍


003.jpg

  如图1所示,在本案例中依次对软件系统执行了包括“数据RAC故障”、“接入进程失效”、“路由进程失效”、“接入节点失效”、“路由节点故障”、“交易服务器故障”、“额度服务器故障”和“主限号服务器故障”8个可靠性测试操作剖面。结合性能测试的10 000用户在线测试,可以清晰看出相关测试剖面对软件可靠性的影响大小。

4 结论

  本文从软件的内部可靠性设计,结合软件系统外围运行载体的高可用技术和容灾恢复管理要素多方面,从技术、人员和管理方面提出可靠性测试用例的考虑因素。分析了传统软件可靠性测试方法来源硬件可靠性测试模式的局限性。结合实际情况,对传统测试方法进行补充建议,提出了结合性能测试和多维度测试剖面进行可靠性测试,并举例简要阐述了方法和优点。

参考文献

  [1] 黄锡滋.软件可靠性、安全性与质量保证[M].北京:电子工业出版社,2002.

  [2] GB-T 16260.1-2006. 软件工程 产品质量 第1部分:质量模型[S].

  [3] Musa J D.Operational profiles in software—reliability engineering [J].IEEE Software,1993,10(2):14-32.

  [4] Mills H D,Dyer M, Linger R C. Cleanroom software engineering [J].IEEE Software,1987,4(2):19-24.

  [5] Whittaker J A, Poore J H.Statistical testing for clcanroom software engineering [J]. IEEE, 1992(11):31-39.


此内容为AET网站原创,未经授权禁止转载。
Baidu
map