APP下载

基于合约的SCADE测试工具设计与实现

2017-07-27刘小同熊梦阳小华刘杰

电脑知识与技术 2017年11期

刘小同+熊梦+阳小华+刘杰

摘要:反应堆保护系统是核电厂中最重要的安全系统,对保证核电设备、工作人员以及周边环境的安全有着至关重要的作用。由于反应堆保护系统所需要的高安全性,因~LSCADE平台开发的压水堆反应堆保护系统(以下简称SCADE系统)是近年来重要的研究方向。但是SCADE平台的开发过程基本以图形方式展现,设计与验证工作也都在SCADE系统内部完成,缺少对内部的本质特征的说明。因此需要一种方法来对SCADE系统的内部结构进行解释,并根据此对SCADE系统进行后期的验证工作提供理论支持,确保对SCADE系统的验证工作是有效的。笔者由此提出了基于合约的SCADE测试理论,并根据此理论设计并开发了基于合约的SCADE自动测试平台,用于为SCADE系统的验证工作提供充分的测试用例并进行相关测试工作。

关键词:反应堆保护系统;SCADE系统;基于合约的测试平台

1概述

随着核电产业的不断发展,核电厂核反应堆的安全问题已经引起业内人士的广泛关注。反应堆保护系统(ReactorProtection System,RPS)作为在核反应堆投入使用后对反应堆进行保护的安全系统,也在不断的研发。通常情况下,反应堆保护系统通过SCADE平台进行开发。SCADE是一个基于组件式的嵌入式控制系统开发平台,设计人员根据设计需求,将已存在或已开发好的基础模块进行组装,最终形成一个完整的系统,设计好的系统通过SCADE平台生成最终的c语言代码,用于写人到硬件中作为最终产品使用。

SCADE采用图形化的开发过程可以提高开发者对整个系统的观察深度和控制复杂度的能力,提高生产率,有效地避免了代码内部的编码错误。但是整个开发过程都是以图形的方式表现,设计和验证工作都在SCADE系统内完成。对于SCADE模型本身性质特征缺少说明。对于SCADE软件系统烧录到芯片后的检验缺乏必要的数据和信息支持。因此需要针对SCADE模型生成相应的抽象模型说明系统的性质。其作用可以验证模型是否满足需求,以及提供足够的信息检验后期的硬件实现是否满足系统要求。

而目前的SCADE的模型来源于设计方案图纸,缺乏对系统整体性质的设计说明。而Bertrand Meyer提出的软件合约理论,可以比较精确的描述出使用组件的约束以及使用后构件预期的正确状态。如果组件违背约束,将引发失效。随着组件的组织结构,向外扩展,最终影响系统的整体性能。组件的失效会通过组件之间的接口影响到其他组件。既有可能是某些或某类失效传播到下一构件,也可能在失效传播的过程中,转换为其他类型的失效模式。最终将导致整个系统的事故。

将SCADE组件的约束模型抽象为合约,可以作为DI&C软件系统逻輯的正确表示方法,用于对系统进行可靠性与安全性检验。因此,我们针对基于SCADE开发的DI&C系统开发了基于合约的SCADE测试工具,为系统生成系统合约,并生成测试用例、测试脚本和期望输出,对系统的正确性进行充分验证。

2基于SCADE模块的合约测试理论

软件合约理论是Bertrand Meyer等人为提高程序设计质量而提出的。它把软件模块之间的交互规则定义为合约,通过合约来明确模块调用方与实现方之间的职责和权利。

以SCADE组件形成的约束模型(合约)作为基础,对系统进行分析后设计出验证系统所需的测试用例以及期望输出,可以有效验证SCADE搭建的系统。因此,根据合约理论设计相应的方法对SCADE搭建的系统进行验证,可以提高系统的可靠性与安全性,防止系统出现严重的错误,并减少人工验证的工作量。

2.1 SCADE模块开发

在SCADE平台上进行开发时,首先根据不同的基础功能开发出相应的基础模块,然后根据系统设计用基础模块搭建成完整的系统。

DI&C软件系统基于SCADE基础模块搭建而成,其合约的生成方法需要2个步骤,首先通过合约抽取技术从基础组件中抽取基础组件合约,然后分析构建系统的模块结构特征,依据系统结构特征采用合约组合技术生成系统合约。

DI&C系统由各个基础模块组合而成,简单的复合模块基本分为串联和并联两种情况,复杂的复合模块以及系统组合均由基本模块进行复杂的串并联后得到。所以掌握基础模块简单的串联和并联组合方法即可分析出DI&C软件的系统合约。

2.2 SCADE模块合约

SCADE搭建的系统中,基础模块包括输入、输出、参数等模块接口信息,以及模块的约束规则。根据接口信息和约束规则,我们将SCADE模块抽象为合约,形成逻辑模块,用于组合成系统合约。

每个模块都具有一个以上(含1)的输入和输出与零个以上(含0)的参数,它们由值(value)和状态(state)两部分组成,“值”分为模拟量(analog)和二进制量(binary),“状态”仅有故障(FAULT)或无故障(NO_FAULT)两种情况。模块约束规则分为参数规则(Rule_para)、值规则(Rule_value)和状态规则(Rule_state),他们都包含一个以上(含1)的子合约。这些接口与约束规则共同构成了基础模块的合约。

2.3 SCADE系统合约生成

在DI&C软件中,系统由基础模块搭建而成。将基础模块按照一定的组织结构进行组合,实现系统设计的功能。在外界环境确定的情况下,组合结构决定了系统功能,即组合结构决定系统的输入、输出、参数以及各个部分之间关系,因此根据基础模块的合约进行组合与分析,最终形成完整的系统合约,具有很高的可行性。

我们将DI&C系统中,基础模块的组合方式分为串联组合和并联组合,系统组合由大量模块经过设计好的串联并联得到。

在串联组合中,两模块前后链接形成新的复合模块。1)模块接口中,上一模块输出作为下一模块输入。所以,串联模块输入为上一模块输入,串联模块输出为下一模块输出。因模块参数基本相互无影响,故串联模块参数为两模块参数并集。2)模块合约中,复合模块合约由串联模块合约合并而成,将两模块合约集相乘得到笛卡尔集,将其中上一模块的输入与下一模块输出以临时量进行连接后,即得到总的合约。然后对合约进行进一步的简化合并,去掉临时量,得到串联模块总的合约。

并联组合中,两模块并联形成新的复合模块。1)模块接口上,两模块可能共用全部输入,也可能共用部分输入,也可能各自有不同的输入,所以并联模块的输入为两模块输入的并集,输出为两模块输出的并集。同时,并联模块间的参数相互无影响,所以并联模块参数为两模块参数的并集。21模块合约中,由于并联模块之间运行互不影响,所以并联模块的合约为两个基础模块合约集的并集。

根据我们定义的模块合约,将系统拆分为基础模块并得到基础模块的组合方式。再根据基础模块的组合方式将基础模块合约组合为整个系统的合约。分别取每个模块的某个子合约公式进行排列组合,即可得到系统所有的状态,然后对这些状态进行筛选,去掉无用或不可能存在的状态,即可得到所有可能存在的状态,然后根据每个状态的约束条件,设计符合条件的测试用例,由此得到整个系统的测试用例,对系统进行充分的测试。

3基于合约的SCADE模型自动测试工具结构设计基于合约的SCADE模型自动测试工具的设计主要分为基础模块合约管理和基于合约的SCADE测试两大模块。基于合约的SCADE测试分为导入待测系统、拆分待测系统、抽取基础模块、组合基础模块、生成系统合约、生成测试用例、生成测试脚本、生成期望输出等八个部分。

基础模块合约管理部分主要包括基础模块类和管理类,负责对基础模块合约进行管理,包括基础模块的添加、删除、编辑和查找等功能。

基于合约的SCADE测试部分主要包含待测系统类与针对待测系统进行操作的各个操作类。负责对待测系统进行解析、拆分、合成合约、生成测试用例、生成测试脚本、生成期望输出等操作。

1)导入待测系统

通过分析SCADE平台搭建的系统的文件存储方式,将整个系统所有文件导入到软件中,并通过解析得出所导入的系统的信息;

解析系统信息同样通过解析系统项目文件中的.xscade文件,解析方式与基础模块解析相同,因为系统项目由不同的基础模块搭建而成,所以系统项目的.xscade文件中,Data标签下的Equation标签中,CallExpression标签内即为引用的基础模块的信息,OpCall中的name值为引用操作的实例名,operator中的OperatorRef标签中的那么值为引用的基础模块的名称。

2)拆分待测系统

根据解析得到的系统信息,将系统拆分得到一个个的基础模块;

3)抽取基础模块

整理拆分得到的基础模块,在软件保存的基础模块库中查找系统所需的基础模块的合约等信息。如果找不到所需模块,则给出相应提示;

4)組合基础模块

通过对系统的解析,得出系统中基础模块的组合方法;系统中基础模块的组合方法由基础的串联、并联组合混合而成,由此连接组合为整个复杂的系统。

5)生成系统合约

根据组合基础模块中的串联、并联组合方法,将基础模块合约整合为系统合约。由于SCADE搭建的系统用于处理连续的信号,同时系统内部可能存在各种各样的延时处理功能以及信号、状态存储功能,所以生成的系统合约可能需要处理后才能用于生成测试用例等工作。

6)生成测试用例

根据系统合约,分析系统可能存在的工作状态,以此为基础,为系统设计相应的充分的测试用例;

7)生成测试脚本

根据SCADE软件的测试脚本编写方法,将生成的测试用例写入测试脚本以便验证测试用例;

8)生成期望输出

通过将测试用例代人系统合约,为测试用例得出相应的期望输出。

4基于合约的SCADE测试工具运行实例

根据工具的初步设计与实现,我们取一个简单的复合模块作为实例,对工具进行简单的验证,并展示工具大概的测试流程。

我们取最大值(MAX)、自然对数(LNP)模块进行复合,用于求出两个数中较大值的自然对数。我们假设模块接口的状态对模块的值无影响,仅对模块的数值计算部分做测试。

4.1MAX模块接口与合约

模块MAX用于出两个输出中的最大值。1)模块接口如表1,包括输入1、输入2、输出1等三个模块接口;2)模块值合约如表2,包含三条子合约,分别用于表示11.v>12.v、11.v=12.v和11.v<12.v等三种情况。

4.2 LNP模块接口与合约

模块LNP用于求输入信号的自然对数。1)模块接口如表3,包括输入1、输出1两个模块接口;2)模块值合约如表4,包含一条子合约,用于对输入信号进行取对数操作。

4.3复合模块接口与合约

由MAX模块和LNP模块符合成的符合模块根据上述论文提到的方法进行串联组合,得到复合模块的接口信息(表5)与组合合约(表6)。

1)模块接口包括来自MAX模块的输入1、输入2和来自LNP模块的输出1。2)模块合约包括由MAX合约与LNP合约组合而成的两条合约。

4.4复合模块测试用例

根据复合模块合约,我们得到三条用于对复合模块进行测试的测试用例(表7),每条测试用例对应一条复合模块合约。

4.5实例小结

此实例只列出简单的模块值的部分的合约组合方法,其他参数合约、状态合约组合方法参照值合约的组合方法,然后将值、状态与参数三项整合到一起,即得到整个系统的合约与测试用例。

5结束语

针对基于合约的SCADE模型的测试进行了讨论,目的是研究其测试过程自动化的可行性,阐述了工具的设计与实现等相关内容。论文对基于合约的SCADE测试原理进行了阐述,介绍了基于SCADE平台所开发系统的合约生成策略。根据理论,设计了根据合约生成SCADE系统的测试用例的基本方法,并设计了测试工具对理论进行实践检验,同时列出了工具运行实例,基本证明了基于合约的SCADE测试工具的可行性。但是工具的设计并不完善,仍需进行后续的研究与开发。