一种软件可靠性加速测试与评估方法及其计算机辅助工具 技术领域 本发明属于软件可靠性工程领域, 尤其涉及软件可靠性测试和评估领域, 具体地 说, 是指一种基于畸化操作剖面的软件可靠性加速测试与评估方法及其计算机辅助工具。
背景技术 软件可靠性测试对于软件的质量保证具有极其重要的意义, 一方面需要通过软件 可靠性增长测试不断排除对软件可靠性具有重要影响的软件缺陷, 实现软件可靠性水平的 不断增长以满足用户对软件可靠性的要求 ; 另一方面则需要通过软件可靠性验证测试来判 断软件是否已经达到要求的可靠性水平, 进而决定软件能否接收或者发布。
但目前, 软件可靠性测试的应用并不理想, 在传统可靠性测试理论和方法指导下 的数量庞大的测试用例是导致其裹足不前的一个重要原因, 对于高可靠软件来说, 这样的 问题尤为突出, Butler 曾认为利用传统的软件可靠性验证测试方法不可能完成对高可靠软 件的评估要求。 如何提高传统软件可靠性测试的效率, 加速软件可靠性测试的进程, 在有限 的时间和资源消耗的条件下实现相同的可靠性测试目标, 即实现软件可靠性加速测试, 成 为摆在软件可靠性领域研究人员面前的一个热点和难点问题。
当前传统的可靠性测试及评估方法主要有两种, 一种是基于马尔可夫使用模型的 统计测试方法, 另一种是基于 Musa 操作剖面的可靠性测试方法。上述两种方法的基本思想 都是基于统计学的基本原理, 即根据软件的实际使用情况的统计规律的描述, 对软件进行 随机测试, 利用失效数据进行软件可靠性评估。上述特点也决定了软件可靠性测试过程时 间长、 费用高、 资源耗费大, 导致软件可靠性测试的效率低下。
H.Hecht 分别于 1993 年在其论文 《Rare conditions-an important cause of failures》和 1994 年 在 其 论 文 《Rare Conditions and Their Effect on Software Failures》 中通过收集到的大量的数据, 总结出高可靠软件失效的一个重大原因, 即在高可 靠软件中, 小概率事件的失效是导致系统失效的主要原因, 这一数据的发布和原因分析为 后续一系列以重要度抽样为加速机理的方法的提出提供了依据。B.Cukic、 H.Alam、 D.Tang 等人均在 H.Hecht 数据的基础上, 提出了基于重要度抽样的思想, 对小概率事件的发生概 率进行提升, 对重要度抽样原理进行了描述, 并在基于 Markov 链构建操作剖面的软件上进 行了实验。以上都是基于重要度原理对软件可靠性加速方法进行了非常好的诠释, 但均以 Markov 使用模型作为阐述对象, 且基本上都是在假设软件出现失效不剔除软件缺陷、 从而 保证软件失效概率或失效率不变, 即以软件可靠性验证测试为研究对象, 而对于软件可靠 性增长加速测试没有进行阐述。因此与目前软件可靠性测试的两种类型结合不紧密, 并且 由于 Markov 链本身构建的复杂性, 影响了其在实践中的应用。因此, 如何在以 Musa 操作剖 面为基础的情况下研究软件可靠性加速测试, 且对软件可靠性验证加速测试和软件可靠性 增长加速测试进行全面的研究和考虑, 具有重要的研究意义和应用价值。
发明内容本发明为了解决基于传统 Musa 操作剖面的软件可靠性测试效率低的问题, 提供 了一种基于畸化操作剖面的软件可靠性加速测试与评估方法及其计算机辅助工具。
本发明提供的畸化操作剖面的构建方法, 分以下两种 :
方法 1 : 将普通操作的发生概率置 0, 关键操作的发生概率之和作为加速因子。所 述的关键操作是指需要重点测试的操作, 所述的普通操作是指不需要重点测试的操作。
方法 2 : 利用操作发生概率值对所有操作的发生概率值进行大小翻转。
本发明的一种基于畸化操作剖面的软件可靠性增长加速测试与评估方法, 具体步 骤为 :
步骤一、 构造畸化操作剖面, 确定各操作的加速因子和整个畸化操作剖面的加速 因子 ;
步骤二、 根据所构造的畸化操作剖面进行随机抽样生成测试用例 ;
步骤三、 判断被测软件为离散型软件还是连续型软件, 若是离散型软件, 则执行步 骤四, 若是连续型软件, 则执行步骤五 ;
步骤四、 构建软件测试环境, 执行步骤二生成的测试用例, 收集失效间隔用例数, 然后确定引起失效的输入所对应的操作, 并利用所确定的操作的加速因子进行失效用例数 的转化处理 ; 本步骤执行完毕后执行步骤六 ; 步骤五、 构建软件测试环境, 执行步骤二生成的测试用例, 收集失效间隔时间数 据, 然后确定引起失效的输入所对应的操作, 并利用所确定的操作的加速因子进行失效间 隔时间的转化处理 ; 本步骤执行完毕后执行步骤六 ;
步骤六、 选择适当的软件可靠性增长模型, 进行可靠性参数的估计 ;
步骤七、 判断此时被测软件是否满足规定的可靠性要求, 若是, 则停止测试, 若否, 转步骤二执行。
本发明的一种基于畸化操作剖面的软件可靠性验证加速测试与评估方法, 具体步 骤为 :
步骤 1、 构造畸化操作剖面, 并确定整个剖面的加速因子 ;
步骤 2、 确定被测软件的测试量 :
若被测软件为离散型软件, 对于定数结尾测试方案和无失效验证测试方案可以事 先确定加速测试所需的测试用例量, 例如对于无失效验证测试方案可以确定加速测试所需
的测试用例量其中, [.] 表示对 . 取整, FU 表示失效概率的上限值, α代表显著性水平 ;
若被测软件是连续型软件, 对于定时结尾测试方案和无失效验证测试方案可以事 先确定加速测试所需的连续执行时间, 例如对于无失效验证测试方案可以确定加速测试所 需的连续执行时间 t′= tΛ, 其中, t 代表在传统操作剖面下需要执行的测试时间, Λ 代表 整个畸化操作剖面的加速因子 ;
步骤 3、 根据步骤 2 确定的测试量, 并基于步骤 1 生成的畸化操作剖面, 生成测试用 例, 执行生成的测试用例, 收集失效信息 ;
步骤 4、 结合验证测试方案和实验结果, 得到接收或拒收结论 ;
步骤 5、 根据实际的实验结果, 给出当前的软件可靠性参数的评估结果。本发明的一种实现上述方法的计算机辅助工具, 包括传统操作剖面构造模块、 畸 化操作剖面构造模块、 测试用例自动生成模块、 可靠性验证加速测试模块和可靠性增长加 速测试模块。
传统操作剖面构造模块接收用户输入操作模式信息和操作信息, 建立传统操作剖 面, 并将所建立的操作剖面信息数据包括操作概率、 变量类型和取值范围, 传送给畸化操作 剖面构造模块 ; 畸化操作剖面构造模块根据用户对畸化操作剖面的构造方法的选择, 生成 不包含普通操作的第一种畸化操作剖面或者包含所有操作的第二种畸化操作剖面, 并保存 各操作的加速因子和整个畸化操作剖面的加速因子。 测试用例自动生成模块接收畸化操作 剖面构造模块发生过来的畸化操作剖面的信息数据包括在畸化操作剖面上的操作概率、 变 量类型和取值范围, 结合接收到的可靠性验证加速测试模块输入的测试量和验证测试方案 生成测试用例, 或者结合接收到的可靠性增长加速测试模块输入的增长测试方案生成测试 用例, 并将测试用例输出给待测软件。 可靠性验证加速测试模块, 接收畸化操作剖面构造模 块发生过来的畸化操作剖面的信息数据包括在畸化操作剖面上的操作概率、 变量类型、 取 值范围以及加速因子, 实现如下具体功能 : 首先根据用户输入的验证测试指标为被测试的 离散型软件或连续型软件生成验证测试方案, 并确定测试量, 将生成的测试量和验证测试 方案输出给测试用例自动生成模块, 然后接收用户在所构建的软件测试环境中运行测试软 件执行测试用例所收集的失效数据, 结合验证测试方案, 决定接收或拒绝接收该被测软件, 并根据实验结果得到当前的软件可靠性参数的评估结果。可靠性增长加速测试模块, 接收 畸化操作剖面构造模块发生过来的畸化操作剖面的信息数据包括在畸化操作剖面上的操 作概率、 变量类型、 取值范围以及加速因子, 实现如下具体功能 : 首先根据用户输入的增长 测试指标为被测试的离散型软件或连续型软件生成增长测试方案, 将增长测试方案输出给 测试用例自动生成模块, 接收用户在所构建的软件测试环境中运行测试软件执行测试用例 所收集的失效数据, 确定引起失效的输入所对应的操作, 利用该操作的加速因子进行失效 数据的转化处理, 并将测试结果的数据转化结果进行输出。
本发明与现有技术相比, 具有明显的优势和有益效果 :
(1) 本发明提出的软件可靠性加速测试方法和评估方法, 是基于传统操作剖面基 础上生成的畸化操作剖面展开的, 解决了以操作剖面生成测试用例方面的可靠性加速测试 问题, 而且从原理、 方案、 执行过程、 结果评估全过程对加速测试方法进行了覆盖, 并围绕可 靠性验证和增长两种可靠性测试类型展开, 实现了对软件的可靠性测试, 完全覆盖了软件 可靠性测试过程, 具有重要的指导意义。
(2) 本发明能够利用原有的可靠性测试方面的理论和成果, 例如软件可靠性增长 测试模型, 通过失效数据转化, 实现加速测试与传统模型的对接以及在传统验证测试方案 基础上的改进, 这些都使得本发明提出的方法与现有的研究成果实现了很好的延续, 而不 是完全抛弃原有的研究成果的重头研究。
(3) 通过实例应用, 本发明具有较好的测试效率, 相比传统测试技术, 测试时间短, 测试结果也准确, 便于工程人员的理解和实际操作。 附图说明
图 1 为本发明的软件可靠性增长加速测试和评估方法的流程示意图 ;图 2 为软件的操作剖面及缺陷空间的表达示意图 ;
图 3 为本发明的软件可靠性验证加速测试和评估方法的流程示意图 ;
图 4 为本发明的计算机辅助工具的模块结构图。
其中,
1- 传统操作剖面构造模块, 2- 畸化操作剖面构造模块, 3- 测试用例自动生成模 块, 4- 可靠性验证加速测试模块, 5- 可靠性增长加速测试模块。 具体实施方式
以下结合附图和实施例对本发明进行详细说明。
本发明的畸化操作剖面的构建方法有两种, 下面对两种方法具体说明。
方法 1 : 将普通操作的发生概率置为 0, 将关键操作的发生概率之和作为加速因 子。具体为 : 将需要重点测试的操作作为关键操作, 不需要重点测试的操作作为普通操作, 设未发现的对可靠性有重大影响的缺陷多存在于关键操作中。 对于关键操作与普通操作的 划分, 一种方法是从小概率事件入手, 原因如下 : 1) 小概率操作在传统测试阶段中由于自 身发生概率较低, 予以分配的测试用例较少, 因此错误暴露相对较晚或者还没有暴露完全 ; 2) 很多对软件持续运行起着重大作用的操作, 如失效恢复、 异常处理等操作, 都属于小概率 操作 ; 3) 虽然关键操作主要存在于小概率操作中, 但并非所有的小概率操作都属于关键操 作, 某些操作虽然发生概率不高, 但对整体软件功能的实现无直接影响, 也不列入关键操作 之中。在方法 1 中, 令畸化操作剖面中只包含关键操作, 也就是设未发现的缺陷主要存在于 关键操作中, 因此可以忽略普通操作的影响, 然后按照等比例提高和归一化的方法来实现 操作概率的重新分配, 则有 :
其中, k 代表关键操作的个数,pci 代表第 i 个关键操作在传统操作剖面pc1+pc2+… +pck 上的发生概率, pc′ i 代表第 i 个关键操作在畸化操作剖面上的发生概率, 为传统操作剖面上的关键操作之和。
因此, 剖面的加速因子 Λ 为 :
Λ = pc1+pc2+…+pck (2)
第 i 个关键操作的加速因子 Λi 为 : Λi = pc1+pc2+…+pck (3) 即任意关键操作的加速因子均同于整个剖面的加速因子。 方法 2 : 利用操作发生概率值对所有操作的发生概率值进行大小翻转。具体为 :式中, pmax 代表传统操作剖面中所有操作之中的最大发生概率, pi 代表传统操作剖 面上第 i 个操作的发生概率, p′ i 代表畸化操作剖面上第 i 个操作的发生概率, n 表示传 统操作剖面上的操作的个数, 畸化操作剖面上的操作个数比传统操作剖面上的操作个数少 1 个。
此时, 整个剖面的加速因子 Λ 为 :第 i 个关键操作的加速因子 Λi 为 :显然, 方法 1 的运用需要具备较丰富的经验信息或具有一定的先验信息, 并且具 有较高的信心, 认为残存的、 对可靠性具有较大影响的缺陷只存在于小概率和指定的关键 操作中, 方法本身具有一定的风险性。当不具备这样的先验信息时, 优选采用方法 2。既然 前期的软件测试中已经对普通操作进行了比较充分的测试, 因此大概率的操作已经得到了 较充分的测试, 此时利用最大操作发生概率值实现对所有操作的发生概率值的大小翻转, 这样畸化操作剖面中不仅包含关键操作, 也包含普通操作, 能够弥补方法 1 中确定关键操 作时的主观性, 实现对所有操作的补偿性测试。
基于本发明提出的畸化操作剖面, 本发明提供一种基于畸化操作剖面的软件可靠 性加速测试与评估方法及其计算机辅助工具。软件可靠性加速测试与评估方法分别针对 软件可靠性增长测试和验证测试两种类型展开, 每一种又分别针对离散型软件和连续型软 件, 即具体包含以下 4 种方法 : 1) 基于畸化操作剖面的离散型软件可靠性增长加速测试与 评估方法 ; 2) 基于畸化操作剖面的连续型软件可靠性增长加速测试与评估方法 ; 3) 基于畸 化操作剖面的离散型软件可靠性验证加速测试与评估方法 ; 4) 基于畸化操作剖面的连续 型软件可靠性验证加速测试与评估方法。具体分为 (1) 软件可靠性增长加速测试与评估方 法和 (2) 软件可靠性验证加速测试与评估方法分别进行具体说明。
如图 1 所示, 本发明提供的基于畸化操作剖面的软件可靠性增长加速测试与评估 方法, 具体步骤如下 :
步骤一、 构造畸化操作剖面, 确定各操作的加速因子和整个畸化操作剖面的加速 因子。具体为 : 首先按照传统的可靠性测试及评估方法中操作剖面的构造, 例如采用 Musa 操作剖面的构造方式, 构造传统操作剖面, 然后依据上述构造畸化操作剖面的方法 1 或者 方法 2, 构造畸化操作剖面, 并得到各操作的加速因子和整个畸化操作剖面的加速因子。
步骤二、 根据步骤一构造的畸化操作剖面进行随机抽样生成测试用例, 具体过程 为: 首先确定被测软件的操作中每个输入变量的具体值, 通过抽取操作和抽取各输入变量 的取值这两个步骤的抽样, 生成测试用例。
步骤三、 判断被测软件为离散型软件还是连续型软件, 若是离散型软件, 则执行步 骤四, 若是连续型软件, 则执行步骤五。
步骤四、 根据被测软件特点和可靠性测试要求搭建可靠性测试环境, 在可靠性测 试环境中运行软件, 执行步骤二中生成的测试用例, 并收集记录失效数据。针对离散型软 件, 收集的失效数据就为失效间隔用例数。
然后确定引起失效的输入所对应的操作, 并利用所确定的操作的加速因子进行失 效用例数的转化处理, 针对离散型软件, 就用收集到的失效间隔用例数乘以确定的对应操 作的加速因子, 得到的数据就是转化处理后的数据。本步骤执行完毕后执行步骤六。
针对离散型软件, 本发明提供的基于畸化操作剖面的可靠性增长加速测试的原理如下 : 假设 α 为操作 Oi 中会引发软件失效的某一缺陷, 这样的缺陷还有 β、 γ、…、 μ 等, 如图 2 所示, 其中, 会导致缺陷 α 被触发的输入域用 Sα 来表示, 用 |Sα| 表示输入域 Sα 中所含输入数据的个数, 称为 Sα 的模。因为在可靠性增长测试过程中, 每一次失效都是由 某一个缺陷引起的, 且在增长测试过程中, 缺陷一旦被发现就立即被排除, 因此, 每一个缺 陷导致的失效只会发生一次, 并且假设缺陷之间彼此独立, 因此, 在传统操作剖面下, 对于 离散型软件来说, 当执行了 n 个测试用例, 发生了一次失效时, 此处设该失效是由缺陷 α 引 起的, 则由缺陷 α 引起的软件失效的概率 Pfα 可以表示为 :
式中, pi 是操作 Oi 在传统操作剖面中的发生概率, |Sα| 表示会导致缺陷 α 被触 表示操作 Oi 对应的输入域 中所含输入数据发的输入域 Sα 中所含输入数据的个数,的个数。
实际测试中, 当测试了 n 个用例发生了一次由于缺陷 α 引起的失效, 以此作为式 (7) 的估计值, 则有 :
联立上面两式, 则有 :同理, 在畸化操作剖面下, 也有下式存在 :虽然操作 Qi 在传统操作剖面和本发明的畸化操作剖面下的发生概率发生了变化, 因此有 : pi/p′ i = n′ /n (11) 即有 : n = n′ p′ i/pi = n′ /Λi (12) 也就是说, 畸化操作剖面下测试 n′个用例发现一次失效, 相当于传统操作剖面下 个用例发现一次失效。但该操作对应的输入域不变, 即
测试
步骤五、 根据被测软件特点和可靠性测试要求搭建可靠性测试环境, 在可靠性测 试环境中运行软件, 执行步骤二中生成的测试用例, 并收集记录失效数据。针对连续型软 件, 收集的失效数据为失效间隔时间。
然后确定引起失效的输入所对应的操作, 并利用所确定的操作的加速因子进行失 效间隔时间的转化处理, 针对连续型软件, 用收集到的失效间隔时间乘以确定的对应操作 的加速因子, 得到的数据就是转化处理后的数据。本步骤执行完毕后执行步骤六。
针对连续型软件, 本发明提供的基于畸化操作剖面的可靠性增长加速测试的原理如下 :
设第 i 个缺陷使软件出故障的概率为 Pi, 设该缺陷为 α, 不失一般性, 有 Pi = Pfα, Pfα 为由缺陷 α 引起的软件失效的概率, 针对连续型软件, 式 (7) 同样适用。设软件在单位时间 ( 单位时间可以是分、 时、 天、 周等等 ) 内执行 次任务, 即任务时间为 k, 则单位时间第 i 个缺陷使软件出现故障的概率 λi 为 : λi = Pi/k = Pfα/k (13)
软件在随机输入条件下投入运行, 到出现失效的时间称为失效前时间 (time to failure), 该失效前时间是一个随机变量, 其期望值为平均失效前时间 (mean time to failure, 简称 MTTF), 记作 θ。利用传统操作剖面下测试了 t 时间发生了一次由于缺陷 α 引起的失效, 来作为式 (13) 的估计值, 则有 :
则有 : Pfα/k = 1/t 即有 :(15)同理, 在畸化操作剖面下, 测试了 t′时间发生了一次由于缺陷 α 引起的失效, 有 下式存在 :
虽然传统操作剖面和畸化操作剖面下操作 Qi 的发生概率发生了变化, 但该操作对 因此有 : pi/p′ i = t′ /t (18) 即有 : t = p′ it′ /pi = t′ /Λi (19) 也就是说, 畸化操作剖面下测试 t′时间发现一次失效, 相当于传统操作剖面下测应的输入域不变, 即
试时间发现一次失效。步骤六、 利用适合的软件可靠性增长模型进行可靠性参数的估计。 一般, 针对离散 型软件, 可靠性增长模型推荐选择相应的离散型 NHPP 模型进行可靠性参数的估计 ; 针对连 续型软件, 可靠性增长模型可以从 GO、 MO 等连续型 NHPP 模型中选择, 进行可靠性参数的估 计。
步骤七、 判断此时被测软件是否满足规定的可靠性要求, 如果满足规定的可靠性 要求, 则停止测试 ; 否则转步骤二执行, 根据步骤一中构造的畸化操作剖面追加生成测试用 例, 重复步骤二到步骤七, 直至可靠性参数的估计值满足规定的可靠性要求时停止测试。
本发明提供的基于畸化操作剖面的软件可靠性验证加速测试的原理为 :
软件可靠性验证测试的特点是, 在软件测试的过程中, 当发生失效时, 不对引发失 效的软件缺陷进行剔除, 同理, 在畸化操作剖面下的软件可靠性验证加速测试也不会进行 软件缺陷的剔除, 因此, 希望通过加速测试, 能够在畸化操作剖面下得到同传统操作剖面一 致的对软件失效概率 / 失效率的无偏估计。按照传统操作剖面的定义, 软件的输入空间 D
可以表示成 :
D = {(x1, x2,…, xn) : Ф(xi) = Oor1, i = 1, 2,…, n, xi ∈ Di, P(Di) = pi} (20)
式中, xi 表示取自输入域 Di 的输入数据, n 表示传统操作剖面中的操作的个数, Di 表示与传统操作剖面中的操作 Oi 相对应的输入域, 因此 P(Di) 等同于传统操作剖面中的操 作 Oi 的发生概率, 即 P(Di) = pi。Ф(x) 是一个 0-1 分布的函数, 且具有如下特征 : 当软件 在输入 x 上发生失效时, Ф(x) 取值为 1 ; 当软件在 x 上不发生失效时, Ф(x) 取值为 0, 所 以 Ф(x) 又被称为失效的指示函数。 令 Y = Ф(x), 则软件的失效概率可以表示为随机变量 的函数 Y 的数学期望, 即失效概率 F 为 :
式中 P(x) = pi, 当 x ∈ Di 时, 且 设 Q(x) 是任何一个定义在 D 上的离散分布, 且若 P(x) ≠ 0, 则 Q(x) ≠ 0, 则令Y′= Ф(x)Λ(x), Q(x) = p′ i, 当 x ∈ Di 时, 且则F = E(Y) = E(Y′ ) (23)
即软件的失效概率表示为畸化操作剖面上的随机变量的函数的数学期望, 则软件 的失效概率可以通过随机变量的函数 Y′= Ф(x)Λ(x) 的数学期望来获得, 即在畸化操作 剖面下, 各个操作的发生概率由 pi 变成了 p′ i, 为了弥补在 p′ i 概率分布下分配测试用例 的差异, 引入加速因子 进行无偏转化, 在同样的测试用例条件下, 通过概率分布 Q(x) 的改变, 对需关注的操作进行重点抽样, 通过加速因子 Λ(x) 完成 Y′与 Y 之间的无偏转化, 进 而完成对软件失效概率的无偏估计。 如图 3 所示, 本发明基于畸化操作剖面的软件可靠性验证加速测试与评估方法, 具体步骤如下 :
步骤 1、 构造畸化操作剖面, 并确定整个剖面的加速因子。本步骤中采用本发明提 出的畸化操作剖面的构造方法来实现。
步骤 2、 确定被测软件的测试量, 区分被测软件为离散型软件还是连续型软件两种 情况。对于连续型软件, 利用基于畸化操作剖面的连续型软件可靠性验证加速测试方法确 定加速测试所需的连续执行时间 ; 对于离散型软件, 利用基于畸化操作剖面的离散型软件 可靠性验证加速测试方法确定加速测试所需的测试用例量。
步骤 3、 根据步骤 2 确定的测试量, 并基于步骤 1 生成的畸化操作剖面, 生成测试用 例, 执行测试用例, 并收集失效信息。
步骤 4、 结合验证测试方案中给出的接收、 拒收的判据和实际测试中收集到的结果 数据, 能够得到接收或拒收结论。
步骤 5、 根据实际收集到的结果数据, 给出当前的软件可靠性参数的评估结果。针 对离散型软件和连续型软件采用不用的可靠性评估方法进行软件可靠性参数评估。
步骤 2 中所述的基于畸化操作剖面的离散型软件可靠性验证加速测试方法为 :
常见的离散型软件可靠性验证测试方案有 : 定数截尾测试、 序贯测试和无失效运 行测试等。由于无失效运行测试方案适用于高可靠软件, 因此本发明仅以无失效运行测试 为例进行说明, 方法原理可推广至其它类型的测试方案。
一般认为, 离散型软件失效是服从二项分布的, 由于二项分布的共轭分布为 Beta(a, b) 函数, 借鉴贝叶斯分布的思想, 本发明中用 Beta(a, b) 函数作为离散型软件的先 验分布, 在下面式子中采用 B(a, b) 的形式来表示, 根据置信度的要求, 得到 :
P(F < FU) ≥ 1-α (24)
式中 : FU 表示失效概率的上限值。1-α 是用户给出的置信度要求, 通常 α 取一个 小于 1 的数, 例如 0.1、 0.2 等。
失效概率 F 的概率密度函数为
式中 : r 表示失效的数目, N 表示测试用例数目, 因此有 :可知, 在传统操作剖面下的需要的最少测试用例数目为 :式中 : [.] 表示对 . 取整。 在加速条件下计算测试用例时, 传统操作剖面下的测试用例数目 N 相当于畸化操 因此将 N 替换为 代入, 即:作剖面下的测试用例数目
可得在畸化操作剖面下所需的最少测试用例数目为 :由于畸化操作剖面的加速因子 Λ < 1, 由式 (27) 和式 (29) 可知, 在畸化操作剖面 条件下所需要的测试用例量小于普通操作剖面下所需要的测试用例量。
步骤 2 中所述的基于畸化操作剖面的连续型软件可靠性验证加速测试方法为 :
常见的连续型软件验证测试方案有 : 定时截尾测试、 序贯测试和无失效运行测试 等。由于无失效运行测试适用于高可靠软件, 本发明仅以无失效运行测试为例进行说明。
对于连续型软件, 一般是通过计算连续执行时间来实现验证测试的, 由于连续型 软件的失效次数是服从泊松分布的。 同时, 为了缩短测试时间, 本发明借鉴贝叶斯分布的思 想来实现, 泊松分布的共轭先验分布为 Gamma 分布, 根据 Gamma 分布和置信度等条件, 可以 有如下等式 :
式中 : a0, b0 为固有的 Gamma 分布参数, 可以通过先验信息得到, t 代表在传统操作剖面下需要执行的测试时间, β 为使用方风险, λ0 表示失效率的上限值。
在加速条件下计算需要执行的测试时间时, 由于传统操作剖面下的测试时间 t 相 当于畸化操作剖面下的测试时间
因此, 将 t 替换为 代入, 即:t′= tΛ (31)
计算出的 t′即为在畸化操作剖面下所需要的测试时间, 由于畸化操作剖面的加 速因子 Λ < 1, 可知 t′< t, 即在畸化操作剖面条件下所需要的连续执行时间小于传统操 作剖面下所需要的连续执行时间。
本发明步骤 5 中所述的针对离散型软件可靠性验证加速测试的可靠性评估方法 为:
离散型软件的可靠性评估是通过失效概率 ( 或成功率 ) 来完成的, 畸化操作剖面 下的失效概率点估计值 F′可以表示为 :
式中 : n′ i 为落入操作 oi 中的测试用例中发生失效的用例数目, N′ i 为落入操作oi 中的测试用例的总数目。此外, 如果设 n′为畸化操作剖面下的测试用例中发生失效的 总的用例数, N′为总的测试用例数目, 则当利用本发明的方法 1 生成畸化操作剖面时, 由 (32) 得被测软件失效概率的点估计为 :
因此, 软件的成功率为 : p = 1-F′ (34) 即在不包含普通操作的畸化操作剖面下, p 便是整个软件的成功率的点估计值。 若采用方法 2 生产畸化操作剖面, 则有被测软件的失效概率的点估计 :式中 : pi 为传统操作剖面中操作 oi 的发生概率。
但在包含普通操作的畸化操作剖面下, 由于各个操作的加速因子 Λi 并不相同, 因 此失效概率满足式 (35)。
以下给出当利用本发明的方法 1 生成畸化操作剖面时的失效概率的区间估计。 F′的置信水平为 1-α 的置信下限 F′ L 和置信上限 F′ U 分别为 :式中 : v1 = 2(N′ -n′ +1), v2 = 2n′。式中 : v1 = 2(N′ -n′ ), v2 = 2(n′ +1)。 由式 (36)、 (37) 可得成功率 p 的置信水平为 1-α 的置信下限 pL 和置信上限 pU 分别为 :式中 : v1 = 2(N′ -n′ ), v2 = 2(n′ +1), F1-α(v2, v1) 表示 F 分布值。式中 : v1 = 2(N′ -n′ +1), v2 = 2n′。 当 n′= 0 时, 成功率 p 的单侧置信下限为 : 本发明步骤 5 中所述的针对连续型软件可靠性验证加速测试的可靠性评估方法为: 连续型软件的可靠性评估是通过失效率来完成的, 本发明借鉴了下面的公式来评 估失效率的上限值 λ′ upp :
式 中: α 代 表 显 著 性 水 平 (1-α 代 表 置 信 度 ),是 卡 方 分 布,可以用来评估失效率的上限, t ′为在畸化操作剖面上的测试时 间。n′为畸化操作剖面下的测试用例中发生失效的总个数。
当 n′= 0 时, 式 (41) 可以被简化为 :
因此被测软件的失效率 λupp 为 : λupp = Λλ′ upp (43) 在不包含普通操作的畸化操作剖面下, (43) 式的 λupp 是整个软件的失效率评估结果。 在包含普通操作的畸化操作剖面下, 由于普通操作在之前的测试中已经比较充 分, 所以可以假设普通操作中残留的失效率上限不会高于关键操作的失效率, 进而可以用 2λupp 来作为包含普通操作的畸化操作剖面下的失效率评估值。
本发明还提供了一种计算机辅助工具, 它是实现本发明上述方法的装置, 它能够 支持畸化操作剖面的建立, 关键操作的选择, 根据本发明构建畸化操作剖面的两种方法构 建两种畸化操作剖面, 操作的加速因子和整个畸化操作剖面的加速因子的确定, 并按照本 发明中软件可靠性增长加速测试和可靠性加速验证测试的流程和方法, 分别提供针对离散 型软件和连续型软件的可靠性加速验证测试方案的确定、 失效结果的导入、 接收或拒收结 果的判定及可靠性参数的点估计和区间估计, 同时提供针对离散型软件和连续型软件的可 靠性增长加速测试失效数据导入、 失效数据转化及转化结果导出模块。如图 4 所示, 本发明 提供的计算机辅助工具具体包括 : 传统操作剖面构造模块 1、 畸化操作剖面构造模块 2、 测 试用例自动生成模块 3、 可靠性验证加速测试模块 4、 可靠性增长加速测试模块 5。
传统操作剖面构造模块 1 接收用户输入操作模式信息和操作信息, 建立传统操作 剖面, 并将所建立的操作剖面信息数据, 包括操作概率、 变量类型和取值范围等, 传送给畸 化操作剖面构造模块 2。畸化操作剖面构造模块 2 根据用户对畸化操作剖面的构造方法的
选择, 生成第一种畸化操作剖面或者第二种畸化操作剖面, 并保存各操作的加速因子和整 个畸化操作剖面的加速因子。可靠性验证加速测试模块 4 对待测试的离散型软件或连续型 软件进行软件可靠性验证加速测试与评估, 可靠性增长加速测试模块 5 对待测试的离散型 软件或连续型软件进行软件可靠性增长加速测试与评估。测试用例自动生成模块 3 用于生 成测试用例, 并输出给可靠性验证加速测试模块 4 或可靠性增长加速测试模块 5。
所述的传统操作剖面构造模块 1 用于接收用户输入操作模式和对应模式下的操 作信息以建立传统操作模式剖面, 并且接收用户输入操作信息, 包括变量类型及取值范围, 结合所建立的传统操作模式剖面建立传统操作剖面, 并对传统操作模式剖面中的剖面信息 以及传统操作剖面中的整合信息进行存储。一般传统操作剖面构造模块 1 采用 Musa 操作 剖面的构造方法, 来构造传统操作剖面。
所述的畸化操作剖面构造模块 2 根据用户对畸化操作剖面的构造方法的选择自 动生成第一种畸化操作剖面或者第二种畸化操作剖面, 在生成第一种畸化操作剖面时, 因 只考虑关键操作, 故还需要用户对于关键操作进行选择, 在生成畸化操作剖面后, 将确定的 各操作的加速因子和整个畸化操作剖面的加速因子存储起来。 所述的第一种畸化操作剖面 采用本发明所述的第一种畸化操作剖面的构建方法, 第二种畸化操作剖面采用本发明所述 的第二种畸化操作剖面的构建方法。
所述的测试用例自动生成模块 3 用于根据输入的测试方案生成测试用例, 进行数 据生成前的错误检查、 测试用例的生成与保存, 将生成的测试用例输出待测软件 6。测试用 例自动生成模块 3 接收畸化操作剖面构造模块 2 发生过来的畸化操作剖面的信息数据, 包 括在畸化操作剖面上的操作概率、 变量类型和取值范围等, 根据可靠性验证加速测试模块 4 输入的验证测试方案生成测试用例, 或者根据可靠性增长加速测试模块 5 输入的增长测试 方案生成测试用例。
所述的可靠性验证加速测试模块 4 接收畸化操作剖面构造模块 2 发送过来的畸化 操作剖面的信息数据包括在畸化操作剖面上的操作概率、 变量类型、 取值范围以及加速因 子, 实现接收离散型软件和连续型软件的验证指标输入、 畸化操作剖面选择、 验证加速测试 方案输出以及测试结果导入、 接收或拒收判定模型以及可靠性参数评估的功能。 具体, 可靠 性验证加速测试模块 4 实现的功能为 : 首先根据用户输入的验证测试指标为被测试的离散 型软件或连续型软件生成验证测试方案, 并确定测试量, 将生成的测试量和验证测试方案 输出给测试用例自动生成模块 3, 测试用例自动生成模块 3 根据验证测试方案生成测试用 例, 保存并输出给待测软件 6。用户在所构建的软件测试环境中运行待测软件 6, 执行测试 用例, 收集失效数据, 并将失效数据输入给可靠性验证加速测试模块 4, 可靠性验证加速测 试模块 4 结合验证测试方案, 决定接收或拒绝接收该被测软件, 并根据实验结果得到当前 的软件可靠性参数的评估结果。针对离散型软件, 测试量指测试用例量, 针对连续型软件, 测试量指连续执行时间。
所述的可靠性增长加速测试模块 5 接收畸化操作剖面构造模块 2 发送过来的畸化 操作剖面的信息数据包括在畸化操作剖面上的操作概率、 变量类型、 取值范围以及加速因 子, 实现用于接收离散型软件和连续型软件的增长测试指标输入、 畸化操作剖面选择以及 测试结果导入、 测试结果数据转化和输出等功能。具体, 可靠性增长加速测试模块 5 实现的 功能为 : 根据用户输入的增长测试指标为被测试的离散型软件或连续型软件生成增长测试方案, 将增长测试方案输出给测试用例自动生成模块 3, 测试用例自动生成模块 3 根据增长 测试方案生成测试用例, 保存并输出给待测软件 6, 用户在所构建的软件测试环境中运行待 测软件 6, 执行测试用例, 收集失效数据, 并将失效数据输入到可靠性增长加速测试模块 5, 可靠性增长加速测试模块 5 确定引起失效的输入所对应的操作, 利用该操作的加速因子进 行失效数据的转化处理, 并将测试结果的数据转化结果进行输出。
针对软件可靠性增长加速测试的评估, 选择现有技术中适当的软件可靠性增长模 型进行可靠性参数的估计, 并判断被测软件是否满足规定的可靠性要求。
本发明实施例仅以连续型软件为代表, 分别进行软件可靠性增长加速测试和验证 加速测试的方法说明。
实施例 1 : 下面通过某软件 S 的测试实验来对本发明提供的软件可靠性增长加速 测试和评估方法进行说明。表 1 为软件 S 建立的现有技术中传统操作剖面的表达示意。
表 1 软件 S 的传统操作剖面
操作 输入域 发生概率 P(x)
o1 D1 p1 o2 … D2 … p2 … oi … Di … pi … om Dm pm表 2 为软件 S 建立的本发明畸化操作剖面的表达示意。 表 2 软件 S 的畸化操作剖面
本实验采用某商品销售管理系统软件来构建被测软件, 首先利用 Musa 操作剖面 的构造方法搭建传统的操作剖面, 如表 3 的第 1 列和第 2 列所示 :
表 3 构建商品销售管理系统的操作剖面
依据本发明提供的构建畸化操作剖面的方法 1 构建第一种畸化操作剖面, 依据本 发明提供的构建畸化操作剖面的方法 2 构建第二种畸化操作剖面, 如表 3 中的第 3 列和第 5 列所示, 其中关键操作用加黑字体标明。由表 3 可以看出, 畸化操作剖面中的所有操作概 率之和都为 1, 但第一种畸化操作剖面中只包含关键操作, 普通操作概率全部为 0 ; 而第二 种畸化操作剖面中既包含关键操作又包含普通操作。
分别基于第一种畸化操作剖面、 第二种畸化操作剖面生成测试用例并进行测试, 收集失效数据, 并根据失效数据的输入对应的操作的加速因子进行失效数据的转化, 得到 表 5 和表 6 所示的失效数据。
表 5 基于第一种畸化操作剖面测试得到的失效数据和转化后的数据
缺陷序号 1 2 3 4 5 失效间隔时间 (s) 702 1164 1080 3168 882 加速因子 0.036601 0.036601 0.036601 0.036601 0.036601 转化后的失效间隔时间 (s) 19179.8 31802.41 29507.39 86555.01 24097.719102360332 A CN 102360349 6 7 8
缺陷序号 1 2 3 4 5 6 7 8
失效间隔时间 (s) 666 180 2718 900 31482 68616 5508 32562 10512 13536 5400说明书287205.3 369826 14753715/18 页0.036601 0.036601 0.036601表 6 基于第二种畸化操作剖面测试得到的失效数据和转化后的数据加速因子 0.096383 0.096383 0.096383 0.079889 0.096383 0.079889 0.096383 0.096383 转化后的失效间隔时间 (s) 6909.946 1867.553 28200.05 11265.56 326635 858886.4 57147.12 337840.4通过软件可靠性评估工具, 选用合适的模型进行可靠性参数的评估, 可以得到如 表 7 所示的结果。
表 7 不同畸化操作剖面下的软件可靠性增长结果对比
所选模型 第一种畸化操作剖面 第二种畸化操作剖面 GO GO 失效率评估值 0.00000281 0.00000172 剔除缺陷数 8 8 总测试时间 (h) 10.12 39.62可见, 当利用畸化操作剖面使得失效率达到 10-6 数量级时, 利用方法 1 获得的第一 种畸化操作剖面下需要测试 10.12h, 而利用方法 2 获得的第二种畸化操作剖面下需要测试 39.62h。并把上述结果同传统操作剖面下的测试结果进行对比。利用传统操作剖面生成测 试用例, 运行测试用例得到的失效数据如表 8 所示。
表 8 普通操作剖面的失效数据
缺陷序号 1 2 3 4 5 6 7 8
失效间隔时间 (s) 1231.2 9705.6 13960.8 3960 128181.6 305496 97477.2 120434.4利用表 8 的失效数据通过可靠性评估工具, 选用合适的模型进行可靠性参数的评 估, 可以得到如表 9 所示的结果。
表 9 传统操作剖面下的可靠性增长测试结果
模型 传统操作剖面
GO 失效率 0.00000405 剔除缺陷数 8 总测试时间 (h) 189.01可见, 当利用传统操作剖面使得失效率达到 10-6 数量级时, 需要测试 189.01h, 是 利用本发明的第一种畸化操作剖面下所需测试时间的 18.68 倍, 是利用本发明的第二种畸 化操作剖面下所需测试时间的 4.77 倍。可见, 达到同样测试效果的时间远远大于基于本发 明的畸化操作剖面可靠性加速测试所需的时间。
实施例 2 : 下面再通过某软件测试实验来对本发明提供的软件可靠性验证加速测 试方法和评估方法进行举例说明。为简化说明, 依然采用上面提及的软件 S。
同样利用传统操作剖面构造方法、 畸化操作剖面构建方法 1、 方法 2 分别构造传统 操作剖面、 第一种畸化操作剖面、 第二种畸化操作剖面, 所构造的操作剖面如表 3 所示。
分别利用无失效验证测试方案失效时间 MTTF θ1 = 27.78, 使用方风险 β = 0.1 和无失效验证测试方案 θ1 = 2.78 β = 0.1 进行软件可靠性验证测试。依据本发明针对 连续型软件提供的基于畸化操作剖面的可靠性验证加速测试和评估方法, 对于无失效验证测试方案 θ1 = 27.78 β = 0.1, 传统可靠性验证测试所需的时间是 63.96h, 根据第一种 畸化操作剖面的加速因子为 0.036601, 第二种畸化操作剖面的加速因子为 0.091144, 利用 公式 (31) 计算出各自所需的验证测试时间为 2.34h 和 5.83h, 即在第一种畸化操作剖面下 连续测试 2.34h 不发生失效就可以得到接收该软件的结论, 否则拒收该软件 ; 同理, 在第二 种畸化操作剖面下连续测试 5.83h 不发生失效就可以得到接收该软件的结论, 否则拒收该 软件。
在验证测试方案确定后, 分别依据各自的操作剖面通过随机抽样得到测试用例, 利用测试用例运行软件得到失效数据, 如表 10 给出的是无失效验证测试方案 θ1 = 27.78 β = 0.1 下的测试结果, 可见在要求的验证测试时间内, 在第一种畸化操作剖面下和第二 种畸化操作剖面下都发现了失效, 因此结论为拒收该软件, 同理, 可以根据表 10 看出, 在传 统操作剖面下也发现了失效, 因此结论为拒收该软件, 即不同操作剖面下的测试结论相同, 均为拒收 ; 根据公式 (41), 可以得到各自剖面下的可靠性参数估计值, 此处得到的失效率 的估计值如表 10 所示, 可见畸化操作剖面下的可靠性估计值与传统操作剖面下的可靠性 参数估计值的误差很小。
表 10 无失效验证测试方案 θ1 = 27.78 β = 0.1 结论为拒收情况的测试数据对 比
同理, 得到如表 11 所示的对于无失效验证测试方案 θ1 = 2.78 β = 0.1 时的测 试结果, 传统可靠性验证测试所需的时间是 6.4h, 根据第一种畸化操作剖面的加速因子为 0.036601, 第二种畸化操作剖面的加速因子为 0.091144, 利用公式 (31) 计算出各自所需的 验证测试时间为 0.23h 和 0.58h, 即在第一种畸化操作剖面下连续测试 0.23h 不发生失效就 可以得到接收结论, 否则拒收 ; 在第二种畸化操作剖面下连续测试 0.58h 不发生失效就可 以得到接收结论, 否则拒收。
在验证测试方案确定后, 分别依据各自的操作剖面通过随机抽样得到测试用例, 利用测试用例运行软件得到失效数据, 如表 11 给出的是无失效验证测试方案 θ1 = 2.78 β = 0.1 下的测试结果, 可见在要求的验证测试时间内, 在第一种畸化操作剖面下和第二 种畸化操作剖面下都没有发现失效, 因此结论为接收, 同理, 可以据表 11 看出, 在传统操作 剖面下也没有发现失效, 因此结论为接收, 即不同操作剖面下的测试结论相同, 均为接收 ; 根据公式 (43), 可以得到各自剖面下的可靠性参数估计值, 此处得到的失效率的估计值如 表 11 所示, 可见畸化操作剖面下的可靠性估计值与传统操作剖面下的可靠性参数估计值 得误差很小。
表 11 无失效验证测试方案 θ1 = 2.78 β = 0.1 结论为接收情况的测试数据对比
22102360332 A CN 102360349 操作剖面 传统操作剖面 第一种畸化操作剖面 第二种畸化操作剖面
说需要的测试时间 (h) 6.4 0.23 0.58明书失效率的估计值 (/s) 0.00009994 0.0001018 0.000100518/18 页 误差 0 1.9% 0.6%结论 接收 接收 接收从上面给出的基于畸化操作剖面的软件可靠性增长加速测试和软件可靠性验证 加速测试的实例中可以看出, 基于畸化操作剖面的可靠性加速测试方法确实利用更少的测 试时间达到了同样的软件可靠性增长或验证测试目标, 即实现了测试效率的提高, 并在一 定置信度上保证了可靠性参数估计结果的相对稳定性。
本发明实现了畸化操作剖面与传统 Musa 操作剖面之间的可靠性参数的无偏估 计, 并且按照传统软件可靠性测试的流程、 执行方法和软件可靠性评估方法, 类比提出了可 靠性加速测试的流程、 执行方法和软件可靠性评估方法, 使得软件可靠性加速测试方法与 传统可靠性测试方法之间建立起联系, 方便对测试过程的控制。其中可靠性加速测试中的 运行测试为黑盒测试, 因此本发明提供的加速测试方法同传统可靠性测试方法 1 样依然是 一种黑盒测试方法, 不需要增加对软件内部信息等白盒测试所需要的信息的了解。 最后应说明的是 : 以上实施例仅用以说明本发明而并非限制本发明所描述的技术 方案 ; 因此, 尽管本说明书参照上述的各个实施例对本发明已进行了详细的说明, 但是, 本 领域的普通技术人员应该理解, 仍然可以对本发明进行修改或等同替换 ; 而一切不脱离本 发明的精神和范围的技术方案及其改进, 其均应涵盖在本发明的权利要求范围当中。