软件技术基础第4章.ppt
上传人:sy****28 上传时间:2024-09-13 格式:PPT 页数:36 大小:220KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

软件技术基础第4章.ppt

软件技术基础第4章.ppt

预览

免费试读已结束,剩余 26 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

4.1模块化设计方法4.2结构化设计(SD)方法4.3Parnas方法4.4Jackson方法4.5总体设计的其他工作4.6详细设计4.7编程第4章总体设计2.模块设计的主要任务模块设计的任务是把一个较大的软件系统分解成许多较小的具有特定功能的模块,由它们共同完成软件系统的整体功能。具体来说,就是:第一,将软件系统划分成模块;第二,决定各个模块的功能;第三,决定模块间的调用关系;第四,决定模块间的界面。所以,模块设计的主要工作是完成模块分解,确定软件系统中模块的层次结构。模块设计技术上有相当的困难,它需要有一定的方法来指导,从而使设计人员可以获得较好的方案。20世纪70年代以来,出现了许多设计方法来支持模块设计,其中具有代表性的有结构化设计、Parnas方法、Jackson方法、Warnier方法等。这些方法都采用了模块化、由顶向下逐步细化的基本思想。它们的差别在于构成模块的原则不同。结构化设计方法以数据流图为基础构成模块结构;Parnas方法以信息隐蔽为原则建立模块结构;而Jackson方法则以数据结构为基础建立模块结构。当然这些方法也可以结合起来使用。4.2结构化设计(SD)方法所以我们可以说,SD方法的长处来自于模块之间的相对独立性,它提高了系统的质量(可理解性、可维护性、可靠性等),也减少了研制软件所需的人工。2.块间联系和块内联系如何衡量模块之间的相对独立性呢?SD方法提出了块间联系和块内联系这两个标准(如图4.1所示)。块间联系(Coupling,又称耦合度)是指模块之间的联系,它是对模块独立性的直接衡量,如图4.1(a)所示。块间联系越小就意味着模块的独立性越高,所以这是一个最基本的标准。块内联系(Cohesion,又称聚合度)是指一个模块内部各成分(语句或语句段)之间的联系,如图4.1(b)所示。块内联系大了,模块的相对独立性势必会提高。图4.1块间联系与块内联系SD方法的目标是使块间联系尽量小,块内联系尽量大。事实上,块间联系和块内联系是同一件事的两个方面。程序中各组成成分间是有联系的,如果将密切相关的成分分散在各个模块中,就会造成很高的块间联系;反之,如果密切相关的一些成分组织在同一模块中,块内联系高了,则块间联系势必也就少了。3.描述方式SD方法使用的描述方式是结构图(StructureChart),它描述了程序的模块结构,并反映了块间联系和块内联系等特性。结构图中的主要成分有:模块──用方框表示,方框中写有模块的名字,一个模块的名字应适当地反映这个模块的功能,这就在某种程度上反映了块内联系。调用──从一个模块指向另一模块的箭头,表示前一模块中含有对后一模块的调用。数据──调用箭头边上的小箭头,表示调用时从一个模块传送给另一模块的数据,小箭头也指出了数据传送的方向。设计员应该为结构图中的每一个成分(模块和数据)适当地命名,使人能直观地理解其含义。如果能在一个课题组中约定一些命名规则,将会是有所帮助的。为使读者容易理解,本书有时在模块的方框内用中文说明该模块的功能。除上述基本符号外,结构图中可以再加上一些辅助性的符号,如有条件地调用符号、循环调用符号、现成的模块符号等。设计员可根据具体情况决定是否有必要画出这些辅助性的符号。画结构图的一般习惯是:输入模块在左,输出模块在右,而计算模块居中。必须指出:“结构图”和“框图”(即程序流程图)是不同的。一个程序有层次性和过程性两方面的特点,通常“层次性”反映的是整体性质,“过程性”反映的是局部性质,所以我们一般是先决定程序的层次特性,再决定其过程特性。“结构图”描述的是程序的层次特性,即某个模块负责管理哪些模块,这些模块又依次负责管理哪些模块等。(我们可以看出:结构图也可以用来描述现实生活中的组织管理结构,如学校中的系、教研室、教学小组等层次结构。)4.3Parnas方法在设计时使软件结构尽量简单清晰,这是避免错误、提高可靠性的根本手段。Parnas主张设计时应预计到将来可能发生的种种意外,采取以下措施以提高系统的健壮性:(1)考虑到硬件有可能出现意外故障,所以接近硬件的模块应该对硬件的行为进行检查,以便及时发现硬件的错误,例如对磁带中的文件配上检查以供核对,或存储几份副本以供比较等。(2)考虑到操作人员有可能失误(也可能有人会故意破坏),负责接受操作人员输入的模块应该对输入数据进行合理性检查,辨认非法、越权的操作要求,同时也要为操作员提供合适的纠错手段。(3)考虑到软件本身也会有错误,所以模块之间要加强检查,防止错误的蔓延。例如开平方根的模块应检查输入的变量是否大于等于零,而不应假设这一点必然成立;又如操作系统中应考虑万一发生死锁,该怎么处理;或者有一个进程发生了故障,连续不断地申请资源而不再归还时,