一、软件设计的基本概念
1. 软件设计的基础
软件设计是软件工程的重要阶段,是一个把软件需求转换为软件表示的过程。
软件设计的重要性和地位概括以下几点:
(1)软件开发阶段(设计、编码、测试)占据软件项目开发总成本绝大部分,是在软件开发中形成持量的关键环节。
(2)软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品的唯一途径。
(3)软件设计作出的决策最终影响软件实现的成败。
(4)设计是软件工程和软件维护的基础
2. 软件设计的基本原理
软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软件设计有关的概念。
(1)抽象:把事物本质分析出来而不考虑其他细节。
(2)模块化:把一个待开发的软件分解成若干小的简单的部分。
(3)信息隐蔽:在一个模块包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的。
(4)模块独立性:每个模块只能完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。衡量软件的模块独立性是用耦合性和内聚性作为度量标准。
●内聚性:一个模块内部各个元素彼此结合的紧密程度的度量。内聚性按由弱到强有下面几种:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚。
●耦合性:模块间相互结合的紧密程度的度量。耦合度由高到低排列有下面几种:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合、非直接耦合。
3. 结构化设计方法
结构化设计就是采用最佳的可能方法设计系统的各个组成部分以及各万分之间的内部联系的技术。
二、概要设计
1. 概要设计的任务
概要设计的基本任务是:
(1)设计软件系统结构
在概要设计阶段,需要进一步分解,划分为模块以及模块的层次结构,划分的具体过程是:
l 采用某种设计方法,将一个复杂的系统按功能划分成模块
l 确定每个模块的功能
l 确定模块之间的调用关系
l 确定模块之间的接口,即模块之间传递的信息
l 评价模块结构的质量
(2)数据库结构及数据库设计
数据设计是实现需求定义和规格说明过程中提出的数据对象的逻辑表示。数据设计的具体任务是:确定输入、输出文件的详细数据结构;结合算法设计,确定算法的逻辑数据结构及其操作;确定对逻辑结构所必须的那些操作的程序模块,限制和确定各个数据设计决策的影响范围;需要与操作系统或调度程序接口所必须的控制表进行数据交换时,确定其详细的数据结构和使用规则;数据的保护性设计;防卫性、一致性、冗余性设计。
数据设计中应该注意掌握以下设计原则:
l 用于功能和行为的系统分析原则也应用于数据
l 应该标识所有的数据结构以及其上的操作
l 应当建立数据词典,并用于数据设计和程序设计
l 低层的设计决策应该推迟到设计过程的后期
l 只有那些需要直接使用数据结构、内部数据的模块才能看到数据的表示
l 应该开发一个由有用的数据结构和应用于其上的操作组成的库
l 软件设计和程序设计语言应该支持抽象数据类型的规格说明和实现
(3)编写设计文档。在概要设计阶段,需要编写的文档有,概要设计说明书、数据库设计说明书、集成测试计划等。
(4)概要设计文档评审。在概要设计中,对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方案的可行性,关键的处理及内部接口定义正确性、有效性,各部分的一致性等要进行评审,以免在以后的设计中出现现在的问题而返工。
常用的软件结构设计工具是结构图(SC),结构图是描述软件结构的图形工具。
基本图符如:
2. 面向数据流的设计方法
在需求分析阶段,主要是分析信息在系统中加和流动的情况。面向数据流的设计方法定义了一些不同的映射方法,利用这些映射方法可以把数据流变换成结构图表示的软件结构。
(1)数据流类型
数据流分为变换型和事务型:
●变换型。变换型是指信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。变换型数据处理问题的工作过程可分为三步,即取得数据、变换数据和输出数据。
见下图(变换型数据流结构图):
●事务型。在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成作业要求的功能,这种数据流叫作事务。事务型数据流的特点是接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元(事务处理中心),然后给出结果。
见右图(事务型数据流结构图):
(2)面向数据流设计方法的实施要点与设计过程
面向数据流的结构设计过程和步骤:
第一步,分析、确认数据流图的类型,区分是事务型还是变换型。
第二步,说明数据流的边界。
第三步,把数据流图映射为程序结构。
第四步,根据设计准则对产生的结构进行细化和求精。
3. 设计的准则
设计准则如下:
(1)提高模块独立性
(2)模块规模适中
(3)深度、宽度、扇出和扇入适当
(4)使模块的作用域在该模块的控制域内
(5)应减少模块的接口和界面的复杂性
(6)设计成单入口、单出口的模块
(7)设计功能可预测的模块
三、详细设计
详细设计的任务,是为软件结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。
常见的过程设计工具有:
图形工具:程序流程图(一般流程图),N-S, PAD,HIPO
表格工具:判定表
语言工具:PDL(伪码)
1、程序流程图
程序流程图是一种传统的、应用广泛的软件过程设计表示,通常也称程序框图。
构成程序流程图的最基本图符有:
按照结构化程序设计要求,程序流程图构成的任何程序可用5种控制结构来描述,分别是:
(1)顺序型:几个连续的加工步骤依次排列构成。
(2)选择型:由某个逻辑判断式的取值决定选择两个加工中的一个。
(3)先判定型循环:先判断循环控制条件是否成立,成立则执行循环体语句。
(4)后判定型循环:重复执行某些特定的加工,直到控制条件成立。
(5)多分支选择型:列举多种加工情况,根据控制变量的取值,选择执行其中之一。
2、N-S图(又叫做盒图)
N-S输送有以下特征:
●每个构件具有明确的功能域
●控制转移必须遵守结构化要求
●易于确定局部数据和全局数据的作用域
●易于表达嵌套关系和模块的层次结构
3、问题分析图(PAD图)
PAD图有以下特征:
●结构清晰,结构化程度高
●易于阅读
●最左端的纵线是程序的主干线,每增加一层PAD图向右扩展一条纵线,程序的纵线是程序层次数
●程序执行,从PAD图最左主干线端结点开始、自上而下、自左向右依次执行,程序终止于最左主干线。