封面ERCIM新闻58

此问题出现在pdf格式
(80页;18 Mb)



档案文件:
封面ERCIM新闻57
上一版本:
编号57
2004年4月:
专题:
游戏技术

所有以前的问题


下一期:
2004年7月

下一个专题:
网格:
下一代


关于ERCIM新闻


有效的HTML 4.01!

垫片
 
<目录ERCIM新闻第58号,2004年7月
特殊主题
 

GATeL:从Lustre描述自动生成测试

本杰明·布朗


GATeL是法国核研究机构(CEA)开发的工具。其主要目标是自动化关键控制应用程序的测试阶段。这里的关键点是,自动化并不是用来生成大量测试用例的一种手段,而是帮助执行真正有问题的用例。GATe已经实施,法国核认证机构以及航空电子和汽车研究中心目前正在使用GATe。

Lustre是一种属于同步数据流家族的形式化建模语言。它描述了在同一周期内循环接收传感器输入并向执行器发送输出的程序。给定一个控制程序及其作为Lustre模型的行为的部分描述,GATeL的主要作用是根据面向用户的测试用例自动生成测试序列。然后,可以将这些测试序列(表示输入数据流随时间的演变)提交给正在测试的程序。GATel还为自动预言提供了基础,无论程序是否根据模型自动生成,都取决于所遵循的开发过程。

除了Lustre模型之外,GATeL还需要两个用户输入:一个是程序运行环境的某些方面的模型,另一个是所需测试用例的声明性定义。环境模型也写在Lustre中,旨在从所有可能的行为中过滤出与现实反应相对应的行为,从而减少待探索的状态空间。非真实行为可能包括两个输入流的不兼容值,或者是过去事件的发生取决于输出流的输入流的值。每个过滤表达式都由一个assert指令声明,该指令对于生成的序列的每个循环都必须为true。

然后可以精细地描述所请求的测试用例,以便执行有意义的情况。测试用例选择是测试过程的关键部分。有人提出了几种方法来实现它的自动化,但没有一种得到普遍认可。例如,可以尝试通过正向模拟来执行输入域的统计覆盖,但有意义的测试用例的发生概率可能很低(因为它们需要特定输入流在数百个周期内的演化)。另一种方法是定义Lustre模型的结构覆盖标准,然后生成测试序列,直到达到给定的百分比。然而,仅依赖预定义的覆盖率标准就假定在此标准中编码的故障模型将发现所有可能的错误,这可能不足以用于高度关键的系统。

由于所有这些原因,我们倾向于允许用户定义自己的选择策略。这方面的第一步是定义测试目标。这说明了要检查的测试程序的一些重要预期属性。这些可以是不变量属性或可达性属性,都用Lustre表示。不变量属性用断言指令声明。必须在至少一个循环(实际上,在GATeL构建的序列的最后一个循环)中满足的属性由reach指令规定。为了根据程序及其环境的Lustre模型建立达到测试目标的序列,这三个元素被自动转换为约束系统。然后,通过交替传播和标记阶段,解析程序解决了该系统。传播检查系统的局部一致性,而标记旨在通过在其授权域内选择变量和值来逐步消除约束。

左:显示Lustre模型、环境描述和测试目标的GATeL主窗口。右上角:生成的测试序列。底部:表示拆分过程和获得的当前测试用例的树。
左:显示Lustre模型、环境描述和测试目标的GATeL主窗口。右上角:生成的测试序列。
底部:表示拆分过程和获得的当前测试用例的树。

该解析过程的随机性意味着输入域没有被完全覆盖,这意味着可能会为同一目标生成截然不同的序列(例如,发出警报的不同方式)。定义选择策略的第二步是帮助GATeL区分这些序列。这可以通过拆分约束系统来实现,使得每个子系统都具有达到目标的特定行为类别的特征。通过在对应于当前约束系统的Lustre表达式中应用布尔/整数/时态运算符的预定义分解,或者通过专用的拆分指令声明要观察的各种行为,可以交互地处理此拆分。请注意,不同类别操作符的系统展开将导致常见的结构覆盖标准。

最后,测试提交包括读取用GATeL生成的输入序列,计算程序输出,然后将这些值与生成过程中评估的预期值进行比较。当程序没有从Lustre模型自动生成时,这将提供自动预言。对于另一种情况,测试目标的真值可以起到部分预言的作用。GATeL的方法和效率方面仍在开发中。然而,它已成功应用于工业案例研究,在解决了40多个输入流上的数千个约束后,生成了1000个循环的序列。

请联系:
布鲁诺·玛丽、本杰明·布朗
法国能源原子委员会
电话:+33 1 6908 5416
电子邮箱:benjamin.blanc@海洋渔业局

 

垫片