1、第第4 4章章 软件设计软件设计 n本章主要内容本章主要内容n n软件设计的概念和原则n软件设计的基本过程n总体设计的主要内容n面向数据流的设计方法n详细设计的任务与原则n详细设计的表达工具n软件设计说明书的编制与评审 1第第4 4章章 软件设计软件设计本章结构:本章结构:n4.1 软件设计的基础知识软件设计的基础知识 n4.2 软件设计的基本过程软件设计的基本过程 n4.3 总体设计总体设计 n4.4 详细设计详细设计 n4.5 实例分析实例分析24.1 4.1 软件设计的基础知识软件设计的基础知识 4.1.1 软件设计概述 软件设计是一个将软件需求变换成软件表示的过程。软件设计的基本目标是
2、用比较抽象概括的方式确定目标系统如何完成预定的任务,即确定系统的物理模型,解决软件“怎么做”的问题。从技术的角度来看,软件设计可分为软件结构设计、数据设计、接口设计和过程设计。从工程管理的角度来看,软件设计可分为总体设计和详细设计两个步骤。34.1 4.1 软件设计的基础知识软件设计的基础知识 4.1.2 软件设计的任务和原则 在设计阶段,系统设计人员和程序设计人员应该在反复理解软件需求的基础上,提出多个设计方案,分析每个设计方案能实现的功能并进行相互比较,最后确定一个设计方案,包括该软件的结构、模块的划分、功能的分配以及处理流程。在一般情况下,应完成的文档包括:总体设计说明书、详细设计说明书
3、和测试计划初稿。软件设计中一般应遵循以下原则:模块化、抽象、信息隐蔽与局部化、一致性、完整性和可验证性。44.1 4.1 软件设计的基础知识软件设计的基础知识 1.模块化 (1)模块的含义 (2)模块化的依据 (3)模块化与软件成本 (4)定义模块大小的标准2.抽象3.信息隐蔽和局部化4.一致性、完整性和可验证性 54.2 4.2 软件设计的基本过程软件设计的基本过程 4.2.1 软件设计的基本过程1在总体设计过程中需要完成以下工作:(1)确定最佳方案 (2)功能分解 (3)体系结构设计(4)模块设计 (5)数据结构和数据库设计 (6)用户界面设计 (7)编写总体设计文档(8)评审 2在详细设
4、计过程中需要完成以下工作:(1)设计软件各组成部分的内部算法和数据组织;(2)选择某种表达方式来描述各种算法;(3)进行详细设计评审。64.2 4.2 软件设计的基本过程软件设计的基本过程 4.2.2 数据设计和文件设计进行数据设计时一般应遵循以下原则:(1)用于功能和行为的系统分析原则也可以应用于数据设计;(2)应该标识所有数据结构以及在每个数据结构上所施加的操作;(3)应建立数据词典,并应用于数据设计和程序设计;(4)采用自顶向下、逐步求精的方法完成数据设计,低层的设计决策应该推迟到设计过程的后期;(5)应该开发一个由有用的数据结构和应用于其上的操作组成的库;(6)数据结构的表示应做到:只
5、有那些需要直接使用数据结构、内部数据的模块才能看到该数据的表示;(7)软件设计和程序设计语言应该支持抽象数据类型的规格说明和实现。74.3 4.3 总总体体设计设计 4.3.1 数据设计和文件设计常见的体系结构有两大类:层次结构和客户机/服务器结构。1.层次结构图层次结构是在系统功能分解的基础上提出的,即将一个大的任务分解成若干小的任务分层次来完成。常见的层次结构有树状层次结构和相邻关系的层次结构。(1)树状层次结构(2)相邻关系的层次结构 2.客户机/服务器结构 3.浏览器/服务器结构84.3 4.3 总总体体设计设计 4.3.2 模块设计评价模块独立性的两个度量准则是耦合和内聚(或称聚合)
6、,耦合是模块之间相互依赖的紧密程度的度量,内聚是一个模块内部各个元素之间彼此结合的紧密程度的度量。一个模块内部各个元素之间的联系越紧密,则模块的内聚度就越高(强),相对地,它与其他模块之间的耦合就越低(弱),模块的独立性就越强。一个优秀的软件设计,应尽量做到高内聚、低耦合,从而提高模块的独立性。1.耦合(coupling)(1)非直接耦合(2)数据耦合(3)标记耦合(4)控制耦合(5)外部耦合(6)公共耦合(7)内容耦合 94.3 4.3 总总体体设计设计 2.内聚(cohesion)(1)偶然内聚(2)逻辑内聚(3)时间内聚 (4)过程内聚(5)通信内聚 (6)顺序内聚(7)功能内聚 104
7、.3 4.3 总总体体设计设计 3.启发式设计规则(1)消除重复功能,改进软件结构,提高模块独立性降低耦合,提高内聚。(2)模块规模应该适中,一般不超过60行语句。(3)深度、宽度、扇出和扇入都应适当。(4)模块的作用范围应该在控制范围之内。(5)力争降低模块接口的复杂程度。(6)设计单入口、单出口的模块。(7)模块功能应该可以预测。114.3 4.3 总总体体设计设计 4.3.3 数据结构和数据库设计 1.数据结构设计 2.数据库设计 数据库的数据模型设计,主要包括以下几方面的内容:(1)概念数据模型设计(2)逻辑数据模型设计(3)物理数据模型设计124.3 4.3 总总体体设计设计 4.3
8、.4 界面设计人机界面(Human Computer Interface,简称HCI)通常也称为用户界面。人机界面有如下几种定义:人机界面是由人、硬件、软件结合而成的系统元素,完成需要人机配合才能实现的功能。人机界面是人与计算机之间使用的某种对话语言,以一定的交互方式、用某种方式完成设定任务需要的信息交互过程。人机界面是人与计算机之间传递交换信息的媒介,是用户使用计算机的综合的操作环境。134.3 4.3 总总体体设计设计 1数据输入界面设计数据输入界面设计(1)数据输入的规则)数据输入的规则数据输入的目标是:尽量简化用户的工作、减少输入的出错率;减轻用户的记忆负担、尽可能减少输入量并实现自动
9、输入;对共同的输入设置默认值;使用代码或缩写;自动填入已输入过的内容;列表式输入;数据分组输入。数据输入屏幕的设计应当尽量与输入格式相匹配。数据内容应当根据其使用频率、重要性或输入次序进行组织。数据输入对话设计的一般规则是:明确的输入。明确的动作。明确的取消。确认删除。提供反馈。允许编辑。提供复原。自动格式化。提示输入的范围。144.3 4.3 总总体体设计设计 (2)输入表格设计)输入表格设计数据表格设计是对较复杂的数据录入时使用最广泛的一种对话类型。这种方法是在屏幕上显示一张表格,类似于用户熟悉的填表格式,以供用户输入数据。数据表格设计时要注意以下问题:数据验证屏幕设计报信数据输入对话控制
10、154.3 4.3 总总体体设计设计 2数据显示界面设计数据显示界面设计数据显示界面包括屏幕查询、文件浏览、图形显示和报告等内容。(1)数据显示的规则)数据显示的规则只显示必要的数据,与用户需求无直接关系的数据一律省略;在一起使用的数据应一起显示;显示出的数据应与用户执行的任务有关;每一屏数据的数量不应超过整个屏幕面积的30%。利用这些原则,并根据用户要求,将数据分组,然后将每组数据按一定的结构形式来安排,以方便用户的使用。(2)屏幕布局规则)屏幕布局规则尽量少用代码和缩写,以便于理解;如有多个显示画面,应建立统一格式;提供明了的标题、栏题及其他提示信息;遵循用户习惯,尽量使用用户习惯的术语;
11、采用颜色、字符大小、下划线、不同字体等方式强化重要数据。164.3 4.3 总总体体设计设计 4.3.5 面向数据流的设计方法面向数据流的设计方法 1结构图结构图结构图(Structure Chart,SC图)是结构化设计方法的主要描述工具,它用于表达软件系统内各组成模块及其相互调用关系。SC图的符号如下图所示。174.3 4.3 总总体体设计设计 SC图中模块的调用、判断调用和循环调用关系如下图所示。184.3 4.3 总总体体设计设计 2数据流图的类型及结构化设计过程数据流图的类型及结构化设计过程结构化设计方法把数据流图映射成软件结构,信息流的类型决定了映射的方法,信息流有变换流和事务流两
12、种类型,因此组成的数据流图也分为变换型数据流图和事务型数据流图两种类型。(1)变换流(transform stream)194.3 4.3 总总体体设计设计(2)事务流(transaction stream)204.3 4.3 总体设计总体设计 (3)设计过程(design process)面向数据流的结构化方法的设计过程如下图所示。214.3 4.3 总总体体设计设计 3.变换分析变换分析变换分析是一系列设计步骤的总称,通过执行这些步骤,将具有变换流特点的数据流图按预先确定的模式映射成软件结构。采用变换分析方法开发出的软件结构图,其一般方式为:“输入处理输出”。4.事务分析事务分析事务分析的
13、设计步骤和变换分析的设计步骤基本类似,主要差别在于数据流图到软件结构的映射方法不同。在事务分析的设计中,由数据流图映射到软件结构时,从事务中心边界开始,把接收通路映射成一个模块,在发送通路设立一个控制模块,用以控制由不同发送通路映射成的分支模块。5.综合设计综合设计 在实际的系统设计中,首先从总体上确定数据流图的类型,采用相应的设计方法进行设计,确定顶层模块,然后采用自顶向下的方法依次完成下层模块的设计。6.设计优化设计优化设计优化应该力求做到在有效的模块化的前提下尽量使用最少的模块,在满足信息要求的前提下尽量使用最简单的数据结构。224.4 4.4 详细设计详细设计 4.4.1 详细设计的基
14、本任务详细设计的基本任务1算法设计采用某种图形、表格、语言等过程描述工具将每个模块处理过程的详细算法描述出来。2数据结构设计对于需求分析、总体设计阶段确定的概念性的数据类型进行确切的定义。3物理设计对数据库进行物理设计,即确定数据库的物理结构。物理结构主要是指数据库的存储记录格式、存储记录安排和存储方法等。4其他设计完整性控制和输入输出设计人机对话设计代码设计5编写详细设计文档6进行详细设计评审234.4 4.4 详细设计详细设计 4.4.2 详细设计的原则详细设计的原则 进行详细设计时应遵循以下原则:(1)采用自顶向下、逐步求精的程序设计方法。(2)使用三种基本控制结构完成程序设计。(3)设
15、计人员组织结构采用“外科医生助手”模式。244.4 4.4 详细设计详细设计 4.4.3 详细设计的表达详细设计的表达进行详细设计时常用三种工具:图形、表格和语言。1.程序流程图程序流程图的三种基本控制结构如下图。254.4 4.4 详细设计详细设计 2.N-S图N-S图又叫盒图,是Nassi和Shneiderman提出的一种符合结构化程序设计原则的图形描述工具。N-S图的三种基本控制结构如下图所示。264.3 4.3 详细设计详细设计 3.PAD图PAD(Problem Analysis Diagram)是问题分析图的缩写,是由日本日立公司提出,由程序流程图演化而来的。PAD图的三种基本控制
16、结构如下图所示。274.4 4.4 详细设计详细设计 4.PDLPDL(Program Design Language)是一种用于描述功能模块的算法设计和加工细节的语言,称为程序设计语言或过程设计语言。它在伪码的基础上,增加了控制结构和数据结构的定义,以完成模块、数据和输入输出的描述。一般来说,PDL是一种“类语言”,是由自然语言的词汇和某一种高级语言的语法结合而成。外部语法使用严格的关键字,用于定义控制结构和数据结构,内部语法灵活自由,可以夹杂自然语言。284.5 4.5 实例分析实例分析“高校图书管理系统”软件总体设计说明书和软件详细设计说明书的编写示例。高校图书管理系统的总体结构图如下图所示。29