基于SCADE的嵌入式软件开发方法研究

2015-01-24 12:24高玉娜
电子设计工程 2015年21期
关键词:高可靠性嵌入式软件单元测试

高玉娜

(上海海洋大学 工程学院,上海 201306)

软件的安全和可靠性是衡量软件质量最重要的指标和软件开发的最终目标。较之普通软件领域,在高安全性的嵌入式开发领域如轨道交通,航空,国防等,软件因其任务特点,更需要保证高可靠性。然而,何谓“高可靠性软件”、如何开发“高可靠性软件”一直是困扰系统开发人员的“瓶颈”问题。诚然,软件的设计模式直接决定了软件的安全和可靠性。文中介绍了一种基于模型的可靠性软件开发平台方案。大量的工程应用也表明该方法是切实有效的。

1 嵌入式软件开发现状

何谓“高可靠性软件”?1983年美国IEEE计算机学会软件工程技术委员会将软件可靠性定义如下[1]:在规定的条件下,在规定的时间内,软件不引起系统失效的概率。在规定的时间周期内和条件下,程序执行要求的功能的能力。这个标准随后经美国标准化研究院批准作为美国的国家标准,1989年我国国标GB/T-11457采用了这个定义。

那么,如何开发“高可靠性软件”?软件可靠性工程的任务是力争在软件生命周期过程中最大限度地减少软件产品中的缺陷。而减少软件缺陷必须在全面周密的考虑系统在各个不同阶段、不同状态下,保证软件和需求的一致性。

1.1 现有的软件开发方法

目前,大多数嵌入式软件项目都采用“以手工编码和以代码为中心”瀑布模型作为规范化开发的基础。该种开发方式以代码开发为中心,需求分析、软件设计为软件编码做准备,代码编写完成后进行单元测试。长期以来,代码编写一直是开发过程的主要阶段,占用了大量的时间和人力。随着人们对软件质量的重视,单元测试在开发过程中的地位日益重要,在目前的开发流程中,越来越多的力量投入到代码的单元测试中[2]。

基于代码开发方式的缺点非常明显:

1)开发效率低下

由于代码的抽象程度高,不直观,与软件需求完全脱节,因此开发人员不得不花大量的时间在技术细节上,代码的修改也很耗时。

2)质量没有保证

由于软件代码由程序员手工编写,程序员的能力、态度及状态制约了软件的质量。且随着软件规模、复杂度的不断增加,团队开发情况的出现,代码集成也变得越来越难。

出现这些缺点的主要原因在于,在基于代码开发方式下,开发工作的早期(需求分析、软件设计)完全依赖于人工工作,其成果以有歧义的自然语言或图表方式描述,无法进行有效的交流和验证,从而成为错误引入的重灾区;而当具有动态行为的代码出现后,对代码的测试是一种事后监督的、费时费力的做法,只能尽可能地发现错误,而无法有效地避免或者是排除错误。

1.2 “基于模型”的开发方法

随着人们对软件认识的逐渐加深及实践中的探索,模型取代代码成为了软件开发流程的中心。直观的模型符号被用于需求分析及以软件设计过程,表达分析人员对需求的理解及细化。由于模型远比程序语言的抽象程度低,更易于理解和交流,减少了需求分析和软件设计过程中错误引入的机率,尤为重要的是,模型还可用于模拟仿真,表达其动态特性,从而使开发人员在开发的早期能确定性地发现并排除错误。

一般来说,基于模型的开发方式具有以下特征:

1)形式化的图形符号

直观易懂的图形符号是模型的主要特征,也是模型优于代码的主要原因。借助于图形化的符号组成的模型,阅读者不仅能快速获取模型所表达的含义,而且不会因知识背景的不同产生歧义。

2)模型可运行

可运行的模型为开发人员了解模型的动态行为提供了方便,可以验证设计与需求是否一致。

2 “基于模型”的开发工具

2.1 什么是“基于模型”的开发工具?

所谓“基于模型”,是以一种形式化的模型方式描述一个系统或是一个子系统[3]。一个模型可以是数学意义上的,由一系列关于系统的声明构成;也可以是构架意义上的(又称作可执行的),用来描述一个系统对系统外激励的响应情况。

随着计算机技术的迅猛发展和软件工程自动化的不断发展,“基于模型”的开发工具不断涌现,这类工具的普遍特点是通过形式化的建模方式实现需求、模型可以直接进行模拟、并且可以直接将模型转化为源代码。

2.2 “基于模型”开发工具的比较

基于模型的开发工具有很多,在嵌入式软件开发领域应用比较广泛的主要有基于UML的建模工具,或是结构化的设计工具(SCADE、SIMULINK 等)。

1)基于UML的设计工具:关注于高层的功能划分、结构分解、行为规范和需求分析,适合于系统建模;它从软件工程的角度对开发流程进行规范,但很少考虑高可靠性嵌入式软件开发的特点,软件工程自动化程度较低,生成的只是一个代码框架,需要对它生成的代码做大量的修改和补充之后才能使用。

2)Simulink:面向仿真,仿真功能比较强大,支持对硬件和外界环境的模拟,可以进行全局的仿真和调试;但是由于底层缺乏数学理论的支撑,无法保证模型作为需求描述的无歧义性;从生成代码的角度来说,它生成的代码也需要做大量的修改和补充之后才能使用,而这种做法在增加工作量的同时,和基于UML的设计工具一样,带来了一个潜在的很复杂的开发流程管理和质量认证上的问题。

3)SCADE (Safety-Critical Application Development Environment)是一套基于模型的、面向高可靠性软件而设计的开发环境,具有严格的理论基础支持,充分考虑了高可靠性软件开发中的质量、安全特性、开发周期、认证等各方面的问题,国内外高安全性嵌入式领域应用经验表明,它非常适合用于开发高可靠性软件。

3 基于SCADE的软件设计方法

3.1 SCADE简介

SCADE[6](Safety-Critical Application Development Environment)是一套高安全性嵌入式软件开发环境,运用Correct By Construction[5]的设计理念,能够从精确的需求规范自动生成嵌入式源代码,实现了开发流程的高度自动化。它涵盖了嵌入式软件开发的整个流程:需求管理、需求建模、模型检查、模型仿真、模型覆盖率分析、形式验证、代码生成、文档生成等等。SCADE适用于不同软、硬件平台,是一套通用的嵌入式软件开发平台。

3.2 基于SCADE软件设计方法

在现有的瀑布式的开发流程中,软件需求、概要设计、详细设计都是为了编码;单元测试、集成测试、系统测试都是为了验证代码的正确性,代码是整个工作的重心。使用了SCADE之后,整个设计流程是围绕着SCADE模型展开的:概要设计和详细设计的过程其实都是用SCADE建模的过程,并且提供了一系列验证手段保证了模型的正确性和安全性,SCADE模型成为整个开发工作的核心,工作的重心从原先的代码提高到了模型的级别。

图1 基于SCADE的嵌入式软件开发平台Fig.1 Structure of embedded software development platform with SCADE

1)设计过程

SCADE提供了两套机制(数据流图和安全状态机)来进行图形化建模。数据流图适合于连续系统图建模,安全状态机适用于离散系统的建模。SCADE将这两套建模机制很好地融合在一起,能够适用于不同类型系统尤其是混合系统的开发。

这两套机制都建立在严格的数学模型基础之上,具有严格的数学语义,它们保证了设计模型的精确性、完整性、一致性和无二义性。由于该描述是形式化的,因此建模的过程也是描述需求的过程,得到的是明确无歧义的软件需求。

2)设计过程的验证

SCADE提供了一系列的验证机制,来确保软件需求模型描述的正确性和安全性:

①模型静态检查

建立好了需求模型之后,可以对模型进行自动检查,帮助找出模型中的数据流不匹配、死循环等一系列语义和方法学方面的错误,并提供超链接进行错误定位。

②模拟仿真

模型通过静态检查之后,可以通过SCADE提供的模型仿真器,对整个系统或是系统中任意一个模块进行模拟仿真。该仿真器是一套功能强大的可视化的调试环境,可以设置断言、断点;可以检查输入数据、局部变量和输出数据的值;可以用文本或图表的形式记录仿真过程中各输入输出的值;可以保存和回放仿真的场景(scenario)。最重要的一点也是区别其他基于模型开发工具的最重要的一点:SCADE保证仿真结果和生成代码运行的结果是一致的。

③覆盖率分析

模拟仿真是对模型进行功能测试的过程。为了评估模型测试的完备性,SCADE提供了基于模型的覆盖率分析。根据既定的或者自定义的覆盖率准则,分析仿真场景在模型中的覆盖程度,并能指明未覆盖的路径;随后用户对覆盖率进行分析,找出测试用例的不足、需求设计错误、死代码等问题,用于指导设计模型改进、需求改进等。最后,SCADE还能自动生成覆盖率分析的报告。

④形式验证

模拟仿真能够测试系统模型是否实现了预期功能,但并不能保证系统在所有情况下都满足安全特征。由于测试的局限性,难以通过测试来验证安全特性,对于复杂的逻辑控制系统来说尤是如此。SCADE所提供的形式验证[4]弥补了这一局限性。

3)自动生成代码

经过模拟仿真、覆盖率分析和形式验证,保证了模型的正确性和安全性以后,可以利用SCADE内置的代码生成器KCG自动生成嵌入式产品代码。它生成的代码满足一系列的安全特性,有良好的可读性和接口,具有和手写代码相当的大小和效率。该代码生成器通过了军工及航空业及能源业相关标准的鉴定[5],因此,使用SCADE之后,不仅大大节省了编码工作,而且完全免去了代码的单元测试和对于单元测试的验证 (即代码覆盖率分析),很大程度地节省了验证工作和验证时间。

4)集成阶段的验证

当得到源代码之后,根据硬件平台使用编译器 (如:Tornado,GCC等)将源代码编译为目标代码。高可靠性的软件开发流程不仅需要对源代码进行分析,还需要保证从源代码到目标代码的一致性。SCADE提供了CVK(Complier Verify Kit)工具包,能够辅助验证编译器能否正确地将KCG生成的代码编译成目标码。

5)开发流程管理

作为一个面向高可靠性软件而设计的开发环境,SCADE在保证了嵌入式软件的可靠性的前提之下,并通过和其他一些工具的配合保证了整个开发流程的生命周期数据管理。

①通过SCADE RM实现了开发过程中数据的可追溯性管理;

②通过SCC接口实现了开发过程中配置管理,由于SCADE以ASCII格式保存所有数据,并支持标准的配置管理界面。因此,可以方便的与市面上所有的配置管理工具建立桥接。

综上所述,SCADE采用 “基于模型”的开发流程代替了“基于代码”的开发流程,设计的结果是SCADE模型而不是代码,从软件开发重点从编码阶段提升到了设计阶段;同时,不再通过对测试、或是无法定量衡量的评审来保证软件的高可靠性,而是通过对整个开发流程有效的管理来保证软件的高可靠性。

4 结 论

文中详细介绍了以SCADE为核心的软件开发平台,采用该平台进行高可靠性软件开发,克服了传统的以手工编码为核心的开发流程的不足,将软件开发重点由编码阶段提前到设计阶段,可以显著缩短软件开发周期,降低开发成本,提高开发效率。更为重要的是,传统软件开发流程中的设计流程的验证工作主要以手工方式进行,验证的验证工作难以实现,而在以SCADE为核心的开发平台中,可以通过模型测试的方式进行需求验证,该验证进程可通过模型覆盖率分析进行验证;传统软件开发过程中的单元测试工作在该开发平台中可以省略。目前,该开发平台已经在航空轨道交通等多个高安全性的嵌入式软件开发方面得到广泛应用。作者将在后续文章中以具体案例对该开发平台作进一步阐述。

[1]宋彬,沈怀容.航天产品单元可靠性评估软件研究[J].装备指挥技术学院学报,2002,12(4):54-57 SONG Bin,SEHN Huai-rong.Research on reliability evaluation software for spaceflight items[J].Equipment Command Cechnical College Journals,2001,12(4):54-57.

[2]石柱,何新贵.航天型号软件生存周期模型选择指南[J].计算机工程与设计,2000,21(6):43-47.SHI Zhu,HE Xin-gui.Guidelines on selecting an appropriate software Life-cycle model for a specific aerospace software project[J].Computer Engineering and Design,2000,21(6):43-47.

[3]杨丽莎,王慧.基于模型的嵌入式软件设计[J].计算机应用研究,2004,21(12):76-78.YANG Li-sha,WANG Hui.Model-based design of embedded software[J].Application Research of Computers,2004,21(12):76-78.

[4]林枫.基于SCADE的形式化验证技术研究[J].测控技术,2011,30(12):71-74.LIN Feng.Research on SCADE-Based formal verification technology[J].Measurement and Control Technology,2011,30(12):71-74.

[5]Jean-Louis Camus,Bernard Dion.Efficient development of airborne software with SCADE suite[M].Esterel Technologies,2011.

[6]Berry G.The Constructive Semantics of Pure Esterel Draft V3[M].Esterel Technologies,2009.

猜你喜欢
高可靠性嵌入式软件单元测试
基于人工智能的模块化嵌入式软件开发研究
高可靠性火灾探测系统设计
基于VRRP和MSTP协议实现校园网高可靠性
全景相机遥控器嵌入式软件V1.0 相关操作分析
市级气象园区网高可靠性与负载均衡设计
具有高可靠性的混合集成国产化电源电路研制
基于Eclipse的航天嵌入式软件集成开发环境设计与实现
航天嵌入式软件浮点运算误差分析与控制
一年级上册第五单元测试
一年级上册一、二单元测试