田 宇,赵昶宇
(1.海军装备部驻天津地区第二军事代表室,天津300308;2.天津津航计算技术研究所,天津300308)
嵌入式软件的设计流程完全遵循GJB5000A标准,传统的嵌入式软件设计方法在需求分析、体系设计及软件设计过程中采取大量的文字描述,无法将软件的架构设计清晰地表达出来,并存在描述歧义的风险。
随着嵌入式软件的日益复杂,为提高软件质量,降低开发成本,缩短开发周期,本文利用结构化设计方法引进了Hatley-Pirbhai实时系统结构化分析设计理论,并运用该理论对嵌入式软件进行了结构化的定义和分析,并在嵌入式软件的研制过程中实现了需求分析、体系设计和软件设计。
嵌入式软件属于实时系统范畴,包括如图1所示的软件开发行为。
图1 实时系统软件开发行为
需求分析用来对用户需求和与系统交互的环境进行建模,包括对象建模和动态建模两个过程,以描述系统的静态行为和动态行为。
体系结构设计是定义系统的软件体系结构,用体系结构环境图、软件模块结构图和并发图来描述。
详细设计用来细化体系结构中的软件模块,描述每个软件模块算法、控制逻辑等。
设计测试用例为测试工作设计出测试用例,供测试环节对系统进行全面测试,确保实现的系统能够满足用户需求。
目标化阶段用来生成最终应用,并使开发出的实时系统能够在目标环境下协调运行。
Hatley-Pirbhai实时系统结构化分析方法是由DEREK和ⅠMTⅠAZ在20世纪末提出的一种针对实时系统的功能需求分析方法。它通过建立需求分析模型来描述系统实现的功能和这些功能执行的条件。需求分析模型由处理模型、控制模型以及数据字典组成,处理模型通过数据流图DFD(Data Flow Diagram)和 处 理 规 格 说 明P-SPEC(Process Specification)描述系统的功能;控制模型通过控制流图CFD(Control Flow Diagram)和控制规格说明C-SPEC(Control Specification)描述系统中功能执行的条件。
需求分析模型最终将系统的功能需求转化为处理、控制以及时序,如图2所示。
图2 需求分析模型
数据流图明确系统的输入、处理、存储和输出及其协调工作的过程,采用数据流图将软件功能分解为一系列的处理,处理根据复杂程度可以继续分解为子处理。数据流图分多个层次,下层数据流图为上层某一处理的细化分解,通过多层次数据流图能表示系统所有的处理以及各处理的输入和输出。处理说明则是采用结构化自然语言方式详细描述处理如何将输入转换为输出。
控制流图描述系统处理执行的条件,是对数据流的补充,实时系统中的处理执行由事件触发,控制流描述的就是触发处理执行的事件,控制规格说明描述处理执行的事件条件。
数据字典由控制流和数据流中出现的数据项定义组成,是提供关于数据的描述信息,是对所有与系统相关的数据元素的一个有组织的列表,精确、严格定义各个数据元素,使得用户和系统分析员对于输入、输出、存储成分和中间计算有共同的理解。
体系结构设计通过需求分析阶段产生的静态模型和动态模型来定义应用的体系结构,包括一系列软件模块、软件模块间接口关系,同时在这一阶段需要确定软件需求分析阶段所确定的功能在软件模块中的功能分配。
在体系结构设计过程中,系统被看成是将外部输入转换为外部输出的系统模块,此模块与结构化分析模型系统环境图中处理不是同一概念,因为系统体系结构建模时需要考虑系统具体实现,会增加与技术手段相关的设计决策,这些设计决策将会在基本结构化分析模型基础上派生出新的处理。系统模块可以进一步分解或细化为一系列简单子模块,如需要,子模块可以进一步细化与分解,不需细化分解的模块称为基本模块。体系设计模型可由体系结构环境图、体系结构流图、体系结构模块说明、并发图、模块结构图来描述。
系统体系结构环境图是最顶层的系统体系结构图,系统体系结构环境图将整个系统看成一个整体,系统模块描述其与外部环境(终端)间关系。
系统体系结构环境图中包含一个体系结构模块(Architecture Module),用于表示所建系统,多个终端(Terminator)用于表示外部使用者与被使用者,信息流用于表示系统与外部终端间信息交换。
系统体系结构流图将所构建的系统表示为一系列互联的系统体系结构模块,并描述模块之间信息交互,模块间交互的信息可以是控制信息,称为控制流,也可以是数据信息,称为数据流。
系统体系结构模块说明描述每一个系统体系结构模块信息、处理及需求分配,同时描述模块设计细节,比如模块采用何种处理器、系统主频、内存空间大小与地址、使用的软件如操作系统、数据库及通信协议包等信息。
在系统体系结构建模过程中所创建的数据项将被统一保存到数据词典中,成为系统体系结构数据词典,数据项定义与属性描述方式与需求分析阶段数据项定义方法完全相同。
并发图是用来表示软件系统并发性的图示方法,通过并发图可以将软件系统划分为多个并发线程或任务,同时描述并发线程或任务间信息交互,以及并发线程或任务间共享资源时的同步机制。
模块结构图描述函数模块间数据与控制流,同时描述函数模块调用层次。对于一个计算机软件配置项,根据任务设计准则可以将系统软件划分为多个线程或任务,针对每一个线程或任务有一个入口函数模块,需要为每个入口函数模块构建模块结构图。
嵌入式软件属于前后台系统软件,其应用模式由一个主程序外加数个中断处理程序构成,其中主程序不断循环,在循环中执行相应的程序以完成特定的功能,称为后台线程;而中断处理程序则响应外部事件并执行相应的功能,称为前台线程。每个线程执行都有一个入口函数模块,并通过入口函数模块对底层函数模块逐层调用。可通过体系结构环境图、体系结构流图、体系结构模块说明来描述软件的静态结构,包括数据的输入、输出等信息;采用并发图和模块结构图描述软件的动态模型,包括前后台并发机制的描述和各函数模块间的调用层次。
嵌入式软件的体系结构设计模型如图3所示。
图3 嵌入式软件体系结构设计模型
软件建模技术极大地提高了嵌入式软件的设计水平,一改传统的大量文字叙述方法,将面向对象的设计思想运用于结构化软件设计中。采用Hatley-Pirbhai实时系统结构化分析、设计理论,通过建模图例来描述嵌入式软件在需求分析和体系设计过程中的设计思想。目前软件建模技术已运用于多种类型嵌入式软件设计中,不仅使软件架构设计思想更加清晰,同时提高了软件设计效率,可以直接调用软件重用模块,极大地节约了人力成本,后续可推广到更多的嵌入式系统设计中。