软件工程课件第四章_第1页
软件工程课件第四章_第2页
软件工程课件第四章_第3页
软件工程课件第四章_第4页
软件工程课件第四章_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2024/7/3信息科学与技术学院1第四章总体设计软件工程(SoftwareEngineering)2024/7/3信息科学与技术学院2总体设计

需求分析解决“系统必须做什么(what)”的问题,软件设计解决“怎样做(how)”,即从技术角度考虑如何实现用户需求。需求解决“做正确的事”,设计解决“正确地做事”。

软件设计是把软件需求变换成软件表示的过程。最初这种表示只是描述出软件的总框架,然后进一步细化,在此框架中填入细节,把它加工成在程序细节上非常接近于源程序的表示。因此软件设计分两步进行:

1、将系统划分成相互联系的逻辑单元--总体上应该怎样做---总体设计、概要设计、初步设计。

2、逻辑单元实现的设计--具体应该怎样做--详细设计。2024/7/3信息科学与技术学院3总体的设计过程一、系统体系结构设计●设想供选择的方案

●选取合理的方案

●推荐最佳方案

二、软件结构设计●功能分解

●设计软件结构

三、数据库设计

四、制定测试计划

五、书写文档六、审核和复审2024/7/3信息科学与技术学院4软件结构设计1、功能分解进行功能分解的目的,不是从应用角度,而是从实现角度,针对的是少数功能。这些功能不是不明确,而是功能实现起来较复杂,将其分解成比较简单的功能,使每个功能的实现变得明显易懂。该步骤将导致数据流图的进一步细化。2024/7/3信息科学与技术学院5软件结构设计2、

设计软件结构软件结构:以模块为单位的层次结构。即:上层模块调用它的下层模块以实现程序的完整功能;每个下层模块再调用更下层模块完成程序的一个子功能;最下层的模块完成最具体的功能。方法:根据数据流图的层次关系导出软件结构。任务:划分程序模块确定模块间的逻辑关系及接口参数如果数据流图设计得好,数据流图和软件结构具有极强的对应关系。2024/7/3信息科学与技术学院6数据结构设计

1、文件系统的数据结构设计确定输入、输出文件的详细的数据结构。确定算法所需的逻辑数据结构及其操作规则。确定逻辑数据结构所涉及的程序模块2、数据库设计如果目标系统以数据库为基础,则要进行数据库设计。总体设计阶段的数据库设计包括:数据库管理系统的选择模式设计:确定有那些基本表组成和每个表的结构。

子模式设计:具体应用所能看到的数据库内容。

物理模式设计:确定数据的存储结构和存取路径(存储方式,建立索引)。数据库完整性和安全性设计。

2024/7/3信息科学与技术学院7制定测试计划确定对各模块和系统联调的测试方案。在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。2024/7/3信息科学与技术学院8书写文档

1.系统说明:概要设计说明书

2.用户手册

3.测试计划

4.详细的实现计划

5.数据库设计结果

2024/7/3信息科学与技术学院9审核和复审

最后应该对总体设计的结果进行严格的技术审查,通过之后再由使用部门从管理角度进行复审。2024/7/3信息科学与技术学院10软件设计原理主要内容抽象模块化信息隐蔽(和局部化)

模块独立

2024/7/3信息科学与技术学院11抽象

在现实世界中,一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。抽出事物的本质特征而暂不考虑它们的细节。解决复杂问题的唯一有效的方法就是运用抽象的思维方式,首先用一些高级的抽象概念构造和理解它;这些高级概念又可以用一些较低级的概念构造和理解,如此进行下去,直到最低层次的具体元素。2024/7/3信息科学与技术学院12前一页抽象

抽象的具体表现为:自顶向下、逐步求精。软件工程过程的每一步都是对软件解法的抽象层次的一次求精。软件开发的三种抽象形式:

1、过程抽象:对过程的任务采用逐步求精的解法;

2、数据抽象:通过层次结构来描述数据对象。

3、控制抽象:描述程序控制机制而无须规定内部细节。模块化就是一种程序设计的抽象机制。2024/7/3信息科学与技术学院13模块化

模块:一组有序操作的总称,它可以单独的名字存在,单独编译,可以通过名字来访问。一个函数、一个过程就是一个模块。模块基本属性:(1)功能:模块做什么;(2)逻辑:描述模块内部怎么做;(3)状态:模块使用时的环境和条件。模块的外部属性:模块名功能参数(输入参数和输出参数)。模块的内部特性:完成模块功能的代码和局部数据。2024/7/3信息科学与技术学院14模块化

模块化:以模块作为程序设计的基本单位,把程序划分成若干个模块,每个模块完成一个子功能,把这些模块集总起来,并通过模块间的调用关系把它们组成一个完整的整体,完成指定的功能。采用模块化的依据:

容易被理解。

使问题复杂度降低,容易被实现。2024/7/3信息科学与技术学院15采用模块化的依据

容易被理解。

使问题复杂度降低,容易被实现。

设函数C(x)定义问题x的复杂程度,函数E(x)确定解决问题x需要的工作量(时间),对于两个问题p1和p2,如果

C(p1)>C(p2)则:E(p1)>E(p2)规律:C(p1+p2)>C(P1)+C(p2)

必有:E(p1+p2)>E(p1)+E(p2)2024/7/3信息科学与技术学院16模块化与软件成本2024/7/3信息科学与技术学院17模块化结论1、采用模块化,是使软件设计从难到易的基本方法。

2、模块分解应适度。模块规模太小,完成每个模块的工作量很小,但设计和调试模块间的接口工作量随之增加。2024/7/3信息科学与技术学院18信息的隐蔽和局部化信息隐蔽:模块内部的信息(处理过程和数据),应对不需要了解这些信息的模块隐蔽起来,使它们不能访问。信息隐蔽是模块设计的基本原则。意味着在进行模块划分时,应保证模块的独立性,使组成程序的模块之间只需交换完成软件功能所必需的信息。将信息隐蔽作为模块化设计标准,为软件测试和维护对模块的修改带来了极大的方便,使得修改时无意引入的错误不会被扩散到被修改模块以外的其它位置。局部化:指关系密切的软件元素物理地彼此靠近。局部化是实现信息隐蔽的重要方法。如模块内使用的局部数据元素,当模块被调用执行时发挥作用,退出后便失去意义。2024/7/3信息科学与技术学院19模块独立

模块独立(Independence)的概念是模块化、抽象、信息隐蔽和局部化概念的直接结果。开发具有独立功能且与其他模块之间没有过多的相互作用的模块,就可以做到模块独立。第一,有效的模块化(即具有独立的模块)的软件比较容易开发出来。第二,独立的模块比较容易测试和维护。模块的独立程度的度量标准:

内聚:衡量一个模块内部各个元素彼此结合的紧密程度;耦合:衡量不同模块彼此间互相依赖(连接)的紧密程度。2024/7/3信息科学与技术学院20模块独立–

耦合

耦合是对一个软件结构内不同模块之间互联程度的度量。耦合强弱取决于模块之间接口的复杂程度,调用模块的方式,以及通过接口的数据。实际上,耦合是接口数据对模块独立性的影响。如果两个模块中的每一个都能独立地工作而不需要另一个模块地存在,那么它们彼此完全独立,这意味着模块间无任何连接,耦合程度最低。但一个软件系统中的模块之间是彼此协同工作的,不可能所有模块间没有连结。2024/7/3信息科学与技术学院21模块独立–

耦合

数据耦合:如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。

控制耦合:如果传递的信息中有控制信息,则这种耦合称为控制耦合。数据耦合是低耦合。系统必须存在这种耦合,因为只有当某些模块的输出数据作为另一些模块的输入数据时,系统才能完成有价值的功能。

2024/7/3信息科学与技术学院22模块独立–

耦合

公共环境耦合:当两个或多个模块通过一个公共数据环境(全程变量、数据文件等)相互作用时,它们之间的耦合称为公共环境耦合。

内容耦合:一个模块直接引用另一个模块内部的内容。例如:一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模块的内部;两个模块有一部分代码重叠。最高程度的耦合是内容耦合。

原则:尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合。

2024/7/3信息科学与技术学院23前一页模块独立–

内聚

内聚是一个模块内各个元素彼此结合的紧密程度的度量。内聚是信息隐蔽功能的自然扩展,是模块内部功能独立性的表现,理想内聚的模块只做一件事情。按程度分类:低内聚中内聚高内聚。

2024/7/3信息科学与技术学院24模块独立–

内聚

偶然内聚:模块中元素之间没有实质的联系。模块内的语句难以定义其功能,它是把多个模块共同的语句抽出来组成一个模块

逻辑内聚:模块完成的任务逻辑相关(如产生各种类型的全部输出)。不同功能混在一起,合用部分程序代码,局部修改会影响全局,导致修改困难。

时间内聚:模块包含的任务必须在同一时间内执行。2024/7/3信息科学与技术学院25模块独立–

内聚

过程内聚:模块内的处理元素是相关的,并且需要按特定顺序执行。

通信内聚:模块中所有元素都使用同一个输入数据或产生同一个输出数据。

顺序内聚:一个模块中多个处理元素均与同一功能相关,且必须顺序执行(一个处理单元的输出是另一个处理单元的输入)。

功能内聚:模块中所有处理元素属于一个整体,共同完成同一功能。2024/7/3信息科学与技术学院26模块独立–

内聚

低内聚:偶然内聚、逻辑内聚和时间内聚中内聚:过程内聚、通信内聚高内聚:顺序内聚、功能内聚对内聚的参考评价:

功能内聚10分时间内聚3分顺序内聚9分逻辑内聚1分通信内聚7分偶然内聚0分过程内聚5分在软件软件中,尽可能构造高内聚的模块,辨认和避免低内聚的模块,最好不用偶然内聚。2024/7/3信息科学与技术学院27启发式规则前一页主要内容改进软件结构提高模块独立性模块规模应该适中深度、宽度、扇出和扇入应适当模块的作用域应在控制域之内尽量降低模块接口的复杂程度设计单入口出口的模块模块功能应该可以预测2024/7/3信息科学与技术学院28改进软件结构提高模块独立性

模块独立性主要体现在低耦合、高内聚。可以通过分解或合并来提高模块独立性。分解:把几个模块中相同部分(相同的子功能)分解出来建立一个新的模块。合并:把几个模块合并成一个模块,减少对控制信息的传递,以及对全程数据的引用,降低接口的复杂程度,降低块间耦合度。2024/7/3信息科学与技术学院29模块规模应该适中

在保证模块功能独立性的前提下,尽可能使模块中的语句数少。

50~100行。美国空军部:5~500行目的:可理解性、可读性好。为了保证模块独立性,少数模块可以大一些。模块过小,系统开销大于有效操作。对大模块的分解不应降低独立性。面向对象技术,模块的大小无实际意义。2024/7/3信息科学与技术学院30深度、宽度、扇出和扇入应适当

深度:软件层次结构的层数。宽度:软件结构内同一层次上模块总数的最大值。扇入:一个模块被调用的上级模块数量。扇入越大,表示共享该模块的上级模块越多。扇出:一个模块直接控制(调用)的模块个数。扇出影响宽度。扇出过大意味着模块过分复杂,需要控制和协调过多的下级模块。一个好的系统的平均扇出通常是3~4(上限是5~9)(7±2原理—心理学原理)一个好的软件结构通常顶层扇出较大,中层扇出较低,底层模块高扇入。软件结构的形状呈椭圆外形.2024/7/3信息科学与技术学院31模块的作用域应在控制域之内

控制范围:指包含模块本身的所有下属模块。作用域:模块内一个条件判断可能引起的的被执行模块。设计得好的系统,模块的作用域应在模块的控制范围内。例:A的控制范围为:A、B、C、D、E、F

若A的作用域也是A、B、C、D、E、F,则是合理的。若A的判断要影响到G的执行过程,则应调整软件结构。MAGBCDEF2024/7/3信息科学与技术学院32尽量降低模块接口的复杂程度

模块接口设计原则:易理解,传递信息简单且与模块功能一致。例:求一元二次方程的根:

Quad_Root(Tal,x);Tal--系数数组;

x--根数组

Quad_Root(a,b,c,Root1,Root2);

接口复杂或不一致,是紧耦合或低内聚的征兆。尽可能不用全局变量是降低接口复杂性的一个方面。2024/7/3信息科学与技术学院33设计单入口出口的模块前一页

对模块的执行,通过模块调用语句进入模块,模块执行完后应返回到模块调用语句的下一个语句位置。2024/7/3信息科学与技术学院34模块功能应该可以预测

模块作为一个黑箱,只要输入数据相同就产生同样的输出,这个模块的功能就是可预测的。带有内部“存储器”(如某个标志状态)的模块的功能是不可预测的,因为它的输出不仅取决于输入,而且还取决于内部“存储器”的状态。这样的模块难理解、难测试、难维护。全程变量使用不当或数组初始化不当会导致这种情况。以面向对象的类为模块,不能保证输入数据相同就能产生相同的输出。2024/7/3信息科学与技术学院35图形工具--层次图和HIPO图

层次图:描述软件的层次结构(H图)。层次图中每个矩形框代表一个模块,矩形框之间的连线表示模块调用关系。层次图适合用来描绘软件的层次结构。

HIPO图:层次图+IPO图对H图的每个方框,都有一张IPO图与之对应,来描述方框所代表的模块的处理过程。并且对每个IPO图都对应H图中方框相同的标记和编号,便于追踪。2024/7/3信息科学与技术学院36前一页图形工具层次图和HIPO图2024/7/3信息科学与技术学院37前一页图形工具--结构图

Yourdon提出的结构图是进行软件结构设计的另一个有力工具。在结构图中,通常还用带注释的箭头表示模块调用过程中来回传递的信息。如果希望进一步标明传递的信息是数据还是控制信息,则可以利用注释箭头尾部的形状来区分:尾部是空心圆,表示传递的是数据尾部是实心圆,表示传递的是控制信息2024/7/3信息科学与技术学院38前一页图形工具--结构图2024/7/3信息科学与技术学院39前一页图形工具概述

层次图和结构图并不严格表示调用次序,只表明一个模块调用哪些模块,至于模块是否还有其它成分则完全没有表示。通常用层次图作为描述软件结构的文档。结构图作为文档很不适合。但用HIPO图道出结构图的过程可以作为检查设计正确性和评价模块独立性的好方法。2024/7/3信息科学与技术学院40面向数据流的设计方法

基本思想:根据软件需求分析的数据流图,将其转换成软件系统的结构。面向数据流的设计方法定义了一些“映射”,利用这些映射可以把数据流图变换成软件结构。通常所说的结构化设计方法(简称SD方法),也就是基于数据流的设计方法。数据流的类型决定了映射的方法。2024/7/3信息科学与技术学院41面向数据流的设计方法主要内容概念

变换流分析设计

事物流分析设计混合流分析设计

设计优化

2024/7/3信息科学与技术学院42概念—交换流

数据流图呈线性变换特征,而且可以抽象成三部分:I-P-O。信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流就叫作变换流。计算、分析型软件的数据流图通常具有这种形式。2024/7/3信息科学与技术学院43变换流图2024/7/3信息科学与技术学院44概念--事务流

数据流图呈辐射型,根据输入数据的性质选择加工路径。若处理沿输入通道达到一个处理T,处理T根据输入数据的类型在若干动作序列中选择一个来执行。这类特殊的数据流称为事务流。处理T称为处理中心。处理中心的任务:

(1)接收输入数据(输入数据又称为事务);(2)分析每个事务以确定它的类型;(3)根据事务类型选取一条活动通道。2024/7/3信息科学与技术学院45概念--事务流2024/7/3信息科学与技术学院46设计过程2024/7/3信息科学与技术学院47变换流分析设计

把具有变换流特点的数据流图按预先确定的模式映射成软件结构。(1)找出变换的中心;(2)设计软件结构的顶层和第二层;(3)设计中下层模块。

2024/7/3信息科学与技术学院48变换流分析设计—例子

考虑具有“智能”的汽车数字仪表板的设计功能描述:(1)通过模数转换实现传感器与微机的接口(2)在发光二极管面板上显示数据(3)指示每小时英里数(mph)

(4)指示行驶的里程(5)指示每加仑油行驶的英里数(mpg)(6)指示加速或减速(7)超速警告,超过55英里/小时,发出超速警告铃声。2024/7/3信息科学与技术学院49数字仪表板数据流图2024/7/3信息科学与技术学院50变换流分析设计步骤第一步:确定数据流图的类型一个数据流图中可能含有变换流的成分,又含有事务流的成分,应根据数据流图中占优势的属性,来确定数据流的全局特性。第二步:确定输入流和输出流的边界,孤立变换中心确定输出流边界:一般具有显示、打印、产生控制等。确定输入流边界:一般作为有效输入应是完成相应功能有关的数据形式。这样在输入原始数据后,还要做一些简单处理,转换成实际需要的内部形式。上例中,完成功能所需要的输入数据形式是:转速增量、转速(转/分)、燃料消耗速度。实际获得的信号是:车轮旋转的瞬时值,燃料消耗速率瞬时值。2024/7/3信息科学与技术学院51确定输入流和输出流的边界2024/7/3信息科学与技术学院52变换流分析设计步骤第三步:完成“第一级分解”把软件的功能划分成逻辑上相互独立的几个子功能。所谓分解,就是分配控制的过程。第一级分解:即确定最顶层模块控制第二层哪些模块。对于变换流,可以明显地分为输入、中心变换和输出三部分,其数据流图通常被映射成一种特殊的软件结构:

三叉控制结构数据输入控制模块:协调对所有输入数据的接收。中心变换控制模块:协调对数据的各种加工处理。数据输出控制模块:协调对输出数据的产生和输出。准则:尽量使第一级控制的模块数目取最小值。2024/7/3信息科学与技术学院532024/7/3信息科学与技术学院54变换流分析设计步骤第四步:完成“第二级分解”把数据流图中的每个处理映射成软件结构中的一个适当模块--完成流图中的处理与模块的映射关系。方法:

1、从变换中心的边界开始,沿着输入通路向外移动,把输入通路中的每个处理映射成软件结构中输入数据控制模块控制下的低层模块。一般数据流图中的前一个处理总是后一个处理的下层模块。

2、沿着输出通路向外移动,把输出通路中的每个处理映射成软件结构中输出数据控制模块控制下的低层模块。一般数据流图中的后一个处理总是前一个处理的下层模块。

3、把变换中心内的每个处理映射成中心变换控制模块下的低层模块。一般处于同一张流图上的变换在变换框的下层处于同一层次上,按照处理的逻辑顺序从左到右排列。若变换不处于同一线上,而处于同一抽象层上,其模块也应处于同一层次上。2024/7/3信息科学与技术学院55前一页完成第二级的分解2024/7/3信息科学与技术学院56前一页未经精化的结构图2024/7/3信息科学与技术学院57变换流分析设计步骤第五步:对第四步得到的结果进一步精化依据:设计度量:内聚、偶合、信息隐蔽启发式规则通过合并与分解,得到一个易于实现、易于测试和易于维护的软件结构。例:

1、把“旋转信号/秒”转换成“旋转信号/分”,功能太弱,不足以构成一个模块,可将“转换成rpm”与“收集sps”合并。

2、“确定加速/减速”和“计算mph”都使用了相同数据,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论