《软件工程第四章软件设计.ppt》由会员分享,可在线阅读,更多相关《软件工程第四章软件设计.ppt(85页珍藏版)》请在优知文库上搜索。
1、 第第4讲讲 软件设计软件设计第第4讲讲 软件设计软件设计4.1 4.1 软件设计的任务、过程和原则软件设计的任务、过程和原则4.2 4.2 软件设计的基本概念和原理软件设计的基本概念和原理4.3 4.3 面向数据流的结构化设计方法面向数据流的结构化设计方法4.4 4.4 数据设计数据设计4.5 4.5 用户界面设计用户界面设计4.6 4.6 软件过程设计软件过程设计4.7 4.7 软件设计文档的内容及其复审的方法软件设计文档的内容及其复审的方法 4.1 4.1 软件设计的任务、过程和原则软件设计的任务、过程和原则比如,如果信息安全是对用户的关键需求,那么体系结构设计时就比如,如果信息安全是对
2、用户的关键需求,那么体系结构设计时就应该采用分层结构,将重要资源放在内层。应该采用分层结构,将重要资源放在内层。如果可用性是一个关键需求,则需要考虑冗余的体系结构设计。如果可用性是一个关键需求,则需要考虑冗余的体系结构设计。软件设计的任务软件设计的任务将软件需求规格说明书将软件需求规格说明书转化为实际软件系转化为实际软件系统的一个模型或软件表示。统的一个模型或软件表示。形成必要的设计文档,包括:软件概要设形成必要的设计文档,包括:软件概要设计说明书,软件详细设计说明书,数据库计说明书,软件详细设计说明书,数据库设计说明书设计说明书软件设计的主要内容软件设计的主要内容 数据设计数据设计将实体将实
3、体关系图中描述的对象和关系,以及数据词关系图中描述的对象和关系,以及数据词典中描述的详细数据内容转化为数据结构的定义。典中描述的详细数据内容转化为数据结构的定义。 体系结构设计体系结构设计定义软件系统各主要模块的功能及其之间的关系。定义软件系统各主要模块的功能及其之间的关系。 接口设计接口设计根据数据流图定义软件内部各成份之间、软件与其根据数据流图定义软件内部各成份之间、软件与其它协同系统之间及软件与用户之间的交互机制。它协同系统之间及软件与用户之间的交互机制。 过程设计过程设计把结构成分转换成软件的过程性描述。把结构成分转换成软件的过程性描述。软件设计与软件需求之间的关系软件设计与软件需求之
4、间的关系 数据词典 数 据 流 图 实实 体 关 系 图 状态转换图 加 工 控 制 规 规 格 格 说 说 明 明 数 据 对 象 描 述 过程设计 接口设计 体系结构设计 数据设计 软件设计可细分为两个阶段软件设计可细分为两个阶段 概要设计:确定系统的概要设计:确定系统的主要模块主要模块构成以及这些模构成以及这些模块相互间的块相互间的关系关系 详细设计:对此框架中每一部件进行过程化描述,详细设计:对此框架中每一部件进行过程化描述,把它刻画为在细节上非常把它刻画为在细节上非常接近于源程序的软件表示。接近于源程序的软件表示。例:机器人控制系统例:机器人控制系统4.2 4.2 软件设计的基本概念
5、和原理软件设计的基本概念和原理 1 1)模块化)模块化模块化就是将大型软件按照规定的原则划模块化就是将大型软件按照规定的原则划分解分解成一个个成一个个较小的、相对独立的但又相互关联的模块的设计方法。较小的、相对独立的但又相互关联的模块的设计方法。nPASCAL中的BeginEnd对nC、C+和Java语言中的 . 对n过程、函数、子程序和宏等n面向对象方法中的对象是模块,对象内的方法也是模块模块化依据模块化依据 C(P1+P2) C(P1)+C(P2) C(P1+P2) C(P1)+C(P2) E(P1+P2) E(P1)+E(P2) E(P1+P2) E(P1)+E(P2)1 1)模块化)模
6、块化模块的分解不能太多也不能太少。模块的分解不能太多也不能太少。2 2)抽象)抽象 解决问题时只考虑与问题有关的方面,不考虑与解决问题时只考虑与问题有关的方面,不考虑与问题无关的方面。即抽出事物的本质特性而不考问题无关的方面。即抽出事物的本质特性而不考虑细节。虑细节。3 3)信息隐藏)信息隐藏 模块内部的数据与过程模块内部的数据与过程( (操作操作) ),应该对不需要了解这,应该对不需要了解这些数据和过程(操作)的模块隐藏起来。些数据和过程(操作)的模块隐藏起来。信息隐藏的目的信息隐藏的目的 提高模块的独立性,减少把一个模块的错误扩散到其提高模块的独立性,减少把一个模块的错误扩散到其他模块中去
7、的机会。他模块中去的机会。信息隐藏的例子信息隐藏的例子全局变量:任何函数都可以访问。全局变量:任何函数都可以访问。堆栈:堆栈:通过函数通过函数PushPush()、()、PopPop()、()、Clear() Clear() 操作栈操作栈其他函数并需要、也不知道栈的具体情况。其他函数并需要、也不知道栈的具体情况。4 4)软件复用)软件复用 软件复用是指在两次或多次不同的软件开发过程软件复用是指在两次或多次不同的软件开发过程中重复使用相同或相似软件元素的过程。中重复使用相同或相似软件元素的过程。构件构件(component)(component)可以复用的软件成分,可被可以复用的软件成分,可被用
8、来构造其他软件。它可以是:用来构造其他软件。它可以是: 被封装的对象类被封装的对象类 功能模块功能模块 软件架构(或体系结构软件架构(或体系结构ArchitectureArchitecture) 设计模式等设计模式等5 5)模块独立性)模块独立性模块独立性的度量:内聚度和耦合度模块独立性的度量:内聚度和耦合度内聚:指模块内部各个成分之间的联系。也称:块内聚:指模块内部各个成分之间的联系。也称:块内联系、模块强度。内联系、模块强度。耦合:指一个模块与其它模块之间的联系。也称块耦合:指一个模块与其它模块之间的联系。也称块间联系。间联系。模块独立性的度量准则:模块独立性的度量准则:块内联系程度越强、
9、块间联系程度越弱,则模块的块内联系程度越强、块间联系程度越弱,则模块的独立性越高。独立性越高。模块独立性强的模块的优点模块独立性强的模块的优点降低复杂性,便于并行开发和实现降低复杂性,便于并行开发和实现容易测试和维护容易测试和维护(1 1)内聚的分类)内聚的分类 从功能的角度来看模块内部的聚合程度,可以从功能的角度来看模块内部的聚合程度,可以按照由弱到强的顺序,把内聚分为按照由弱到强的顺序,把内聚分为7 7类。类。 1 12 23 34 45 56 67 7弱弱强强低内聚低内聚中内聚中内聚高内聚高内聚偶然偶然 逻辑逻辑 时间时间 过程过程 通信通信 顺序顺序 功能功能偶然性内聚模块:即无任何联
10、系。偶然性内聚模块:即无任何联系。块内各组成成分在功能上是块内各组成成分在功能上是互不相关互不相关的。的。例如,例如,“记录人员信息记录人员信息”和和“产生公司财产生公司财务报表务报表”构成了一个模块。构成了一个模块。逻辑性内聚模块:即有某种类型联系。逻辑性内聚模块:即有某种类型联系。通常由若干通常由若干逻辑功能相似逻辑功能相似的成分组成的成分组成, ,每每次调用由传给模块的参数确定执行哪种功次调用由传给模块的参数确定执行哪种功能。能。 时间性内聚模块:即从时间方面看有时间性内聚模块:即从时间方面看有联系。联系。一个模块包含的任务必须在同一段时间内一个模块包含的任务必须在同一段时间内执行执行。
11、例如,例如,意外故障处理模块,必须在中断处意外故障处理模块,必须在中断处理的同时完成关闭文件、报警和保留现场理的同时完成关闭文件、报警和保留现场等任务等任务。过程化内聚模块:即一组任务有次序的联系。过程化内聚模块:即一组任务有次序的联系。一个模块中包含的一组任务必须按照某一特定的一个模块中包含的一组任务必须按照某一特定的次次序执行序执行。例如,例如, “读入炉温读入炉温”- -“记录炉温记录炉温”- -“比较温度比较温度”- -“计算阀门开度计算阀门开度”- -“驱动阀门驱动阀门”等。等。 通信性内聚模块:即数据结构的区域联系。通信性内聚模块:即数据结构的区域联系。模块内部的各个组成部分都引用
12、模块内部的各个组成部分都引用一组相同的数据一组相同的数据。如下图的例子:如下图的例子:删除删除修改修改文件文件开领开领书单书单登记登记售书售书售书登记表售书登记表领书单领书单发票发票 顺序性内聚模块:即有输入顺序性内聚模块:即有输入/ /输出的紧密联系。输出的紧密联系。模块中各组成部分密切相关且必须模块中各组成部分密切相关且必须顺序执行,前一处顺序执行,前一处理部分的输出就是下一处理部分的输入理部分的输出就是下一处理部分的输入。例如,排序程序:例如,排序程序:“读如一组整型数读如一组整型数”- -“对这组数从对这组数从小到大排序小到大排序”- -“将排序后的这组数输出将排序后的这组数输出”。
13、功能性内聚模块:内聚性最强。即有功能的紧密功能性内聚模块:内聚性最强。即有功能的紧密联系。联系。 一个模块中一个模块中各个部分各个部分都是为完成一项具体功能而协同都是为完成一项具体功能而协同工作,工作,紧密联系,不可分割紧密联系,不可分割的的. .例如,求一元二次方程例如,求一元二次方程axax2 2+bx+c=0+bx+c=0的实根。的实根。Root( a,b,c,XRoot( a,b,c,X1 1,X,X2 2) ):计算计算b b2 2-4ac-4ac;sqrt(bsqrt(b2 2-4ac)-4ac); X X1 1=(-b+sqrt(b=(-b+sqrt(b2 2-4ac)/2a-4
14、ac)/2a;X X2 2=(-b-sqrt(b=(-b-sqrt(b2 2-4ac)/2a-4ac)/2a设计时对模块内聚性的选择设计时对模块内聚性的选择“一个模块,一个功能一个模块,一个功能”是模块化设计的一条准是模块化设计的一条准则,也是设计人员争取的目标。则,也是设计人员争取的目标。功能性内聚模块是最理想的。功能性内聚模块是最理想的。中、高内聚的模块也可使用。中、高内聚的模块也可使用。低内聚模块的可维护性和可复用性差,设计时应低内聚模块的可维护性和可复用性差,设计时应尽量避免使用。尽量避免使用。 (2 2)耦合的分类)耦合的分类模块间的引用方式,数据量,数据格式,数据模块间的引用方式,
15、数据量,数据格式,数据类型都对耦合的强度产生影响类型都对耦合的强度产生影响按照影响程度耦合可分为按照影响程度耦合可分为7 7类,如下图所示类,如下图所示。1 12 23 34 45 56 67 7弱弱中中较强较强强强非直接非直接 数据数据 特征特征 控制控制 外部外部 公共公共 内容内容 数据耦合数据耦合模块间通过参数表交换数据,且交模块间通过参数表交换数据,且交换的都是换的都是数据项参数数据项参数(而不是控制(而不是控制参数、公共数据结构或外部变量)。参数、公共数据结构或外部变量)。数据耦合是松散的耦合,模块之间数据耦合是松散的耦合,模块之间的独立性比较强。的独立性比较强。非直接耦合非直接耦
16、合两个模块之间没有直接关系两个模块之间没有直接关系,相互之间没有信息传递,相互之间没有信息传递,它们之间的联系完全是通过主模块的控制和调用来实现它们之间的联系完全是通过主模块的控制和调用来实现的。的。这种耦合的耦合度最低,模块独立性最强。这种耦合的耦合度最低,模块独立性最强。特征耦合特征耦合( (也称标记耦合也称标记耦合) ):如果如果2 2个以上的模块都需要共享某一个以上的模块都需要共享某一数据结构数据结构的子的子结构时,不能用全局变量的共享方式,而是采用记结构时,不能用全局变量的共享方式,而是采用记录传递方式。录传递方式。例如,例如,A A调用调用B B,向,向B B传递某个人的记录(而传递某个人的记录(而B B可能只可能只需要记录中的几个数据项)。需要记录中的几个数据项)。控制耦合控制耦合:模块间传递的是用作模块间传递的是用作控制信号控制信号的开关值或标志。的开关值或标志。这种耦合的实质是在单一接口上选择多功能模块中的这种耦合的实质是在单一接口上选择多功能模块中的某项功能。因此,对被控制模块的任何修改,都会影某项功能。因此,对被控制模块的任何修改,都会影响控制模块。这也意味着控制