《软件系统开发技术》课件第4章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《软件系统开发技术》课件第4章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件系统开发技术 软件 系统 开发 技术 课件
- 资源描述:
-
1、第四章设计方法4.1 模块4.2 概要设计和基本概念4.3 结构化设计(SD方法)概要4.4 块间联系和块内联系4.5 设计技巧4.6 从数据流图导出初始结构图4.7 SD方法小结4.8 概要设计的其他工作4.9 详细设计的基本概念4.10 结构化程序设计(SP)方法4.11 详细设计的描述方式4.12 Jackson方法习题四第四章设计方法分析阶段的工作结果是需求说明书,它明确地描述了用户要求软件系统“做什么”。既然“问题”明确了,我们就可以着手寻求“解答”,即建立一个符合用户要求的软件系统。如果问题较简单,要求一旦确定了,立刻就可以开始编程。但对大型系统来说,为了保证产品的质量,并使开发工
2、作能顺利进行,我们必须先为编程制订一个周密的计划,这项工作就称为设计(Design),设计实际上是为需求说明书到程序间的过渡架起一座桥梁。4.1 模块模块第四章设计方法 设计要决定软件系统的结构,包括数据结构和程序结构,本章只讨论程序结构,第八章将介绍一些为数据库系统组织数据结构的方法。下面先分析大型程序结构上的特征。工程上许多大系统都是由一些较小的单元组成的,如建筑工程中的构件、机器中的各种零部件等。这样做的优点是便于加工制造、便于维修,由于一些部件可以公用,成本也较节省。第四章设计方法同样,一个几万行的程序系统也不应是铁板一块的,它应由许多较小的单元组成(图41),这种单元可称为模块。模块
3、(Module)一词目前尚无统一的定义,通常是指用一个名字可以调用的一段程序语句,在本书中我们可以暂将它理解成类似“子程序”的概念,例如PASCAL中的函数和过程,FORTRAN中的函数和子程序,COBO中的节、段等,以及汇编语言中的子程序都可看作是模块,在这些语言中都有相应的过程调用、函数调用等机制(如CALL语句)实现对模块的调用。第四章设计方法 下面这段用PASCAL语言写的过程就是一个模块。PROCEDURE lowterm(VAR num,den:integer);VAR numcopy,dencopy,remainder:integer;BEGIN numcopy:=num;den
4、copy:den;WHILE dencopy0 DO BEGIN remainder:=numcOpy MOD dencOpy;numcopy:=dencopy;l dencopy:=remainder END;while)第四章设计方法IF numcopy,THEN BEGIN num:=num DIV numcopy;den:一den DIV numcopy END END;lowterm)第四章设计方法 一个 模块具有输入和输出、功能、内部数据、程序代码等四个特性,输入和输出分别是模块需要的和产生的信息,功能是指模块所做的工作,输入输出和功能构成了一个模块的外貌,即模块的外部特性。模块用
5、程序代码完成它的功能,内部数据是仅供该模块本身引用的数据,内部数据和程序代码是模块的内部特性。对模块的外部环境(例如需要调用这个模块的另一个模块)来说,只需了解它的外部特性就足够了,其内部特性应该是不必了解的。第四章设计方法上面这段PASCAL过程,lOWterm是其模块名。模块名一般应能反映该模块的功能,参数num和den是它的输入和输出,变量numcopy、dencopy、remainder是仅供该模块内部使用的数据,从第一个BEG。lN至末一个END之间就是该模块的代码。同第三章中的思想方法一样,“由外向里”是较合理的一种思考过程,所以我们通常是先确定模块的外部特性,再确定其内部特性。因
6、而软件的设计阶段要分成概要设计和详细设计两步进行。概要设计的任务是决定系统中各个模块的外部特性,即其输入输出和功能;详细设计的任务是决定每个模块的内部特性,即其内部的算法过程及使用的数据。第四章设计方法 概要设计(Preliminary Design)又称总体设计(Architectural。Design),它的基本任务是:将系统划分成模块 决定每个模块的功能 决定模块的调用关系 决定模块的界面,即模块间传递的数据 所以概要设计的主要工作就是完成模块分解,确定系统的模块层次结构(图4.1)。这项工作技术上比较复杂,也需要人的创造能力。4.2 概要设计的基本概念概要设计的基本概念第四章设计方法图
7、4.1第四章设计方法 对同一用户需求,可以提出多个设计方案,一个系统的质量在很大程度取决于设计方案的质量,所以在设计阶段只考虑一个设计方案是不够的,我们应该尽量考虑多种可能的方案,并对各个方案的质量进行全面的评价,然后从中选出一个较好的方案来。所谓“较好”是指在一定的限制条件下(如成本、时间、可使用资源等。)能使所期望的目标(可维护性、可靠性、可理解性、效率等)较大限度地得到满足。第四章设计方法 概要设计需交付的文档中,除了对数据结构的描述部分之外,主要就是模块说明部分,它包括模块结构图及每个模块的功能说明。模块结构图(图4.1)描述了系统的模块组成以及模块间的调用关系,每个模块的功能说明则需
8、描述模块的输入输出及其功能(即“做什么,不是“怎么做)。模块的功能说明同样可按词典方式组织起来,每个模块在词典中一个条目,条目中列出模块名,输入、输出、功能,以及模块的限制和一些注释等。第四章设计方法上述文档将作为详细设计和编程的基础,也是测试的依据。概要设计是开发过程中关键的一步,因为软件系统的质量及一些整体特性基本上是在蓥一步决定的。概要设计应该由资历较高、经验较丰富的软件人员担任。下面称他们为设十员。概要设计技术上有相当难度,它需要有一定的方法来指导,从而使设计人员可以较容易地获得好的设计方案。70 年代以来,出现了多种设计方法,其中代表性的有:结构化设计、Parnas方法和Jackso
9、n方法等,此外还有warnier方法、IBM公司的HlPO等。第四章设计方法这些方法都采用了模块化、由顶向下逐步加细等基本思想,它们的差别在于构成模块的原则,结构化设计以数据流图为基础构成模块结构,Parnas方法以信息隐蔽为原则建立模块结构,而Jackson方法则以数据结构为基础建立模块结构。这些方法可以结合起来使用。本章4.34.7介绍结构化设计4.12简介Jackson方法。第四章设计方法在众多的设计疗法中,结构化设计(Structured Design,简称SD方法)是最受人注意、使丑也最广的一个,它由美国IBM公司的w.Stevens、G.Myers和L.Constantine等人提
10、出。这卜方法用于软件系统的总体设计,它可以同分析阶段的sA方法衔接起来使用。介绍SD方法的经典著作是参考文献,由于这本书的作者是Yourdon和Constantine,所以SD方法又常称作YourdonConstantine方法。4.3 结构化设计结构化设计(SD方法方法)概要概要第四章设计方法 SD方法的目标是建立结构良好的程序系统,它的创导者反复研究了模块分解对程序贡量的影响,并在此基础上提出了评价设计质量的两个标准块间联系和块内联系,还舍出了从描述用户要求的数据流图导出模块结构的规则。第四章设计方法 4.3.1 相对独立、单一功能的模块结构相对独立、单一功能的模块结构 SD方法的基本思想
11、是将系统设计成由相对独立、单一功能的模块组成的结构。用SD方法设计的程序系统,由于模块之间是相对独立的,所以每个模块可以独立地被理解、编程、测试、排错和修改,这就使复杂的研制工作得以简化,此外,模块的相对独立性也能有效地防止错误在模块之间扩散蔓延,因而提高了系统的可靠性。所以我们可以说SD方法的长处来自于模块之间的相对独立性,它提高了系统的质量(可理解性、可维护性、可靠性等)也减少了研制所需的人工。第四章设计方法4.3.2 块间联系和块内联系块间联系和块内联系 如何衡量模块之间的相对独立性呢?sD方法提出了块间联系和块内联系这两个标准(如图4.2)。块间联系(coupling,又称耦合度)是指
12、模块之间的联系,它是对模块独立性的直接衡量,块间联系越小就意味着模块的独立性越高,所以这是一个最基本的标准。块内联系(Coh-eSion,又称聚合度)是指一个模块内部各成分(语句或语句段)之间的联隰,块内联系大了,则模块的相对独立性势必会提高。第四章设计方法图4.2第四章设计方法SD方法的目标是使块间联系尽量小,块内联系尽量大。事实上,块间联系和块内联系是同一件事的两个方面,程序中各组成成分间是有联系的,如果将密切相关的成分分散在各个模块中,就会造成很高的块间联系,反之,如果密切相关的一些成分组织在同一模块中,块内联系高了,则块间联系势必也就少了。块间联系和块内联系是sD方法的两个最重要的概念
13、,本章4.4将进一步详细地讨论。第四章设计方法4.3.3 描述方式描述方式 SD方法使用的描述方式是结构图(structure chart,图4.3),它描述了程序的模块结构,并反映了块间联系和块内联系等特性。结构图中的主要成分有:模块它用方框表示,方框中写有模块的名字,一个模块的名字应适当地反映这个模块的功能,这就在某种程度上反映了块内联系。第四章设计方法 调用从一个模块指向另一TN模块的箭头表示前一模块中含有对后一模块的调用。数据调用箭头边上的小箭头表示调用时从一个模块传送给另一模块的数据,小箭头也指出了传送的方向。第四章设计方法 图4.4(a)的结构图说明模块A含有一个或多个对模块B的调
14、用。A调用B时,A将数据x、Y传送给B,B返回到A时,将数据z传送给A。如果B将对Y作修改,然后再将Y回送给A,则Y应出现在调用箭头的两边(图4.4(b)。我们称图4.4中的A为B的调用模块或调用者,称B为A的被调模块或下层模块。有时,调用模块和被调模块对传送的数据使用不同的名字(例如形式参数与实在参数的名字往往不相同),为避免混淆,结构图中模块间传送的数据按调用模块使用的名字(即实在参数名)命名。第四章设计方法 设计结束后,作为最终的文档资料,结构图可采用图4.5的形式。图中对每个调用编上号码,并在图的边上用一个表格列出每个调用的输入和输出参数。第四章设计方法图4.4第四章设计方法图4.5第
15、四章设计方法设计员应该为结构图中的每一个成分(模块和数据)适当地命名,使人能直观地理解其含义。由于目前多数人对英语和汉语拼音都不熟悉,要做到这点看来还有困难,如果能在一个课题组中约定一些命名规则,将会是有帮助的。为使读者容易理解,本书有时在表示模块的方框内用中文说明该模块的功能。第四章设计方法 除上述基本符号外,结构图中可以再加上一些辅助性的符号,如图4.6表示模块A有条件地调用模块B,并有条件地调用C或D,图中的菱形符号表示一个条件。图4.7表示模块A循环地调用B和C,这里弧形箭头表示循环。图4.8(a)中带有双竖线的方框表示现成的模块(如程序库中现有的模块),它们不必再另行编写,这种模块总
16、出现在结构图的底层。设计员可根据具体情况决定是否有必要画出这些辅助性的符号。第四章设计方法 结构图并不一定是树形的,许多程序的结构呈“清真寺”状(图4.8(a),即顶是尖的,中间较宽,而底部较窄。如果所使用的高级语言允许递归,则程序结构可以是图4.8(6)的形状。应该注意的是,一个模块在结构图中只能出现一次,否则修改模块结构时就需要修改多处,这容易造成错误。为了避免线条交叉过多,可采用图4.8(c)的表示方式:在某些地方用圆表示被调模块。第四章设计方法为了便于理解程序的整个结构,设计员应将整个结构图画在一张纸上。图4.3是一张完整的结构图,它描述了模块、模块间的调用、模块间传送的参数等含良义。
17、这个程序从输入文件读入数据,经编辑和合理性检查后进行计算,再将结果作为报告胂的一行打印,直至读到输入文件的文件尾时结束计算,并将累计的结果作为报告的最后一行印出。这个程序由11个模块组成:主模块REPORT要管理GET V.ALI D等3个模块,FET VALlD又要管理GET EDlTED等两个模块,。第四章设计方法这个结构是这样工作的:顶层的主麟块REPORT首先得到控制,它调用GET VALlD期望获得合理的输入数据,GET、VALID又调用GET EDlTED,所以控制很快达到底层的模块READ,它从输入文件读入数据lN并返回给GET EDITED,GET EDITED将数据IN送给模
18、块EDIT进行编辑从而获得编辑后的数据:EDITED,GET EDlTED再将EDlTED返回给其上层,最后主模块获得合理的输入数据VALlDATED;主模块再将数据传送给计算模块CALCULATE,并获得计算结果RESULTS,它又将结果交给打印报告的模块PRINT R ElPORT;PRlNT REPORT则要调用印报告头模块PRlTN HEAD.ER、印一行模块PR.1NT和印报告尾模块PRINT TRAILER.才能打印一份完整的报告。第四章设计方法图4.6第四章设计方法图4.7第四章设计方法图4.8第四章设计方法 图4.3也反映了画结构图的一般习惯:输入模块在左,输出模块在右,而计算
19、模块居中。必须指出:“结构图”同“框图”(程序流程图,见图4.9)是不同的。一个程序有层次性和过程性两方面的特点,通常“层次性”反映的是整体性质,“过程性”反映的是局部性质,所以我们一般是先决定程序的层次特性再决定其过程特性。“结构图”描述的是程序的层次特性,即某个模块负责管理哪些模块,这些模块又依次负责管理哪些模块等(可以看出:结构图也可以用来描述现实生活中的组织管理结构,如学校中的系、教研室、教学小组等层次结构)。第四章设计方法“框图描述的是程序的过程特性,即先执行哪一部分,再执行哪一部分等。概要设计时,我们关心的是程序的层次结构而不是执行过程,所以用结构图作为描述手段,而框图一般是在详细
20、设计时才使用的。第四章设计方法4.3.4 步骤步骤 SD方法可分两步进行:1)建立一个满足系统说明书要求的初始结构图。2)对结构图作逐步改进,即在结构图中找出块间联系和块内联系尚可改进之处,然后对有关部分的结构作适当的修改,以提高块内联系和减少块间联系。这里第一步可用比较简单的规则做到,而第二步则需要设计员对一些可能的方案作反复比较和权衡,设计员的经验在这里也是很重要的因素,所以第二步的工作量往往比第一步大。第四章设计方法本章4.4将讨论块间联系和块内联系这两个基本概念,4.5介绍结构图的改进,并详细讨论一个实例,4.6叙述建立初始结构图的规则,也提供了实例。第四章设计方法 SD方法以“块间联
21、系小,块内联系大”作为衡量模块结构质量的原则。下面分别讨论块间联系和块内联系。这两个概念并没有严格的定义,但是通过对一些典型实例的讨论,相信可以体会到它们的含义。4.4 块问联系和块内联系块问联系和块内联系第四章设计方法 4.4.1 块间联系的各种类型块间联系的各种类型 块间联系的大小一般可从三个角度来衡量:(1)方式块间联系是通过怎样的方式进行的。(2)作用块间共用的信息是作什么用的。(3)数量块间共用信息的多少。这几个角度可以形象地用图4.10的三维坐标来表示。下面分别讨论这三个角度。第四章设计方法 1.联系的方式联系的方式 块间联系的方式一般有两种:“用过程语句调用”或“直接引用”。用过
22、程语句调用是通过模块的名字调用整个模块,而“直接引用”是指一个模块直接存取另一模块内部的某些信息,这两种方式相比,前者的块间联系较低,而后者的块间联系则很高,下面用例子说明之。第四章设计方法 图4.1.1(a)是某个缺乏经验的设计员设计的结构。模块GET A COMMAND的功能是从终端获取一条命令,为完成该功能,它调用模块READ TERMINAL,后者的功能是从终端读入一行字符(L1NE),GET A COMMAND对这行字符再进行处理就可得到一条命令。假设系统有多个终端,从哪个终端读呢?READTER-M1NAL需要终端号,设计员在模块GET ACOMMAND中安排了一个单元存放终端号T
23、ERMNuM。READ TER_MINAL执行时引用这个单元,然后从所指终端读入,并将一行字符返回给GET A COMMAN D。该图中从模块READ TERMlNAL内部到模块GET A COMMAND内部的箭头就表示“直接引用”。第四章设计方法现在假设系统需要作一个修改:增加一个模块GET A DATA LINE,其功能是从终端获取一行数据。修改人员意识到应该利用模块READ TERMINAL作为子模块,下面有几种修改方案:1)GET A DATA LINE在调用READ TERMINAL之前,修改GET A COMMAND中的TERMNUM(图4.1l(6)。这样有可能造成错误,因为原先
24、编写GET A COMMAND时不知道会有其他模块修改TERMNUM,因此在GET A DATA LINE执行后再执行GET A COMMAND时,它就可能使用错误的终端号TERMNUM。第四章设计方法2)如果修改人员意识到上述问题,他可能会在GET A DATA LINE中先保护TERMINAL的当前值,再设置新的值,然后调用READ TERMINAL,返回后再恢复TERMNUM原先的值。但这样做还有问题,因为如果GET A DATA LINE同GET A COMMAND并行执行(例如在多道程序的环境中),则错误仍然存在;即使没有并行执行的可能性,这种设计亦是隐晦的,将来很容易造成错误。第四
25、章设计方法 3)修改模块GET A COMMAND,使其每次调用READ TERMINAL之前重新设置TERMINAL。但这样修改后,编写GET A DATA LINE和程序员还必须去修改模块GET A COMMAND,而这是一个本应与它无关的模块。另外,如果GET A DATA LINE同GET A COMMAND并行执行,则错误仍然存在。第四章设计方法4)GET A DATA LINE调用READ TERMINAL前先保护TERMINAL原先值再设置新值,从READ TERMINAL返回后再恢复原先值;对GET A COMMAND亦作类似的修改,即调用READ TERMINAL之前和之后分
展开阅读全文