软件工程软件设计方法.ppt
《软件工程软件设计方法.ppt》由会员分享,可在线阅读,更多相关《软件工程软件设计方法.ppt(249页珍藏版)》请在三一办公上搜索。
1、1,2,软件设计的目标和任务软件设计基础模块独立性结构化设计方法数据设计和文件设计过程设计,软件设计方法,3,软件设计的目标和任务,根据用信息域表示的软件需求,以及功能和性能需求,进行 数据设计 系统结构设计 过程设计。,4,数据设计侧重于数据结构的定义。系统结构设计定义软件系统各主要成份之间的关系。(两个含义)过程设计则是把结构成份转换成软件的过程性描述。在编码步骤,根据这种过程性描述,生成源程序代码,然后通过测试最终得到完整有效的软件。,5,开发阶段的信息流,程序模块,测试,编码,设计,信息域需求,功能与性能需求,数据设计,过程设计,系统结构设计,组装好的有效的软件,6,软件设计是后续开发
2、步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构,7,软件设计任务,从工程管理的角度来看,软件设计分两步完成。概要设计,将软件需求转化为数据结构和软件的系统结构。详细设计,即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。,8,9,软件设计过程,1.制定规范在进入软件开发阶段之初,首先应为软件开发组制定在设计时应该共同遵守的标准,以便协调组内各成员的工作。包括:,10,阅读和理解软件需求说明书,确认用户要求能否实现,明确实现的条件,从而确定设计的目标,以及它们的优先顺序 根据目标确定最合适的设计方法 规定设计文档的编制标准 规定编码的信息形式,与硬件,操作
3、系统的接口规约,命名规则,11,2.软件系统结构的总体设计,基于功能层次结构建立系统。采用某种设计方法,将系统按功能划分成模块的层次结构 确定每个模块的功能 建立与已确定的软件需求的对应关系 确定模块间的调用关系 确定模块间的接口 评估模块划分的质量,12,3.处理方式设计,确定为实现系统的功能需求所必需的算法,评估算法的性能确定为满足系统的性能需求所必需的算法和模块间的控制方式 周转时间 响应时间 吞吐量 精度确定外部信号的接收发送形式,13,4.数据结构设计,确定软件涉及的文件系统的结构以及数据库的模式、子模式,进行数据完整性和安全性的设计确定输入,输出文件的详细的数据结构结合算法设计,确
4、定算法所必需的逻辑数据结构及其操作确定对逻辑数据结构所必需的那些操作的程序模块(软件包),14,限制和确定各个数据设计决策的影响范围若需要与操作系统或调度程序接口所必须的控制表等数据时,确定其详细的数据结构和使用规则数据的保护性设计 防卫性设计:在软件设计中就插入自动检错,报错和纠错的功能,15,一致性设计:保证软件运行过程中所使用的数据的类型和取值范围不变 在并发处理过程中使用封锁和解除封锁机制保持数据不被破坏冗余性设计:针对同一问题,由两个开发者采用不同的程序设计风格不同的算法设计软件,当两者运行结果之差不在允许范围内时,利用检错系统予以纠正,或使用表决技术决定一个正确结果。,16,5.可
5、靠性设计,可靠性设计也叫做质量设计在运行过程中,为了适应环境的变化和用户新的要求,需经常对软件进行改造和修正。在软件开发的一开始就要确定软件可靠性和其它质量指标,考虑相应措施,以使得软件易于修改和易于维护。,17,6.编写概要设计阶段的文档,概要设计阶段完成时应编写以下文档:概要设计说明书 数据库设计说明书 用户手册 制定初步的测试计划,18,7.概要设计评审,可追溯性:确认该设计是否复盖了所有已确定的软件需求,软件每一成份是否可追溯到某一项需求接口:确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内风险:确认该设计在现有技术条件
6、下和预算范围内是否能按时实现,19,实用性:确认该设计对于需求的解决方案是否实用技术清晰度:确认该设计是否以一种易于翻译成代码的形式表达可维护性:确认该设计是否考虑了方便未来的维护质量:确认该设计是否表现出良好的质量特征,20,各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么限制:评估对该软件的限制是否现实,是否与需求一致其它具体问题:对于文档、可测试性、设计过程.等进行评估,21,在详细设计过程中,需要完成的工作是:确定软件各个组成部分内的算法以及各部分的内部数据组织 选定某种过程的表达形式来描述各种算法。进行详细设计的评审,详细设计,22,软件设计基础,自顶向下,逐步细化
7、软件结构 程序结构 结构图 模块化 抽象化 信息隐蔽,23,自顶向下,逐步细化,将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。,24,软件结构,软件结构包括两部分。程序的模块结构和数据的结构软件的体系结构通过一个划分过程来完成。该划分过程从需求分析确立的目标系统的模型出发,对整个问题进行分割,使其每个部分用一个或几个软件成份加以解决,整个问题就解决了,25,26,程序结构,程序结构表明了程序各个部件(模块)的组织情况,是软件的过程表示。,27,结构图,结构图反映程序中模块之间的层次调用关系和联系:它以特
8、定的符号表示模块、模块间的调用关系和模块间信息的传递,28,模块:模块用矩形框表示,并用模块的名字标记它。,29,模块的调用关系和接口:模块之间用单向箭头联结,箭头从调用模块指向被调用模块。,30,模块间的信息传递:当一个模块调用另一个模块时,调用模块把数据或控制信息传送给被调用模块,以使被调用模块能够运行。而被调用模块在执行过程中又把它产生的数据或控制信息回送给调用模块,31,在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调用另一个模块B。当一个在调用箭头尾部标以一个弧形符号,表示模块A反复调用模块C和模块D。,32,程序的系统结构图,33,模块化,软件系统的模块化是指整个软件被划分
9、成若干单独命名和可编址的部分,称之为模块。这些模块可以被组装起来以满足整个问题的需求。把问题子问题的分解与软件开发中的系统子系统或系统模块对应起来,就能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。,34,模块化的理论根据设函数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),35,模块化:把程序划分成为若干个模块,独立完成若干个功能,再把他们组成一个集体,可
10、以完成指定的功能,满足问题的要求。“各个击破”原则不能无限分割,36,模块化原理的作用:使软件结构清晰;使软件容易测试和调试,从而提高软件的可靠性;提高软件的可修改性例子1:库存管理系统的模块划分事务接收模块更新库存清单订货处理生成报表例子2:人事管理系统人事部 人事部,37,模块的概念,模块(Module)“模块”,又称“组件”。它一般具有如下三个基本属性:功能:描述该模块实现什么功能逻辑:描述模块内部怎么做状态:该模块使用时的环境和条件,38,在描述一个模块时,还必须按模块的外部特性与内部特性分别描述模块的外部特性 模块的模块名、参数表、其中的输入参数和输出参数,以及给程序以至整个系统造成
11、的影响模块的内部特性 完成其功能的程序代码和仅供该模块内部使用的数据,39,在结构化系统设计中。人们主要关心的是模块的外部属性,至于内部属性,将在系统实施工作中完成模块有大有小,它可以是一个程序,也可以是程序中的一个程序段或者一个子程序。,40,理想模块(黑箱模块)理想模块的特点:(1)每个理想模块只解决一个问题。(2)每个理想模块的功能都应该明确,使人容易理解。(3)理想模块之间的联结关系简单,具有独立性。(4)由理想模块构成的系统,容易使人理解,易于编程,易于测试,易于修改和维护。对用户来说,其感兴趣是模块的功能,而不必去理解模块内部的结构和原理。,41,模块的图形及符号(1)模块的图形:
12、用矩形表示。模块的名称写在方框内,由一个动词和一个作为宾语的名词组成。例如:(2)模块间通讯的图形模块间通讯有两种:数据通讯、控制通讯。数据通讯是一个数据流,它表示了一个经过处理的数据从一个模块传向另一个模块。控制通讯,只传送一个标志,该标志只表达了处理工作的某种状态,而不是由被发送模块真正进行过处理的数据。,修改库存,42,(3)模块间判断调用的图形一个模块是否调用某一个从属模块,依赖于调用模块中判断的条件。如果条件成立,则产生调用命令。,43,(4)模块间循环调用的图形指一个模块需要循环调用某一个或若干个从属模块。(5)层次图和HIPO图,44,45,46,模块独立性 模块独立性,是指软件
13、系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其它的模块的接口是简单的 例如,若一个模块只具有单一的功能且与其它模块没有太多的联系,则称此模块具有模块独立性 一般采用两个准则度量模块独立性。即模块间耦合和模块内聚,47,耦合是模块之间的互相连接的紧密程度的度量。内聚是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。模块独立性比较强的模块应是高内聚低耦合的模块。,48,模块间的耦合,49,非直接耦合(Nondirect Coupling)两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。非直接耦合的模块独立性最强。,50,数据耦合(Data
14、Coupling)一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的。这是模块之间影响最小的联结关系,51,特征耦合如果两个模块都与同一个数据结构有关,则称为特征耦合。,模块之间的特征联结,52,住户详情数据结构中包括“本月用水量”、“本月用电量”。上面的“特征耦合”图可改进为下面“数据耦合”图。,模块之间的数据耦合,53,控制耦合(Control Coupling)如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。,54,控制信息可以看作是一个开关量,它传递了一个控制信息或状态的标志。控
15、制信息不同于数据信息,数据信息一般是通过处理过程处理和被处理的数据,而控制信息则是控制处理过程中的某些参数。当要查找的库存编号找不到时,经上级模块反馈一个控制信息,要求上级模块打印“无此库存记录”错误信息。,55,外部耦合(External Coupling)一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。公共耦合(Common Coupling)若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。,56,公共耦合的复杂程度随耦合模块的个数增加而显
16、著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。,57,公用耦合是一种不良的耦合关系,它给模块的维护和修改带来困难。如公共数据要作修改,很难判定有多少模块应用了该公共数据,故在模块设计时,一般不允许有公共联结关系的模块存在。,58,内容耦合(Content Coupling)如果发生下列情形,两个模块之间就发生了内容耦合(1)一个模块直接访问另一个模块的内部数据;(2)一个模块不通过正常入口转到另一模块内部;(3)两个模块有一部分程序代码重迭(只可能出现在汇编语言中);(4)一个模块有多个入口。,59,内容耦合(病态耦合)如果一个模块和另一个模块的内部属
17、性(即运行程序和内部数据)有关,则称为内部耦合。例如:模块A中TRC:模块B中GO TO TRC模块A与模块B存在内容耦合,这是一种最坏的耦合。,60,c,61,设计模块时,应以数据联结为主,辅以特征联结与控制联结,消除公共联结和内容联结。,62,例:分析下图和表,确定模块间的耦合类型,图 一个程序的模块互连图 表 模块接口描述,注:模块p、t、u更新同一个数据库,63,模块内聚模块的聚合是指一个模块内部的各个组成部分的紧凑性,其处理动作的组合强度。,64,功能内聚(Functional Cohesion)一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了
18、完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。,65,顺序内聚如果一个模块内部的各个组成部分执行的几个处理动作有这样的特征:前一个处理动作所产生的输出数据是后一个处理动作的输入数据,称为顺序内聚。顺序聚合维护起来不如功能聚合方便,要修改模块中的一个功能,会影响到同一个模块中的其他功能。,66,通信内聚(Communication Cohesion)如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。,67,68,两个工作:1.按配件编号查询“数据存储”,获得单价。2.按配件编号查询
19、“数据存储”,获得库存量。,这两个处理动作都使用相同的输入数据,称为通讯聚合。,69,过程内聚(Procedural Cohesion)使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。,70,一个模块内部的各个组成部分的处理动作各不相同,彼此也没有联系,但他们都受同一个控制流支配,决定他们的执行次序。,通过循环体,计算两种累积数。,71,时间内聚(Classical Cohesion)时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常
20、要求所有功能必须在同一时间段内执行。例如初始化模块和终止模块。,72,逻辑内聚(Logical Cohesion)这种模块把几种 相关的功能组合 在一起,每次被 调用时,由传送 给模块的判定参 数来确定该模块 应执行哪一种功 能。,73,巧合内聚(Coincidental Cohesion)巧合内聚(偶然内聚)。当模块内各部分之间没有联系,或者即使有联系,这种联 系也很松散,则称这种模 块为巧合内 聚模块,它 是内聚程度 最低的模块。,74,模块聚合性的判断,该模块只能执行一个功能吗?,功能聚合,模块内各组成部分的关系如何?,是,否,次序重要吗?,次序重要吗?,逻辑相似吗?,数据流,控制流,两
21、者都不是,是,是,是,否,否,否,顺序聚合,通讯聚合,过程聚合,暂时聚合,逻辑聚合,巧合聚合,75,七种聚合模块的性能比较,76,例:分析图中所示的层次图,确定每个模块的内聚类型,图 计算多地点日平均温度的程序,77,模块设计的其他原则(1)模块的分解分解是指把一个模块分解成若干个从属于它的下层模块。一般按功能分解,分解到成为一个小的功能单一的模块为止。一般一个模块内包含的语句在3050条左右较好(指高级语言)。(2)模块的扇出和扇入模块的扇出指一个模块拥有的直属下级模块的个数,一般扇出数控制在7以内。模块的扇入是指一个模块的直接上级模块的个数。在设计中,扇入系数大,说明模块分解得好,通用性强
22、,冗余度低。,78,(3)模块的控制范围和判断作用范围模块的控制范围:本身及其所有下级模块。模块的判断作用范围:被判断调用的模块。原则:A.对于任何一个内部存在判断调用的模块,它的判断作用的范围应该是其控制范围的一个子集。B.存在判断调用的模块,所在层次不要与那些属于判断作用范围的模块所在的层次相隔太远。,模块G中有一条判断调用D的语句,违反第1条原则,79,(1)(2)违反第2条原则,80,正确,81,(4)力争降低模块接口的复杂程度模块接口复杂是软件发生错误的一个主要原因。应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。接口复杂或不一致(即看起来传递的数据之间没有联系),是紧联
23、结或低聚合的征兆,应该重新分析这个模块的独立性。(5)设计单入口单出口的模块(6)模块功能应该可以预测模块的功能应该能够预测,但也要防止模块功能过分局限。,82,抽象化,随着软件规模的不断增大,设计的复杂性也不断增大。抽象便成了控制复杂性的基本策略之一。软件工程是一种层次化的技术,抽象也是分层次的。如传统软件工程中:分层数据流图(分析文档)、SC图(设计文档)软件系统进行模块设计时,可有不同的抽象层次。最高层的抽象程度最高,若需要系统某部分的细节,就移向较低层次的抽象。越到较低层次,越可看到更多的细节。,83,在最高的抽象层次上,可以使用问题所处环境的语言(面向问题域的语言)概括地描述问题的解
24、法。然后不断具体化,降低抽象级别。在较低的抽象层次上,则采用过程化的方法。最后在最低的抽象级别上给出实现问题的解,即源代码。,84,在由高级抽象到低级抽象的转换过程中,要进行一连串的过程抽象和数据抽象细化(Refinement)。过程抽象把完成一个特定功能的动作序列抽象为一个过程名和参数表,以后通过指定的过程名和实际参数调用此过程;数据抽象把一个数据对象的定义抽象为一个数据类型名,用此类型名可定义多个具有相同性质的数据对象。细化是与抽象相反而又互补的一个概念。细化的实质就是分解。,85,(1)过程的抽象在软件工程中,从系统定义到实现,每进展一步都可以看做是对软件解决方法的抽象化过程的一次细化。
25、在软件需求分析阶段,用“问题所处环境的为大家所熟悉的术语”来描述软件的解决方法。在从概要设计到详细设计的过程中,抽象化的层次逐次降低。当产生源程序时到达最低抽象层次。,86,例:开发一个CAD软件的三层抽象,抽象层次.用问题所处环境的术语来描述这个软件:该软件包括一个计算机绘图界面,向绘图员显示图形,以及一个数字化仪界面,用以代替绘图板和丁字尺。所有直线、折线、矩形、圆及曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这个CAD软件实现。,87,抽象层次.任务需求的描述。CAD SOFTWARE TASKS user interaction task;2-D drawing crea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 软件设计 方法

链接地址:https://www.31ppt.com/p-4096090.html