1、2022-7-291第五章第五章 软件设计过程软件设计过程o软件设计是软件工程的重要阶段。软件设计是软件工程的重要阶段。o软件设计过程是对程序结构、数据结构和软件设计过程是对程序结构、数据结构和过程细节逐步求精、复审并编制文档的过过程细节逐步求精、复审并编制文档的过程程。5.1 软件设计基础软件设计基础2022-7-292从分析到设计从分析到设计2022-7-2935.1.1 5.1.1 设计过程设计过程软件开发阶段由设计、编码和测试三个基本活动组成软件开发阶段由设计、编码和测试三个基本活动组成,其中其中“设计活动设计活动”是是 获取高质量、低耗费、易维护获取高质量、低耗费、易维护软件最重要的
2、一个环节。软件最重要的一个环节。需求分析阶段获得的需求规格说明书包括对欲实现系需求分析阶段获得的需求规格说明书包括对欲实现系统的信息、功能和行为方面的描述,统的信息、功能和行为方面的描述,这是软件设计这是软件设计的基础。对此采用任一种软件设计方法都将产生系统的基础。对此采用任一种软件设计方法都将产生系统的的总体结构设计总体结构设计(architectural design)(architectural design)、系统的数、系统的数据设计据设计(data design)(data design)和系统的过程设计和系统的过程设计(procedural(procedural design)de
3、sign)。2022-7-294设计过程设计过程o数据设计数据设计把信息描述转换为实现软件所要求的数据把信息描述转换为实现软件所要求的数据结构结构。o总体结构设计总体结构设计旨在确定程序各主要部件之间的关系旨在确定程序各主要部件之间的关系。o过程设计过程设计要要完成每一部件的过程化描述。完成每一部件的过程化描述。o根据设计结果编制代码。然后交给测试人员测试根据设计结果编制代码。然后交给测试人员测试o设计阶段做的决策直接影响软件质量设计阶段做的决策直接影响软件质量,没有良好的设没有良好的设计就没有稳定的系统计就没有稳定的系统,也不会有易维护的软件。也不会有易维护的软件。o统计表明:设计、编码和测
4、试这三个活动一般占用统计表明:设计、编码和测试这三个活动一般占用整个软件开发费用整个软件开发费用(不包括维护阶段不包括维护阶段)的的75%75%以上。以上。2022-7-295开发阶段的信息流开发阶段的信息流2022-7-2965.1.2 5.1.2 软件设计基本概念软件设计基本概念o软件设计基本概念是过去三十年里陆续提出的。软件设计基本概念是过去三十年里陆续提出的。o软件设计者根据这组概念进行设计决策软件设计者根据这组概念进行设计决策如如:划分子部件划分子部件的的标准标准;从软件的概念表示中分离出功能和数据结构的细节从软件的概念表示中分离出功能和数据结构的细节;以统一的标准衡量软件设计质量等
5、等。以统一的标准衡量软件设计质量等等。2022-7-2971 1 抽象与逐步求精抽象与逐步求精抽象抽象是管理、控制复杂性的基本策略是管理、控制复杂性的基本策略 。“抽象抽象”是心理学概念是心理学概念,它要求人们将注意力集中在某一层次它要求人们将注意力集中在某一层次上考虑问题上考虑问题,而忽略那些低层次的细节。使用抽象技术便于人而忽略那些低层次的细节。使用抽象技术便于人们用们用“问题域问题域”的概念和术语描述问题的概念和术语描述问题,而无须过早地转换为而无须过早地转换为那些不熟悉的结构。那些不熟悉的结构。软件设计过程是在不同抽象级别软件设计过程是在不同抽象级别上上考虑、处理问题的过程。考虑、处理
6、问题的过程。()()在在最高抽象级别最高抽象级别上上,用用面向问题域的语言面向问题域的语言叙述叙述“问题问题”,概括概括“问题解问题解”的形式的形式。()()不断地具体化不断地具体化,不断地用不断地用面向过程的语言面向过程的语言描述问题描述问题。()()在最低的抽象级别上给出可直接在最低的抽象级别上给出可直接实现的实现的“问题解问题解”,即,即程序。程序。2022-7-298软件工程过程的每一步都是对较高一级抽象的解作一软件工程过程的每一步都是对较高一级抽象的解作一次较具体化的描述。次较具体化的描述。o在在系统定义系统定义阶段阶段,软件系统被描述为基于计算机的软件系统被描述为基于计算机的大系统
7、的一个组成部分大系统的一个组成部分;o在在软件规划和需求分析软件规划和需求分析阶段阶段,软件用问题域约定的习软件用问题域约定的习惯用语表达惯用语表达;o从从概要设计过渡到详细设计概要设计过渡到详细设计时时,抽象级再一次降低抽象级再一次降低;o编码编码完成后完成后,达到了抽象的最低级。达到了抽象的最低级。2022-7-299在由高级抽象到低级抽象的转换过程中在由高级抽象到低级抽象的转换过程中,伴随着一连伴随着一连串的过程抽象和数据抽象。串的过程抽象和数据抽象。o过程抽象过程抽象把完成一个特定功能的动作序列抽象为一把完成一个特定功能的动作序列抽象为一个过程名和参数表,通过指定过程名和实际参数调用个
8、过程名和参数表,通过指定过程名和实际参数调用此过程此过程;o数据抽象数据抽象把一个数据对象的定义把一个数据对象的定义(或描述或描述 )抽象为一抽象为一个数据类型名,用此类型名可定义多个具有相同性质个数据类型名,用此类型名可定义多个具有相同性质的数据对象。的数据对象。2022-7-2910不同抽象级别的软件形式不同抽象级别的软件形式例例5 51 1考虑适用于低级考虑适用于低级CADCAD的图形软件包。的图形软件包。抽象抽象1 1该该CADCAD软件系统配有能与作图员进行可视化通讯的图形界面。软件系统配有能与作图员进行可视化通讯的图形界面。能用鼠标替代作图板和直尺画各种直线和曲线。能用鼠标替代作图
9、板和直尺画各种直线和曲线。能完成所有几何计算及所有截面视图和辅助视图的设计。能完成所有几何计算及所有截面视图和辅助视图的设计。图形设计的结果存在图形文件中图形设计的结果存在图形文件中,图形文件可包含几何的、正图形文件可包含几何的、正文的和其他各种补充设计信息。文的和其他各种补充设计信息。在这一抽象级别上在这一抽象级别上,问题的解用问题域本身的术语描述。问题的解用问题域本身的术语描述。2022-7-2911抽象抽象2 2CADCAD软件任务软件任务;用户界面任务用户界面任务;创建二维图形任务创建二维图形任务;显示图形任务显示图形任务;管理图形文件任务管理图形文件任务;end CAD.end CA
10、D.在这一抽象级别上在这一抽象级别上,给出了组成给出了组成CADCAD软件任务的所有子任务软件任务的所有子任务,术语与问题域有所不同术语与问题域有所不同,但仍然不是实现用的语言。但仍然不是实现用的语言。2022-7-2912抽象抽象3 3例例“创建二维图形任务创建二维图形任务”PROCEDURE PROCEDURE 创建二维图形创建二维图形REPEATREPEATUNTILUNTIL DODOWHILEWHILE 数字仪接口任务数字仪接口任务;判断作图请求判断作图请求:线线:画线任务画线任务;圆圆:画圆任务画圆任务;END;END;2022-7-2913DODOWHILEWHILE 键盘接口任
11、务键盘接口任务;选择分析或计算选择分析或计算:辅助视图辅助视图:辅助视图任务辅助视图任务;截面视图截面视图:截面视图任务截面视图任务;ENDEND;END REPETITIONEND REPETITION;END PROCEDUREEND PROCEDURE在这一抽象级别上在这一抽象级别上,给出了初步的过程性表示给出了初步的过程性表示,此时所有术语此时所有术语都是面向软件都是面向软件(比如采用比如采用do whiledo while结构结构)并且模块结构也开始明并且模块结构也开始明朗。求精过程还可继续下去朗。求精过程还可继续下去,直至产生源代码。直至产生源代码。2022-7-2914数据抽象与
12、过程抽象一样数据抽象与过程抽象一样,能使设计者按不同的详细程度能使设计者按不同的详细程度表示数据对象。表示数据对象。例例为为CADCAD软件定义软件定义drawing(drawing(图图)的数据对象的数据对象:TYPE TYPE drawing IS STRUCTURE DEFINEDdrawing IS STRUCTURE DEFINEDnumber number IS STRING LENGTH(12);IS STRING LENGTH(12);geometry DEFINEDgeometry DEFINEDnotes notes IS STRING LENGTH(256);IS STR
13、ING LENGTH(256);bombom DEFINEDDEFINEDEND drawing TYPE;END drawing TYPE;drawingdrawing被表示为一种结构被表示为一种结构,各组成部件又可为某种数据各组成部件又可为某种数据抽象抽象,如如geometry geometry 和和bombom。2022-7-2915抽象数据类型抽象数据类型drawingdrawing定义完毕定义完毕,即可用类型名直接说即可用类型名直接说明数据对象明数据对象,而不必涉及其内部构造的细节而不必涉及其内部构造的细节,如如,可用可用语句语句blueprint blueprint IS INST
14、ANCE OF drawing;IS INSTANCE OF drawing;或或schematic schematic IS INSTANCE OF drawing;IS INSTANCE OF drawing;说明说明blueprintblueprint和和schematicschematic具有具有drawingdrawing的特性。的特性。o在抽象数据类型的定义中可以附加一组操作的定义在抽象数据类型的定义中可以附加一组操作的定义,用以确定在此类数据对象上可进行的操作。用以确定在此类数据对象上可进行的操作。o 以抽象数据类型以抽象数据类型drawingdrawing为例为例,可以定义擦除
15、可以定义擦除(erase)(erase)、存储、存储(save)(save)、分类、分类(catalog)(catalog)和拷贝和拷贝(copy)(copy)等操作。等操作。2022-7-2916o由由N.WirthN.Wirth提出提出的的“逐步求精逐步求精”概念概念,与与“抽象抽象”密密切相关切相关,是是早期的自顶向下设计策略早期的自顶向下设计策略。o“逐步求精逐步求精”的的主要思想是针对某个功能的宏观描主要思想是针对某个功能的宏观描述用逐步求精的方法不断地分解述用逐步求精的方法不断地分解,逐步确立过程细节逐步确立过程细节,直至该功能用程序语言描述的算法实现为止直至该功能用程序语言描述的
16、算法实现为止。o求精的每一步都是用更为详细的描述替代上一层次求精的每一步都是用更为详细的描述替代上一层次的抽象描述的抽象描述,在整个设计过程中产生的,具有不同详在整个设计过程中产生的,具有不同详细程度的各种描述组成系统的层次结构。细程度的各种描述组成系统的层次结构。o层次结构的上一层是下一层的抽象层次结构的上一层是下一层的抽象,下一层是上一层下一层是上一层的求精的求精2022-7-29172 2 模块化与信息隐藏模块化与信息隐藏o模块化的概念模块化的概念把软件划分为可独立命名和编址的部件,每个部件称为一把软件划分为可独立命名和编址的部件,每个部件称为一个模块个模块,当把所有模块组装到一起时则获
17、得满足问题需要的一当把所有模块组装到一起时则获得满足问题需要的一个解。个解。o软件总体结构体现了模块化思想软件总体结构体现了模块化思想。o“模块化是软件唯一能使程序获得智能化管理的一个属性模块化是软件唯一能使程序获得智能化管理的一个属性”,完全由一个模块构成的程序,程序控制路径错综复杂完全由一个模块构成的程序,程序控制路径错综复杂,变量被变量被远距离引用,使得程序难于理解与掌握。远距离引用,使得程序难于理解与掌握。下面通过考察一个问题求解的过程来说明下面通过考察一个问题求解的过程来说明2022-7-2918求解问题的过程求解问题的过程假设假设函数函数C(X)C(X)定义了问题定义了问题X X已
18、被觉察到的复杂性已被觉察到的复杂性,函数函数E(X)E(X)定义了求解问题定义了求解问题X X所要求的工作量所要求的工作量(按时间计按时间计),对于问题对于问题P1P1和和P2,P2,如果如果C(P1)C(P1)C(P2)C(P2)(8(81a)1a)则则E(P1)E(P1)E(P2)E(P2)(8(81b)1b)C(P1+P2)C(P1+P2)C(P1)+C(P2)C(P1)+C(P2)(8(82)2)E(P1+P2)E(P1+P2)E(P1)+E(P2)E(P1)+E(P2)(8(83)3)o解决一个复杂问题解决一个复杂问题,比解决一个简单问题耗费多。比解决一个简单问题耗费多。o由由P1P
19、1、P2P2组合而成的问题复杂性组合而成的问题复杂性,比单个问题复杂性的和更比单个问题复杂性的和更大。大。2022-7-2919“分治法分治法”一个复杂问题分割成若干个可管理的小问题后更易一个复杂问题分割成若干个可管理的小问题后更易于求解。但并不意味着可以无限制的划分下去于求解。但并不意味着可以无限制的划分下去如下图所示:对于给定的一个问题如下图所示:对于给定的一个问题o当模块总数增加时当模块总数增加时,每个模块的成本减少了每个模块的成本减少了,但模块但模块接口所需代价随之增加,致使软件总耗费呈一抛物线。接口所需代价随之增加,致使软件总耗费呈一抛物线。o如果模块数为如果模块数为M M时将获得最
20、小开发成本时将获得最小开发成本,那么模块数那么模块数在在M M附近选择附近选择,就能避免模块分割过度和不足。就能避免模块分割过度和不足。这些问题涉及信息隐藏、内聚度与藕合度的概念。这些问题涉及信息隐藏、内聚度与藕合度的概念。2022-7-2920o怎样保证模块数怎样保证模块数“在在M M附近附近”?o依据什么标准划分模块依据什么标准划分模块?2022-7-2921信息隐藏信息隐藏o模块应该设计得使其所含信息模块应该设计得使其所含信息(过程和数据过程和数据)对于那些不需要对于那些不需要这些信息的模块不可访问这些信息的模块不可访问;o每个模块只完成一个相对独立的特定功能每个模块只完成一个相对独立的
21、特定功能;o模块之间仅仅交换那些为完成系统功能必须交换的信息模块之间仅仅交换那些为完成系统功能必须交换的信息,即即模块应该独立。模块应该独立。显然,模块独立的概念是模块化、抽象、信息隐蔽、和局部化显然,模块独立的概念是模块化、抽象、信息隐蔽、和局部化等概念的直接结果等概念的直接结果采用信息隐藏原理指导模块设计采用信息隐藏原理指导模块设计优点优点:o支持模块的并行开发支持模块的并行开发o减少减少软件软件测试和测试和软件软件维护的工作量。维护的工作量。2022-7-29223 3耦合与内聚度耦合与内聚度内聚内聚内聚度:模块内部各成分彼此结合的紧密程度。内聚度:模块内部各成分彼此结合的紧密程度。内聚
22、度按其高低程度可分为七级内聚度按其高低程度可分为七级,内聚度越高越好。内聚度越高越好。2022-7-2923()()偶然性内聚偶然性内聚(Coincidental Cohesion)(Coincidental Cohesion)。模块内各成分为完成一组功能而组合在一起模块内各成分为完成一组功能而组合在一起,它们相互它们相互之间即使有关系之间即使有关系,也很松散。也很松散。函数函数A函数函数B函数函数C函数函数D函数函数E低级内聚度低级内聚度2022-7-2924()()逻 辑 性 内 聚逻 辑 性 内 聚(Logical Cohesion)(Logical Cohesion)模块完成的诸任务逻
23、辑模块完成的诸任务逻辑上相关上相关,如如,一个模块产生所一个模块产生所有与类型无关的输出。有与类型无关的输出。2022-7-2925()()时间性内聚时间性内聚(Temporal Cohesion)(Temporal Cohesion)模块包含的诸任务必须在同一时间段内执行模块包含的诸任务必须在同一时间段内执行,如一个初如一个初始化模块。始化模块。2022-7-2926()()过程性内聚过程性内聚(Procedural Cohesion)(Procedural Cohesion)模块具有过程性内聚度是指模块内成分彼此相关模块具有过程性内聚度是指模块内成分彼此相关,并且必须按特定的次序执行并且必
24、须按特定的次序执行;函数函数A函数函数B函数函数C(循环)(判定)(计算)中级内聚度中级内聚度2022-7-2927()()通信性内聚通信性内聚(Communicational Cohesion)(Communicational Cohesion)模块中各成份都将对数据结构的同一区域进行操模块中各成份都将对数据结构的同一区域进行操作作,以达到通信的目的。以达到通信的目的。函数函数A函数函数B函数函数C数据集2022-7-29282022-7-2929()()顺序性内聚顺序性内聚(Sequential Cohesion)(Sequential Cohesion)模块内的各处理成份均与同一功能相关
25、模块内的各处理成份均与同一功能相关,且这且这些处理必须顺序执行些处理必须顺序执行,则称顺序内聚则称顺序内聚。高级内聚度高级内聚度2022-7-2930()()功能性内聚功能性内聚(Functional Cohesion)(Functional Cohesion)模块内所有成分形成一个整体模块内所有成分形成一个整体,完成单个功能完成单个功能。设计软件时设计软件时,应该能够识别内聚度的高低,并通过修改设计应该能够识别内聚度的高低,并通过修改设计尽可能提高模块内聚度尽可能提高模块内聚度,从而获得较高的模块独立性从而获得较高的模块独立性高级内聚度高级内聚度函数A-处理1函数B-处理2函数C-处理320
26、22-7-2931耦合度耦合度软件结构中模块间关联程度的一种度量。软件结构中模块间关联程度的一种度量。o耦合的强弱取决于模块间接口的复杂性、进入或调耦合的强弱取决于模块间接口的复杂性、进入或调用模块的位置以及通过界面传送数据的多少等。用模块的位置以及通过界面传送数据的多少等。o设计软件应追求尽可能松散耦合的系统。设计软件应追求尽可能松散耦合的系统。o松散耦合系统中松散耦合系统中,任一模块的设计、测试和维护任一模块的设计、测试和维护都都相对独立。相对独立。o松散耦合系统模块间联系较少松散耦合系统模块间联系较少,错误在模块间传播的错误在模块间传播的可能性随之变小。可能性随之变小。o模块间的耦合程度
27、直接影响系统的可理解性、可测模块间的耦合程度直接影响系统的可理解性、可测试性、可靠性和可维护性。试性、可靠性和可维护性。2022-7-2932耦合度耦合度耦合度也分为七级耦合度也分为七级2022-7-2933()()非直接耦合非直接耦合(N o d i r e c t(N o d i r e c t Coupling)Coupling)两模块 中 任 一两模块 中 任 一个都不依赖对方能个都不依赖对方能独立工作独立工作,这类耦这类耦合度最低。合度最低。2022-7-2934()()数据耦合数据耦合(Data Coupling)(Data Coupling)两模块通过参数交换信息两模块通过参数交
28、换信息,信息仅限于数据信息仅限于数据。2022-7-2935()()控 制 耦 合控 制 耦 合(Control Coupling)(Control Coupling)传递的信息含有控传递的信息含有控制信息。控制耦合通常制信息。控制耦合通常会增加系统的复杂性会增加系统的复杂性,适当分解模块可望消除适当分解模块可望消除控制耦合。控制耦合。2022-7-2936()()特征耦合特征耦合(Stamp Coupling)-(Stamp Coupling)-标记耦合。标记耦合。介于数据耦合与控制耦合之间介于数据耦合与控制耦合之间2022-7-2937()()外部耦合外部耦合(External Coupl
29、ing)(External Coupling)当若干模块均与同一个外部环境关联当若干模块均与同一个外部环境关联,如如,I/O,I/O处处理使所有理使所有I/OI/O模块与特定的设备、格式和通信协议相模块与特定的设备、格式和通信协议相关联关联。外部耦合尽管需要外部耦合尽管需要,但应限制在少数几个模块上。但应限制在少数几个模块上。2022-7-2938()()公共耦合公共耦合(Common Coupling)(Common Coupling)若干模块通过全局的数据环境相互作用若干模块通过全局的数据环境相互作用,全局数据环境中全局数据环境中可能含有全局变量、公用区、内存公共复盖区、任何存储介质可能含
30、有全局变量、公用区、内存公共复盖区、任何存储介质上的文件、物理设备等。上的文件、物理设备等。2022-7-2939()()内容耦合内容耦合(Content Coupling)(Content Coupling)一个模块使用另一个模块使用另 一模块内部的数据或控制信息;一个模一模块内部的数据或控制信息;一个模块直接转移到另一模块内部等等。块直接转移到另一模块内部等等。设计软件时应尽量使用数据耦合设计软件时应尽量使用数据耦合,减少控制耦合减少控制耦合,限制外部限制外部环境耦合和公共数据耦合环境耦合和公共数据耦合,杜绝内容耦合。杜绝内容耦合。2022-7-29405.1.3 5.1.3 软件总体结构
31、设计软件总体结构设计软件总体结构软件总体结构(software architecture)(software architecture)应该包括两应该包括两方面内容方面内容()()由系统中所有过程性部件由系统中所有过程性部件(即模块即模块)构成的层次构成的层次结构结构,亦称为程序结构亦称为程序结构;()()输入输出数据结构。输入输出数据结构。软件总体结构设计的目标是产生一个模块化的程软件总体结构设计的目标是产生一个模块化的程序结构并明确各模块之间的控制关系序结构并明确各模块之间的控制关系,此外还要通过此外还要通过定义界面定义界面,说明程序的输入输出数据流说明程序的输入输出数据流,进一步协调程进
32、一步协调程序结构和数据结构。序结构和数据结构。2022-7-2941软件设计从需求定义开始软件设计从需求定义开始,逐步分层导出程序结构和数据逐步分层导出程序结构和数据结构结构,当需求定义中所述的每个部分最终都能由一个或几个软当需求定义中所述的每个部分最终都能由一个或几个软件元素实现时件元素实现时,整个求解过程即告结束。整个求解过程即告结束。2022-7-2942o依据任何一种软件设计方法总能推导出一个软件结构。依据任何一种软件设计方法总能推导出一个软件结构。o模块内聚度和耦合度是判断结构好坏的主要标准模块内聚度和耦合度是判断结构好坏的主要标准 。2022-7-29435.1.45.1.4程序结
33、构设计程序结构设计o程序结构也称为控制层次结构。仅考虑软件总体结程序结构也称为控制层次结构。仅考虑软件总体结构中模块之间的控制分层关系构中模块之间的控制分层关系,而不关心模块内各处而不关心模块内各处理元素和判断元素的顺序理元素和判断元素的顺序。o程序结构与软件过程相互关联,程序结构中任一模程序结构与软件过程相互关联,程序结构中任一模块的所有从属模块必将被引用出现在该模块的过程说块的所有从属模块必将被引用出现在该模块的过程说明中。明中。2022-7-2944表示程序结构的工具表示程序结构的工具树形图树形图(Tree(Treelike diagram)like diagram)WarnierWar
34、nierOrrOrr图图Jackson Jackson 图等图等2022-7-2945程序结构的术语程序结构的术语o软件的深度软件的深度(Depth)(Depth)和宽度和宽度(Width)(Width)分别说明控制的层分别说明控制的层数和跨度数和跨度。o模块的模块的“扇出率扇出率”(Fan(Fanout)out)指指,该模块直接控制的该模块直接控制的其他模块数其他模块数。o模块的模块的“扇入扇入 率率”(Fan(Fanin)in)指指,能直接控制该模块能直接控制该模块的模块数。的模块数。2022-7-29465.1.5 5.1.5 数据结构设计数据结构设计n数据结构描述各数据分量之间的逻辑关
35、系数据结构描述各数据分量之间的逻辑关系,数据结构一经确数据结构一经确定定,数据的组织形式、访问方法、组合程度及处理策略基本数据的组织形式、访问方法、组合程度及处理策略基本上随之确定上随之确定,所以数据结构是影响软件总体结构的重要因素。所以数据结构是影响软件总体结构的重要因素。n数据结构与程序结构一样数据结构与程序结构一样,也可以在不同的抽象级别上表示。也可以在不同的抽象级别上表示。以栈为例以栈为例,作为一个抽象数据类型作为一个抽象数据类型,在概念级上只关心在概念级上只关心“先进先进后出后出”特性特性,而在实现级上则要考虑物理表示及内部工作的而在实现级上则要考虑物理表示及内部工作的细节细节,比如
36、比如,用向量实现用向量实现,或用链表实现等等。或用链表实现等等。n数据结构对程序结构和过程复杂性有直接的影响数据结构对程序结构和过程复杂性有直接的影响,数据结构数据结构设计设计很很重要重要,在很大程度上决定软件的质量。在很大程度上决定软件的质量。n无论采用哪一种软件设计技术无论采用哪一种软件设计技术,没有良好的数据结构,不可没有良好的数据结构,不可能导出良好的程序结构。能导出良好的程序结构。2022-7-29475.1.65.1.6软件过程设计软件过程设计o过程设计紧跟在数据结构设计和程序结构设计之后过程设计紧跟在数据结构设计和程序结构设计之后,基本任务是描述模块内各处理元素和判断元素的顺序。
37、基本任务是描述模块内各处理元素和判断元素的顺序。o过程包括有关处理的精确说明过程包括有关处理的精确说明,如事件的顺序、确切如事件的顺序、确切的判断位置、循环操作以及数据的组成等等。的判断位置、循环操作以及数据的组成等等。o程序结构与软件过程相互关联,程序结构中任一模块程序结构与软件过程相互关联,程序结构中任一模块的所有从属模块必将被引用出现在该模块的过程说明的所有从属模块必将被引用出现在该模块的过程说明中。中。2022-7-2948图图8 8.6 6 模块模块A A的内部结构的内部结构2022-7-2949图图8 8.7 7 过程的层次结构过程的层次结构2022-7-29505.1.7 5.1
38、.7 过程设计技术和工具过程设计技术和工具过程设计的任务是描述算法的细节。过程设计的任务是描述算法的细节。o结构化程序设计结构化程序设计E.W.DijkstraE.W.Dijkstra提出提出,理由是理由是GOTOGOTO语句对程序的可读性、语句对程序的可读性、可测试性和可维护性带来极大的危害可测试性和可维护性带来极大的危害,应该用更可维应该用更可维护的控制结构替代它。护的控制结构替代它。BohmBohm和和JacopiniJacopini证明了仅用证明了仅用“顺序顺序”、“分枝分枝”和和“循环循环”三种基本的控制构件即能构造任何单入口单三种基本的控制构件即能构造任何单入口单出口程序出口程序,
39、这个结论奠定了结构程序设计的理论基础这个结论奠定了结构程序设计的理论基础。1 结构化程序设计结构化程序设计2022-7-2951o结构化程序设计定义结构化程序设计定义采用自顶向下逐步求精的设计方法和单入口单出口采用自顶向下逐步求精的设计方法和单入口单出口的控制构件。的控制构件。o自顶向下逐步求精的方法是人类解决复杂问题时常自顶向下逐步求精的方法是人类解决复杂问题时常用的方法用的方法,采用这种先整体后局部采用这种先整体后局部,先抽象后具体的步先抽象后具体的步骤开发的软件具有较清晰的层次。骤开发的软件具有较清晰的层次。o仅使用单入口单出口的控制构件仅使用单入口单出口的控制构件,程序有良好的结程序有
40、良好的结构特征构特征,能降低程序的复杂性能降低程序的复杂性,增强程序的可读性、可增强程序的可读性、可维护性和可验证性维护性和可验证性,提高软件的生产率。提高软件的生产率。o 随着面向对象、软件重用等新的软件开发方法和技随着面向对象、软件重用等新的软件开发方法和技术的发展术的发展,更现实、更有效的开发途径可能是自顶向更现实、更有效的开发途径可能是自顶向下和自底向上两种方法下和自底向上两种方法的的有机结合。有机结合。2022-7-2952流程图、盒图是描述过程细节的工具。流程图、盒图是描述过程细节的工具。流程图流程图(也称为程序框图也称为程序框图)是最常用的一种表示法是最常用的一种表示法,它它能直
41、观地描述过程的控制流程能直观地描述过程的控制流程,最便于初最便于初 学者掌握。学者掌握。流程图中方框表示处理步流程图中方框表示处理步,菱形框表示判断步菱形框表示判断步,有向线有向线段表示控制流。段表示控制流。顺序、分枝顺序、分枝、循环循环三个基本控制构件用流程图三个基本控制构件用流程图表达的形式如图表达的形式如图8 88 8所示。所示。图图8 89 9为一个结构化程序的流程图。为一个结构化程序的流程图。2 图形表示法图形表示法2022-7-2953图图8 8.8 8 流程图构件流程图构件2022-7-2954 2022-7-2955由由NassiNassi和和SheidermanSheider
42、man提出的盒图提出的盒图,也称为也称为NSNS图图,它它强迫程序员以结构化方式思考和解决问题强迫程序员以结构化方式思考和解决问题,三种基本三种基本控制构件用盒图表达的形式如图控制构件用盒图表达的形式如图8 81010所示。所示。图图8 81010盒图的构件盒图的构件图图8 89 9表示的过程用盒图表示形如图表示的过程用盒图表示形如图8 81111。图图8 81111盒图盒图盒图的功能域盒图的功能域(指分枝和循环结构的边界指分枝和循环结构的边界)比流程比流程图更清晰图更清晰,控制不能随意转移控制不能随意转移,并且数据的作用域容易并且数据的作用域容易确定。确定。2022-7-2956图图8 8.
43、10 10 盒图的构件盒图的构件2022-7-2957图图 8.11 盒图盒图2022-7-2958oPAD也设置了五种基本控制结构的图也设置了五种基本控制结构的图式,并允许递归使用。式,并允许递归使用。2022-7-29592022-7-2960对应于增量型循环结构对应于增量型循环结构for i:=n1 to n2 step n3 do在在PAD中有相应的循环控制结构中有相应的循环控制结构2022-7-29613 3 判定表判定表o当模块中包含复杂的条件组合当模块中包含复杂的条件组合,并要根据这些条件选并要根据这些条件选择动作时择动作时,流程图、盒图及将介绍的过程设计语言流程图、盒图及将介绍
44、的过程设计语言(PDL)(PDL)都有一定的缺陷,判定表能清晰地表示出复杂都有一定的缺陷,判定表能清晰地表示出复杂的条件组合与各种动作之间的对应关系。的条件组合与各种动作之间的对应关系。o一张判定表由四部分组成一张判定表由四部分组成,左上部列出所有条件左上部列出所有条件,左左下部列出所有可能的动作下部列出所有可能的动作,右部为一矩阵右部为一矩阵,说明条件与说明条件与动作之间的对应关系动作之间的对应关系,其每列可解释为一条处理规则。其每列可解释为一条处理规则。2022-7-2962问题描述:问题描述:耗电记费系统可以采用固定价格收费和浮动价格收费耗电记费系统可以采用固定价格收费和浮动价格收费两种
45、方式。两种方式。o若采用固定价格方式收费若采用固定价格方式收费,对每月耗电对每月耗电100100千瓦小时千瓦小时以下的用户只征收最低标准费以下的用户只征收最低标准费,超过超过100100千瓦小时的用千瓦小时的用户按价格表户按价格表A A收费收费;o若采用浮动价格方式收费若采用浮动价格方式收费,则每月耗电则每月耗电100100千瓦小时千瓦小时以下的用户按价格表以下的用户按价格表A A收费收费,超过超过100100千瓦小时的用户千瓦小时的用户按价格表按价格表B B收费。收费。例例82简化的账单系统判定表简化的账单系统判定表2022-7-2963采用下述步骤产生表采用下述步骤产生表8 8.1 1所示
46、判定表所示判定表:列出与该过程列出与该过程(或模块或模块)有关的动作有关的动作(共四项共四项,分别为分别为收取最低标准费、按价格表收取最低标准费、按价格表A A收费、按收费、按 价格表价格表B B收费收费,其他处理其他处理););列出所有独立条件列出所有独立条件(共四条共四条,分别为固定价格方式、分别为固定价格方式、浮动价格方式、每月耗电少于浮动价格方式、每月耗电少于100100千瓦千瓦 小时小时,每月耗每月耗电超过电超过100100千瓦小时千瓦小时););根据问题处理描述根据问题处理描述,把条件组合与特定的动作联系把条件组合与特定的动作联系起来起来,删去无意义的条件组合删去无意义的条件组合;
47、定义处理规则定义处理规则(共共5 5条条),即指明什么情况下做什么,即指明什么情况下做什么动作。动作。2022-7-2964表表8 8.1 1 判定表判定表2022-7-2965o尽管判定表能够简洁无歧义地描述处理规则尽管判定表能够简洁无歧义地描述处理规则,但却不但却不能清晰地表示顺序和循环结构。能清晰地表示顺序和循环结构。o判定表常作为一种辅助设计工具与其他过程设计工判定表常作为一种辅助设计工具与其他过程设计工具结合使用。具结合使用。2022-7-29662022-7-29672022-7-29684 4 过程设计语言过程设计语言(PDL)(PDL)oPDL(ProcedurePDL(Pro
48、cedure Design Language)Design Language)也称为结构英语也称为结构英语或伪码或伪码,是所有正文形式的过程设计工具的统称是所有正文形式的过程设计工具的统称,目前目前有多种有多种PDLPDL。oPDLPDL经常表现为一种经常表现为一种“混杂混杂”的形式的形式,允许自然语言允许自然语言(如英语如英语)的词汇与某种结构化程序设计语言的词汇与某种结构化程序设计语言(如如PascalPascal、AdaAda等等)的语法结构交织在一起,目前大多数的语法结构交织在一起,目前大多数PDLPDL描述不能直接编译。描述不能直接编译。2022-7-2969关键字采用固定语法并支持
49、结构化构件、数据说明关键字采用固定语法并支持结构化构件、数据说明机制和模块化机制和模块化;处理部分采用自然语言描述处理部分采用自然语言描述;允许说明简单允许说明简单(标量、数组等标量、数组等)和复杂和复杂(链表、树等链表、树等)的数据结构的数据结构;子程序的定义与调用规则不受具体接口方式的影响。子程序的定义与调用规则不受具体接口方式的影响。2022-7-2970o考察建立在通用结构化程序设计语言上的考察建立在通用结构化程序设计语言上的PDLPDL原型。原型。o基本成分基本成分子程序定义界面描述子程序定义界面描述数据说明块结构数据说明块结构分枝结构循环结构分枝结构循环结构I/OI/O结构结构20
50、22-7-2971数据说明的常用形式数据说明的常用形式TYPETYPE ISIS 1 2此处此处 既可为过程的某个局部变量既可为过程的某个局部变量,亦可为多亦可为多个过程共用的全局变量个过程共用的全局变量;1 为 某 个 特 定 关 键 字为 某 个 特 定 关 键 字(例例如如,SCALAR,ARRAY,LIST,STRING,STRUCTURE,SCALAR,ARRAY,LIST,STRING,STRUCTURE等等););2说明此处定义的变量在该过程或整个程序说明此处定义的变量在该过程或整个程序中应如何使用。中应如何使用。2022-7-2972PDLPDL允许定义面向具体问题的抽象数据类