Vol.34 No.11 Computer Engineering · · 软件技术与数据库
文章编号:1000—3428(2008)11—0052—03
文献标识码:A
2008年6月
June 2008
中图分类号:TP311
软件可靠性建模研究
吴 超1,2,林家骏1,俞 岭2,邵玮炜2
(1. 华东理工大学自动化研究所,上海 200237;2. 总参通信部驻上海地区军事代表室,上海 200082)
摘 要:依据软件可靠性特征,提出以解决软件开发逻辑思维正确性为建模基本问题的可靠性建模思想。给出基于失效过程的软件可靠性定义,以及一种基于“任务-事件-功能”的软件体系结构准则,进行了形式化描述和理论证明。阐述从功能可靠性、事件可靠性到任务可靠性的分层可靠性预计方法,在建模中融合了软件可靠性设计以及软件测试和管理。 关键词:软件可靠性模型;软件工程;软件测试
Study on Software Reliability Modeling
WU Chao1,2, LIN Jia-jun1, YU Ling2, SHAO Wei-wei2
(1. Research Institute of Automation, East China University of Science and Technology, Shanghai 200237;
2. Shanghai Military Deputy Office, Communication Department, General Staff, Shanghai 200082)
【Abstract】According to software reliability characteristic, a software reliability modeling idea as its basic problem for solving the validity oflogical thinking in the software development is put forward. A reliability define based on software invalidating process is brought forward,formalizing description and theoretic proving of a software systematic-frame principle based on “mission-event-function” are put forward. Anestimating method of delaminating reliability in the reliability range from functions, events and missions is presented. Software reliability design,test and control are inosculated in modeling.
【Key words】software reliability model; software engineering; software test
1 概述 如何反映软件在实现其功能时的可靠性组成结构变化对可靠性的影响,是软件可靠性建模亟待解决的问题。基于时域的模型只考虑了软件系统随时间变化的可靠性特性。基于输入域的“黑盒法”模型[1]只考虑软件输入而未考虑软件结构和执行路径。“白盒法”模型[2]则无法描述软件系统的动态过程对可靠性的影响。基于组件的可靠性建模给出了系统可靠性参数的估计方法,但由于军用软件几乎都是新开发的,组件可靠性未知,基于组件建模方法就失去了应用的前提。在经典可靠性理论中,任务阶段性(phased- mission)可靠性建模方法[3]考虑了系统的可靠性组成结构变化对可靠性的影响,但由于尚无实用的软件体系结构分解方法而未在软件可靠性建模中得到应用。 软件产品本质上是一个离散的数学模型,内部逻辑关系具有高度复杂性和抽象性。软件失效是其输入与其运行状态的函数,失效过程取决于软件系统结构和内部逻辑的复杂程度,而这种复杂程度又取决于软件开发人员的思维逻辑正确性。软件可靠性特征决定了用一种分解方法对一个软件进行系统结构分解是可能的,但要适用于所有的软件几乎是不可能的。 笔者认为软件可靠性建模的基本问题是如何保证软件开发逻辑思维正确性。问题的关键是涉及到人和对人的设计行为的管理。因此,应提出一种体系结构准则,以规范和保证软件开发思维逻辑的正确性,并由此作为基于软件可靠性组成结构建模的一个必要前提。一个良好的体系结构准则不仅可以成为可靠性设计的框架,同时也建立了可靠性测试与验证过程的框架,以融合可靠性设计、测试和管理。 —52—
2 软件可靠性建模 2.1 基于软件失效过程的可靠性定义 不失一般性,软件系统的输入和使用可设为特定程序的一个输入,它由m个量组成,这些量可以是字符型、数值型、逻辑型或结构型,用i1, i2,…, im表示,这样的一个输入构成m维输入空间A。同样,假设程序的输出由n个量o1,o2,,on组成,则它构成一个n维输出空间。当给定输入空间的一个量,经程序P计算或处理后,就能找到输出空间的一个量,因此,程序P实质上是输入到输出的一个映射。 由此产生以下3种情况: (1)当唯一确定程序的一个输入空间A时,能唯一地映射到一个输出空间B,如式(1)。 O=P(I),A⇒B (1) (2)当程序的输入空间不能唯一地确定时,或超出了预期的范围,程序就不可能正确地映射到所预期的输出空间,即 O+Oe=P(I+Ie), A+Ae⇒B+Be (2) (3)当程序中存在错误或缺陷时,虽然程序的输入空间能唯一确定,但由于输入空间的某些区域正好对应了程序P中隐含的错误代码或执行路径,因此程序也不能正确映射到所预期的输出空间,即 O+Oe=P(I), A⇒B+Be (3) 军用软件面对的是特定的、有组织的用户群,需求清晰,作者简介:吴 超(1957-),男,高级工程师、博士研究生,主研方向:软件工程,软件可靠性,软件测试;林家骏,教授、博士生导师;俞 岭,工程师、硕士;邵玮炜,硕士
收稿日期:2007-06-20 E-mail:wuch818@163.com
使用要求明确。装备发展的继承性又形成了任务剖面和操作剖面一定的确定性。基于此,本文提出基于软件失效过程的可靠性定义如下: 设A为允许的预期用户操作,Ae为不允许的预期用户操作,用f1,f2,…,fi表示一个完成特定任务的装备软件P所具备的有限功能(点)的集合,对应功能点的允许与不允许的用户操作(或输入)是一个有限空间m和n,用A1,A2,…,Am和Ae1,Ae2,…,Aem分别表示功能点上允许的预期用户操作与不允许的预期用户操作的集合,P及其功能规约Bf是(A,Ae)上的函数,即Bf=P(A,Ae),Pf为(A,Ae)上的一个给定的概率分布。P在概率分布Pf下对应于Bf的可靠性R(P,Bf)定义为 R(P,Bf)=Pf({f∈A,Ae|P(A,Ae)=Bf(A,Ae)}) (4) 称其为P的可靠性。其失效率λf为 λm
Bff=∑
+α (5) x=1
A∑
n
Bfx
y=1
A ey
其中,0<α≤1,视功能点对完成任务的重要度或危害度而定; B⎧⎪1Bf=P(A,Ae)
f=⎨
,f∈A,A⎪e (6) ⎩
0Bf≠P(A,Ae)显然,通过各功能点之间串联或并联2种联接形式,可得出P的总失效率λ。则可靠性R为 R=1−λ (7) 2.2 基于“任务-事件-功能”体系结构准则 基于失效过程可靠性定义,并根据军用软件特点,本文提出一种基于“任务-事件-功能”的软件体系结构准则,其抽象描述和理论证明为以下内容。 定义1(有限任务定义) 设软件S被要求为完成某特定任务M的定制软件,对于M存在着若干事件x(x∈M),使任务M成为由xi(i=1,2,…,n)组成的有限条件论域U,U= {x|M(x)},则称U为M的任务空间。 定义2(任务条件定义) 事件x是任务M在论域U中的预期输入及环境条件I{I={x|U(x)}},和预期目标O{I→O, O={x|U(x)}}及其规约的集合,即I,O∈U(x)。 定义3(任务成功定义) 设I∈U(x), I∈U(x)⇒O∈U(x)。若存在Ie={x|x∉I},产生Oe={x|x∉O},则I∈U(x)⇒ O∈U(x)称为任务成功判据,记为I×O;而Ie∈U(x)⇒ Oe∈U(x)则称为任务失败判据,记为Ie×Oe。 定义1和定义2通过对有限任务空间的定义,把软件的输入空间与事件一一对应起来。定义3通过定义任务完成与软件输入的关系,把输入空间划分映射到软件系统结构,作为构建软件系统的前提条件。下文给出从任务空间至功能的分解准则。 定义4(分解第1特性) 设x是论域U的事件,Ia, Ib∈U(x), Ia∈U(x)⇒Oa∈U(x), Ib∈U(x)⇒Ob∈U(x)。若对于任意x,都有Ia={x|x∉Ib},且Oa={x|x∉Ob}为分解第一特性。满足此特性即可称为论域U中的顶事件,记为X(I×O)。按此特性构成的软件系统,其结构称为第1分解范式,记为1FD。 定义5(分解第2特性) 设x是论域U的顶事件,Ia,Ib∈ U(x),Ia∈U(x)⇒Oa∈U(x),Ib∈U(x)⇒Ob∈U(x)。若Ia−Ib= {x|x∈Ia∧x∉Ib},且Oa−Ob={x|x∈Oa∧x∉Ob},为分解
第2特性。满足此特性的I×O称为归集于x的功能,记为F(I×O)。按此特性构成的软件系统,其结构称为第2分解范式,记为2FD。 定义6(分解第3特性) 设F(Ia×Oa)∈U(x),F(Ib×Ob)∈U(x)分别属于论域U中的顶事件x的功能要求,有Ia−Ib= {x|x∈Ia∧x∉Ib}。若∃Oa={xa|xa∈Oa}∧∃Ib={xb|xb∈Ib},使得(xa⇒xb)∧Ob={xb|xb∈Ob},则称F(Ia×Oa)与F(Ib×Ob)具有分解第3特性,即F(Ib×Ob)的实现依赖于F(Ia×Oa),或称F(Ib×Ob)是F(Ia×Oa)的子功能。按此特性构成的软件系统,其结构称为第3分解范式,记为3FD。 定义7(功能模块定义) 设F(I×O)∈U(x),程序P是 F(I×O)的软件实现,即O=P(I),则F的实现程序P及其集合称为功能模块(或功能组件)。 定义8(软件错误定义) 设I∈U(x), Ie={x|x∉I},Ie∈ U(x)⇒Oe∈U(x),若(O,Oe)=P(I,Ie),则对应于Ie×Oe的实现程序P称为软件错误。 定义4~定义6给出了从顶事件至功能剖面的分解准则。定义8在定义7的基础上给出了软件错误与功能模块和输入的关系,并逐一上溯到功能剖面和任务剖面,形成从功能独立、程序独立到软件错误独立的可靠性聚集和故障因素分离的结构特征。 软件系统结构是一种设计,它包括:由任务剖面确定软件预期功能;由任务独立来划分软件输入空间;由预期功能和输入空间构建功能模块和设计程序。下文给出软件体系结构准则的递归定理。 定理1(任务空间划分定理) 一个完成特定任务M的软件S,一定存在着有限个数的符合1FD的顶事件,构成有限条件论域U的任务空间,诸顶事件在任务空间中时序和其概率,构成软件S的任务剖面。 定理2(功能空间划分定理) 顶事件一定包含了有限个数的符合2FD的功能和符合3FD的子功能,诸功能的有序集合和其执行概率,构成软件S的功能剖面。 定理3(软件系统结构定理) 基于任务剖面的软件S的体系结构,是顶事件、功能和子功能的有序集合,且符合软件体系结构的1FD, 2FD和3FD,而具有以上特征的软件系统结构,可称为具有结构的正则性。 定理4(可靠性特征定理) 符合结构正则性的软件系统结构,一定具有故障因素分解和可靠性聚合的特征。 定义9(任务可靠性定义) 设软件S被要求完成某特定任务M,并可通过任务空间划分得出任务剖面m,软件S的体系结构具备正则性。软件S的任务可靠性R(m)是指:软件系统在规定的任务剖面m中完成规定功能的能力(概率)。 与通常情况不同,定义9是以规范软件开发的思维逻辑正确性为基础,以具有可靠性内聚和故障因素分离的系统结构为前提。 2.3 可靠性结构 图1给出了基于体系结构准则的软件系统结构框架。这个框架的构建始于软件需求,包括任务剖面、使用环境与要求等。 在基于体系结构准则中,每个事件是若干个功能的有序集合,由功能到功能模块是一种设计。当程序执行在功能模块中的驻留时间远远小于系统的失效间隔时间时,可按并行—53—
系统结构进行分析[4]。通常基本配置结构有3种:串联实现配置,并联实现配置和K/n实现配置。基于任务剖面的软件系统结构框架如图2所示。并联实现配置与K/n实现配置是一种冗余设计方法,可通过某种方法转换为串联实现配置,如图2(c)所示。 任务 事件1 … 事件2 事件3 (环境与目标) (环境与目标) (环境与目标) 功能1 功能2 … , 功能3 (输入与状态 ) (输入与状态) (输入与状态) 功能模块1 功能模块 2 … , 功能模块3 程序1 程序2 … , 程序3图1 基于任务剖面的软件系统结构框架 功能模块1 功能模块1 功能模块2 功能模块2 k/n … 功能模块n … 功能模块n (a)
并联实现配置 (b) k/n实现配置
功能模块 n 功能模块n …功能模块n
(c)串联实现配置
图2 可靠性结构 在串联实现配置中,功能实现由n个相互独立的功能模块完成,其中任何一个功能模块失效都将导致该功能失效。设Ri为功能模块i的可靠度,则可靠度为 Rn
f=∏Ri=1
i (8) 符合体系结构准则的软件其输入域独立,因此,功能模块失效可视为常数。设λi为功能模块i的失效率,则失效率为 λ=∑n
fλi (9)i=1
2.4 可靠性预计 符合体系结构准则的软件具备以下特征:(1)软件功能与其预期使用条件或环境相对应;(2)软件是在预期使用条件下或环境中运行;(3)对程序中错误的检测是相互独立的; (4)所有检测到的错误就能从系统中排除;(5)软件失效率正比于程序中残留的错误数。 基于体系结构准则,功能f的输入域E划分为有限个独立子域Ei{i=1,2,,M},E=∪M
Ei=1
i;同时求得Ei的邻域Ej{j=1,2,,N},使Ei∩Ej=φ,i≠j作为可能有的软件错误输入空间。根据Ei上的概率分布Pi,在Ei和Ej中随机各选取mi与nj个测试用例运行程序,若分别发生fi与fj个失效,其功能失效率为 λMf
ii=1m∑N(fjf=∑()Pi+)Piij=1nj
(10) 则功能R
f的可靠性估计值为 f=1−λf (11) —54 —
功能剖面已知,事件RRx的可靠性估计值为 nx=∏ωi=1
fifi (12) 其中,n为实现事件x所需的功能数;R
fi为第i功能模块的可靠性估计值;ωfi为第i功能在功能剖面中的执行概率。 任务剖面已知,软件系统的任务可靠性估计值为 Rms=∏ωi=1
xiRxi
(13) 其中,m为任务剖面中的事件数;R
xi为第i事件的可靠性估计值;ωxi为第i事件在任务剖面中的执行概率。 2.5 分析和初步评价 本文提出的软件可靠性建模方法的特点如下: (1)从功能、事件到任务的可靠性分层预计,工程概念清晰,公式简单明了,便于实施;反映了软件系统的可靠性动态结构对可靠性的影响,克服了软件输入“组合爆炸”带来测试和预计的困难。 (2)融合了可靠性设计与可靠性测试,分层测试和预计过程的同时也是对可靠性设计正确性、完备性和测试充分性的一种度量。 (3)把软件需求作为系统结构的组成部分和设计输入,结合分层测试与预计方法,建立了使用方和开发方在军用软件立项论证、可靠性设计、测试和验证等过程中各负其责、共同管理的基础。 3 结束语 可靠性问题的关键是工程问题[5],本文与偏重于数学建模的不同点如下: (1)依据软件可靠性特征,提出“以解决软件开发逻辑思维正确性为建模基本问题”的可靠性建模思想;根据军用软件特点,提出了基于软件失效过程的可靠性定义。 (2)基于可靠性定义,提出“任务-事件-功能”体系结构准则,规范并保证软件开发思维逻辑的正确性,以可靠性内聚和故障因素分离的软件系统结构,作为基于软件可靠性组成结构建模的必要前提。 (3)基于体系结构准则,给出了从软件功能、事件到任务的分层可靠性预计方法,建立了对可靠性设计正确性和测试充分性的一种度量。 本文提出的遵循“可靠性是设计出来的”工程思想,结合专业领域,从工程出发,综合考虑可靠性设计、测试和管理,是软件可靠性建模研究与应用的一种有益尝试。 参考文献
[1] Basitani F B. Input-domain-based Models for Estimating the Correctness of Process Control Programs[C]//Proc. of the International School of Physics. Amsterdam, Holand: [s. n.], 1986. [2] Shooman M L. Statistical Computer Performance Evaluation[M].
New York, USA: Academic Press, 1972
[3] Dugan J B. Automated Analysis of Phased-mission Reliability[J].
IEEE Trans. on Reliability, 1991, 40(1): 45-53.
[4] 黄锡滋. 软件可靠性、安全性与质量保证[M]. 北京: 电子工业出
版社, 2002.
[5] Musa J D. 软件可靠性工程[M]. 韩 柯, 译. 北京: 机械工业出
版社, 2003.
因篇幅问题不能全部显示,请点此查看更多更全内容