软件实验平台测试中的运行剖面划分方法研究

2017-04-25 03:47初建崇李季颖
实验技术与管理 2017年4期
关键词:可靠性概率分类

孙 媛, 初建崇, 李季颖, 卢 琳

(1. 海军航空工程学院 科研部, 山东 烟台 264001; 2. 海军航空工程学院 训练部, 山东 烟台 264001;3. 海军航空工程学院 院务部, 山东 烟台 264001)

软件实验平台测试中的运行剖面划分方法研究

孙 媛1, 初建崇2, 李季颖1, 卢 琳3

(1. 海军航空工程学院 科研部, 山东 烟台 264001; 2. 海军航空工程学院 训练部, 山东 烟台 264001;3. 海军航空工程学院 院务部, 山东 烟台 264001)

通过对软件实验平台进行测试,在测试过程中对软件运行剖面进行分析,研究了软件运行剖面的分类识别过程、分析运行剖面的特征,给出了软件运行剖面的分类及其组成类型,为软件实验平台的测试提供有价值参考。

软件实验平台; 软件测试; 运行剖面划分

1 软件运行剖面的基本概念

软件运行剖面是软件可靠性工程的基础,定义和使用软件运行剖面是软件测试中必不可少的要素和步骤。在软件实验平台的开发过程中,需要从各个层面对平台进行测试,以提高实验平台的可靠性。

1993年,Musa在IEEE发表了一篇题为“软件可靠性工程中的运行剖面”的文章,开创了软件运行剖面的研究。Musa将软件运行剖面定义为:运行剖面是如何使用(软件)系统的定量描述[1]。它由一组运行集组成,这组运行集是一个系统设计的执行及其发生的概率[2],即系统的输入值用其按时间的分布或它们在可能输入范围内的出现概率的分布来定义。

软件运行剖面能够促进软件的可靠性评估,能够提高效率、增加可靠性、缩短开发时间。正如Musa所述:“使用运行剖面指导软件测试,能够保证如果由于进度约束导致测试终止,最常用的操作会收到最多的测试,在给定的测试时间内,可靠性水平将会达到最大。[3]”

基于运行剖面的测试通常涉及许多步骤:(1)开发运行剖面模型;(2)运行剖面的概率推导;(3)测试用例的生成;(4)测试计划;(5)测试执行;(6)结果的分析[4]。软件实验平台运行剖面模型的组成取决于该软件平台如何被使用。通常可以用基于树状模型、马尔可夫链和常用的状态图来表示。软件运行剖面模型的核心通常由表示使用软件系统时的一些事件(如鼠标点击或数据输入、用户的操作、配置变化和软件功能等)以及它们相关联的事件发生概率组成。这些概率通常建立在对历史数据的分析、实验数据或专家经验的基础上。运行剖面规划好之后,可以通过采用不同的技术和策略运行剖面模型,自动产生较高级或较低级的测试用例。这些技术包括随机游走模型,解析公式等;这些策略包括概率水平,测试成本,模型覆盖等。

2 运行剖面的分类识别过程

运行剖面构造的质量将对可靠性测试、分析结果的可信度产生直接的影响[5]。根据软件运行剖面的定义可知:软件运行剖面是一组操作的发生概率,这组操作的产生涉及软件使用者、使用方式、执行的功能、每个功能的运行方式等各方面。其识别过程比较复杂,图1给出了运行剖面的分类识别过程。

图1 运行剖面的分类识别过程

这个迭代过程需要不断地比较才能建立代码、类别、类和模型,并可能需要修订已经归因类别和模型。此外,如果类或模型仍在改变,则这个过程是不断重复的。如果在软件实验平台开发的过程中配套文档比较完备,则可以通过文档中的关键字对运行剖面进行初步的分类。表1给出了使用关键字进行分类的过程。

表1 使用关键字进行分类过程的示例

本文使用了一系列的关键字建立一个系统的分类过程。这些关键字有混用的情况,所以运行剖面也可能是混合的,其分类不一定是相互排斥的。

同时,在运行剖面的分类过程中,应重视运行剖面的有效性、一致性、可靠性和普遍性。有效性,可以通过不断地比较代码审计结果来实现;一致性,可以通过代码审查的方法对整个程序代码进行抽样来实现;可靠性,Gibbs和Lewins建议使用评分者信间协议的概念来确保运行剖面的可靠性[6];普遍性,其关键在于样本的选择,在运行剖面样式的选择过程中,通常采用定性分析和理论抽样的方法。

3 运行剖面的分类

如表1所述,可以大致将运行剖面划分为通用特性、软件边界、测试和开发4类。

软件运行剖面是软件使用的概率特性,因为在软件实验平台交付后无法对具体使用情况进行预测;而对其通用特征(包括结构、来源、抽象层次等)进行建模是必不可少的。软件实验平台本质上是一个交互系统,需要与不同类型的用户(如人,以及其他硬件或软件系统)进行通信。环境的多样性需要特定的运行剖面来划分这些相互作用,所以软件边界是分离软件运行环境和外界输入的关键。软件测试是软件平台能够正常、高效运行的保障,所以软件测试作为软件实验平台在运行过程中的依赖,可以单独作为一类运行剖面。第四类开发类是从整个软件生命周期的角度剖析软件应具有的剖面,同时包括软件工具。

结合表1的分析,建立了如图2所示的运行剖面分类。通用特性是运行剖面的显著特点,通用特性下的子类是相互独立的。软件边界对应于区分一个软件和那些不相关的软件。系统边界内的类与一些通用特性的类密切相关,例如输入数据与来源有关。

图2 运行剖面分类

通用特性类和软件边界类都是以运行剖面为基础来创建类的。测试类包含了额外的可用信息,能够显著提高运行剖面的精度。开发类主要是面向何时和如何进行一个运行剖面开发的问题。

图2显示了一个运行剖面的分类,包括类的层次和运行剖面不同角度和方面的子类。

3.1 通用特性类

通用特性类被分成轮廓、结构、抽象层次、来源、场景、模式、配置和关键操作子类。

(1) 轮廓类。轮廓类是沿着给定的维度给出的一个横截面的应用视图。在使用过程中,它包含了该维度的元素和这些元素发生的概率。可能轮廓的实例集合在表2中给出。一个运行轮廓可能包括一个或多个轮廓,它因此分成单轮廓运行剖面和多轮廓运行剖面。

表2 可能的轮廓属性实例集合

表2(续)

(2) 结构类。结构类是许多建模范式用于描述和建立运行剖面,包括树[7]、基于状态的表述[8]、概率事件流图、集合等。在剖面的定义中元素(节点、转换、输入、事件等)出现的概率与其他元素的定义有区别。首先,发生概率是结构的一个属性,而不能区分类;第二,可计算性是建模技术中使用的一个属性。此外,发现了一些非常规的和混合的结构。一个通俗的例子是:树中叶子结点发生的概率可能是以树中n以外的前序叶子结点为条件。

(3) 抽象层次类。运行剖面的概念通常是相关的系统级测试,因为当把软件系统视为一个产品时,传统可靠性度量最有用处。目前,大量的开发软件产品主要是使用重用技术作为组件用在其他产品和系统中。运行剖面测试因此变成了一个有吸引力的解决方案来测量这些组件的可靠性。组件级运行剖面主要用于对软件组件进行测试。所以抽象层次类又分为系统子类和组件子类。

(4) 来源类。在运行剖面区分不同类型的输入提供者被称为来源。在软件实验平台的使用和开发过程中,人的因素是不可忽视的。软件、硬件、环境等通常是隐含在所使用的软件平台中。

(5) 场景类。场景类是一个用户序列或外部产生的输入(多序列的事件),完成一个特定的应用程序的目标。例如,用户想打开一个文件,Windows会先选择“文件”选单选项,然后选择“打开”选项。这一系列的步骤构成了一个场景。使用显示的场景信息的运算,被标记为感知场景;否则,它被称为是非感知场景。

(6) 模式类。模式类对应于特定类型的软件系统,例如管理员模式中的启动模式、安全模式、关闭模式等的执行。模式可以是“一组为分析执行方便的归纳功能或操作集”。一个模式也可以是一个状态或一组状态集[9]。

(7) 配置类。软件实验平台对应于一个运行(和测试)环境的设置。例如,一个网络浏览器的应用程序通常可以操作不同类型的执行平台(英特尔、AMD)、操作系统(Linux、Windows),或运行选项(JavaScript的浏览器上启用或禁用)。因此,需要针对每个可用的选项进行定制,形成一个特定的配置系统。大多数的软件应用程序也可以在编译过程中进行定制(例如设置某些内部变量的值,设置操作系统中的最大进程数)。选择一个特定的执行模式或状态进行测试也将是测试环境的配置(例如测试一个程序在管理员模式与测试相同的程序在用户模式)。

(8) 关键操作类。在一般情况下,可靠性测试的重点是最经常使用的操作和功能的软件系统[10]。然而在关键的情况下,罕见的操作(或功能)也很重要。一个关键的、但罕见的操作或功能很少发生在系统的生命周期内。但是,如果它发生,并导致系统故障,这种故障的严重程度将很高(例如系统的损失、大的财务损失或人的生命损失),例如触发一个车辆的安全气囊的碰撞事件。但罕见的操作被发现的概率很低,在测试时,通常分配测试用例可能不足以发现潜在的问题。

3.2 软件边界类

(1) 执行范围类。执行的范围包括软件的执行层,如硬件平台(提供基本的软件执行资源,如处理器和内存)和操作系统软件(管理的基本执行资源和更高级别的系统资源,如调度、同步和文件系统)。此外,执行范围包括其他系统和用户任务,同时执行和竞争相同的执行资源。执行范围类又分为感知执行类和非感知执行类,如:从特定的任务出发的运行剖面就会产生感知执行类,相反的是非感知执行。

(2) 外部错误类。在系统的执行范围类外,另一个重要类型的故障就是外部错误类。外部错误类是指由外部输入接口的软件应用程序引发的错误类。例如,由学员提供的输入不可能总是正确的,用户可以输入一个名称,可以输入一个电话号码或可能会点击一个错误的按钮。这些都是外部错误的例子,包括无效的软件输入等。因此,运行剖面应该不仅包括用户正确的输入(或其他非人类用户等其他计算机和系统),它也应包括无效(即不正确)的输入。如果该运行剖面认为是无效的输入,它被称为意识错误,反之被称为非意识错误。

(3) 输入数据类。输入数据被定义为输入变量的名称、值、类型和他们需要满足的约束。例如,对于用户登录密码,输入数据可以有输入的类型整数的限制,限制为4个数字。输入数据的选择是一种在实践中进行测试的最终和不可回避的任务。这具体包括确定哪些实际值被分配给在测试中的软件的输入变量。一个运行剖面的方法,提供了指定输入数据的显式方式称为包含数据的运行剖面;否则,它被称为不包含数据的运行剖面。

3.3 测试类

测试类分为白盒测试和黑盒测试。如果定义、构造或使用该运行剖面,需要对内部结构或软件应用程序的源代码的内部数据进行测试,则将其称为“白盒测试”。否则,如果不需要构建或运行该运行剖面,则该软件应用程序的代码将被称为“黑盒测试”。

一个黑盒子运行剖面视图的软件应用程序作为一个黑色的、封闭的框,内部代码细节不可用;只有外部输入和输出接口是已知的才可以访问。另一方面,一个白盒运行剖面视图的软件应用程序作为一个打开的盒子,使所有的内部信息、结构和数据可用。

3.4 开发类

(1)生命周期阶段类。其中,运行剖面是在软件系统的生命周期早期建立的,被称为早期运行剖面;否则,它被称为晚期运行剖面。需求运行剖面是一个早期的运行剖面,而维护运行剖面是晚期的运行剖面。生命周期阶段类涉及多个步骤,这些步骤包括:①运行剖面模型的开发;②概率的推算;③模型分析;④测试规划[11](包括通过/失败的标准和停止标准);⑤测试用例的生成(包括测试用例的质量度量)。

(2)工具支持类。工具支持类分为自动运算类和非自动运算类。其中一个运算方法是通过自动化工具实现的,被称为自动运算类;否则,它被称为非自动运算类。实际工作中,很少有开发完整的测试软件工具专门用于运行剖面的测试。所以,这些工具无法提供全自动化的工具支持。

4 结语

各种运行剖面模型可以构造依赖于被测试应用的兴趣领域、应用的关键、选择的范围、精确程度、捕捉其动态特性等。运行剖面提供了一个分类,区分和分析运行剖面的特点,从共同的特点(轮廓,结构,场景等)、软件边界(事件和错误,如无效输入或操作系统/硬件错误)、测试、开发(生命周期阶段,工具支持)等几个角度进行分类。

但也应该看到,随着软件系统复杂性的增加,运行剖面的发展变得越来越有挑战性。特别是由于增加了系统组件之间的相互作用和不同性质的系统用户(例如基于网络的或分布式系统)。因此,事件发生概率的表征成为一项艰巨的任务,有待于进一步解决。

References)

[1] Musa J D.Operational Profiles in Software-Reliablity Engineering[J].IEEE Software,1993,10(2):14-32.

[2] 王立荣,王莹.基于舰艇装备软件运行剖面的可靠性测试研究[J].工业控制计算机,2014,27(10):85-86.

[3] Smidts C,Mutha C,Gerber M J,et al. Software testing with an operational profile:OP definition[J].ACM Computing Surveys,2014,46(3):39.

[4] 陆民燕.软件可靠性工程[M].北京:国防工业出版社,2011.

[5] 李学仁.军用软件质量管理学[M].北京:国防工业出版社,2012.

[6] Taylor C,Gibbs G R,Lewins A. Quality of Qualitative Analysis[EB/OL].(2005-12-02)[2016-11-28].http://onlineqda.hud.ac.uk/Intro_QDA/qualitative_analysis.php.

[7] Rora A,Misra R B,Kumre V M. Software reliability improvement through operational profile driven testing[J].Reliability and Maintainability Symposium,2005,27(4):621-627.

[8] Popovic M,Kovacevic J. A statistical approach to model-based robustness testing[C]//In Proc. of the 14th Annual IEEE International Conference and Workshops on the Engineering of Computer-Based Systems(ECBS’07).2007:485-494.

[9] Bousquet L D,Ouabdesselam F,Richier J L. Expressing and implementing operational profiles for reactive software validation[C]//In Proc of the 9th International Symposium on Software Reliability Engineering(ISSRE’98).1998:222-230.

[10] Lyu M R.Handbook of software reliability engineering[M].McGraw-Hill Inc,1996.

[11] 王俊杰,张波,王红园,等.基于运行剖面的测试用例自动生成方法[J].计算机测量与控制,2008,16(11):1553-1555.

Research on method of classification of operational profile in software experimental platform test

Sun Yuan1, Chu Jianchong2, Li Jiying1, Lu Lin3

(1. Department of Scientific Research,Naval Aeronautical and Astronautical University,Yantai 264001,China;2. Department of Training,Naval Aeronautical and Astronautical University,Yantai 264001,China;3. Department of Logistics,Naval Aeronautical and Astronautical University,Yantai 264001,China)

Based on the experimental platform for testing software,in the testing process of software operational profile analysis, the identification and classification of the software operational profile are studied, the characteristics of the operational profile are analysed, and the software operational profile classification and types are given for testing of software test platform to provide valuable reference.

software experimental platform; software test; classification of operational profiles

10.16791/j.cnki.sjg.2017.04.038

2016-12-07

孙媛(1980—),女,山东烟台,硕士,助理研究员,主要研究方向为软件工程和装备保障信息化.

E-mail:sunyuan1208@126.com

TP311.5

A

1002-4956(2017)4-0152-04

猜你喜欢
可靠性概率分类
第6讲 “统计与概率”复习精讲
第6讲 “统计与概率”复习精讲
概率与统计(一)
概率与统计(二)
分类算一算
可靠性管理体系创建与实践
分类讨论求坐标
合理使用及正确测试以提升DC/DC变换器可靠性
数据分析中的分类讨论
教你一招:数的分类