《IEEE Std 1016-1998阅读摘要》
1. 引言
本文是IEEE Std 1016-1998 (《软件设计描述IEEE推荐实践》)的阅读摘要,主要是对重要部分的原文翻译。希望能对不喜欢看英文原文的同志有点作用。
2. 摘要
2.1 SDD的概念、作用
IEEE Std 1016-1998是说明软件架构和设计的IEEE-ANSI标准。
完整的软件生命周期包括:概念阶段(Concept Phase)、需求阶段(Requirement Phase)、设计阶段(Design Phase)、实施阶段(Implementation Phase)、测试阶段(Test Phase)、安装与验证阶段(Installation and Checkout Phase)、运行与维护阶段(Operation and Maintenance Phase)、退役阶段(Retirement Phase)。
SDD(Software Design Description,软件设计描述)是软件系统的表征,是交流软件设计信息的媒介。无论是对于新的软件系统还是维护中的现有系统,确认设计和实施满足推动系统的需求十分重要。SDD展示怎样架构软件以满足需求(IEEE Std 830-1998指定),它将需求转化为软件结构、软件模块、接口和数据的描述,这些描述对于实施是必要的。大体上,SDD成为实施活动的详细计划。在一个完整的SDD中,每一项需求应该在一项或多项设计实体中得到实现。
2.2 设计实体
SDD将软件系统分解成多个设计实体(Design Entity),并描述这些设计实体的重要属性及其间的关系。
一个设计实体是结构与功能与其它元素不同的独立命名与引用的设计元素(组件),设计实体可能以一个系统、子系统、数据存储区、模块、程序和进程的形式存在。设计实体来源于对软件需求的分解,目标是将系统分解为能最小影响其它实体进行考虑、实施、改变和测试的不同组件。
设计实体由以下属性组成:
(1) 标识 (Identification):实体的名字。
(2) 类型(Type):实体类型的描述。比如子程序、模块、流程、进程或数据存储区。
(3) 目的 (Purpose):实体为什么存在的描述。
(4) 功能 (Function):实体做什么的陈述。
(5) 从属实体(Subordinates):组成这一实体的所有实体标识。
(6) 依赖关系(Dependencies):这一实体与其它实体关系的描述。
(7) 接口(Interface):其它实体怎样与这一实体相互作用的描述。
(8) 资源(Resources):外在于设计的实体使用的元素。如物理设备(打印机、磁盘分区、内存条)、软件服务(数学库、操作系统服务)以及处理器资源(CPU周期、内存分配、缓存)等。
(9) 处理(Processing):实体实现其功能的规则的描述,如算法等。
(10) 数据(Data):内在于实体的数据元素的描述,包括表征方式、初始值、使用、语义、格式以及内在数据的可接受值等。
2.3 设计视图
设计视图:不同设计描述用户可能对软件设计的核心部分有不同观点,别的信息对于这一用户来说是不相关的。推荐使用以下设计视图:
- 分解描述(Decomposition description)
范围:记录软件系统怎样分解为设计实体;
使用:由设计和维护者分辨系统主要的设计实体,以判定那一实体对实现特定功能
或追踪设计实体的需求负责;
- 依赖性描述(Dependency description)
范围:说明实体之间的关系:依赖实体、它们之间的耦合以及需求资源。
使用:依赖性描述提供系统怎样工作的总体图像,可用来评估需求和设计改变的影
响。它可以帮助维护者确定造成系统失败或者资源瓶颈的实体,也可以通过
确定哪些实体是其它实体所需要的,必须先开发来帮助产生系统集成方案。
这一描述也可以用来集成测试时生成集成测试用例。
- 接口描述(Interface description)
范围:提供设计者、程序员、测试者需要知道的正确使用一个实体功能的描述。
接口描述包括在软件需求规范中未提供的详细的外部和内部接口。这一视
图由每一实体的一套接口规范组成。
使用:接口描述在设计者、程序员、用户、测试员之间充当一个有约束力的契约。
它提供了实体详细设计之前需要的的协议。另外,接口描述可以被技术作
者用来产生用户文档,直接给用户使用。实体接口的清晰描述对于多人开
发的系统顺利集成和便利维护起到至关重要的作用。
表征:接口描述应提供屏幕格式、有效输入、输出等信息。
- 详细设计描述(Detailed design description)
范围:包括每一设计实体的详细内部信息;
使用:详细描述包括程序员在实现之前需要的详细信息,这一视图也可以用来生
成单元测试用例;
2.4 SDD模块
1. 引言(Introduction)
1.1目的(Purpose)
1.2 范围(Scope)
1.3 定义与缩写词(Definitions and acronyms)
2. 参考文献(References)
3. 分解描述(Decomposition description)
3.1 模块分解(Module decomposition)
3.1.1 模块1描述(Module 1 description)
3.1.2 模块2描述(Module 2 description)
3.2 同步进程分解(Concurrent process decomposition)
3.2.1 进程1描述(Process 1 description)
3.2.2 进程2描述(Process 2 description)
3.3 数据分解(Data decomposition)
3.3.1 数据实体1描述(Data entity 1 description)
3.3.2 数据实体2描述(Data entity 2 description)
4. 依赖关系描述(Dependency description)
4.1 模块间依赖(Intermodule dependencies)
4.2 进程间依赖(Interprocess dependencies)
4.3 数据依赖(Data dependencies)
5. 接口描述(Interface description)
5.1 模块接口
5.1.1 模块1描述(Module 1 description)
5.1.2 模块2描述(Module 2 description)
5.2 进程接口
5.2.1 进程1描述(Process 1 description)
5.2.2 进程2描述(Process 2 description)
6. 详细设计(Detailed design)
6.1 模块详细设计(Module detailed design)
6.1.1 模块1详细(Module 1 detail)
6.1.2 模块2详细(Module 2 detail)
6.2 数据详细设计(Data detailed design)
6.2.1 数据实体1详细(Data entity 1 detail)
6.2.2 数据实体2详细(Data entity 2 detail)
3. 阅读感悟
软件设计文档为需求文档和实现之间架起了一座桥梁。对于单人开发和维护的系统,这种设计文档似乎是可有可无的,但是一旦设计多人开发以及后期的维护,软件设计文档就显得异常重要了。软件设计的工作实际上是一个分解模块、分解任务的工作。没有这种分解,一个大的系统可能永远无法完成。一个真正的软件设计文档未必就是根据上面的模板的章节方式来编写,但是这一标准提供了编写软件设计文档的基础。
4. 参考文献
【1】 IEEE Std 1016-1998 《IEEE Recommended Practice for Software Design Descriptions》