面向安全苛求软件的测试用例自动生成(转载)

: 测试用例的自动生成是验证安全苛求软件最关键的技术问题 , 然而目前的研究并没有充分考虑安全苛求软件的安全性需求 , 为此提出一种应用安全覆盖准则的安 全苛求软件的测试用例自动生成策略 , 将该策略应用于铁路车站计算机连锁软件 , 并与全节点覆盖准则进行了比较。结果表明该策略对关键变迁有更高的安全性保 证。
   关键词 : 安全苛求软件 ; 测试用例自动生成 ; 安全覆盖准则
   中图分类号 :TP311.56 文献标志码 :A
   文章编号 :100136 95(2009)01014003
  
   Automated test data generation for safety critical software
   ZHANG Wenting, XU Zhongwei, YU Gang
  
   (Dept. ofInformation & Communication, School of Electronics & Information Engineering, Tongji University, Shanghai 201804, China)
  
   Abstract:Automated test data generation is the most crucial technology to evaluate safetycritical software. However, the current thesis are not fully considered the safety requirement of safetycritical software, therefore the paper presented an automated test data generation strategy for safetycritical software using safety coverage criteria. At last applied the strategy to the railway station computer interlocking software. Compared with all nodes coverage criteria, it shows that has higher safety guarantee to critical transition.
   Key words:safety critical software; automated test data generation; safety coverage criteria
 
  软件应用的日趋广泛 , 加深了社会和经济对计算机的依赖 , 但软件故障时常会给人们的生活带来不便 , 甚至不安。特别是一些软件 , 其行为直接关系到人们的生命安全、大宗财产的损失和严重的环境破坏。这些软件就是通常所说的安全苛求软件 [1] 。如何保障这些软件的质量 , 防止灾难性事故 的出现 , 已成为一个刻不容缓的研究课题。
  软件测试是软件生产中必不可少的质量保障手段。尤其是对于高可靠、高安全的安全苛求软件 , 更需要对它进行测试以尽可能多地发现程序中的缺 陷。基于规格说明的测试从软件的规格说明推导测试用例。目前的研究主要对功能性需求规格进行建模 , 研究人员提出了各种覆盖准则覆盖状态图中的所有功能。然 而对于安全苛求软件 , 仅仅覆盖软件功能是不充分的。因此本文提出了一种应用安全覆盖准则的安全苛求软件的测试用例生成策略 : 采用测试用例自动生成算法 , 成覆盖所有节点、覆盖导致软件失效的关键变迁中防护函数的谓词公式的迁移序列 , 从而得到测试用例。
   1 从形式规格说明产生测试用例的现状分析
  软件的需求规格说明分为两类 , 即功能性需求规格和安全性需求规格。功能性需求规格常常注重各个构件所能完成的功能 ; 安全性需求规格侧重各个构件之间的约束关系。以铁路连锁软件为例 , 它由信号机、道岔和区段这几个构件组成。图 1 体现了两种需求规格间的差异。
  由图 1 可以看到 , 功能性需求规格体现了单个构件的功能 , 描述了系统的正确行为 , 如信号机的开放和关闭功能、道岔的转动和锁闭功能 , 以及区段的 占用和锁闭功能。但是如果某一区段处于占用状态或道岔没有锁闭 , 这样的危险组合下建立进路可能会引发撞车、挤岔等严重事故 , 因此必须关闭信号机。安全需求 规格就定义了这些构件之间的制约规则 , 并要求屏蔽那些危险组合 , 由故障导向安全。

 

 目前从形式规格说明产生测试用例的方法都是针对软件的功能性需求规格进行建模 , 使用的覆盖准则只是考虑覆盖状态图中的所有节点或所有谓词公式。例如文献 [2] 利用基于有限状态机的经典测试 U 方法来自动生成测试输入序列 , 其测试序列覆盖每个状态迁移 , 当其测试覆盖准则仅仅是最基本的状态覆盖准则 ; 文献 [3] 根据 UML 状态图对被测试的对象行为或系统行为建模 , 然后按照不同的充分性测试准则分别生成测试用例 , 造成测试用例过于庞大 , 浪费了过多的时间和精 力。
  对于安全苛求软件的测试 , 关键是消除并控制软件出现危险或发生意外事故 , 所以上述方法考虑功能性需求是不充分的 , 必须对安全苛求软件的安全性需求规格进行建模。有色 Petri [4](colored Petri net,CPN) 提供了一种精确的、一致的、易于被机器处理的符号来描述需求规格 , 相较于有限状态机和 UML 状态图 , 它简化了大型实际系统模型的复杂程度 , 更好地描述了模型的并发、冲突状况。与功能性需求建模不同的是 , 形式化安全性需求应该着重描述构件间的约束规则及系统发生失效的行为和结果。鉴于安全性需求和功能性需求的不同 , 测试用例的充分性不再体现在覆盖所有功能上 , 而是需要完全覆盖各种可能的失效情况 , 所以上述方法中的覆盖准则不再适用。本文在 文献 [3] 和基本测试覆盖准则的基础上 , 提出了一种新的适用于安全苛求软件的测试覆盖准则 —— 安全覆盖准则 ; 然后采用有色 Petri 网形式化安全需求规格 说明 , 根据此覆盖准则 , 通过测试用例自动生成算法生成覆盖所有库所和变迁的迁移序列 , 并在导致软件失效的关键变迁上对迁移序列进行全谓词公式覆盖扩展 ; 后从迁移序列得到测试用例。
   2 安全覆盖准则
  安全性需求的重要部分在于软件如何以安全的失效方法以及失效可以容许到何种程度的规范约束 , 因此适用于功能性需求规格的覆盖准则只考虑全面覆 盖状态图中的所有节点是不足的 , 必须充分挖掘导致软件失效并引发严重事故的所有测试条件组合。根据以上思路 , 本文提出了安全覆盖准则。定义安全覆盖准则之 , 先引入关键变迁的概念。
  定义 1 给定一个 t, 如果 t(v=false), 则称 t 为关键变迁。其中 :t 表示 Petri 网模型中的变迁 ;v 表示 Petri 网模型中的防护函数。
  根据关键变迁的定义 , 可以看到它对应需求规格说明模型中存在判断且判断为假的部分 , 而在安全苛求软件中 , 它可能会引发或产生严重危害性事故。安全覆盖准则定义如下
  定义 2 给定一个 S, 其满足条件 :a)p P,pS;b)t T,tS;c)v V,(v v)S, 则称 S 符合安全覆盖准则。其中 :S 表示测试用 例集 ;p 表示 Petri 网模型中的库所 ;t 表示 Petri 网模型中的变迁 ;v 表示 Petri 网模型中的防护函数。安全覆盖准则说明测试用例集应该使模型中 的每一个库所至少被访问一次 , 每一个变迁至少被激活一次 , 且使 Petri 网模型中关键变迁的防护函数 v 的每一个主要谓词 P 取假各一次 ( 次要谓词都为真 ) 防护函数的谓词公式中凡是要测试的谓词都应该分别充当一次主要谓词。对于一个主要谓词分别取假一次 , 将分别对应一个测试用例的产生。可见满足安全覆盖准则 的这些测试用例遍历了模型中所有的节点 , 并且完全包含了可能导致危害性事故的变迁的各种谓词组合。

  3 应用安全覆盖准则的安全苛求软件测试用例自动生成策略
  该策略的基本思路是首先对安全苛求软件进行安全需求分析 , 确定系统导致事故的状态 , 然后利用有色 Petri 网对安全需求规格说明进行建模。根 据安全覆盖准则 , 利用测试用例自动生成算法搜索得到测试用例 , 产生的测试用例不仅可以覆盖测试对象的所有状态和变迁 , 能够覆盖关键变迁中的所有谓词公式。 整个过程如图 2 所示。
  本文采用的是测试用例自动生成算法来生成测试用例。图 3 是具体的算法流程图。
  二维表的结构如表 1 所示。其表的行、列分别表示目标库所、源库所。行和列的交叉点表示从源库所到目标库所经历的变迁。在关键变迁处加入防护函数。
  上述算法遍历了有色 Petri 模型并产生了迁移序列 , 将这些序列用于产生测试用例。每个序列描述了从初始状态到完成状态所经历的所有变迁。比 如序列 P1 T1 P2, 测试的输入条件是 : 源状态为 P1, 触发事件为 T1, 监视条件为真 , 期望结果是 P2 。这样一个序列将产生一个测试用例。

定义 3 安全苛求软件测试案例 T 可以用一个三元组〈 S0;E;S 〉表示。其中 :E=e^v T 有一个初始状态 S0;E 表示变迁事件和变迁上防护函数的合取式 ;S 是预期状态。
  上述测试用例集对每一个迁移序列进行了测试 , 显然 , 由上述策略生成的测试集覆盖了有色 Petri 模型的所有状态和变迁 , 并且在关键变迁处覆盖了所有谓词取值组合 , 将有限的资源和时间立足在导致软件失效之处。
   4 应用实例
  铁路连锁系统软件 , 即铁路车站控制与防护系统的安全软件。它是用于控制和指挥铁路列车运行、保障铁路行车安全的实时控制软件。它直接控制着整 个铁路信号系统 , 对提高运输效率 , 保证客货安全运输起着举足轻重的作用。与其他众多大型软件一样 , 铁路连锁系统的软件在开发过程中 , 即使程序设计工作进行 得非常细致周密 , 也难免存在缺陷 , 可能使程序运行时产生危险性输出。这里就以铁路车站计算机连锁系统的基本进路建立功能来说明测试用例生成过程。
  对于连锁软件中的基本进路建立 , 需要满足以下主要连锁安全条件 :
   a) 进路上的所有轨道区段空闲并且解锁 ;
   b) 超限绝缘安全条件检查正确 ;
   c) 进路上的道岔和防护道岔被锁闭 ;
   d) 进路的敌对进路未建立。
  接下来对基本进路建立的安全需求进行建模。图 4 是基本进路建立的有色 Petri 网模型。
  有色 Petri 网模型的库所集如表 2 所示。
  对于 P 中的各个库所 C(p)=route,route 定义为一个记录 , 记录组成如下所示 :
  其中 :ID 表示进路编号 ;Ai Bi 分别代表始端按钮和终端按钮 ;switch1~switch10 表示进路上的 10 个道岔 ( 设最大数为 10);opsig1~opsig10 表示进路的 10 个敌对信号 ( 设最大数为 10);section1~section10 表示进路上的 10 个区段 ( 设最 大数为 10);cxjy1~cxjy10 表示为进路上的 10 个超限绝缘条件 ( 设最大数为 10)
  针对基本进路建立问题 , 分别使用全节点覆盖准则和安全覆盖准则生成测试用例。实验结果如图 6 所示。
  从图 6 中可以看到 , 安全覆盖准则应用于关键变迁的测试用例比例远远高于全节点覆盖准则。可见对于可能造成安全苛求软件失效的关键变迁处安全覆盖准则拥有更高的覆盖率 , 因此它比全节点覆盖准则具有更好的安全性保证。
   6 结束语
  本文提出的针对安全苛求软件的测试用例生成策略 , 应用安全覆盖准则自动生成测试用例。它是一种自动黑盒测试方法 , 它使从测试规格说明产生测试 用例的过程自动化 , 减少了软件测试的复杂度。实验表明 , 它对于安全苛求软件具有更好的安全性保证。今后的研究工作将放在开发出一个高效、实用的测试用例自 动生成工具上。
  参考文献 :
   [1]ISAKSEN U, BOWEN J P, NISSANKE N. System and software safety in critical systems[EB/OL]. (1996)[20080527].http://citeseer.ist.psu.edu/isaksen96system.html.
   [2] 年晓玲 . 基于扩展有限状态机软件测试用例自动生成的研究 [D]. 成都 : 西南交通大学 , 2005.
   [3] 占学德 . 基于 UML statecharts 测试方法的研究 [D]. 上海 : 上海大学 ,2005.
   [4]JENSEN K. Colored Petri nets:basic concepts, analysis methods and practical use[M]. 2rd ed. Berlin, New York: SpringerVerlag, 1995.
   [5]DICK J, FAIVRE A. Automating the generation and sequencing of test cases from modelbased specification[C]//Proc of the 1st International Symposium of Formal Methods Europe on IndustrialStrength Formal Methods. London:SpringerVerlag, 1993:268284.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值