一种基于动态故障树的嵌入式星载软件测试用例生成方法与流程

文档序号:18301427发布日期:2019-07-31 10:11阅读:450来源:国知局
一种基于动态故障树的嵌入式星载软件测试用例生成方法与流程

本发明涉及一种基于动态故障树的嵌入式星载软件测试用例生成方法,属于嵌入式软件测试技术领域。



背景技术:

现代卫星功能要求越来越复杂,但由于测试条件、未知的空间运行环境等诸多因素的限制,星载软件作为整星功能实现的载体所占比重越来越大,潜在软件故障可能导致重大经济损失和人员的伤亡。提高星载软件安全性和可靠性的重要手段之一是进行高效且充分的软件测试。用较少的测试用例集覆盖更多软件需求项及潜在故障传播路径,从而提高测试效率、节省成本,一直是软件测试领域追求的重要目标之一。

嵌入式星载软件运行环境同硬件平台有着密切的关系,时/空要求极为苛刻,被测软件一般具有实时性、并发性等特点,这些特点使得测试用例的设计异常复杂庞大。由于地面仿真测试是基于一定的软件抽象模型进行的,一些未知的太空环境下难以仿真,比如单粒子多位翻转效应等,很难完全保证在轨期间星载软件各项功能正常可靠。同时,由于星载软件运行模式多样性及模式之间切换触发条件的组合排列繁多,为了保证测试的充分性和覆盖性,也需要大量的测试用例。但是,由于星载软件开发过程是一个逐步迭代过程,测试用例集规模越来越大,从而产生大量冗余低效的测试用例。测试用例选择的一个主要任务是从大量测试用例集中挑选部分测试用例,并尽量满足高覆盖率的测试需求。高效的用例选择方式是一种提高软件测试效率的重要手段。

目前,基于智能计算(如遗传算法、蚁群算法、粒子群算法、马尔科夫链等)的测试用例设计方法取得了一定的效果,但是还存在以下不足。一方面,这些智能计算分析方法占用大量的计算资源,模型建立耗时长,使得测试用例的实施和迭代无法很好适应嵌入式星载软件开发模型。通常更适合于非嵌入式软件的测试验证,并不太适合于嵌入式软件的测试验证。另一方面,这种方法假定执行测试用例后检测出的软件缺陷具有等价性,使用算法设计用例时没有考虑相异软件缺陷对软件质量影响的相关性。



技术实现要素:

本发明提供一种基于动态故障树的嵌入式星载软件测试用例生成方法,主要通过基于软件动态运行剖面构建动态故障树的最小割序集来设计测试用例。

包括如下步骤:

步骤1,确定被测软件在轨实际动态运行剖面及输入空间;

步骤2,建立运行剖面的故障模式传播路径以及故障模式集合;

步骤3,建立动态故障树;

步骤4,构建动态故障树相应的割序集,并确定割序集中的最小割序集;

步骤5,建立最小割序等价类的测试用例输入及其预期输出,产生一个测试用例;

步骤6,加载测试用例并运行被测软件,把输入数据作为执行输入,得到实际输出;

步骤7,检查实际输出集合是否与预期输出集合一致。

进一步地,步骤2中,为被测软件建立顶事件故障所对应的底事件集合,以获得故障模式集合。

进一步地,步骤3包括如下子步骤:

步骤3.1,确定导致被测软件失效的最不期望发生的顶事件;

步骤3.2,找出所有导致顶事件发生的一级输入事件,并逐步往下一级分析,直到基本的底事件。

进一步地,步骤4中,通过检索和简化策略确定最小割序集。

进一步地,步骤5中,根据集合理论和等价类规则生成满足故障路径节点发生的测试用例输入。

进一步地,测试用例输入作为每个最小割序基本事件的输入。

进一步地,步骤5中,被测软件在故障传播路径节点发生后的状态作为预期输出。

进一步地,步骤7中,若实际输出集合与预期输出集合不一致,则检查被测软件是否实现故障处理。

进一步地,步骤7中,若实际输出集合与预期输出集合一致,则检查最小割序集中的所有故障传播路径节点输入是否都已经被测试覆盖过。

进一步地,步骤7中,至所有故障传播路径节点输入均已覆盖后结束测试。

本发明的有益效果:利用本发明的方法生成的测试用例具有耦合度低、效率高、颗粒度高和可复用性高的优点,以克服传统观念的星载软件测试用例一般靠自觉、凭经验来生成带来的细化颗粒度不够高,难以复用问题。

附图说明

图1是本发明一个较佳实施例中的动态故障树的结构示意图;

图2是本发明一个较佳实施例中的故障模式传播路径示意图;

图3是本发明一个较佳实施例中的生成星载软件测试用例的流程图。

具体实施方式

除非另作定义,在本说明书和权利要求书中使用的技术术语或者科学术语应当为本发明所属技术领域内具有一般技能的人士所理解的通常意义。以下将描述本发明的具体实施方式,需要指出的是,在这些实施方式的具体描述过程中,为了进行简明扼要的描述,本说明书不可能对实际的实施方式的所有特征均作详尽的描述。

本发明是一种基于动态故障树的嵌入式星载软件测试用例设计方法。从星载软件动态运行机理出发,建立相应故障传播的动态故障树。通过分析故障树顶事件的故障传播路径确定最小割序,从而设计相对应的最优化测试用例。该发明针对特定项目带来的潜在故障做到有针对性的测试,从而解决了传统测试方式中测试用例排列组合冗余繁多导致测试执行的重复,从而使得测试耗资巨大,却抓不住重点、无法快速故障定位的窘境。

基于动态故障树的嵌入式星载软件测试用例生成方法,执行流程如流程图所示,具体实施步骤如下:

步骤1,根据软件需求规格说明分析软件动态运行模式,确定星载软件(含正常模式和最小模式)在轨实际动态运行剖面图及输入空间,包括地面控制人员上行指令触发后软件执行流程和星上自主处理的执行;

步骤2,利用步骤1建立软件故障顶事件故障所对应的底事件集合,设计所有星载软件故障模式集合;

步骤3,依据步骤2建立动态故障树。

步骤3.1,分析软件底事件之间的依赖关系、因果关系,确定导致软件失效的最不期望发生的顶事件。

步骤3.2,根据软件系统的逻辑架构以及各功能模块事件之间的若干相互关联耦合关系,找出所有导致顶事件发生的一级输入事件,并根据这些输入原因事件逐步往下一级分析,直到基本的底事件。层间之间事件关系采用优先与门、顺序门、备份门、功能相关门等动态门连接,从而建立嵌入式星载软件系统的动态故障树。如下图所示。

步骤4,构建动态故障树相应的割序集并确定最小割序集。

步骤4.1,建立顶事件发生的基本故障传播路径,列举导致故障树(含动态和静态)顶事件发生的依照特定顺序失效的基本事件序列。

步骤4.2,选择事件序列中事件x在事件y之前才会导致顶事件发生的序列作为其中一个割序{x→y}。

步骤4.3,列举所有割序,形成割序集。

步骤4.4,利用集合理论的分配律、结合律、吸收律等定律,将割序集进行简化,形成最简割序集。

步骤4.5,利用一定的搜索简化策略确定动态故障树的最小割序集cj(j=1,2,...,m),(假设动态故障树由k个故障传播路径节点输入事件bi(i=1,2,...,k)组成,则判断全部故障传播路径节点输入集合都已被包含,若是,则算法进入下一步;若不是,则本步骤继续递归搜索。

步骤5,根据集合理论和等价类规则生成满足故障路径节点发生的测试用例输入作为每个最小割序基本事件的输入,记为inputi,被测软件在故障传播路径节点发生后的状态作为相应的预期输出,记为outputi,即产生一个测试用例:

testcasei=[inputi|outputi]

其中节点故障输入的取值可以根据等价划分原则进行取值。节点输入值的选取,根据等价转换原则进行确定,原则如下:

a)节点输入空间为一定的取值区间x∈[a,b],则可以定义一个有效等价类,即区间范围内x∈[a,b]和一个无效等价类,即区间范围外

b)节点输入空间为特定常数值时,即x=a,则有效等价类为x=a,无效等价类为x≠a;

c)节点输入空间为布尔值{ture,false},则有效等价类为ture,无效等价类为false。

步骤6,加载并运行星载软件,把输入数据inputi作为该测试用例的执行输入,得到被测软件的实际输出。

步骤7,检查被测软件的实际输出集合是否与预期输出集合一致,若不一致,检查软件是否按照需求规格中的要求实现故障处理;若一致,则检查最小割序集中的所有故障传播路径节点输入都已经被测试覆盖过为止;如全部输入均已覆盖,则结束测试,如果没有覆盖继续节点输入集合的用例测试,直到全部覆盖,可靠性测试用例结束。

通过构建星载软件系统的动态故障树模型,建立相应的割序集,依据割序集设计测试用例。这种由软件整体到软件模块、自顶向底地基于运行剖面设计的动态故障树用来指导测试实践,通过确定的模型来规范测试用例的颗粒度和测试用例设计方法,解决了传统测试方式中测试用例排列组合冗余繁多导致的测试重复低效、测试耗资巨大却抓不住重点找不准根本原因的问题,最终可以极大地提升软件测试质量和测试效率。

以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1