PLC总体设计.ppt
2020/12/28,计算机科学与工程系,1,软件设计的目标和任务软件设计原则有效的模块设计结构化设计方法中的概要设计方法数据设计和文件设计,本章主要学习的内容,Chapter4概要设计,2020/12/28,计算机科学与工程系,2,4.1软件设计的目标和任务,1.软件设计任务,从工程管理的角度来看,软件设计分两步完成。概要设计,将软件需求转化为数据结构和软件的系统结构。详细设计,即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。,2020/12/28,计算机科学与工程系,3,从技术观点,根据软件需求,以及功能和性能需求,进行系统结构设计数据设计过程设计。(详细设计),2020/12/28,计算机科学与工程系,4,系统结构设计定义软件系统各主要成份之间的关系。数据设计侧重于数据结构的定义。过程设计(详细设计)则是把结构成份转换成软件的过程性描述。在编码步骤,根据这种过程性描述,生成源程序代码,然后通过测试最终得到完整有效的软件。,2020/12/28,计算机科学与工程系,5,2020/12/28,计算机科学与工程系,6,2设计阶段的信息流,程序模块,测试,编码,设计,信息域需求,功能与性能需求,,,,,,,,,,组装好的有效的软件,,2020/12/28,计算机科学与工程系,7,软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构。,3.软件设计在开发阶段的重要性,2020/12/28,计算机科学与工程系,8,4.2软件设计过程,在进入软件开发阶段之初,首先应为软件开发组制定在设计时应该共同遵守的标准,以便协调组内各成员的工作。包括阅读和理解软件需求说明书,确认用户要求能否实现,明确实现的条件,从而确定设计的目标,以及它们的优先顺序。,1.制定规范,2020/12/28,计算机科学与工程系,9,根据目标确定最合适的设计方法规定设计文档的编制标准规定编码的信息形式,与硬件,操作系统的接口规约,命名规则,2020/12/28,计算机科学与工程系,10,2.软件系统结构的总体设计,基于功能层次结构建立系统。采用某种设计方法,将系统按功能划分成模块的层次结构确定每个模块的功能建立与已确定的软件需求的对应关系确定模块间的调用关系确定模块间的接口评估模块划分的质量,2020/12/28,计算机科学与工程系,11,3.处理方式设计,确定为实现系统的功能需求所必需的算法,评估算法的性能;确定为满足系统的性能需求所必需的算法和模块间的控制方式周转时间响应时间吞吐量精度确定外部信号的接收发送形式,2020/12/28,计算机科学与工程系,12,4.数据结构设计,确定软件涉及的文件系统的结构以及数据库的模式、子模式,进行数据完整性和安全性的设计确定输入,输出文件的详细的数据结构结合算法设计,确定算法所必需的逻辑数据结构及其操作确定对逻辑数据结构所必需的那些操作的程序模块软件包,2020/12/28,计算机科学与工程系,13,限制和确定各个数据设计决策的影响范围若需要与操作系统或调度程序接口所必须的控制表等数据时,确定其详细的数据结构和使用规则数据的保护性设计防卫性设计在软件设计中就插入自动检错,报错和纠错的功能,2020/12/28,计算机科学与工程系,14,一致性设计保证软件运行过程中所使用的数据的类型和取值范围不变在并发处理过程中使用封锁和解除封锁机制保持数据不被破坏冗余性设计针对同一问题,由两个开发者采用不同的程序设计风格不同的算法设计软件,当两者运行结果之差不在允许范围内时,利用检错系统予以纠正,或使用表决技术决定一个正确结果。,2020/12/28,计算机科学与工程系,15,5.可靠性设计,可靠性设计也叫做质量设计在运行过程中,为了适应环境的变化和用户新的要求,需经常对软件进行改造和修正。在软件开发的一开始就要确定软件可靠性和其它质量指标,考虑相应措施,以使得软件易于修改和易于维护。,2020/12/28,计算机科学与工程系,16,6.编写概要设计阶段的文档,概要设计阶段完成时应编写以下文档概要设计说明书数据库设计说明书用户手册制定初步的测试计划,2020/12/28,计算机科学与工程系,17,7.概要设计评审,可追溯性确认该设计是否覆盖了所有已确定的软件需求,软件每一成份是否可追溯到某一项需求接口确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内风险确认该设计在现有技术条件下和预算范围内是否能按时实现,2020/12/28,计算机科学与工程系,18,实用性确认该设计对于需求的解决方案是否实用技术清晰度确认该设计是否以一种易于翻译成代码的形式表达可维护性确认该设计是否考虑了方便未来的维护质量确认该设计是否表现出良好的质量特征,2020/12/28,计算机科学与工程系,19,各种选择方案看是否考虑过其它方案,比较各种选择方案的标准是什么限制评估对该软件的限制是否现实,是否与需求一致其它具体问题对于文档、可测试性、设计过程..等进行评估,2020/12/28,计算机科学与工程系,20,在详细设计过程中,需要完成的工作是确定软件各个组成部分内的算法以及各部分的内部数据组织选定某种过程的表达形式来描述各种算法。进行详细设计的评审,,8详细设计,2020/12/28,计算机科学与工程系,21,4.3软件设计原则,抽象化自顶向下,逐步细化模块化程序结构结构划分软件过程信息隐蔽,,2020/12/28,计算机科学与工程系,22,1抽象化,软件系统进行模块设计时,可有不同的抽象层次。在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题的解法。在较低的抽象层次上,则采用过程化的方法。,2020/12/28,计算机科学与工程系,23,在软件工程中,从系统定义到实现,每进展一步都可以看做是对软件解决方法的抽象化过程的一次细化。在软件需求分析阶段,用“问题所处环境的为大家所熟悉的术语”来描述软件的解决方法。在从概要设计到详细设计的过程中,抽象化的层次逐次降低。当产生源程序时到达最低抽象层次。,1过程的抽象,2020/12/28,计算机科学与工程系,24,在不同层次上描述数据对象的细节,定义与该数据对象相关的操作。例如,在CAD软件中,定义一个叫做drawing的数据对象。可将drawing规定为一个抽象数据类型,定义它的内部细节。,2数据抽象,2020/12/28,计算机科学与工程系,25,2自顶向下,逐步细化,将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。,,2020/12/28,计算机科学与工程系,26,3模块化,软件系统的模块化是指整个软件被划分成若干单独命名和可编址的部分,称之为模块。这些模块可以被组装起来以满足整个问题的需求。把问题/子问题的分解与软件开发中的系统/子系统或系统/模块对应起来,就能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。,,2020/12/28,计算机科学与工程系,27,实际上,如果模块是相互独立的,当模块变得越小,每个模块花费的工作量越低;但当模块数增加时,模块间的联系也随之增加,把这些模块联接起来的工作量也随之增加。如右图所示。因此,存在一个模块个数M,它使得总的开发成本达到最小。,,2020/12/28,计算机科学与工程系,28,4程序结构控制层次,程序结构表明了程序各个部件模块的组织情况,是软件的过程表示。,,2020/12/28,计算机科学与工程系,29,5程序的层次结构图中的一些概念,,2020/12/28,计算机科学与工程系,30,程序结构的深度程序结构的层次数称为结构的深度。结构的深度在一定意义上反映了程序结构的规模和复杂程度。程序结构的宽度层次结构中同一层模块的最大模块个数称为结构的宽度。模块的扇入和扇出扇出表示一个模块直接调用(或控制)的其他模块数目。扇入则定义为调用(或控制)一个给定模块的模块个数。多扇出意味着需要控制和协调许多下属模块。而多扇入的模块通常是公用模块。,2020/12/28,计算机科学与工程系,31,程序结构可以按水平方向或垂直方向进行划分。水平划分按主要的程序功能来定义模块结构的各个分支。顶层模块是控制模块,用来协调程序各个功能之间的通信和运行。其下级模块的最简单的水平划分方法是建立三个分支输入、处理(数据变换)和输出。这种划分的优点是由于主要的功能相互分离,易于修改、易于扩充,且没有副作用。缺点是需要通过模块接口传递更多的数据,使程序流的整体控制复杂化。,6结构划分,2020/12/28,计算机科学与工程系,32,垂直划分也叫做因子划分。主要用在程序的体系结构中,且工作自顶向下逐层分布顶层模块执行控制功能,少做实际处理工作,而低层模块是实际输入、计算和输出的具体执行者。这种划分的优点是对低层模块的修改不太可能引起副作用的传播,而恰恰对计算机程序的修改常常发生在低层的输入、计算或输出模块中。因此,程序的整体控制结构不大可能被修改,便于将来的维护,2020/12/28,计算机科学与工程系,33,数据结构是数据的各个元素之间的逻辑关系的一种表示。数据结构设计应确定数据的组织、存取方式、相关程度以及信息的不同处理方法。数据结构的组织方法和复杂程度可以灵活多样,但典型的数据结构种类是有限的,它们是构成一些更复杂结构的基本构件块。,7数据结构,2020/12/28,计算机科学与工程系,34,,2020/12/28,计算机科学与工程系,35,,8软件过程,软件过程必须提供精确的处理说明,包括事件的顺序、正确的判定点、重复的操作直至数据的组织和结构等等。程序结构与软件过程是有关系的。对每个模块的处理必须指明该模块所在的上下级环境。软件过程遵从程序结构的主从关系,因此它也是层次化的。下图软件过程侧重与描述模块间的处理细节。,2020/12/28,计算机科学与工程系,36,2020/12/28,计算机科学与工程系,37,9信息隐蔽,由parnas方法提倡的信息隐蔽是指,每个模块的实现细节对于其它模块来说是隐蔽的。也就是说,模块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用。,,2020/12/28,计算机科学与工程系,38,4.4有效的模块设计,模块(Module)“模块”,又称“组件”。它一般具有如下三个基本属性功能描述该模块实现什么功能逻辑描述模块内部怎么做状态该模块使用时的环境和条件,2020/12/28,计算机科学与工程系,39,在描述一个模块时,还必须按模块的外部特性与内部特性分别描述模块的外部特性模块的模块名、参数表、其中的输入参数和输出参数,以及给程序以至整个系统造成的影响模块的内部特性完成其功能的程序代码和仅供该模块内部使用的数据,2020/12/28,计算机科学与工程系,40,模块独立性模块独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其它的模块的接口是简单的例如,若一个模块只具有单一的功能且与其它模块没有太多的联系,则称此模块具有模块独立性一般采用两个准则度量模块独立性。即模块间耦合和模块内聚。,2020/12/28,计算机科学与工程系,41,耦合是模块之间的互相连接的紧密程度的度量。内聚是模块功能强度一个模块内部各个元素彼此结合的紧密程度的度量。模块独立性比较强的模块应是高内聚低耦合的模块。,2020/12/28,计算机科学与工程系,42,模块间的耦合,2020/12/28,计算机科学与工程系,43,内容耦合ContentCoupling,如果发生下列情形,两个模块之间就发生了内容耦合。1一个模块直接访问另一个模块的内部数据;2一个模块不通过正常入口转到另一模块内部;3两个模块有一部分程序代码重迭只可能出现在汇编语言中;4一个模块有多个入口。,2020/12/28,计算机科学与工程系,44,若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。,公共耦合(CommonCoupling),2020/12/28,计算机科学与工程系,45,公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。,2020/12/28,计算机科学与工程系,46,问题公共部分的改动将影响所有调用它的模块;公共部分的数据存取无法控制;复杂程度随耦合模块的个数增加而增加。,2020/12/28,计算机科学与工程系,47,外部耦合(ExternalCoupling),一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。,2020/12/28,计算机科学与工程系,48,控制耦合ControlCoupling,如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。,2020/12/28,计算机科学与工程系,49,标记耦合StampCoupling,一个模块访问另一个模块时,彼此之间是通过简单数据参数不是控制参数、公共数据结构或外部变量来交换输入、输出信息的。,数据耦合DataCoupling,一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。,2020/12/28,计算机科学与工程系,50,两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。非直接耦合的模块独立性最强。,非直接耦合NondirectCoupling,2020/12/28,计算机科学与工程系,51,原则尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,完全不用内容耦合。,2020/12/28,计算机科学与工程系,52,,,c,,模块内聚,2020/12/28,计算机科学与工程系,53,巧合内聚(CoincidentalCohesion),巧合内聚偶然内聚。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。,2020/12/28,计算机科学与工程系,54,逻辑内聚(LogicalCohesion),这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。,2020/12/28,计算机科学与工程系,55,时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。例如初始化模块和终止模块。,时间内聚(ClassicalCohesion),2020/12/28,计算机科学与工程系,56,使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。,过程内聚(ProceduralCohesion),2020/12/28,计算机科学与工程系,57,如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。,通信内聚CommunicationCohesion,2020/12/28,计算机科学与工程系,58,2020/12/28,计算机科学与工程系,59,这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。,信息内聚InationalCohesion,2020/12/28,计算机科学与工程系,60,2020/12/28,计算机科学与工程系,61,一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。,功能内聚FunctionalCohesion,信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块所知晓。,2020/12/28,计算机科学与工程系,62,4.5结构化设计方法,首先研究、分析和审查数据流图。从软件的需求规格说明中弄清数据流加工的过程,对于发现的问题及时解决。然后根据数据流图决定问题的类型。数据处理问题典型的类型有两种变换型和事务型。针对两种不同的类型分别进行分析处理。,2020/12/28,计算机科学与工程系,63,由数据流图推导出系统的初始结构图。利用一些启发式原则来改进系统的初始结构图,直到得到符合要求的结构图为止。修改和补充数据词典。制定测试计划。,基本思想DFDSystemHierarchy,2020/12/28,计算机科学与工程系,64,事实上所有信息流都可归结为变换流,⑴变换流TransFlow,1、DataFlow的分类,2020/12/28,计算机科学与工程系,65,⑵事务流TransactionFlow,TCalloneoftheseveralsubroutinesdependingonthetypeoftheincomingtransactionrequest.当信息流具有明显的“发射中心”时,可归结为事务流。,2020/12/28,计算机科学与工程系,66,2系统结构图中的模块分类,传入模块─从下属模块取得数据,经过某些处理,再将其传送给上级模块。它传送的数据流叫做逻辑输入数据流。传出模块─从上级模块获得数据,进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑输出数据流。变换模块─它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工的数据流叫做变换数据流。协调模块─对所有下属模块进行协调和管理的模块。,,2020/12/28,计算机科学与工程系,67,2020/12/28,计算机科学与工程系,68,3变换型系统结构图,变换型数据处理问题的工作过程大致分为三步,即取得数据,变换数据和给出数据。相应于取得数据、变换数据、给出数据,变换型系统结构图由输入、中心变换和输出等三部分组成。,2020/12/28,计算机科学与工程系,69,2020/12/28,计算机科学与工程系,70,4事务型系统结构图,它接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。在事务型系统结构图中,事务中心模块按所接受的事务的类型,选择某一事务处理模块执行。各事务处理模块并列。每个事务处理模块可能要调用若干个操作模块,而操作模块又可能调用若干个细节模块。,2020/12/28,计算机科学与工程系,71,2020/12/28,计算机科学与工程系,72,5变换分析,变换分析方法由以下四步组成审查数据流图;区分有效逻辑输入、有效逻辑输出和中心变换部分;进行一级分解,设计上层模块;进行二级分解,设计输入、输出和中心变换部分的中、下层模块。区分有效逻辑输入MA、有效逻辑输出ME和中心变换MC部分划分的方法(确定边界)具有单入口、单出口的加工分别可以看成数据传入部分和数据传出部分;具有多入口或多出口的加工,则可以看成加工中心;相应于传入部分、变换中心、传出部分,变换型系统结构图由输入、中心变换和输出等三部分组成。,2020/12/28,计算机科学与工程系,73,,例1,2020/12/28,计算机科学与工程系,74,,在上图中,a,b是逻辑输入DF,c,d,e,f,g,h是逻辑输出DF,P2属于加工中心逻辑输入离物理输入端最远,但仍可以被看做系统输入的那些DF逻辑输出离物理输出端最远,但仍可以被视为系统输出的那些DF,2020/12/28,计算机科学与工程系,75,,2020/12/28,计算机科学与工程系,76,①在选择模块设计的次序时,必须对一个模块的全部直接下属模块都设计完成之后,才能转向另一个模块的下层模块的设计。,由DFDSC时,应遵循一些原则,,2020/12/28,计算机科学与工程系,77,②在设计下层模块时,应考虑模块的耦合和内聚问题,以提高初始结构图的质量。③使用“黑箱”技术在设计当前模块时,先把这个模块的所有下层模块定义成“黑箱”,在设计中利用它们时,暂时不考虑其内部结构和实现。在这一步定义好的“黑箱”,在下一步就可以对它们进行设计和加工。这样,又会导致更多的“黑箱”。最后,全部“黑箱”的内容和结构应完全被确定。,2020/12/28,计算机科学与工程系,78,④在模块划分时,一个模块的直接下属模块一般在5个左右。如果直接下属模块超过10个,可设立中间层次。⑤如果出现了以下情况,就停止模块的功能分解当模块不能再细分为明显的子任务时;当分解成用户提供的模块或程序库的子程序时;当模块的界面是输入/输出设备传送的信息时;当模块不宜再分解得过小时。,2020/12/28,计算机科学与工程系,79,6事务分析,在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能。这种数据流就叫做事务。与变换分析一样,事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统结构图。,2020/12/28,计算机科学与工程系,80,,2020/12/28,计算机科学与工程系,81,7事务分析过程,①识别事务源利用数据流图和数据词典,从问题定义和需求分析的结果中,找出各种需要处理的事务。通常,事务来自物理输入装置。有时,设计人员还必须区别系统的输入、中心加工和输出中产生的事务。,2020/12/28,计算机科学与工程系,82,②规定适当的事务型结构在确定了该数据流图具有事务型特征之后,根据模块划分理论,建立适当的事务型结构。③识别各种事务和它们定义的操作。从问题定义和需求分析中找出的事务及其操作所必需的全部信息,对于系统内部产生的事务,必须仔细地定义它们的操作。,2020/12/28,计算机科学与工程系,83,④注意利用公用模块在事务分析的过程中,如果不同事务的一些中间模块可由具有类似的语法和语义的若干个低层模块组成,则可以把这些低层模块构造成公用模块。⑤对每一事务,或对联系密切的一组事务,建立一个事务处理模块;如果发现在系统中有类似的事务,可以把它们组成一个事务处理模块。,2020/12/28,计算机科学与工程系,84,⑥对事务处理模块规定它们全部的下层操作模块⑦对操作模块规定它们的全部细节模块。变换分析是软件系统结构设计的主要方法。一般,一个大型的软件系统是变换型结构和事务型结构的混合结构。所以,我们通常利用以变换分析为主,事务分析为辅的方式进行软件结构设计。,2020/12/28,计算机科学与工程系,85,SD的总体过程,优化的前题是“Getittowork,thenmakeitfast.”,2020/12/28,计算机科学与工程系,86,,,2020/12/28,计算机科学与工程系,87,8软件模块结构的改进(启发式原则),模块功能的完善化一个完整的模块应当有以下几部分①执行规定的功能的部分;②出错处理部分。当模块不能完成规定的功能时,必须回送出错标志,出现例外情况的原因。③如果需要返回数据给它的调用者,在完成数据加工或结束时,应当给它的调用者返回一个状态码。,2020/12/28,计算机科学与工程系,88,消除重复功能,改善软件结构①完全相似在结构上完全相似,可能只是在数据类型上不一致。此时可以采取完全合并的方法。②局部相似找出其相同部分,分离出去,重新定义成一个独立的下一层模块。还可以与它的上级模块合并。,2020/12/28,计算机科学与工程系,89,2020/12/28,计算机科学与工程系,90,模块的作用范围应在控制范围之内模块的控制范围包括它本身及其所有的从属模块。模块的作用范围是指模块内一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围。如果一个判定的作用范围包含在这个判定所在模块的控制范围之内,则这种结构是简单的,否则,它的结构是不简单的。,2020/12/28,计算机科学与工程系,91,控制域,M的控制域为{M,A,B,C},作用域M中的一个判定所影响的模块。例如,上例中A的作用超出了控制域。改进方法之一,可以把A中的if移到M中;方法之二,可以把C移到A下面。,2020/12/28,计算机科学与工程系,92,尽可能减少高扇出结构,随着深度增大扇入。如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块。,2020/12/28,计算机科学与工程系,93,,避免或减少使用病态联接应限制使用如下三种病态联接①直接病态联接即模块A直接从模块B内部取出某些数据,或者把某些数据直接送到模块B内部。,2020/12/28,计算机科学与工程系,94,②公共数据域病态联接模块A和模块B通过公共数据域,直接传送或接受数据,而不是通过它们的上级模块。这种方式将使得模块间的耦合程度剧增。它不仅影响模块A和模块B,而且影响与公共数据域有关联的所有模块。,③通信模块联接即模块A和模块B通过通信模块TABLEIT传送数据。从表面看,这不是病态联接,因为模块A和模块B都未涉及通信模块TABLEIT的内部。然而,它们之间的通信(即数据传送)没有通过它们的上级模块。从这个意义上讲,这种联接是病态的。,2020/12/28,计算机科学与工程系,95,模块的大小要适中模块的大小,可以用模块中所含语句的数量的多少来衡量。把模块的大小限制在一定的范围之内。通常规定其语句行数在50~100左右,保持在一页纸之内,最多不超过500行。,设计功能可预测的模块,但要避免过分受限制的模块一个功能可预测的模块,不论内部处理细节如何,但对相同的输入数据,总能产生同样的结果。但是,如果模块内部蕴藏有一些特殊的鲜为人知的功能时,这个模块就可能是不可预测的。对于这种模块,如果调用者不小心使用,其结果将不可预测。,2020/12/28,计算机科学与工程系,96,如果一个模块的局部数据结构的大小、控制流的选择或者与外界人、硬软件的接口模式被限制死了,则很难适应用户新的要求或环境的变更。为了能够适应将来的变更,软件模块中局部数据结构的大小应当是可控制的,控制流的选择对于调用者来说,应当是可预测的。而与外界的接口应当是灵活的。,2020/12/28,计算机科学与工程系,97,软件包应满足设计约束和可移植性为了使得软件包可以在某些特定的环境下能够安装和运行,对软件包提出了一些设计约束和可移植的要求。例如,设计约束有时要求一个程序段在存储器中覆盖自身。当这种情况出现时,设计出来的软件程序结构不得不根据重复程度、访问频率、调用间隔等等特性,重新加以组织。,2020/12/28,计算机科学与工程系,98,设计的后处理,为每一个模块写一份处理说明为每一个模块提供一份接口说明确定全局数据结构和局部数据结构指出所有的设计约束和限制进行概要设计的评审进行设计的优化如果需要和可能的话,2020/12/28,计算机科学与工程系,99,4.6数据设计及文件设计,R.S.Pressman数据设计的过程为在需求分析阶段所确定的数据对象选择逻辑表示,需要对不同结构进行算法分析,以便选择一个最有效的结构;设计对于这种逻辑数据结构的一组操作,以实现各种所期望的运算。,1数据设计的原则,2020/12/28,计算机科学与工程系,100,确定对逻辑数据结构所必需的那些操作的程序模块软件包,以便限制或确定各个数据设计决策的影响范围。Pressman提出了一组原则,用来定义和设计数据。实际上,在进行需求分析时往往就开始了数据设计。,2020/12/28,计算机科学与工程系,101,1.用于软件的系统化方法也适用于数据。在导出、评审和定义软件的需求和软件系统结构时,必须定义和评审其中所用到的数据流、数据对象及数据结构的表示。应当考虑几种不同的数据组织方案,还应当分析数据设计给软件设计带来的影响。2.确定所有的数据结构和在每种数据结构上施加的操作。设计有效的数据结构,必须考虑到要对该数据结构进行的各种操作。,2020/12/28,计算机科学与工程系,102,3.应当建立一个数据词典并用它来定义数据和软件的设计。数据词典清楚地说明了各个数据之间的关系和对数据结构内各个数据元素的约束。4.低层数据设计的决策应推迟到设计过程的后期进行。在进行需求分析时确定的总体数据组织,应在概要设计阶段加以细化,在详细设计阶段才规定具体的细节。5.数据结构的表示只限于那些必须直接使用该数据结构内数据的模块才能知道。此原则就是信息隐蔽和与此相关的耦合性原则。,2020/12/28,计算机科学与工程系,103,6.应当建立一个存放有效数据结构及相关操作的库。数据结构应当设计成为可复用的。建立一个存有各种可复用的数据结构模型的部件库。7.软件设计和程序设计语言应当支持抽象数据类型的定义和实现。以上原则适用于软件工程的定义阶段和开发阶段。“清晰的信息定义是软件开发成功的关键”。,2020/12/28,计算机科学与工程系,104,2文件设计,文件设计的过程,主要分两个阶段。第一个阶段是文件的逻辑设计,主要在概要设计阶段实施。,1整理必须的数据元素在软件设计中所使用的数据,有长期的,有短期的,还有临时的。它们都可以存放在文件中,在需要时对它们进行访问。因此首先必须整理应存储的数据元素,给它们一个易于理解的名字,指明其类型和位数,以及其内容涵义。,2020/12/28,计算机科学与工程系,105,2分析数据间的关系分析在业务处理中哪些数据元素是同时使用的。把同时使用次数多的数据元素归纳成一个文件进行管理。分析数据元素的内容,研究数据元素与数据元素之间的逻辑关系,根据分析,弄清数据元素的含义及其属性。,3确定文件的逻辑设计根据数据关联性分析,明确哪些数据元素应当归于一组进行管理,把应当归于一组的数据元素进行统一布局,产生文件的逻辑设计。应用关系模型设计文件的逻辑结构时,必须使其达到第三范式3NF,以减少数据的冗余,提高存取的效率。,2020/12/28,计算机科学与工程系,106,第二个阶段是文件的物理设计,主要在软件的详细设计阶段实施4理解文件的特性对于文件的逻辑规格说明,研究从业务处理的观点来看所要求的一些特性,包括文件的使用率、追加率和删除率,以及保护和保密等。考虑需要采用什么文件组织形式。,2020/12/28,计算机科学与工程系,107,5确定文件的组织方式一般要根据文件的特性,来确定文件的组织方式。顺序文件连续文件串联文件。直接存取文件无关键字直接存取文件带关键字直接存取文件桶式直接存取文件。,2020/12/28,计算机科学与工程系,108,索引顺序文件其基本数据记录按顺序文件组织,记录排列顺序必须按关键字值升序或降序安排,且具有索引部分,也按同一关键字进行索引。分区文件这类文件主要用于存放程序。它由若干称为成员的顺序组织的记录组和索引组成。虚拟存储文件这是基于操作系统的请求页式存储管理功能而建立的索引顺序文件。倒排文件按候选属性建立索引表。,2020/12/28,计算机科学与工程系,109,6确定文件的存储介质;7确定文件的记录格式;确定文件记录中各数据项以及它们在记录中的物理安排。记录的长度设计记录的长度要确保能满足需要,还要考虑使用设备的制约和效率,尽可能与读写单位匹配,并尽可能减少处理过程中内外存的交换次数。,2020/12/28,计算机科学与工程系,110,数据项的顺序对于可变长记录,应在记录的开头记入长度信息;对于关键字项,应尽量按级别高低,顺序配置;联系较密切的数据项,应归纳在一起进行配置。数据项的属性属性相同的数据项,应尽量归纳在一起配置;数据项应按双字长,全字长,半字长和字节的属性,顺序配置。预留空间考虑到将来可能的变更或扩充,应当预先留一些空闲空间。不必统一地预留,可在有可能变更或扩充的项旁边,在相邻接处预留。8估算存取时间和存储容量。,