《软件工程结构化系统设计.ppt》由会员分享,可在线阅读,更多相关《软件工程结构化系统设计.ppt(67页珍藏版)》请在优知文库上搜索。
1、n首先研究、分析和审查数据流图。首先研究、分析和审查数据流图。 从软件的需求规格说明中弄清数据从软件的需求规格说明中弄清数据流加工的过程,对于发现的问题及流加工的过程,对于发现的问题及时解决。时解决。n然后根据数据流图决定问题的类型。然后根据数据流图决定问题的类型。数据处理问题典型的类型有两种:数据处理问题典型的类型有两种:和和。针对两种不同的。针对两种不同的类型分别进行分析处理。类型分别进行分析处理。目的目的:DFDSC:DFDSCSDSD步骤步骤系统结构特征系统结构特征: :变换型变换型事务型事务型变换型变换型结构模型结构模型变换型变换型结构模型结构模型事务型事务型结构模型结构模型事务型事
2、务型结构模型结构模型事事务务型型变变换换型型建立初始结构图建立初始结构图SCSC图符号图符号SCSC图:显示软件的图:显示软件的组成模块组成模块及及调用关系调用关系简单调用简单调用选择调用选择调用与与循环调用循环调用变换分析变换分析变换分析变换分析传入传入传出传出变换变换c,ec,eu,wu,wc,ec,eP76 1,4变换分析方法由以下四步组成:变换分析方法由以下四步组成:u 重画数据流图;重画数据流图;u 区分有效(逻辑)输入、有效区分有效(逻辑)输入、有效(逻辑)输出和中心变换部分;(逻辑)输出和中心变换部分;u 进行一级分解,设计上层模块;进行一级分解,设计上层模块;u 进行二级分解,
3、设计输入、输进行二级分解,设计输入、输出和中心变换部分的中、下层模出和中心变换部分的中、下层模块块。变换分析小结变换分析小结 在选择模块设计的在选择模块设计的次序次序时,必须对一时,必须对一个模块的个模块的全部直接下全部直接下属模块属模块都设都设计完成之后,计完成之后,才能转向另才能转向另一个模块的一个模块的下层模块的下层模块的设计。设计。 在设计下层模块时,应考虑模块的设计下层模块时,应考虑模块的耦合耦合和和内聚内聚问题,以提高初始结构图问题,以提高初始结构图的质量。的质量。 使用使用“黑箱黑箱”技术技术: : 在设计当前模在设计当前模块时,块时,先把这个模块的所有下层模块先把这个模块的所有
4、下层模块定义成定义成“黑箱黑箱”,在设计中利用它们,在设计中利用它们时,暂时不考虑其内部结构和实现。时,暂时不考虑其内部结构和实现。在这一步定义好的在这一步定义好的“黑箱黑箱”,在下一,在下一步就可以对它们进行设计和加工。这步就可以对它们进行设计和加工。这样,又会导致更多的样,又会导致更多的“黑箱黑箱”。最后,。最后,全部全部“黑箱黑箱”的内容和结构应完全被的内容和结构应完全被确定。确定。 在模块划分时,一个模块的直接下在模块划分时,一个模块的直接下属模块一般在属模块一般在5 5个个左右。如果直接下属左右。如果直接下属模块超过模块超过1010个,可设立中间层次。个,可设立中间层次。 如果出现了
5、以下情况,就停止模块如果出现了以下情况,就停止模块的功能分解:的功能分解:当模块不能再细分为明显的子任务当模块不能再细分为明显的子任务时;时;当分解成用户提供的模块或程序库当分解成用户提供的模块或程序库的子程序时;的子程序时;当模块的界面是输入输出设备传当模块的界面是输入输出设备传送的信息时;送的信息时;当模块不宜再分解得过小时。当模块不宜再分解得过小时。n在很多软件应用中,存在某种作在很多软件应用中,存在某种作业数据流,它可以引发一个或多业数据流,它可以引发一个或多个处理,这些处理能够完成该作个处理,这些处理能够完成该作业要求的功能。这种数据流就叫业要求的功能。这种数据流就叫做事务。做事务。
6、n与变换分析一样,事务分析也是与变换分析一样,事务分析也是从分析数据流图开始,自顶向下,从分析数据流图开始,自顶向下,逐步分解,建立系统到结构图。逐步分解,建立系统到结构图。事务分析过程 识别事务源识别事务源利用数据流图和数据词典,从问题利用数据流图和数据词典,从问题定义和需求分析的结果中,找出各定义和需求分析的结果中,找出各种需要处理的事务。通常,事务来种需要处理的事务。通常,事务来自物理输入装置。有时,设计人员自物理输入装置。有时,设计人员还必须区别系统的输入、中心加工还必须区别系统的输入、中心加工和输出中产生的事务。和输出中产生的事务。 规定适当的事务型结构规定适当的事务型结构在确定了该
7、数据流图具有事务型在确定了该数据流图具有事务型特征之后,根据模块划分理论,特征之后,根据模块划分理论,建立适当的事务型结构。建立适当的事务型结构。 识别各种事务和它们定义的操作识别各种事务和它们定义的操作从问题定义和需求分析中找出的从问题定义和需求分析中找出的事务及其操作所必需的全部信息,事务及其操作所必需的全部信息,对于系统内部产生的事务,必须对于系统内部产生的事务,必须仔细地定义它们的操作。仔细地定义它们的操作。 注意利用公用模块注意利用公用模块在事务分析的过程中,如果不同事在事务分析的过程中,如果不同事务的一些中间模块可由具有类似的务的一些中间模块可由具有类似的语法和语义的若干个低层模块
8、组成,语法和语义的若干个低层模块组成,则可以把这些低层模块构造成公用则可以把这些低层模块构造成公用模块。模块。 对每一事务,或对联系密切的一对每一事务,或对联系密切的一组事务,建立一个事务处理模块;组事务,建立一个事务处理模块;如果发现在系统中有类似的事务,如果发现在系统中有类似的事务,可以把它们组成一个事务处理模块。可以把它们组成一个事务处理模块。 对事务处理模块规定它们全部的对事务处理模块规定它们全部的下层操作模块下层操作模块 对操作模块规定它们的全部细节对操作模块规定它们的全部细节模块模块变换分析是软件系统结构设计的主要方法。一般,一个大型的软件一般,一个大型的软件系统是变换型结构和事务
9、型结构系统是变换型结构和事务型结构的混合结构。所以,我们通常利的混合结构。所以,我们通常利用以变换分析为主,事务分析为用以变换分析为主,事务分析为辅的方式进行软件结构设计。辅的方式进行软件结构设计。 P60P60一个完整的模块应当有以下几部分一个完整的模块应当有以下几部分: 执行规定的功能的部分;执行规定的功能的部分; 出错处理的部分。当模块不能完成出错处理的部分。当模块不能完成规定的功能时,必须回送出错标志,规定的功能时,必须回送出错标志,出现例外情况的原因。出现例外情况的原因。 如果需要返回一系列数据给它的调如果需要返回一系列数据给它的调用者,在完成数据加工或结束时,用者,在完成数据加工或
10、结束时, 应应当给它的调用者返回一个结束状态标当给它的调用者返回一个结束状态标志。志。 程序语句程序语句:10-100:10-100条条 模块的独立性模块的独立性, ,是划分是划分模块的最高准则模块的最高准则 模块的上级模块数模块的上级模块数模块调用下属模块模块调用下属模块的数目的数目 高扇入高扇入, ,非高扇出非高扇出。如果一个模块的扇出数过大,就意味着如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的的下属模块。应当适当增加中间层次的控制模块。控制模块。 完全相似:完全相似:在结构上完全相似,可在结构上完
11、全相似,可能只是在数据类型上不一致。此时可以能只是在数据类型上不一致。此时可以采取完全合并的方法。采取完全合并的方法。 局部相似:局部相似:找出其相同部分,分离找出其相同部分,分离出去,重新定义成一个独立的下一层模出去,重新定义成一个独立的下一层模块。还可以与它的上级模块合并。块。还可以与它的上级模块合并。模块的模块的控制范围控制范围包括它本身及其所有的包括它本身及其所有的从属模块。从属模块。模块的作用范围是指模块内一个判定的模块的作用范围是指模块内一个判定的作用范围,凡是受这个判定影响的所作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围。有模块都属于这个判定的作用范围。 作用范
12、围作用范围/ /控制范控制范围原则围原则: :一个判定一个判定的作用范的作用范围包含在围包含在这个判定这个判定所在模块所在模块的控制范的控制范围之内围之内应限制使用如下三种病态联接:应限制使用如下三种病态联接: 直接病态联接 即模块即模块A A直接从模直接从模块块B B内部取出某些数据,或者把某些数内部取出某些数据,或者把某些数据直接送到模块据直接送到模块B B内部内部。 公共数据域病态联接公共数据域病态联接 模块模块A A和模块和模块B B通过公共数据域,直接传送或接受数通过公共数据域,直接传送或接受数据,而不是通过它们的上级模块。这种据,而不是通过它们的上级模块。这种方式将使得模块间的耦合
13、程度剧增。它方式将使得模块间的耦合程度剧增。它不仅影响模块和模块,而且影响与不仅影响模块和模块,而且影响与公共数据域有关联的所有模块。公共数据域有关联的所有模块。 通信模块联接 即模块即模块A A和模块和模块B B通通过通信模块过通信模块TABLEITTABLEIT传送数据。从表传送数据。从表面看,这不是病态联接,因为模块面看,这不是病态联接,因为模块和模块和模块B B都未涉及通信模块都未涉及通信模块TABLEIT TABLEIT 的内部。然而,它们之间的通信(即的内部。然而,它们之间的通信(即数据传送)没有通过它们的上级模块。数据传送)没有通过它们的上级模块。从这个意义上讲,这种联接是病态的
14、。从这个意义上讲,这种联接是病态的。模块的大小,可以用模块中所含语句的模块的大小,可以用模块中所含语句的数量的多少来衡量。把模块的大小限制数量的多少来衡量。把模块的大小限制在一定的范围之内。通常规定其语句行在一定的范围之内。通常规定其语句行数在数在5050100100左右,保持在一页纸之内,左右,保持在一页纸之内,最多不超过最多不超过500500行。行。u 一个功能可预测的模块,不论内部处一个功能可预测的模块,不论内部处理细节如何,但对理细节如何,但对相同的输入数据,总能产生总能产生同样的结果。但是,如果模。但是,如果模块内部蕴藏有一些特殊的鲜为人知的块内部蕴藏有一些特殊的鲜为人知的功能时,这
15、个模块就可能是不可预测功能时,这个模块就可能是不可预测的。对于这种模块,如果调用者不小的。对于这种模块,如果调用者不小心使用,其结果将不可预测。心使用,其结果将不可预测。u 如果一个模块的局部数据结构的大小、如果一个模块的局部数据结构的大小、控制流的选择或者与外界控制流的选择或者与外界( (人、硬软件人、硬软件) ) 的接口模式被限制死了,则很难适应的接口模式被限制死了,则很难适应用户新的要求或环境的变更。用户新的要求或环境的变更。u 为了能够适应将来的变更,软件模块为了能够适应将来的变更,软件模块中局部数据结构的大小应当是可控制中局部数据结构的大小应当是可控制的,控制流的选择对于调用者来说,
16、的,控制流的选择对于调用者来说,应当是可预测的。而与外界的接口应应当是可预测的。而与外界的接口应当是灵活的。当是灵活的。为了使得软件包可以在某些特定的环境下为了使得软件包可以在某些特定的环境下能够安装和运行,对软件包提出了一些设能够安装和运行,对软件包提出了一些设计约束和可移植的要求。例如,设计约束计约束和可移植的要求。例如,设计约束有时要求一个程序段在存储器中覆盖自身。有时要求一个程序段在存储器中覆盖自身。当这种情况出现时,设计出来的软件程序当这种情况出现时,设计出来的软件程序结构不得不根据重复程度、访问频率、调结构不得不根据重复程度、访问频率、调用间隔等等特性,重新加以组织。用间隔等等特性,重新加以组织。例例例例例例例例例例例例例例