Microcomputer Applications Vol. 25, No.11, 2009 技术交流 微型电脑应用 2009年第25卷第11期 ·31·文章编号:1007-757X(2009)11-0031-03基于贝叶斯网络技术的软件缺陷预测与故障诊断王科欣,王胜利摘 要:如何进一步地提高软件的可靠性和质量是我们十分关注的问题,而前期软件缺陷和后期软件故障的诊断都是控制质量的关键手段,由此我们提出了基于贝叶斯的神经网络。
基于对贝叶斯网络和神经网络理论的分析,发现贝叶斯网络和神经网络各自的优点与不足,利用贝叶斯具有前向推理的优势进行故障诊断,利用神经网络学习算法能够处理更复杂网络结构的优势来积累专家知识,最后提出了贝叶斯网络与概率神经网络相结合的模型,该模型可以更好地兼顾软件缺陷与故障诊断两个方面。
关键词:贝叶斯;神经网络;测试;缺陷预测;故障诊断中图分类号:TP311.5 文献标志码:A0 引言 如何进一步提高软件的可靠性和质量是我们十分关注的问题,软件可能存在缺陷,我们在软件的整个生命周期中始终期望能及早发现重要错误,并及时诊断。
这就告诉我们,在进行软件前期预测时,就应该重视和记录重要缺陷,以便在故障发生时能通过早期预测的记录表找到故障原因。
这就说明软件缺陷预测和故障诊断不应该是两个独立的过程,而应该有所联系。
本文就通过贝叶斯网络和模糊神经网络对两项工作进行了整合。
通过贝叶斯的在推理规则上的优势,尤其是前向推理的特点进行故障诊断,利用神经网络学习和训练函数的复杂多样性,可以更好地拟合复杂情况。
1 软件缺陷预测与故障诊断1.1 软件缺陷预测的两个方面 1.1.1 对于软件可靠性早期预测 对于开发者而言,在开发软件之前或者设计软件中,主要作用是进行风险控制,验证其设计可行性。
由于贝叶斯网络可以在信息不完全的情形下进行不确定性和概率性事件的推理,所以对于复杂软件的早期预测具有先天的优势。
软件缺陷数量属于动态度量元素,需要通过对软件产品进行完整的测试后才能获得。
针对特定模块进行完整测试成本比较高,并且必须在软件开发完成之后才能进行集成测试,这样在前期很难控制软件产品缺陷数量。
为了更好地提高软件质量,对软件模块中包含的缺陷进行预测是一个可行的方法。
软件缺陷预测方法的前提假设是软件的复杂度和软件的缺陷数量有密切关联。
复杂度高的软件模块产生的缺陷比复杂度低的模块产生的缺陷多。
软件缺陷预测的思路是使用静态度量元素表征软件的复杂度,然后预测软件模块可能的缺陷数量或者发生缺陷的可能性。
通过进行软件缺陷预测,能够以较低的成本在项目开发的早期预测产品的缺陷分布状况,可以更好的调整有限的资源,集中处理可能出现较多缺陷的高风险模块,从而从整体上提高软件产品的质量。
1.1.2 对于软件残留缺陷的预测对于测试者而言,通过质量预测,可将软件的各个组成部分按预测的质量水平进行分类,明确测试的重点,避免在进行测试时同等对待,而是有所侧重,这对节约有限资源和缩短开发周期都有着十分重要的意义。
软件的测试和修改是一个螺旋式上升的过程。
由于资源和时间的有限投入,什么时候软件达到了要求的质量水平从而能够投入实际使用是一个十分关键的问题。
对残留缺陷进行预测,目的就是为了确保代码中的缺陷数量维持在一个安全水平。
对测试经理来说,估计目前软件的测试到了哪个阶段、还应该继续做到什么样水平,这都是尤其重要的。
从软件经济学的观点上来看,它关系到产业界的投入产出比、测试过度,不能再检查出太多错误,或者说检查耗费很长的时间和很多的人力,但最终是一个细微的错误,这是不经济的;但是如果残留缺陷还比较多,就停止测试工作,那么会使得这些缺陷在未排除的情况下交付给用户,等到用户发现错误时,维护的成本就会更高。
因此,正确预测软件残留缺陷对于交付使用后的软件维护也具有重要意义。
1.2 软件故障诊断技术软件故障诊断是根据软件的静态表现形式和动态信息查找故障源,并进行分析,给出相应的决策。
其中静态形式包括程序、数据和文档,动态信息包括程序运行过程中的一系列状态,人在参与软件生存周期的各个阶段工作时,都有可能由于各种疏忽和不可预料的因素,出现各种各样的错误。
因而,从广义上说,软件故障诊断的工作涉及到软件的整个生命周期——需求分析、设计、编码、测试、使用、维护等各阶段所造成的缺陷。
软件故障诊断,“诊”的主要工作是对状态检测,包括使用各种度量和分析方法;“断”的工作则更为具体,它需要确定:(1)软件故障特性;(2)软件故障模式;(3)软件故障发生的模块和部位;(4)说明软件故障产生的原因,并且提出相应的纠正措施和避免下一次再发生该类错误的措———————————作者简介:王科欣(1982-),男,湖南长沙人,暨南大学计算机科学系,硕士研究生,软件设计师,广东体育职业技术学院助教,主要研究方向为软件工程、数据库与知识工程,广东 广州,510632;王胜利(1984-),男,湖南衡阳人,暨南大学计算机科学系,硕士研究生,研究方向为软件工程、数据挖掘,广东 广州,510632Microcomputer Applications Vol. 25, No.11, 2009 技术交流 微型电脑应用 2009年第25卷第11期 ·32·施,最后一点是软件诊断技术的关键所在。
软件故障诊断是有很强的目的性的,他要通过寻找和发现软件故障状态而进行诊断。
软件故障诊断的过程包括故障的检测与发现、故障模块的定位、故障的排除、故障排除后进行回归测试、系统继承测试和用户交付验证测试等几个阶段。
软件故障检测是软件故障诊断的第一步,通过静态检查、动态运行等方法获取软件中的各种信息,及时识别可能出现软件故障的征兆,发现软件是否能正常运行或存在故障,并为软件故障定位提供依据。
软件故障定位,是指根据软件故障检测提供的能反映软件特征参数的异动情况,或与某故障状态参数进行比对,并进一步收集软件的历史信息,通过历史记录,重现软件故障过程,通过重现来诊断软件故障的性质和程度、发生部位或产生原因,定位缺陷模块,为纠正缺陷、排除各类故障做好各项准备。
软件故障排除是指当诊断出软件中存在缺陷,分析产生的原因、查找出故障部位,估计其危险程度,决定纠正缺陷、排除故障的方法,具体包括修改程序源代码、数据或说明文档等。
从软件工程的角度来看,软件故障排除属于软件维护的范畴。
传统的软件缺陷与软件故障诊断都是分离的,以往对于这两部分都是分开研究的,而在我们进行故障诊断时,往往可以用到当初在前期已经预测时发现的缺陷,但我们把预测所得的内容用网络保留,把这块经验知识进行加工后,对我们后面的故障诊断是非常有利的。
实现诊断一方面是需要前向推理的机制和实现技术,另一方面就是宝贵的经验知识,而我们所做的就是把经验知识进行保留和积累,所以我们把缺陷预测与故障诊断相结合。
2 基于贝叶斯的软件缺陷预测与诊断技术2.1 贝叶斯概率贝叶斯概率是通过已知的先验知识和统计现在拥有的数据,使用概率的手段对未来某一事件可能发生的概率进行预计。
我们假设下式为观测样本。
{}n n x X x X x X D ====,...,,2211 (1)其中X 为事件变量,x 为变量值或状态,θ为事件X =x 发生的先验概率,()ζθ|p 为概率的密度函数,其中ζ为先验知识。
贝叶斯概率计算就是已知先验概率密度()ζθ|p 和样本D ,求第n +1次事件11++=n n x X 发生的概率为()ζθ,|11++=n n x X p 。
由全概率公式得:()()()()()()θθζθθθζθζθζθζθ,|1111,|,|,,|,|d p n n n n E d D p d D p D x X p x X p =====∫∫++++ (2) 根据贝叶斯的规则,给定先验概率ζ和样本D ,后验概率为()ζθ,|D p 为 ()()()()ζζθζθζθ|,||,|D p D p p D p = (3) 其中()()()∫=θζθζθζθd p D p p |,||()ζθθ,|p 为似然度函数,验概率在先θ已知,样本D 中各事件条件独立,事件变量X 取值为有限个,即X 有r X L x x ,,,21共r 个可能的值,r L θθθθ,,,21=。
其中()ζθθ,|k k x X p ==,k =1,2,…,r (4) 设Ni 为样本D 中事件X =xi 发生的次数,i =1,2,…,r 。
假设先验概率为 ()()()()∏∏−===11321,...,,,||k k r k r a a a a Dir p αθατατθζθ (5) 其中∑==r k k 1αα,且k α>0, k =1,2,…,r 。
后验概率为()()r r N N N Dir D p +++=αααθζθ,...,|,|2211 (6) 预测事件的贝叶斯概率为: ()()N N d N N N Dir x X p k k r r k n ++=+++==∫+ααθαααθθζθ,...,|,|22111 (7) 2.2 贝叶斯网络 在上面的数学基础上,我们把它应用到计算机领域,形成了贝叶斯网络,贝叶斯网络由两个成分定义它——有向无环图和条件概率表的集合。
其中结点代表样本中的一个随机变量,变量可以是离散的或连续值的。
可对应于给定数据中的实际属性,或对应与相信形成的“隐藏变量”,而有向弧代表变量的关系,变量之间的关系强弱由结点与其父结点之间的条件概率来表示。
通过贝叶斯网络的条件概率表(CPT )可以准确地反映实际应用中变量之间的依赖关系。
我们假设()n x x x D ,...,,21=是一组变量,同时给定变量的双亲,每个变量都有条件的独立于网络图中它的非后代。
这使得网络用下式提供了存在的联合概率的完全表示: ()()∏==n i i i n i Y Parents x P x x x x P 121),(|,,...,,|ζζ (8) 贝叶斯网络的优势就在于可以完成以下三种推理:(1)因果推理;(2)诊断推理;(3)支持推理。
根据上述可以对这些推理进行应用。
因果推理是指自顶向下推理,根据原因推知结果。
用于缺陷的预测;诊断推理自底向上推理,根据结果推知原因。
这在故障诊断中最为需要,往往我们在发生故障后,都要都故障进行调查,找出故障产生的原因,从而杜绝故障的再次发生;支持推理可以得到输入各元素的因果关系,对于分析输入的样本元素的关系有很大的意义,而最大的不足就是无法应对复杂网络的机器学习。
3 基于模糊神经网络的软件预测与诊断技术 3.1 模糊逻辑与神经网络 模糊逻辑是在多值逻辑的基础上演变而来的,它模糊集合中引入渐变的隶属度的概念,用以描述不精确、不确定、不完全和含糊的信息。