面向过程的软件设计方法PPT.ppt
n n软件设计的目标和任务软件设计的目标和任务n n软件设计基础软件设计基础n n模块独立性模块独立性n n结构化设计方法结构化设计方法n n数据设计和文件设计数据设计和文件设计n n过程设计过程设计第四章 面向过程的 软件设计方法1软件设计的目标和任务n n根据用信息域表示的软件需根据用信息域表示的软件需求,以及功能和性能需求,求,以及功能和性能需求,进行进行FF 数据设计数据设计FF 系统结构设计系统结构设计FF 过程设计。过程设计。2n n数据设计侧重于数据结构的定义。数据设计侧重于数据结构的定义。n n系统结构设计定义软件系统各主系统结构设计定义软件系统各主要成份之间的关系。要成份之间的关系。n n过程设计则是把结构成份转换成过程设计则是把结构成份转换成软件的过程性描述。在编码步骤,软件的过程性描述。在编码步骤,根据这种过程性描述,生成源程根据这种过程性描述,生成源程序代码,然后通过测试最终得到序代码,然后通过测试最终得到完整有效的软件。完整有效的软件。3开发阶段的信息流开发阶段的信息流4n n软件设计是后续开发步骤及软件维软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只护工作的基础。如果没有设计,只能建立一个不稳定的系统结构能建立一个不稳定的系统结构5软件设计任务软件设计任务n n从工程管理的角度来看,软件设从工程管理的角度来看,软件设计分两步完成。计分两步完成。uu 概要设计概要设计,将软件需求转化,将软件需求转化为数据结构和软件的系统结构。为数据结构和软件的系统结构。uu 详细设计详细设计,即过程设计。通,即过程设计。通过对结构表示进行细化,得到过对结构表示进行细化,得到软件的详细的数据结构和算法软件的详细的数据结构和算法。67软件设计过程软件设计过程1.1.制定规范制定规范n n在进入软件开发阶段之初,首先在进入软件开发阶段之初,首先应为软件开发组制定在设计时应应为软件开发组制定在设计时应该共同遵守的标准,以便协调组该共同遵守的标准,以便协调组内各成员的工作。包括内各成员的工作。包括:8u 阅读和理解软件需求说明书,确阅读和理解软件需求说明书,确认用户要求能否实现,明确实现认用户要求能否实现,明确实现的条件,从而确定设计的目标,的条件,从而确定设计的目标,以及它们的优先顺序以及它们的优先顺序uu 根据目标确定最合适的设计方法根据目标确定最合适的设计方法uu 规定设计文档的编制标准规定设计文档的编制标准uu 规定编码的信息形式,与硬件,规定编码的信息形式,与硬件,操作系统的接口规约,命名规则操作系统的接口规约,命名规则92.2.软件系统结构的总体设计软件系统结构的总体设计n n基于功能层次结构建立系统。基于功能层次结构建立系统。uu 采用某种设计方法,将系统按功采用某种设计方法,将系统按功能划分成模块的层次结构能划分成模块的层次结构uu 确定每个模块的功能确定每个模块的功能uu 建立与已确定的软件需求的对应建立与已确定的软件需求的对应关系关系uu 确定模块间的调用关系确定模块间的调用关系uu 确定模块间的接口确定模块间的接口uu 评估模块划分的质量评估模块划分的质量103.3.处理方式设计处理方式设计n n确定为实现系统的功能需求所必需确定为实现系统的功能需求所必需的算法,评估算法的性能的算法,评估算法的性能n n确定为满足系统的性能需求所必需确定为满足系统的性能需求所必需的算法和模块间的控制方式的算法和模块间的控制方式uu 周转时间周转时间uu 响应时间响应时间uu 吞吐量吞吐量uu 精度精度n n确定外部信号的接收发送形式确定外部信号的接收发送形式114.4.数据结构设计数据结构设计n n确定软件涉及的文件系统的结构以确定软件涉及的文件系统的结构以及数据库的模式、子模式,进行数及数据库的模式、子模式,进行数据完整性和安全性的设计据完整性和安全性的设计n n确定输入,输出文件的详细的数据确定输入,输出文件的详细的数据结构结构n n结合算法设计,确定算法所必需的结合算法设计,确定算法所必需的逻辑数据结构及其操作逻辑数据结构及其操作n n确定对逻辑数据结构所必需的那些确定对逻辑数据结构所必需的那些操作的程序模块操作的程序模块(软件包软件包)12n n限制和确定各个数据设计决策的影限制和确定各个数据设计决策的影响范围响范围n n若需要与操作系统或调度程序接口若需要与操作系统或调度程序接口所必须的控制表等数据时,确定其所必须的控制表等数据时,确定其详细的数据结构和使用规则详细的数据结构和使用规则n n数据的保护性设计数据的保护性设计uu 防卫性设计:在软件设计中就插防卫性设计:在软件设计中就插入自动检错,报错和纠错的功能入自动检错,报错和纠错的功能13n n一致性设计:一致性设计:uu 保证软件运行过程中所使用的数保证软件运行过程中所使用的数据的类型和取值范围不变据的类型和取值范围不变uu 在并发处理过程中使用封锁和解在并发处理过程中使用封锁和解除封锁机制保持数据不被破坏除封锁机制保持数据不被破坏n n冗余性设计:针对同一问题,由两冗余性设计:针对同一问题,由两个开发者采用不同的程序设计风格个开发者采用不同的程序设计风格不同的算法设计软件,当两者运行不同的算法设计软件,当两者运行结果之差不在允许范围内时,利用结果之差不在允许范围内时,利用检错系统予以纠正,或使用表决技检错系统予以纠正,或使用表决技术决定一个正确结果。术决定一个正确结果。145.5.可靠性设计可靠性设计n n可靠性设计也叫做质量设计可靠性设计也叫做质量设计n n在运行过程中,为了适应环境的在运行过程中,为了适应环境的变化和用户新的要求,需经常对变化和用户新的要求,需经常对软件进行改造和修正。在软件开软件进行改造和修正。在软件开发的一开始就要确定软件可靠性发的一开始就要确定软件可靠性和其它质量指标,考虑相应措施,和其它质量指标,考虑相应措施,以使得软件易于修改和易于维护以使得软件易于修改和易于维护156.6.编写概要设计阶段的文档编写概要设计阶段的文档n n概要设计阶段完成时应编写以下概要设计阶段完成时应编写以下文档:文档:uu 概要设计说明书概要设计说明书uu 数据库设计说明书数据库设计说明书uu 用户手册用户手册uu 制定初步的测试计划制定初步的测试计划167.7.概要设计评审概要设计评审n n可追溯性可追溯性:确认该设计是否复盖了:确认该设计是否复盖了所有已确定的软件需求,软件每一所有已确定的软件需求,软件每一成份是否可追溯到某一项需求成份是否可追溯到某一项需求n n接口接口:确认该软件的内部接口与外:确认该软件的内部接口与外部接口是否已经明确定义。模块是部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内块作用范围是否在其控制范围之内n n风险风险:确认该设计在现有技术条件:确认该设计在现有技术条件下和预算范围内是否能按时实现下和预算范围内是否能按时实现17n n实用性实用性:确认该设计对于需求的解:确认该设计对于需求的解决方案是否实用决方案是否实用n n技术清晰度技术清晰度:确认该设计是否以一:确认该设计是否以一种易于翻译成代码的形式表达种易于翻译成代码的形式表达n n可维护性可维护性:确认该设计是否考虑了:确认该设计是否考虑了方便未来的维护方便未来的维护n n质量质量:确认该设计是否表现出良好:确认该设计是否表现出良好的质量特征的质量特征18n n各种选择方案各种选择方案:看是否考虑过其:看是否考虑过其它方案,比较各种选择方案的标它方案,比较各种选择方案的标准是什么准是什么n n限制限制:评估对该软件的限制是否:评估对该软件的限制是否现实,是否与需求一致现实,是否与需求一致n n其它具体问题其它具体问题:对于文档、可测:对于文档、可测试性、设计过程试性、设计过程.等进行评估等进行评估19n n在详细设计过程中,需要完成的在详细设计过程中,需要完成的工作是:工作是:1.1.确定软件各个组成部分内的确定软件各个组成部分内的算法以及各部分的内部数据组织算法以及各部分的内部数据组织2.2.选定某种过程的表达形式来选定某种过程的表达形式来描述各种算法。描述各种算法。3.3.进行详细设计的评审进行详细设计的评审详细设计详细设计20软件设计基础u 自顶向下,逐步细化自顶向下,逐步细化u 软件结构软件结构u 程序结构程序结构u 结构图结构图u 模块化模块化u 抽象化抽象化u 信息隐蔽信息隐蔽21自顶向下,逐步细化自顶向下,逐步细化n n将软件的体系结构按自顶向下方将软件的体系结构按自顶向下方式,对各个层次的过程细节和数式,对各个层次的过程细节和数据细节逐层细化,直到用程序设据细节逐层细化,直到用程序设计语言的语句能够实现为止,从计语言的语句能够实现为止,从而最后确立整个的体系结构。而最后确立整个的体系结构。22软件结构软件结构n n软件结构包括两部分。程序的模块软件结构包括两部分。程序的模块结构和数据的结构结构和数据的结构n n软件的体系结构通过一个划分过程软件的体系结构通过一个划分过程来完成。该划分过程从需求分析确来完成。该划分过程从需求分析确立的目标系统的模型出发,对整个立的目标系统的模型出发,对整个问题进行分割,使其每个部分用一问题进行分割,使其每个部分用一个或几个软件成份加以解决,整个个或几个软件成份加以解决,整个问题就解决了问题就解决了2324程序结构程序结构n n程序结构表明了程序各个部件程序结构表明了程序各个部件(模块模块)的组织情况,是软件的过程表示。的组织情况,是软件的过程表示。25结构图结构图n n结构图反映程序中模块之间的层结构图反映程序中模块之间的层次调用关系和联系:它以特定的次调用关系和联系:它以特定的符号表示模块、模块间的调用关符号表示模块、模块间的调用关系和模块间信息的传递系和模块间信息的传递26 模块:模块用矩形框表示,并用模块:模块用矩形框表示,并用模块的名字标记它。模块的名字标记它。27 模块的调用关系和接口:模块之模块的调用关系和接口:模块之间用单向箭头联结,箭头从调用模间用单向箭头联结,箭头从调用模块指向被调用模块,表示调用模块块指向被调用模块,表示调用模块调用了被调用模块。调用了被调用模块。28 模块间的信息传递:当一个模块模块间的信息传递:当一个模块调用另一个模块时,调用模块把数调用另一个模块时,调用模块把数据或控制信息传送给被调用模块,据或控制信息传送给被调用模块,以使被调用模块能够运行。而被调以使被调用模块能够运行。而被调用模块在执行过程中又把它产生的用模块在执行过程中又把它产生的数据或控制信息回送给调用模块数据或控制信息回送给调用模块29 在模块在模块A的箭头尾部标以一个菱的箭头尾部标以一个菱形符号,表示模块形符号,表示模块A有条件地调用有条件地调用另一个模块另一个模块B。当一个在调用箭头。当一个在调用箭头尾部标以一个弧形符号,表示模块尾部标以一个弧形符号,表示模块A反复调用模块反复调用模块C和模块和模块D。30程序的系统结构图程序的系统结构图31模块化模块化n n软件系统的模块化是指整个软件软件系统的模块化是指整个软件被划分成若干单独命名和可编址被划分成若干单独命名和可编址的部分,称之为模块。这些模块的部分,称之为模块。这些模块可以被组装起来以满足整个问题可以被组装起来以满足整个问题的需求。的需求。n n把问题子问题的分解与软件开把问题子问题的分解与软件开发中的系统子系统或系统模发中的系统子系统或系统模块对应起来,就能够把一个大而块对应起来,就能够把一个大而复杂的软件系统划分成易于理解复杂的软件系统划分成易于理解的比较单纯的模块结构。的比较单纯的模块结构。32抽象化抽象化n n软件系统进行模块设计时,可软件系统进行模块设计时,可有不同的抽象层次。有不同的抽象层次。n n在最高的抽象层次上,可以使在最高的抽象层次上,可以使用问题所处环境的语言概括地用问题所处环境的语言概括地描述问题的解法。描述问题的解法。n n在较低的抽象层次上,则采用在较低的抽象层次上,则采用过程化的方法。过程化的方法。33(1)(1)过程的抽象过程的抽象在软件工程中,从系统定义到实现,在软件工程中,从系统定义到实现,每进展一步都可以看做是对软件解每进展一步都可以看做是对软件解决方法的抽象化过程的一次细化。决方法的抽象化过程的一次细化。在软件需求分析阶段,用在软件需求分析阶段,用“问问题所处环境的为大家所熟悉的术语题所处环境的为大家所熟悉的术语”来描述软件的解决方法。来描述软件的解决方法。在从概要设计到详细设计的过在从概要设计到详细设计的过程中,抽象化的层次逐次降低。当程中,抽象化的层次逐次降低。当产生源程序时到达最低抽象层次。产生源程序时到达最低抽象层次。34例例说说开开发发一一个个CAD软软件件时时的的三三种种抽象层次抽象层次n n抽象层次抽象层次.用问题所处环境的术用问题所处环境的术语来描述这个软件语来描述这个软件:该软件包括一个计算机绘图界面,该软件包括一个计算机绘图界面,向绘图员显示图形,以及一个数字向绘图员显示图形,以及一个数字化仪界面,用以代替绘图板和丁字化仪界面,用以代替绘图板和丁字尺。所有直线、折线、矩形、圆及尺。所有直线、折线、矩形、圆及曲线的描画、所有的几何计算、所曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这有的剖面图和辅助视图都可以用这个个CAD软件实现软件实现。35n n抽象层次抽象层次.任务需求的描述。任务需求的描述。CAD SOFTWARE TASKS user interaction task;2-D drawing creation task;graphics display task;drawing file management task;end.在这个抽象层次上,未给出在这个抽象层次上,未给出“怎样怎样做做”的信息,不能直接实现。的信息,不能直接实现。36n n抽象层次抽象层次.程序过程表示。以程序过程表示。以2-D(二维二维)绘图生成任务为例绘图生成任务为例:PROCEDUREPROCEDURE:2-D drawing creation2-D drawing creation REPEAT UNTIL(drawing creation task REPEAT UNTIL(drawing creation task terminates)terminates)DO WHILE(digitizer interaction occurs)DO WHILE(digitizer interaction occurs)digitizer interface task;digitizer interface task;DETERMINE drawing request CASE;DETERMINE drawing request CASE;line line:line drawing task;line drawing task;rectangle rectangle:rectangle drawing task;rectangle drawing task;circle circle:circle drawing task;circle drawing task;37(2)数据抽象数据抽象在不同层次上描述数据对象的细节,在不同层次上描述数据对象的细节,定义与该数据对象相关的操作。定义与该数据对象相关的操作。例如,例如,在在CAD软件中,定义一个叫软件中,定义一个叫做做drawing的数据对象。可将的数据对象。可将drawing规定为一个抽象数据类型规定为一个抽象数据类型,定义它的内部细节为定义它的内部细节为:38n nTYPE drawing IS STRUCTURE DEFIND number IS STRING LENGTH(12);geometry DEFIND notes IS STRING LENGTH(256);BOM DEFIND END drawing TYPE;39n n数据抽象数据抽象drawing本身由另外一些数据本身由另外一些数据抽象,如抽象,如geometry、BOM(bill of materials)构成构成n n定义定义drawing的抽象数据类型之后,可的抽象数据类型之后,可引用它来定义其它数据对象,而不必涉引用它来定义其它数据对象,而不必涉及及drawing的内部细节的内部细节n n例如,定义例如,定义:blue-print IS INSTANCE OF drawing;或或n n schematic IS INSTANCE OF drawing;40信息隐蔽信息隐蔽n n由由 parnas 方法提倡的信息隐蔽方法提倡的信息隐蔽是指,每个模块的实现细节对是指,每个模块的实现细节对于其它模块来说是隐蔽的。也于其它模块来说是隐蔽的。也就是说,模块中所包含的信息就是说,模块中所包含的信息(包括数据和过程)不允许其(包括数据和过程)不允许其它不需要这些信息的模块使用。它不需要这些信息的模块使用。41模块的独立性模块的独立性n n模块(模块(Module)“模块模块”,又称,又称“组件组件”。它一般。它一般具有如下三个基本属性具有如下三个基本属性:uu功能:描述该模块实现什么功功能:描述该模块实现什么功能能uu逻辑:描述模块内部怎么做逻辑:描述模块内部怎么做uu状态:该模块使用时的环境和状态:该模块使用时的环境和条件条件42n n在描述一个模块时,还必须按模块在描述一个模块时,还必须按模块的的外部特性外部特性与与内部特性内部特性分别描述分别描述n n模块的模块的外部特性外部特性uu 模块的模块名、参数表、其中的模块的模块名、参数表、其中的输入参数和输出参数,以及给程序输入参数和输出参数,以及给程序以至整个系统造成的影响以至整个系统造成的影响n n模块的模块的内部特性内部特性uu 完成其功能的程序代码和仅供该完成其功能的程序代码和仅供该模块内部使用的数据模块内部使用的数据43n n模块独立性模块独立性uu 模块独立性模块独立性,是指软件系统中每是指软件系统中每个模块只涉及软件要求的具体的子个模块只涉及软件要求的具体的子功能功能,而和软件系统中其它的模块而和软件系统中其它的模块的接口是简单的的接口是简单的uu 例如例如,若一个模块只具有单一的若一个模块只具有单一的功能且与其它模块没有太多的联系功能且与其它模块没有太多的联系,则称此模块具有模块独立性则称此模块具有模块独立性uu 一般采用两个准则度量模块独立一般采用两个准则度量模块独立性。即模块间性。即模块间耦合耦合和模块和模块内聚内聚44u 耦合耦合是模块之间的互相连接的紧是模块之间的互相连接的紧密程度的度量。密程度的度量。uu 内聚内聚是模块功能强度是模块功能强度(一个模块一个模块内部各个元素彼此结合的紧密程内部各个元素彼此结合的紧密程度度)的度量。的度量。uu 模块独立性比较强的模块应是模块独立性比较强的模块应是高高内聚低耦合内聚低耦合的模块。的模块。45模块间的耦合模块间的耦合46非直接耦合非直接耦合(Nondirect Coupling)如果两个模块之间没有直接关系,如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块它们之间的联系完全是通过主模块的控制和调用来的控制和调用来实现的,这就是实现的,这就是非直接耦合。这非直接耦合。这种耦合的模块独种耦合的模块独立性最强。立性最强。47数据耦合数据耦合(Data Coupling)如果一个模块访问另一个模块时,彼如果一个模块访问另一个模块时,彼此之间是通过此之间是通过简单数据参数简单数据参数 (不是控不是控制参数、公共数据结构或外部变量制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种来交换输入、输出信息的,则称这种耦合为数据耦合。耦合为数据耦合。标记耦合标记耦合(Stamp Coupling)如果一组模块通过参数表传递如果一组模块通过参数表传递记录信记录信息息,就是标记耦合。这个记录是某一,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。数据结构的子结构,而不是简单变量。48控制耦合控制耦合(Control Coupling)如果一个模如果一个模块通过传送开块通过传送开关、标志、名关、标志、名字等控制信息,字等控制信息,明显地控制选明显地控制选择另一模块的择另一模块的功能,就是控功能,就是控制耦合。制耦合。49外部耦合(外部耦合(External Coupling)一组模块都访问一组模块都访问同一全局简单变量同一全局简单变量而而不是同一全局数据结构,而且不是通不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则过参数表传递该全局变量的信息,则称之为外部耦合。称之为外部耦合。公共耦合(公共耦合(Common Coupling)若一组模块都访问若一组模块都访问同一个公共数据环同一个公共数据环境境,则它们之间的耦合就称为公共耦,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆结构、共享的通信区、内存的公共覆盖区等。盖区等。50n n公共耦合的复杂程度随耦合模块的个公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合情况。松散公共耦合和紧密公共耦合。51内容耦合内容耦合(Content Coupling)如果发生下列情形,两个模块之间如果发生下列情形,两个模块之间就发生了内容耦合就发生了内容耦合 (1)一个模块直接访问另一个模一个模块直接访问另一个模块的内部数据块的内部数据;(2)一个模块不通过正常入口转一个模块不通过正常入口转到另一模块内部到另一模块内部;(3)两个模块有一部分程序代码两个模块有一部分程序代码重迭重迭(只可能出现在汇编语言中只可能出现在汇编语言中);(4)一个模块有多个入口。一个模块有多个入口。52 c 模块内聚模块内聚53功能内聚功能内聚(Functional Cohesion)一个模块中各个部分都是一个模块中各个部分都是完成完成某一具体功能某一具体功能必不可少的组成必不可少的组成部分,或者说该模块中所有部部分,或者说该模块中所有部分都是为了完成一项具体功能分都是为了完成一项具体功能而协同工作,紧密联系,不可而协同工作,紧密联系,不可分割的。则称该模块为功能内分割的。则称该模块为功能内聚模块。聚模块。54信息内聚信息内聚(Informational Cohesion)这种模块这种模块完成多个功能完成多个功能,各个功各个功能都在同一数据结构上操作能都在同一数据结构上操作,每,每一项功能有一个唯一的入口点。一项功能有一个唯一的入口点。这个模块将根据不同的要求,确这个模块将根据不同的要求,确定该执行哪一个功能。由于这个定该执行哪一个功能。由于这个模块的所有功能都是基于同一个模块的所有功能都是基于同一个数据结构(符号表),因此,它数据结构(符号表),因此,它是一个信息内聚的模块。是一个信息内聚的模块。5556n n信息内聚模块可以看成是多信息内聚模块可以看成是多个功能内聚模块的组合,并个功能内聚模块的组合,并且达到信息的隐蔽。即把某且达到信息的隐蔽。即把某个数据结构、资源或设备隐个数据结构、资源或设备隐蔽在一个模块内,不为别的蔽在一个模块内,不为别的模块所知晓。模块所知晓。57通信内聚通信内聚(Communication Cohesion)如果一个模块内各功能部分都使用如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数块。通常,通信内聚模块是通过数据流图来定义的。据流图来定义的。5859过程内聚(过程内聚(Procedural Cohesion)使用流程图做为工具设计程序时,使用流程图做为工具设计程序时,把流程图中的某一部分划出组成把流程图中的某一部分划出组成模块,就得到过程内聚模块。例模块,就得到过程内聚模块。例如,把流程图中的循环部分、判如,把流程图中的循环部分、判定部分、计算部分分成三个模块,定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。这三个模块都是过程内聚模块。60时间内聚(时间内聚(Classical Cohesion)时间内聚又称为经典内聚。这种时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块模块大多为多功能模块,但模块的各个功能的执行与时间有关,的各个功能的执行与时间有关,通常要求所有功能必须在同一时通常要求所有功能必须在同一时间段内执行。例如初始化模块和间段内执行。例如初始化模块和终止模块。终止模块。61逻辑内聚(逻辑内聚(Logical Cohesion)这种模块把几种这种模块把几种 相关的功能组合相关的功能组合 在一起,每次被在一起,每次被 调用时,由传送调用时,由传送 给模块的判定参给模块的判定参 数来确定该模块数来确定该模块 应执行哪一种功应执行哪一种功 能。能。62巧合内聚(巧合内聚(Coincidental Cohesion)巧合内聚又称为偶然内聚。当模块内巧合内聚又称为偶然内聚。当模块内各部分之间没有联系,或者即使有联各部分之间没有联系,或者即使有联系,这种联系,这种联 系也很松散,系也很松散,则称这种模则称这种模 块为巧合内块为巧合内 聚模块,它聚模块,它 是内聚程度是内聚程度 最低的模块。最低的模块。63结构化设计方法结构化设计方法n n首先研究、分析和审查数据流图。首先研究、分析和审查数据流图。从软件的需求规格说明中弄清数从软件的需求规格说明中弄清数据流加工的过程,对于发现的问据流加工的过程,对于发现的问题及时解决。题及时解决。n n然后根据数据流图决定问题的类然后根据数据流图决定问题的类型。数据处理问题典型的类型有型。数据处理问题典型的类型有两种:两种:变换型变换型和和事务型事务型。针对两。针对两种不同的类型分别进行分析处理。种不同的类型分别进行分析处理。64n n由数据流图推导出系统的初始结由数据流图推导出系统的初始结构图。构图。n n利用一些启发式原则来改进系统利用一些启发式原则来改进系统的初始结构图,直到得到符合要的初始结构图,直到得到符合要求的结构图为止。求的结构图为止。n n修改和补充数据词典。修改和补充数据词典。n n制定测试计划。制定测试计划。65在系统结构图中的模块在系统结构图中的模块n n传入模块传入模块 从下属模块取得数据,从下属模块取得数据,经过某些处理,再将其传送给上级经过某些处理,再将其传送给上级模块。它传送的数据流叫做逻辑输模块。它传送的数据流叫做逻辑输入数据流。入数据流。n n传出模块传出模块 从上级模块获得数据,从上级模块获得数据,进行某些处理,再将其传送给下属进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑输模块。它传送的数据流叫做逻辑输出数据流。出数据流。66n n变换模块变换模块 它从上级模块取得数它从上级模块取得数据,进行特定的处理,转换成其它据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工形式,再传送回上级模块。它加工的数据流叫做变换数据流。的数据流叫做变换数据流。n n协调模块协调模块 对所有下属模块进行对所有下属模块进行协调和管理的模块。协调和管理的模块。67变换型系统结构图变换型系统结构图n n变换型数据处理问题的工作过程大变换型数据处理问题的工作过程大致分为三步,即取得数据,变换数致分为三步,即取得数据,变换数据和给出数据。据和给出数据。n n相应于取得数据、变换数据、给出相应于取得数据、变换数据、给出数据,变换型系统结构图由输入、数据,变换型系统结构图由输入、中心变换和输出等三部分组成。中心变换和输出等三部分组成。6869事务型系统结构图事务型系统结构图n n它接受一项事务,根据事务处理的它接受一项事务,根据事务处理的特点和性质,选择分派一个适当的特点和性质,选择分派一个适当的处理单元,然后给出结果。处理单元,然后给出结果。n n在事务型系统结构图中,事务中心在事务型系统结构图中,事务中心模块按所接受的事务的类型,选择模块按所接受的事务的类型,选择某一事务处理模块执行。各事务处某一事务处理模块执行。各事务处理模块并列。每个事务处理模块可理模块并列。每个事务处理模块可能要调用若干个操作模块,而操作能要调用若干个操作模块,而操作模块又可能调用若干个细节模块。模块又可能调用若干个细节模块。7071变换分析n变换分析方法由以下四步组成:u 重画数据流图;u 区分有效(逻辑)输入、有效(逻辑)输出和中心变换部分;u 进行一级分解,设计上层模块;u 进行二级分解,设计输入、输出和中心变换部分的中、下层模块。7273 在选择模块设计的次序时,必须对一个模块的全部直接下属模块都设计完成之后,才能转向另一个模块的下层模块的设计。74 在设计下层模块时,应考虑模块的耦合和内聚问题,以提高初始结构图的质量。使用“黑箱”技术:在设计当前模块时,先把这个模块的所有下层模块定义成“黑箱”,在设计中利用它们时,暂时不考虑其内部结构和实现。在这一步定义好的“黑箱”,在下一步就可以对它们进行设计和加工。这样,又会导致更多的“黑箱”。最后,全部“黑箱”的内容和结构应完全被确定。75 在模块划分时,一个模块的直接下属模块一般在5个左右。如果直接下属模块超过10个,可设立中间层次。如果出现了以下情况,就停止模块的功能分解:当模块不能再细分为明显的子任务时;当分解成用户提供的模块或程序库的子程序时;当模块的界面是输入输出设备传送的信息时;当模块不宜再分解得过小时。76事 务 分 析n在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能。这种数据流就叫做事务。n与变换分析一样,事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统到结构图。7778事务分析过程 识别事务源利用数据流图和数据词典,从问题定义和需求分析的结果中,找出各种需要处理的事务。通常,事务来自物理输入装置。有时,设计人员还必须区别系统的输入、中心加工和输出中产生的事务。79 规定适当的事务型结构在确定了该数据流图具有事务型特征之后,根据模块划分理论,建立适当的事务型结构。识别各种事务和它们定义的操作从问题定义和需求分析中找出的事务及其操作所必需的全部信息,对于系统内部产生的事务,必须仔细地定义它们的操作。80 注意利用公用模块在事务分析的过程中,如果不同事务的一些中间模块可由具有类似的语法和语义的若干个低层模块组成,则可以把这些低层模块构造成公用模块。对每一事务,或对联系密切的一组事务,建立一个事务处理模块;如果发现在系统中有类似的事务,可以把它们组成一个事务处理模块。81 对事务处理模块规定它们全部的下层操作模块 对操作模块规定它们的全部细节模块变换分析是软件系统结构设计的主要方法。一般,一个大型的软件系统是变换型结构和事务型结构的混合结构。所以,我们通常利用以变换分析为主,事务分析为辅的方式进行软件结构设计。82 83软件模块结构的改进n n模块功能的完善化一个完整的模块应当有以下几部分:执行规定的功能的部分;出错处理的部分。当模块不能完成规定的功能时,必须回送出错标志,出现例外情况的原因。如果需要返回一系列数据给它的调用者,在完成数据加工或结束时,应当给它的调用者返回一个结束状态标志。84n n消除重复功能,改善软件结构 完全相似:在结构上完全相似,可能只是在数据类型上不一致。此时可以采取完全合并的方法。局部相似:找出其相同部分,分离出去,重新定义成一个独立的下一层模块。还可以与它的上级模块合并。8586n n模块的作用范围应在控制范围之内uu模块的控制范围包括它本身及其所有的从属模块。u 模块的作用范围是指模块内一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围。u 如果一个判定的作用范围包含在这个判定所在模块的控制范围之内,则这种结构是简单的,否则,它的结构是不简单的。8788n n尽可能减少高扇出结构,随着深度增大扇入。如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块。89n n避免或减少使用病态联接应限制使用如下三种病态联接:直接病态联接 即模块A直接从模块B内部取出某些数据,或者把某些数据直接送到模块B内部。90 公共数据域病态联接 模块A和模块B通过公共数据域,直接传送或接受数据,而不是通过它们的上级模块。这种方式将使得模块间的耦合程度剧增。它不仅影响模块和模块,而且影响与公共数据域有关联的所有模块。91 通信模块联接 即模块A和模块B通过通信模块TABLEIT传送数据。从表面看,这不是病态联接,因为模块和模块B都未涉及通信模块TABLEIT 的内部。然而,它们之间的通信(即数据传送)没有通过它们的上级模块。从这个意义上讲,这种联接是病态的。92n n模块的大小要适中模块的大小,可以用模块中所含语句的数量的多少来衡量。把模块的大小限制在一定的范围之内。通常规定其语句行数在50100左右,保持在一页纸之内,最多不超过500行。93n n设计功能可预测的模块,但要避免过分受限制的模块u 一个功能可预测的模块,不论内部处理细节如何,但对相同的输入数据,总能产生同样的结果。但是,如果模块内部蕴藏有一些特殊的鲜为人知的功能时,这个模块就可能是不可预测的。对于这种模块,如果调用者不小心使用,其结果将不可预测。9495u 如果一个模块的局部数据结构的大小、控制流的选择或者与外界(人、硬软件)的接口模式被限制死了,则很难适应用户新的要求或环境的变更。u 为了能够适应将来的变更,软件模块中局部数据结构的大小应当是可控制的,控制流的选择对于调用者来说,应当是可预测的。而与外界的接口应当是灵活的。96n n软件包应满足设计约束和可移植性为了使得软件包可以在某些特定的环境下能够安装和运行,对软件包提出了一些设计约束和可移植的要求。例如,设计约束有时要求一个程序段在存储器中覆盖自身。当这种情况出现时,设计出来的软件程序结构不得不根据重复程度、访问频率、调用间隔等等特性,重新加以组织。97设 计 的 后 处 理n为每一个模块写一份处理说明n为每一个模块提供一份接口说明n确定全局数据结构和局部数据结构n指出所有的设计约束和限制n进行概要设计的评审n进行设计的优化(如果需要和可能的话)98数据设计及文件设计n数据设计的原则n文件设计99数 据 设 计 的 原 则nR.S.Pressman数据设计的过程u 为在需求分析阶段所确定的数据对象选择逻辑表示,需要对不同结构进行算法分析,以便选择一个最有效的结构;设计对于这种逻辑数据结构的一组操作,以实现各种所期望的运算。100u 确定对逻辑数据结构所必需的那些操作的程序模块(软件包),以便限制或确定各个数据设计决策的影响范围。nPressman提出了一组原则,用来定义和设计数据。实际上,在进行需求分析时往往就开始了数据设计。1011.用于软件的系统化方法也适用于数据。在导出、评审和定义软件的需求和软件系统结构时,必须定义和评审其中所用到的数据流、数据对象及数据结构的表示。应当考虑几种不同的数据组织方案,还应当分析数据设计给软件设计带来的影响。1022.确定所有的数据结构和在每种数据结构上施加的操作。设计有效的数据结构,必须考虑到要对该数据结构进行的各种操作。3.应当建立一个数据词典并用它来定义数据和软件的设计。数据词典清楚地说明了各个数据之间的关系和对数据结构内各个数据元素的约束。1034.低层数据设计的决策应推迟到设计过程的后期进行。在进行需求分析时确定的总体数据组织,应在概要设计阶段加以细化,在详细设计阶段才规定具体的细节。5.数据结构的表示只限于那些必须直接使用该数据结构内数据的模块才能知道。此原则就是信息隐蔽和与此相关的耦合性原则。1046.应当建立一个存放有效数据结构