1、第 卷第 期年 月同 济 大 学 学 报 (自 然 科 学 版 ) ( ) 文章编号 :() :收稿日期 :基金项目 :国家 “八六三 ”高技术研究发展计划 ();国家自然科学基金 ();微软亚洲研究院联合资助项目();教育部高等学校博士学科点专项科研基金 ();上海市优秀学科带头人计划 ();高效能服务器和存储技术国家重点实验室开放基金 ()第一作者 :许金超 (),男 ,博士生 ,主要研究方向为软件保护 :通讯作者 :曾国荪 (),男 ,教授 ,博士生导师 ,工学博士 ,主要研究方向为可信软件 :一种基于贝叶斯理论的软件可靠度评估方法许金超,曾国荪,王伟,(同济大学 电子与信息工程学院,上
2、海;同济大学 嵌入式系统与服务计算教育部重点实验室,上海)摘要 :针对目前软件测试过程中可靠性度量方法匮乏的不足 ,提出了一种新的基于贝叶斯理论的软件可靠度评估方法 ,该方法通过分析软件模块间的影响关系构建贝叶斯网络 ,利用贝叶斯方法和经验数据评估贝叶斯网络中各节点的可靠度 给出了可靠度计算的详细推导过程 ,并通过一个具体实例解释了计算过程 该方法能重用已有的测试结果 ,计算速度快 ,简单易行 通过对每个模块提供数值可靠度估算 ,可以作为测试用例选择的依据 ,降低了测试成本 ,从而很好地为软件测试提供支持 关键词 :可靠度 ;模块影响关系 ;贝叶斯理论 ;软件测试中图分类号 :文献标识码 :
3、, , ,( , ,; ,): , , , , , :; ; ; 软件测试是由人工或自动的方法来执行或评价系统或系统部件的过程 ,以验证它是否满足规定的需求 ,或识别出期望的结果和实际结果之间有无差别现代软件工程中软件测试是不可缺少的一个环节随着软件规模越来越大 ,软件产品的逻辑功能和系统结构越来越复杂 ,有限的时间和资源范围内设计和选择测试用例以获得足够的测试覆盖率变得越来越难通过分析软件中的因果关系采用严格的测评方法评估软件是否达到可靠性目标可以为测试人员提供决策支持 ,因此成为了学术界和工业界的一个重要研究方向贝叶斯方法利用先验认识对参数进行估计这一特点使得该方法在软件可靠性的估计中得到
4、了广泛的应用等提出了基于贝叶斯方法的模 型 ,和等各自给出了软件失效估计的不同贝叶斯方法等提出了基于输入域的软件可靠性评估的贝叶斯方法等讨论了在利用或不利用对系统可靠性的主观认识的情况下采用贝叶斯理论对可靠性进行估计的方法张德平等给出了一种基于先验知识的快速学习算法 ,并利用此算法来优化测试过程 ,从而降低测试成本已有的这些评估方法难以有效地收集与表示软件失效时间数据 ,从而限制了这些方法在可靠性评估中的应用并且方法都相对复杂 、误差较大 ,测试的持续期太长 ,导致某些高可靠性指标的验证不易实现工程中实用的可靠性估计方法应该能够简化第 期 许金超 ,等 :一种基于贝叶斯理论的软件可靠度评估方法
5、计算过程 ,最大化复用已有的测试数据 ,减少测试用例的数量 ,为何时进行单元测试 、何时进行集成测试提供决策依据随着面向对象技术的广泛应用 ,大规模软件通常划分为多个模块进行开发测试 ,这些模块的测试结果和整个软件的测试成败有直接联系本文通过建立软件内部模块影响关系图利用贝叶斯方法计算出模块需要的测试用例数目和每个模块的可靠度 ,进而评估整个程序的可靠性该评估方法能够给出每一模块的可靠程度的精确数值且计算简单 ,可以直观地为测试过程提供决策依据 ,减少测试用例数量 ,解决了已有可靠性估计方法中存在的部分问题 模块影响关系软件是由软件模块构成的集合 ,令表示一个软件 ,定义,其中,是中的所有软件
6、模块定义 如果模块测试出错 ,可能会导致模块出错 ,则称影响,记作 ;如果测试出错不会导致模块出错 ,则称不影响,记作 定义 给定软件模块和,如果不存在模块,使得 和 同时成立 ,则称直接影响,记作定义 程序的模块影响关系图是一个二元组,其中代表软件中的所有模块 ,表示中模块间的直接影响关系对于模块影响关系图中不受其他模块影响的节点称为底层节点 ,除此之外的其他节点称为上层节点一般说来 ,一个模块影响的模块越多 ,则它的测试结果对整个程序的影响越大 ,对它的可靠性要求就更严格 ,这种节点的重要性更高图给出了一个模块影响关系图的实例 ,实例中的模块选自一个游戏软件 ,图中每个模块对应游戏中的一个
7、类 ,图中直接影响个模块 ,因此上层节点的重要性比底层节点高对于设计不好的软件系统 ,会存在软件模块间高耦合的情况 ,从而造成模块间出现循环依赖的影响关系 ,从而在模块影响关系图中出现环路为了利用贝叶斯方法研究各个模块的测试可靠度 ,需要消除图中的环路可以用种方法消除图中的环路第种方法是分析具体应用程序 ,修改其源代码 ,改进程序的实现方式 ,消除代码间的循环依赖关系 ,然后重新构建模块影响关系图在不方便修改源代码的情况下 ,可以采用第种方法 ,这种方法将存在循环依赖关系的环上的所有节点视作一个整体 ,在图中作为一个单独的节点存在 ,然后将指向环上节点的边统一指向该节点循环这个步骤 ,直至图中
8、不出现回路最终得到一个贝叶斯网络图 模块影响关系图实例 基于贝叶斯理论的软件测试程序的可靠度是对整个程序成功执行的期望 ,而系统的成功执行意味着程序的所有模块必须全部按用户的期望执行模块的可靠度可以通过下次测试是否成功的概率进行估值 ,记模块的可靠度为() 单模块的可靠度评估对每个单独的模块来说 ,测试结果只有种 :成功或者失败单模块的软件测试是一个二项式分布 ,可以运用贝叶斯方法直接估计后验测试成功概率命题设为软件中的一个模块 ,如果用二项事件 (成功 失败 )描述测试结果 ,当对进行次测试后 ,测试成功的次数为,测试失败的次数为,则模块测试成功的后验概率服从分布 ,其密度函数为(,)( )
9、( ) ( ) ( )()式中 ,为模块测试成功的概率 ,单模块的可靠度()可用第次测试成功的概率给出()(,)()式中 :()表示数学期望 ;参数,命题为单测试模块的可靠性提供数值估算 ,式 ()给出了直接计算模块可靠度方法但是一个模同 济 大 学 学 报 (自 然 科 学 版 ) 第 卷块可能只进行过很少几次测试 ,不足以用来评估目标模块的可靠度为了拥有足够的把握确认对的估计 ,需要度量的置信水平令 (,)为的置信度为的置信区间 ,代表了一个可以接受的错误水平 ,则可用如下公式计算的置信度 :()()()()()( )()()由于区间估计的置信度与精度相互制约 ,当测试总次数固定时 ,精度
10、与置信度不可能同时提高 ,为此在保证置信度前提下尽量提高精度即先选定一个置信度阈值,然后通过增加总的测试次数提高精度 ,当精度达到可接受的水平 ,即时 ,可根据这时的测试结果进行可靠度计算通过推导可得到需要的样本容量同和之间的关系( )() 存在直接影响关系的个模块的可靠度评估若和为中的个模块 ,且 ,且对,由命题可以直接求得的可靠度观察可知的可靠度取决于的可靠度()和测试正确的前提下自身的可靠度 ,为了表述方便 ,将依赖于影响模块的可靠度称作推荐可靠度 ,记作(),则有()();将不考虑影响模块的时候自身的可靠度称作直接可靠度 ,记作(),这可由式 ()进行计算合并这二者 ,可得的可靠度 ,
11、由以下公式给出 :()(),()()()(),(,) ()的选择由测试人员对两者的重要性判断给出一般说来 ,对于上文中的和的关系 ,可以直观认为计算时()比()更重要因此由下式给出 :()式中 :为中受影响的代码行数 ;为中总代码行数 多模块可靠度评估若,是中 的个 模 块 ,此时的可靠度取决于和的可靠度以及,测试通过前提下的可靠度因此有()(),()()()()()式中 :()可以由式 ()计算得出 ,而()即,的联合可靠度(,)的评估又分种情况()若, , 命题 设对和的总测试次数为和,其中测试成功次数为和,测试失败的次数为和则(,)的估计为(,)(,)()当直接影响的模块不止一个时 ,不
12、难对式 ()进行推广 ,同时结合前面对模块可靠度准确性分析可得()()()这里为了保证联合可靠度的置信水平 ,首先要求每个单独的模块都应该满足(),使 成立这种情况下的可靠度不仅取决于自身的可靠度和,本身的可靠度 ,另外还和影响,从而间接影响的模块的可靠度有关系因此这种情况下对式 ()进行扩展得(,)()()()()()式中 :为满足条件的的个数 ;为,中除以外的代码行数与,中总代码行数的比值类似的有 ,当影响模块多于个时式 ()推广为()()()() () 可靠度评估在测试过程中的应用式 ()()给出了利用贝叶斯理论对软件模第 期 许金超 ,等 :一种基于贝叶斯理论的软件可靠度评估方法块可靠
13、度进行估值的计算方法在实际测试过程中 ,必须做好测试记录 ,它是可靠度评估的基本依据整个测试过程描述如下 :测试一个程序 ,首先根据程序分解后的模块间影响关系构建贝叶斯网络 ,统计每个模块的影响模块数量 ,对每个模块根据其重要程度确定置信度和置信区间 ,然后根据这些参数确定每个模块的用例数量并进行测试 ,并使用测试结果对模块的可靠度进行估值 ,如果可靠度达到了模块的测试要求 ,则认为该模块测试成功 ,否则对软件进行修复并产生新的测试用例继续测试在保证程序的每个底层模块测试成功的前提下再对上层模块进行测试和可靠度计算重复这一过程 ,直至所有模块可靠度都达到其设计指标 应用和实验 应用示例该框架曾
14、应用在一款平台手机游戏的自动化测试中 ,测试游戏由开发 ,共有个模块组成 ,根据各个节点间影响关系构建的贝叶斯网络有个底层节点 ,个上层节点测试过程中 ,设定所 有 模 块 的 置 信 度 阈 值 为,设 定 模 块,和可以接受的错误水平,则由式 ()可计算出,即 需 要 的 测 试 用 例 至 少 为个 ;模 块的,至少需要测试用例个 ;其他模块的,至少需要测试用例个选择其中的一部分模块来描述模块可靠度的计算过程 ,选择的部分模块之间的影响关系如图表给出了最底层节点的测试成功次数和失败次数以及计算出的底层节点可靠度可以看到全部满足可靠度阈值 ,因此可以继续进行上层节点的可靠度计算表 底层节点
15、测试数据和可靠度 节点编号 节点名称历史测试记录成功 失败 经观察 ,共行 ,共有代码行 ,和类相关代码行可以求得,故()类中共有代码 行 ,和和相关的代码有行 ,因此,()()其他模块可靠度见表,最终得(),可知这部分模块和整个程序的可靠度全部大于阈值 ,测试通过表 上层节点测试数据和可靠度 节点编号 节点名称历史测试记录成功 失败 实验分析为了验证本文的可靠度评估方法用于指导软件测试时的优势及是否能够有效提高软件测试的效率和成本 ,进行了该方法与随机测试策略 、学习策略的比较在随机测试策略中测试用例根据均匀分布随机地在测试用例集中选取 ,也就是说 ,每一个可行的测试用例行动在测试中都以相同
16、的机会被选取学习策略是一种基于决策过程的策略 ,它运用交叉嫡的方法搜索最优的测试剖面 ,从而优化软件测试 ,减少测试用例数实验中测试目标是目标程序最终测试失败的概率低于,实验过程中采用个不同的测试用例集分别进行了次测试 ,次测试中分别达到这一要求时种方法分别使用的最小用例数目如图所示图 种测试策略的测试成本 次测试实验中本文方法的平均测试用例数为,和学习策略基本持平 ,随机测试的平均测试成本在三者中最高为测试结果表明 ,本文给出的方法在用于软件测试时虽然不能保证每次测试(下转第页)同 济 大 学 学 报 (自 然 科 学 版 ) 第 卷给出了该系统与一些常用混沌系统之间的转化 ,不失一般性针对
17、文中这种特殊非线性系统进行鲁棒高增益观测器设计 ,在高增益方法的基础上加入滑模项 ,辅助以坐标变换等数学手段证明该方法可以有效抑制干扰 ,使误差方程收敛最后佐以实例仿真说明该方法的有效性参考文献 : , ,(): , ,(): , , ,(): , , , ,(): , , ,(): , , ,(): , ,(): , : ,(): , ,(): , ,(): , , , : ,(): , , ,(): , ,(): , ,(): ,(): , , , ,():櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅櫅(上接第页)成本都比随机测试小 ,但
18、其平均测试成本会远远低于随机测试的平均成本实验过程中得知 ,同学习策略相比 ,尽管在测试成本上并不占太大优势 ,然而本文方法实现更为简单 ,计算快速直观 ,测试用例数目相对保持稳定 ,能够缩短测试的总时间在整个项目的测试过程中使用该评估方法能够准确把握各模块的可靠程度 ,从而有针对性地设计测试用例 ,减少了不必要的测试 ,缩短了项目的交付时间 结语通过分析软件模块间的影响关系 ,基于测试数据 ,利用贝叶斯方法为各个软件模块计算一个数值表示的可靠度通过模块间的影响关系 ,并对可靠度进行排序 ,可以确定测试过程中要重点测试的模块 ,减少不必要的测试该方法不但能快速准确地得到评估结果 ,也可以为模块的测试用例数量提供参考参考文献 : , ,: , ,: , ,: , , , ,(): , : ,:张德平 ,聂长海 ,徐宝文 基于 决策过程用交叉熵方法优化软件测试 软件学报 ,(): , , ,():