基于静态分析方法的软件可靠性模型研究
2012-11-08邓绯,王凯
邓 绯,王 凯
(1.四川职业技术学院,四川 遂宁 629000;2.西南大学,重庆 北碚 400715)
基于静态分析方法的软件可靠性模型研究
邓 绯1,王 凯2
(1.四川职业技术学院,四川 遂宁 629000;2.西南大学,重庆 北碚 400715)
随着网络通讯与计算机应用的不断发展,软件可靠性问题日益受到关注。针对更新COTS或开源组建,提供了一种定量评估软件可靠性的方法模型。该模型结合了静态分析源代码方法,对执行路径进行有限测试,并建立贝叶斯信任网络,构建一个综合的软件可靠性度量模型。最后使用STREW[1]工具对3个开源程序进行实验验证,得到了实验结果,证明模型有效。
软件可靠性;静态分析;贝叶斯信任网络
0 引言
随着网络通讯与计算机技术的不断发展,软件已渗透到国民经济和国防建设的各个领域。随着软件系统功能的不断增加,其规模和复杂程度也越来越大,软件可靠性日益受到人们的关注,尤其是在航空航天、银行等领域。如果软件可靠性得不到保证,软件系统存在缺陷和漏洞,就会造成许多问题和故障,必然会对国民生活带来不利的影响,甚至造成巨大的损失。
1983年美国IEEE[2]计算机学会对“软件可靠性”作出了定义:(1)在规定条件及时间内,软件不引起系统失效的概率;(2)在规定的时间周期内,在所述条件下程序执行所要求的功能的能力。传统的软件可靠性模型需要在开发和测试期间进行数据收集,包括可靠度R(t),平均故障前时间MTTF、平均修复时间MTTR、平均故障间隔时间MTBF,失效率,失效强度,容错性等。但错误数据不一定能被充分收集,因此检测软件可靠性有一定难度。
1 静态分析方法
源代码的静态分析是复查软件错误中的一种常用技术,是对代码的机械性的、程式化的特性分析方法。静态分析可以进行缓冲区检查[2],发现缓冲区溢出和安全漏洞、内存泄露[3]、定时异常等等其他常见的编程错误。
静态分析一般采用软件工具进行分析,包括控制流分析、数据流分析、接口分析等。该方法常用于任务关键代码的开发,如航天和交通领域。
Nagappan[1]等人指出,自动检测的故障和实际错误数目有密切关系。在本文中,需要使用Java静态分析工具估计Java程序的可靠性。有研究者使用Findbugs,JLint,PMD等等静态分析工具来分析Java源代码,并对源代码的结果进行比较。本文使用9种不同的分析工具对程序进行分析,以提高评估有效性。
2 构建可靠性模型
本模型的基本前提是:软件可靠性与源代码中静态检测故障数、静态检测故障数的路径以及代码块的覆盖率相关。
首先将源代码分成一系列方法(函数),将每一方法(函数)划分为语句块,语句块由连续的代码指令组成,静态分析检测被分配到适当的代码块中。一旦源代码被分解成语句块,静态分析工具有效地链接到分解的源代码,并输出结果。为了预测可靠性,必须确定执行每个分支的概率。在完成该程序的静态分析后,结合理论与实际,对程序的路径进行跟踪观察,实施测试。测试包括一系列的黑盒测试和功能测试。对每个方法,每个代码块的可靠性是基于贝叶斯信念网络(BBN)的静态检测故障与可靠性的输出,并对程序代码结构达到80%代码覆盖率的基础上进行有限测试。
2.1 贝叶斯信念网络
为了准确评估静态分析检测到得故障以及有效性,建立BBNs来评估单一的静态检测故障的失败风险。如图1所示,BBNS结合静态检测错误以及有限测试中的代码覆盖率,得到软件可靠性。该BBNs结合历史数据以及程序执行路径,预测一个给定的静态检测故障,以及会导致程序出现故障的概率。这个网络有效地分为三个主要部分,左上方用来处理静态检测到相关故障的风险,右上方用来评估程序执行中出现错误的概率,底部结合以上数据,提供总体静态检测故障的可靠性估计。
图1 静态检测软件可靠性模型
2.2 模块综合可靠性
依靠代码块进行单一的静态检测错误,仅仅可以确定一个代码块综合可靠性。该情况下,通过BBN中“校准网可靠性”的结点输出确定代码块的可靠性。但在具有多个静态检测错误存在的情况下,需要进一步处理代码块的可靠性。
在传统的可靠性模型中,存在两个故障,如果一个独立错误导致整个系统失败,那么一个系统的失败概率可以表示为
Pf(F1)是在执行中任何可能会导致失败的概率。Pf(F2)也一样,在这种情况下
但是,如果各个故障并不互相独立,那么
为了解决这个问题,必须依靠相关依赖对故障分组。因此,如果两个静态检测故障的属于同一分类,则假定它们是同一故障的不同实例;如果该故障不是同一分类,则必须估算它们的组合效应取得可靠性。在传统的可靠性模型中,使用乘其可靠性得到。在本模型中,需要建立另一个BBNs,如图2所示。
图2 结合两个静态检测错误的BBN
建立图2以连接网络实例,根据每一个代码块的可靠性,由该图组合得到总体的可靠性。
2.3 整个系统的可靠性
为了结合每个方法得到的可靠性,从而得到整个系统的可靠性。创建BBNs用于结合每个方法的可靠性,如图3所示。
图3 综合可靠性BBNs
3 实验验证
本文中选用3个程序进行试验来验证模型的可靠性,对程序进行可靠性计算,用STREW软件测试与可靠性预警度量方法进行可靠性分析相比较,并得到实验数据。其中STREW指标体系是一套有效使用于软件可靠性估计度量的工具。
本文选用俄罗斯方块游戏,五子棋程序和黑白棋程序进行实验。首先,为了简化可靠性模型,以上3个程序都是5千行代码以下,并使用SoSART(Software Static Analysis Reliability Toolkit)软件静态分析可靠性工具包进行分析。SoSART工具包旨在帮助开发人员通过使用静态分析评估现有的Java源代码的可靠性。其次,需要一套JUnit测试脚本来应用STREW模型。STREW度量通过工具度量和测试度量与软件可靠性关联。最后,用程序文档估计程序需求以估计软件可靠性结果。
度量的发展指标定义组由Nagappan等人使用,该度量能够有效地估计软件可靠性。该估量参数包括测试用例的数量,SLOC源代码行,TLOC测试代码行,需求数目,源类,条件数,测试类等等,通过测试以上参数,并进行组合以估计软件可靠性。
STREW工具通过测量组合参数来估计软件的可靠性。而STREW度量由GERT(Graphical Evalution and Review Technique图表评审技术)工具箱支持,GERT可以对网络逻辑关系和历时估算进行概率处理。PERT(Program Evaluation and Review Technique)利用网络顺序逻辑关系和加权历时来估算项目历时的重要技术。STREW方法在PERT的基础上,增加决策节点,不仅将活动的各参数如时间和费用设为随机性分布,而且其各个活动及相互之间的影响关系也具有随机性,即活动按一定概率可能发生或不发生,相应地反映在活动开始或结束的节点或分支发生或不发生。在网络的表现形式上,增加决策节点,并且节点之间具有回路和环存在。
3.1 软件可靠性评估过程
对3个测试程序的软件可信性评估主要发生在四个步骤上,即使用STREW度量评估可信性,然后使用静态分析工具分析代码,再对范例进行功能测试,最后使用SoSART工具对结果进行综合评定。
为了提供软件程序的可靠性估计边界,首先,在Eclipse编译环境中使用GERT分析工具。
在使用GERT工具分析进行评估后后,使用SoSART工具支持的八个独立静态分析工具对源代码进行分析。通过使用ANT(Another Neat Tool)编译工具,静态分析工具完全自动执行,以便消除人为错误。总体而言,采用静态分析工具分析三个方案,静态检测故障检测到1157个故障,其中259被认为是有效的故障。
完成后静态分析阶段之后,获得软件模块的执行配置文件。在源代码内执行功能测试或验收测试,通过运行验收测试或功能测试获得执行配置文件。
一旦得到执行配置文件,使用SoSART工具,并获得适当的可靠性措施的静态检测到的故障和执行的文件进行了分析。对于每一个程序,首先将源代码导入工具。随着源代码导入后,得到静态分析工具的输出,放进SoSART,得到有效性评估。在这一点上,产生了初步的可靠性报告评估的可靠性(假设每一个和每一个程序被执行的均匀分布)。产生该评估后,将获得源代码的执行概况可靠性报告。该过程在提供的三个方案中被重复执行。
3.2 实验结果
表1提供这一系列的实验结果。表的上段给出了STREW指标的选定项目的可靠性评估的结果,该表下部分提供使用模型的可靠性评估。在提供的例子中,最大的差异为0.015。
表1 实验结果
5 结语
本文在针对更新COTS或开源组建,结合静态分析方法、有限测试、以及构建2个贝叶斯网络,提出了一个综合的软件可靠性模型。其中,静态分析方法用来检测在源代码中有可能导致的执行错误,使用代码覆盖率检测源代码中可执行的路径以及执行率,建立第一个BBNs用于结合各个参数并估计每种方法的可靠性,并建立第二个BBNs用来结合各个模块可靠性并估计网络软件的可靠性。该模型通过3个程序测试了其有效性。但是,在贝叶斯网络上,实验的网络是简化了的,若要在实际运用中,则需要进一步探讨改进其准确性和额外附加参数的给定的参数可能。
[1] Nachiappan Nagappan.A Software Testing and Reliability Early Warning(STREW)Metric Suite[M].PhD Thsis,2005.
[2] John D.Musa.韩柯译.软件可靠性工程[M].北京:机械工业出版社,2003.
[3] 戈戟,史洪,徐良华.Shellcode静态检测技术研究[J].计算机应用与软件,2010,27(2):47-49.
[4] 李倩,潘学敏,李宣东.内存泄露检测工具与评估方法[J].计算机科学与探索,2010(1):33-39.
Research on Software Reliability Model Based on Static Analysis
DENG Fei1,WANG Kai2
(1.Sichuan Vocational and Technological College,Suining 629000,China;2.Southwest University,Beibei 400715,China)
Along with the network communication and the continuous development of computer applications,software reliability has attracted increasing attention.This paper proposes a methodology model for quantitative evaluation of software reliability in updated COTS or open source components.Combining with the static analysis of the source code,the model tests the execution paths limitedly,as well as sets up Bayesian Belief Networks to provide a comprehensive software reliability measurement model.Finally it uses STREW[1]to give the three open source programs experimental verification and the experiment results are attained.The model is proved to be effective.
software reliability;static analysis;Bayesian Belief Networks
TN915.1
A
1009-3907(2012)08-0937-04
2012-05-20
邓绯(1975-),女,重庆江津人,副教授,硕士,主要从事计算机应用方面的研究。
责任编辑:吴旭云