软件工程 Software Engineering 国防科技大学计算机学院 2004.07 2019/4/27 国防科技大学计算机学院
第八章 软件设计基础 软件设计是软件工程的重要阶段。 软件设计过程是对程序结构、数据结构和过程细节逐步求精、复审并编制文档的过程。 经过软件工程师们多年的努力形成了一些软件设计技术、质量评估标准和设计表示法并用于软件工程实践。 本章讨论与软件设计有关的主要概念, 介绍几个具体的软件设计方法。 2019/4/27 国防科技大学计算机学院
8.1软件设计过程 软件开发阶段由设计、编码和测试三个基本活动组成,其中“设计活动”是 获取高质量、低耗费、易维护软件最重要的一个环节。 第八章 软件设计基础 8.1软件设计过程 软件开发阶段由设计、编码和测试三个基本活动组成,其中“设计活动”是 获取高质量、低耗费、易维护软件最重要的一个环节。 需求分析阶段获得的需求规格说明书包括对欲实现系统的信息、功能和行为方面的描述, 这是软件设计的基础。对此采用任一种软件设计方法都将产生系统的总体结构设计(archite ctural design)、系统的数据设计(data design)和系统的过程设计(procedural design)( 图8.1)。 2019/4/27 国防科技大学计算机学院
软件设计过程 不同的软件设计方法会产生不同的设计形式。 数据设计把信息描述转换为实现软件所要求的数据结构。 8.1软件设计过程 软件设计过程 不同的软件设计方法会产生不同的设计形式。 数据设计把信息描述转换为实现软件所要求的数据结构。 总体结构设计旨在确定程序各主要部件之间的关系。 过程设计要完成每一部件的过程化描述。 根据设计结果编制代码。 设计阶段做的决策直接影响软件质量,没有良好的设计就没有稳定的系统,也不会有易维护的软件。 统计表明:设计、编码和测试这三个活动一般占用整个软件开发费用(不包括维护阶段)的75%以上。 2019/4/27 国防科技大学计算机学院
8.1软件设计过程 图8.1 开发阶段的信息流 2019/4/27 国防科技大学计算机学院
软件设计过程 软件设计也可看作将需求规格说明逐步转换为软件源代码的过程。 从工程管理的角度看,软件设计可分为概要设计和详细设计两大步骤。 8.1软件设计过程 软件设计过程 软件设计也可看作将需求规格说明逐步转换为软件源代码的过程。 从工程管理的角度看,软件设计可分为概要设计和详细设计两大步骤。 概要设计是根据需求确定软件和数据的总体框架 详细设计是将其进一步精化成软件的算法表示和数据结构。 概要设计和详细设计由若干活动组成,除总体结构设计、数据结构设计和过程设计外,许多现代应用软件,还包括一个独立的界面设计活动。 2019/4/27 国防科技大学计算机学院
8.2软件设计基本概念 软件设计基本概念是过去三十年里陆续提出的。 软件设计者根据这组概念进行设计决策, 如: 划分子部件的标准; 第八章 软件设计基础 8.2软件设计基本概念 软件设计基本概念是过去三十年里陆续提出的。 软件设计者根据这组概念进行设计决策, 如: 划分子部件的标准; 从软件的概念表示中分离出功能和数据结构的细节; 以统一的标准衡量软件设计质量等等。 2019/4/27 国防科技大学计算机学院
8.2.1抽象与逐步求精 抽象是管理、控制复杂性的基本策略 。 8.2软件设计基本概念 8.2.1抽象与逐步求精 抽象是管理、控制复杂性的基本策略 。 “抽象”是心理学概念,它要求人们将注意力集中在某一层次上考虑问题,而忽略那些低层次的细节。 使用抽象技术便于人们用“问题域”的概念和术语描述问题,而无须过早地转换为那些不熟悉的结构。 软件设计过程是,在不同抽象级别上考虑、处理问题的过程。 (1)在最高抽象级别上,用面向问题域的语言叙述“问题”,概括“问题解”的形式。 (2)不断地具体化,不断地用面向过程的语言描述问题。 (3)在最低的抽象级别上给出可直接实现的“问题解”,即程序。 2019/4/27 国防科技大学计算机学院
抽象与逐步求精 软件工程过程的每一步都是对较高一级抽象的解作一次较具体化的描述。 8.2软件设计基本概念 抽象与逐步求精 软件工程过程的每一步都是对较高一级抽象的解作一次较具体化的描述。 在系统定义阶段, 软件系统被描述为基于计算机的大系统的一个组成部分; 在软件规划和需求分析阶段,软件用问题域约定的习惯用语表达; 从概要设计过渡到详细设计时,抽象级再一次降低; 编码完成后,达到了抽象的最低级。 2019/4/27 国防科技大学计算机学院
抽象与逐步求精 在由高级抽象到低级抽象的转换过程中,伴随着一连串的过程抽象和数据抽象。 8.2软件设计基本概念 抽象与逐步求精 在由高级抽象到低级抽象的转换过程中,伴随着一连串的过程抽象和数据抽象。 过程抽象把完成一个特定功能的动作序列抽象为一个过程名和参数表,通过指定过程名和实际参数调用此过程; 数据抽象把一个数据对象的定义(或描述 )抽象为一个数据类型名,用此类型名可定义多个具有相同性质的数据对象。 2019/4/27 国防科技大学计算机学院
例8.1 不同抽象级别的软件形式 例8.1 考虑适用于低级CAD的图形软件包。 抽象1 8.2软件设计基本概念 例8.1 不同抽象级别的软件形式 例8.1 考虑适用于低级CAD的图形软件包。 抽象1 该CAD软件系统配有能与作图员进行可视化通讯的图形界面。 能用鼠标替代作图板和直尺画各种直线和曲线。 能完成所有几何计算及所有截面视图和辅助视图的设计。 图形设计的结果存在图形文件中,图形文件可包含几何的、正文的和其他各种补充设计信息。 在这一抽象级别上,问题的解用问题域本身的术语描述。 2019/4/27 国防科技大学计算机学院
不同抽象级别软件的形式 抽象2 CAD 软件任务; 用户界面任务; 创建二维图形任务; 显示图形任务; 管理图形文件任务; 8.2软件设计基本概念 不同抽象级别软件的形式 抽象2 CAD 软件任务; 用户界面任务; 创建二维图形任务; 显示图形任务; 管理图形文件任务; end CAD. 在这一抽象级别上,给出了组成CAD软件任务的所有子任务,术语与问题域有所不同,但仍然不是实现用的语言。 2019/4/27 国防科技大学计算机学院
不同抽象级别软件的形式 抽象3 例“创建二维图形任务” PROCEDURE 创建二维图形 8.2软件设计基本概念 不同抽象级别软件的形式 抽象3 例“创建二维图形任务” PROCEDURE 创建二维图形 REPEAT UNTIL <创建图形任务终止> DO WHILE <出现与数字仪的交互时> 数字仪接口任务; 判断作图请求: 线:画线任务; 圆:画圆任务; … END; 2019/4/27 国防科技大学计算机学院
不同抽象级别软件的形式 DO WHILE <出现与键盘的交互时> 键盘接口任务; 选择分析或计算: 8.2软件设计基本概念 不同抽象级别软件的形式 DO WHILE <出现与键盘的交互时> 键盘接口任务; 选择分析或计算: 辅助视图:辅助视图任务; 截面视图:截面视图任务; … END; END REPETITION; END PROCEDURE. 在这一抽象级别上,给出了初步的过程性表示,此时所有术语都是面向软件(比如采用do while结构)并且模块结构也开始明朗。求精过程还可继续下去,直至产生源代码。 2019/4/27 国防科技大学计算机学院
不同抽象级别软件的形式 数据抽象与过程抽象一样,能使设计者按不同的详细程度表示数据对象。 例 8.2软件设计基本概念 不同抽象级别软件的形式 数据抽象与过程抽象一样,能使设计者按不同的详细程度表示数据对象。 例 为CAD软件定义drawing(图)的数据对象: TYPE drawing IS STRUCTURE DEFINED number IS STRING LENGTH(12); geometry DEFINED… notes IS STRING LENGTH(256); bom DEFINED… END drawing TYPE; drawing 被表示为一种结构,各组成部件又可为某种数据抽象,如 geometry 和 bom。 2019/4/27 国防科技大学计算机学院
不同抽象级别软件的形式 抽象数据类型drawing定义完毕,即可用类型名直接说明数据对象,而不必涉及其内部构造的细节,如,可用语句 8.2软件设计基本概念 不同抽象级别软件的形式 抽象数据类型drawing定义完毕,即可用类型名直接说明数据对象,而不必涉及其内部构造的细节,如,可用语句 blueprint IS INSTANCE OF drawing; 或 schematic IS INSTANCE OF drawing; 说明blueprint和schematic具有drawing的特性。 2019/4/27 国防科技大学计算机学院
不同抽象级别软件的形式 在抽象数据类型的定义中可以附加一组操作的定义,用以确定在此类数据对象上可进行的操作。 8.2软件设计基本概念 不同抽象级别软件的形式 在抽象数据类型的定义中可以附加一组操作的定义,用以确定在此类数据对象上可进行的操作。 以抽象数据类型drawing为例,可以定义擦除(erase)、存储(save)、分类(catalog)和拷贝(copy)等操作。 若干程序设计语言(如Ada,Modula,CLU)都提供了对抽象数据类型的支持,Ada的程序包机制是对数据抽象和过程抽象的双重支持。 2019/4/27 国防科技大学计算机学院
不同抽象级别软件的形式 由N.Wirth提出的“逐步求精”概念,与“抽象”密切相关,是早期的自顶向下设计策略。 8.2软件设计基本概念 不同抽象级别软件的形式 由N.Wirth提出的“逐步求精”概念,与“抽象”密切相关,是早期的自顶向下设计策略。 “逐步求精”的主要思想是,针对某个功能的宏观描述用逐步求精的方法不断地分解,逐步确立过程细节,直至该功能用程序语言描述的算法实现为止。 求精的每一步都是用更为详细的描述替代上一层次的抽象描述,在整个设计过程中产生的,具有不同详细程度的各种描述组成系统的层次结构。 层次结构的上一层是下一层的抽象,下一层是上一层的求精。 在过程求精的同时,伴随着数据求精,无论是过程还是数据,每个求精步都蕴含着某些设计决策,设计人员必须掌握一些基本的准则和各种可能的候选方法。 2019/4/27 国防科技大学计算机学院
8.2软件设计基本概念 8.2.2模块化与信息隐藏 模块化的概念 把软件划分为可独立命名和编址的部件,每个部件称为一个模块,当把所有模块组装到一起时则获得满足问题需要的一个解。 软件总体结构体现了模块化思想。 “模块化是软件唯一能使程序获得智能化管理的一个属性”, 没有模块的程序控制路径错综复杂,变量被远距离引用等难于被人掌握。 2019/4/27 国防科技大学计算机学院
模块化与信息隐藏 求解问题的过程 假设 函数C(X)定义了问题X已被觉察到的复杂性, 8.2软件设计基本概念 模块化与信息隐藏 求解问题的过程 假设 函数C(X)定义了问题X已被觉察到的复杂性, 函数E(X)定义了求解问题X所要求的工作量(按时间计), 对于问题P1和P2, 如果 C(P1)>C(P2) (8.1a) 则 E(P1)>E(P2) (8.1b) C(P1+P2)>C(P1)+C(P2) (8.2) E(P1+P2)>E(P1)+E(P2) (8.3) 解决一个复杂问题,比解决一个简单问题耗费多。 由P1、P2组合而成的问题复杂性,比单个问题复杂性的和更大。 2019/4/27 国防科技大学计算机学院
模块化与信息隐藏 “分治法” 一个复杂问题分割成若干个可管理的小问题后更易于求解。 8.2软件设计基本概念 模块化与信息隐藏 “分治法” 一个复杂问题分割成若干个可管理的小问题后更易于求解。 当模块总数增加时,每个模块的成本减少了,但模块接口所需代价随之增加。 如果模块数为M时将获得最小开发成本,那么模块数在M附近选择,就能避免模块分割过度和不足。 这些问题涉及信息隐藏、内聚度与藕合度的概念。 2019/4/27 国防科技大学计算机学院
8.2软件设计基本概念 模块化与信息隐藏 怎样保证模块数“在M附近”? 依据什么标准划分模块? 2019/4/27 国防科技大学计算机学院
1信息隐藏 模块独立的概念 模块应该设计得使其所含信息(过程和数据)对于那些不需要这些信息的模块不可访问; 8.2软件设计基本概念 1信息隐藏 模块独立的概念 模块应该设计得使其所含信息(过程和数据)对于那些不需要这些信息的模块不可访问; 每个模块只完成一个相对独立的特定功能; 模块之间仅仅交换那些为完成系统功能必须交换的信息,即模块应该独立。 采用信息隐藏原理指导模块设计优点: 支持模块的并行开发 减少软件测试和软件维护的工作量。 2019/4/27 国防科技大学计算机学院
2内聚度 内聚度 模块内部各成分彼此结合的紧密程度。 内聚度按其高低程度可分为七级,内聚度越高越好。 低级内聚度 8.2软件设计基本概念 2内聚度 内聚度 模块内部各成分彼此结合的紧密程度。 内聚度按其高低程度可分为七级,内聚度越高越好。 低级内聚度 (1)偶然性内聚(Coincidental Cohesion)。 模块内各成分为完成一组功能而组合在一起,它们相互之间即使有关系,也很松散。 (2)逻辑性内聚(Logical Cohesion) 模块完成的诸任务逻辑上相关,如,一个模块产生所有与类型无关的输出。 (3)时间性内聚(Temporal Cohesion) 模块包含的诸任务必须在同一时间段内执行,如一个初始化模块。 2019/4/27 国防科技大学计算机学院
模块化与信息隐藏 中级内聚度 (1)过程性内聚(Procedural Cohesion) 8.2软件设计基本概念 模块化与信息隐藏 中级内聚度 (1)过程性内聚(Procedural Cohesion) 模块具有过程性内聚度指,模块内成分彼此相关,并且必须按特定的次序执行; (2)通信性内聚(Communicational Cohesion) 模块中各成份都将对数据结构的同一区域进行操作,以达到通信的目的。 2019/4/27 国防科技大学计算机学院
模块化与信息隐藏 高级内聚度 (1)顺序性内聚(Sequential Cohesion) 8.2软件设计基本概念 模块化与信息隐藏 高级内聚度 (1)顺序性内聚(Sequential Cohesion) 模块内的各处理成份均与同一功能相关,且这些处理必须顺序执行,则称顺序内聚。 (2)功能性内聚(Functional Cohesion) 模块内所有成分形成一个整体,完成单个功能。 设计软件时,应该能够识别内聚度的高低,并通过修改设计尽可能提高模块内聚度,从而获得较高的模块独立性 2019/4/27 国防科技大学计算机学院
3耦合度 耦合度 软件结构中模块间关联程度的一种度量。 8.2软件设计基本概念 3耦合度 耦合度 软件结构中模块间关联程度的一种度量。 耦合的强弱取决于模块间接口的复杂性、进入或调用模块的位置以及通过界面传送数据的多少等。 设计软件应追求尽可能松散耦合的系统。 松散耦合系统中,任一模块的设计、测试和维护都相对独立。 松散耦合系统模块间联系较少,错误在模块间传播的可能性随之变小。 模块间的耦合程度直接影响系统的可理解性、可测试性、可靠性和可维护性。 2019/4/27 国防科技大学计算机学院
模块化与信息隐藏 耦合度也分为七级: (1)非直接耦合(Nodirect Coupling) 8.2软件设计基本概念 模块化与信息隐藏 耦合度也分为七级: (1)非直接耦合(Nodirect Coupling) 两模块中任一个都不依赖对方能独立工作, 这类耦合度最低。 (2)数据耦合(Data Coupling) 两模块通过参数交换信息,信息仅限于数据。 (3)控制耦合(Control Coupling) 传递的信息含有控制信息。控制耦合通常会增加系统的复杂性,适当分解模块可望消除控制耦合。 (4)特征耦合(Stamp Coupling)。 介于数据耦合与控制耦合之间 2019/4/27 国防科技大学计算机学院
模块化与信息隐藏 (5)外部耦合(External Coupling) 8.2软件设计基本概念 模块化与信息隐藏 (5)外部耦合(External Coupling) 当若干模块均与同一个外部环境关联,如,I/O处理使所有I/O模块与特定的设备、格式和通信协议相关联。 外部耦合尽管需要,但应限制在少数几个模块上。 (6)公共耦合(Common Coupling) 若干模块通过全局的数据环境相互作用, 全局数据环境中可能含有全局变量、公用区、内存公共复盖区、任何存储介质上的文件、物理设备等。 (7)内容耦合(Content Coupling) 一个模块使用另 一模块内部的数据或控制信息;一个模块直接转移到另一模块内部等等。 设计软件时应尽量使用数据耦合,减少控制耦合,限制外部环境耦合和公共数据耦合,杜绝内容耦合。 2019/4/27 国防科技大学计算机学院
8.2软件设计基本概念 模块化与信息隐藏 模块化设计的思想适用于任何软件系统的设计。当某些软件系统,如实时软件和部分微处理机软件,因不能容忍子程序调用引起的时间开销而必须以整块软件的形式出现时,软件设计仍然应该以模块化设计的思想为指导,直至编码时再改用代入式(in—line)方法。这样,源程序中虽不含明显的模块,但模块化设计所带来的大部分益处却已被系统获得。 2019/4/27 国防科技大学计算机学院
8.2.3软件总体结构设计 软件总体结构(software architecture)应该包括两方面内容 8.2软件设计基本概念 8.2.3软件总体结构设计 软件总体结构(software architecture)应该包括两方面内容 (1)由系统中所有过程性部件(即模块)构成的层次结构, 亦称为程序结构; (2)输入输出数据结构。 软件总体结构设计的目标是产生一个模块化的程序结构并明确各模块之间的控制关系,此外还要通过定义界面,说明程序的输入输出数据流,进一步协调程序结构和数据结构。 2019/4/27 国防科技大学计算机学院
软件总体结构设计 程序结构、数据结构是逐步求精、分而治之的结果。 8.2软件设计基本概念 软件总体结构设计 程序结构、数据结构是逐步求精、分而治之的结果。 软件设计从需求定义开始,逐步分层导出程序结构和数据结构,当需求定义中所述的每个部分最终都能由一个或几个软件元素实现时,整个求解过程即告结束。 2019/4/27 国防科技大学计算机学院
软件总体结构设计 依据任何一种软件设计方法总能推导出一个软件结构。 模块内聚度和耦合度是判断结构好坏的主要标准 。 8.2软件设计基本概念 2019/4/27 国防科技大学计算机学院
软件总体结构设计 表示程序结构的工具 类树图(Tree-like diagram) Warnier—Orr图 Jackson 图等 8.2软件设计基本概念 软件总体结构设计 表示程序结构的工具 类树图(Tree-like diagram) Warnier—Orr图 Jackson 图等 2019/4/27 国防科技大学计算机学院
程序结构的术语 软件的深度(Depth)和宽度(Width)分别说明控制的层数和跨度。 8.2软件设计基本概念 程序结构的术语 软件的深度(Depth)和宽度(Width)分别说明控制的层数和跨度。 模块的“扇出率”(Fan—out)指,该模块直接控制的其他模块数。 模块的“扇入 率”(Fan—in)指,能直接控制该模块的模块数。 2019/4/27 国防科技大学计算机学院
程序结构的术语 如果一个模块控制另一模块,称前者为“主控”模块,后者为“从属”模块。 软件结构的可见域和连通域。 8.2软件设计基本概念 程序结构的术语 如果一个模块控制另一模块,称前者为“主控”模块,后者为“从属”模块。 软件结构的可见域和连通域。 模块的可见域指,该模块可直接或间接引用的一组模块; 模块的连通域指,模块可直接引用的模块。 软件的总体结构应该在考虑每个模块的细节前就确定下来。 软件设计方法鼓励人们首先致力于软件总体结构的设计,而后再进行详细设计。 每一种方法导出总体结构的具体方式不尽相同。 2019/4/27 国防科技大学计算机学院
8.2软件设计基本概念 8.2.4数据结构设计 数据结构描述各数据分量之间的逻辑关系,数据结构一经确定,数据的组织形式、访问方法、组合程度及处理策略基本上随之确定,所以数据结构是影响软件总体结构的重要因素,对数据结构的完整讨论超出本书的范围,但掌握标量、数组、链表和树等典型的数据表示方法,并能根据实际需要灵活应用十分必要。 数据结构与程序结构一样,也可以在不同的抽象级别上表示。以栈为例,作为一个抽象数据类型,在概念级上只关心“先进后出”特性,而在实现级上则要考虑物理表示及内部工作的细节,比如,用向量实现,或用链表实现等等。 2019/4/27 国防科技大学计算机学院
数据结构设计 数据结构对程序结构和过程复杂性有直接的影响,数据结构设计很重要,在很大程度上决定软件的质量。 8.2软件设计基本概念 数据结构设计 数据结构对程序结构和过程复杂性有直接的影响,数据结构设计很重要,在很大程度上决定软件的质量。 无论采用哪一种软件设计技术,没有良好的数据结构,不可能导出良好的程序结构。 数据设计是为在需求规格说明中定义的那些数据对象选择合适的逻辑表示,并确定可能作用在这些逻辑结构上的所有操作(包括选用已存在的程序包)。 数据抽象和信息隐藏两个概念是数据设计的基础。 数据设计方案不是唯一的,有时需进行算法复杂性分析后才能从多种候选中找出最佳者。 2019/4/27 国防科技大学计算机学院
8.2.5软件过程设计 程序结构仅考虑软件总体结构中模块之间的控制分层关系,而不关心模块内各处理元素和判断元素的顺序。 8.2软件设计基本概念 8.2.5软件过程设计 程序结构仅考虑软件总体结构中模块之间的控制分层关系,而不关心模块内各处理元素和判断元素的顺序。 过程设计紧跟在数据结构设计和程序结构设计之后,基本任务是描述这方面的信息。 过程包括有关处理的精确说明,如事件的顺序、确切的判断位置、循环操作以及数据的组成等等。 程序结构与软件过程相互关联,程序结构中任个模块的所有从属模块必将被引用出现在该模块的过程说明中。 2019/4/27 国防科技大学计算机学院
8.2软件设计基本概念 图8.6 模块A的内部结构 2019/4/27 国防科技大学计算机学院
8.2软件设计基本概念 图8.7 过程的层次结构 2019/4/27 国防科技大学计算机学院
8.3过程设计技术和工具 8.3.1结构化程序设计 过程设计的任务是描述算法的细节,下面讨论过程设计的技术和工具。 结构化程序设计 第八章 软件设计基础 8.3过程设计技术和工具 8.3.1结构化程序设计 过程设计的任务是描述算法的细节,下面讨论过程设计的技术和工具。 结构化程序设计 E.W.Dijkstra提出,理由是GOTO语句对程序的可读性、可测试性和可维护性带来极大的危害,应该用更可维护的控制结构替代它。 Bohm和Jacopini证明了仅用“顺序”、“分枝”和“循环”三种基本的控制构件即能构造任何单入口单出口程序,这个结论奠定了结构程序设计的理论基础。 2019/4/27 国防科技大学计算机学院
过程设计技术和工具 结构化程序设计定义 采用自顶向下逐步求精的设计方法和单入口单出口的控制构件。 8.3过程设计技术和工具 过程设计技术和工具 结构化程序设计定义 采用自顶向下逐步求精的设计方法和单入口单出口的控制构件。 自顶向下逐步求精的方法是人类解决复杂问题时常用的方法,采用这种先整体后局部,先抽象后具体的步骤开发的软件具有较清晰的层次。 仅使用单入口单出口的控制构件,程序有良好的结构特征,能降低程序的复杂性,增强程序的可读性、可维护性和可验证性,提高软件的生产率。 2019/4/27 国防科技大学计算机学院
过程设计技术和工具 结构程序设计的思想,应该在软件设计中体现出来,但这并不排除为效率或其他原因,对结构程序设计作一点修正。 8.3过程设计技术和工具 过程设计技术和工具 结构程序设计的思想,应该在软件设计中体现出来,但这并不排除为效率或其他原因,对结构程序设计作一点修正。 随着面向对象、软件重用等新的软件开发方法和技术的发展,更现实、更有效的开发途径可能是自顶向下和自底向上两种方法的有机结合。 2019/4/27 国防科技大学计算机学院
8.3.2图形表示法 流程图、盒图是描述过程细节的工具。 8.3过程设计技术和工具 8.3.2图形表示法 流程图、盒图是描述过程细节的工具。 流程图(也称为程序框图)是最常用的一种表示法,它能直观地描述过程的控制流程,最便于初 学者掌握。流程图中方框表示处理步,菱形框表示判断步,有向线段表示控制流。 顺序、分枝、循环 三个基本控制构件用流程图表达的形式如图8.8所示。 2019/4/27 国防科技大学计算机学院
图形表示法 Case结构是if—then—else结构的推广, 8.3过程设计技术和工具 图形表示法 Case结构是if—then—else结构的推广, do—while循环与repeat循环的区别仅在于测试循环条件与执行循环体的先后次序。 嵌套使用这些控制结构能逐步形成更复杂的控制流程描述。 如果对流程图中每一构件用“边框”圈起来,边界之间不出现交叉,则说明所有构件都为单入口单出口,称此程序为结构化程序(structured program)。 图8.9为一个结构化程序的流程图。 2019/4/27 国防科技大学计算机学院
8.3过程设计技术和工具 图8.8 流程图构件 2019/4/27 国防科技大学计算机学院
8.3过程设计技术和工具 图8.9 结构化程序的流程图 2019/4/27 国防科技大学计算机学院
8.3过程设计技术和工具 过程设计技术和工具 由Nassi和Sheiderman提出的盒图,也称为N—S图,它强迫程序员以结构化方式思考和解决问题,三种基本控制构件用盒图表达的形式如图8.10所示。 图8.10盒图的构件 图8.9表示的过程用盒图表示形如图8.11。 图8.11盒图 盒图的功能域(指分枝和循环结构的边界)比流程图更清晰,控制不能随意转移,并且数据的作用域容易确定。 2019/4/27 国防科技大学计算机学院
8.3过程设计技术和工具 图8.10 盒图的构件 2019/4/27 国防科技大学计算机学院
8.3过程设计技术和工具 图8.11 盒图 2019/4/27 国防科技大学计算机学院
8.3过程设计技术和工具 8.3.3 判定表 当模块中包含复杂的条件组合,并要根据这些条件选择动作时,流程图、盒图及8.3.4节将介绍的过程设计语言(PDL)都有一定的缺陷,判定表能清晰地表示出复杂的条件组合与各种动作之间的对应关系。 一张判定表由四部分组成,左上部列出所有条件,左下部列出所有可能的动作,右部为一矩阵,说明条件与动作之间的对应关系,其每列可解释为一条处理规则。 2019/4/27 国防科技大学计算机学院
判定表 例 8.2 简化的账单系统判定表 问题描述: 耗电记费系统可以采用固定价格收费和浮动价格收费两种方式。 8.3过程设计技术和工具 判定表 例 8.2 简化的账单系统判定表 问题描述: 耗电记费系统可以采用固定价格收费和浮动价格收费两种方式。 若采用固定价格方式收费,对每月耗电100千瓦小时以下的用户只征收最低标准费,超过100千瓦小时的用户按价格表A收费; 若采用浮动价格方式收费,则每月耗电100千瓦小时以下的用户按价格表A收费,超过100千瓦小时的用户按价格表B收费。 2019/4/27 国防科技大学计算机学院
8.3过程设计技术和工具 判定表 采用下述步骤产生表8.1所示判定表: ①列出与该过程(或模块)有关的动作(共四项,分别为收取最低标准费、按价格表A收费、按 价格表B收费,其他处理); ②列出所有独立条件(共四条,分别为固定价格方式、浮动价格方式、每月耗电少于100千瓦 小时,每月耗电超过100千瓦小时); ③根据问题处理描述,把条件组合与特定的动作联系起来,删去无意义的条件组合; ④定义处理规则(共5条),即指明什么情况下做什么动作。 2019/4/27 国防科技大学计算机学院
8.3过程设计技术和工具 表8.1 判定表 2019/4/27 国防科技大学计算机学院
判定表 尽管判定表能够简洁无歧义地描述处理规则,但却不能清晰地表示顺序和循环结构。 8.3过程设计技术和工具 判定表 尽管判定表能够简洁无歧义地描述处理规则,但却不能清晰地表示顺序和循环结构。 判定表常作为一种辅助设计工具与其他过程设计工具结合使用。 2019/4/27 国防科技大学计算机学院
8.3过程设计技术和工具 8.3.4过程设计语言(PDL) PDL(Procedure Design Language)也称为结构英语或伪码,是所有正文形式的过程设计工具的统称,目前有多种PDL。 PDL经常表现为一种“混杂”的形式,允许自然语言(如英语)的词汇与某种结构化程序设计语言(如Pascal、Ada等)的语法结构交织在一起,目前大多数PDL描述不能直接编译。 2019/4/27 国防科技大学计算机学院
过程设计语言(PDL) ①关键字采用固定语法并支持结构化构件、数据说明机制和模块化; ②处理部分采用自然语言描述; 8.3过程设计技术和工具 过程设计语言(PDL) ①关键字采用固定语法并支持结构化构件、数据说明机制和模块化; ②处理部分采用自然语言描述; ③允许说明简单(标量、数组等)和复杂(链表、树等)的数据结构; ④子程序的定义与调用规则不受具体接口方式的影响。 现今大多数PDL都以某种流行的高级程序设计语言作为基础,例如Ada—PDL是Ada团体中广为使用的设计工具。 2019/4/27 国防科技大学计算机学院
过程设计语言(PDL) 考察建立在通用结构化程序设计语言上的PDL原型。 基本成分 子程序定义 界面描述 数据说明 块结构 8.3过程设计技术和工具 过程设计语言(PDL) 考察建立在通用结构化程序设计语言上的PDL原型。 基本成分 子程序定义 界面描述 数据说明 块结构 分枝结构 循环结构 I/O结构 2019/4/27 国防科技大学计算机学院
过程设计语言(PDL) 数据说明的常用形式 TYPE <变量名> IS <限定词1> <限定词2> 8.3过程设计技术和工具 过程设计语言(PDL) 数据说明的常用形式 TYPE <变量名> IS <限定词1> <限定词2> 此处<变量名>既可为过程的某个局部变量,亦可为多个过程共 用的全局变量; <限定词1>为某个特定关键字(例如,SCALAR,ARRAY,LIST, STRING,STRUCTURE等); <限定词2>说明此处定义的变量在该过程或整个程序中应如何使用。 2019/4/27 国防科技大学计算机学院
过程设计语言(PDL) PDL允许定义面向具体问题的抽象数据类型。 如,在某编译器的模块设计时可能使用下面的数据说明: 8.3过程设计技术和工具 过程设计语言(PDL) PDL允许定义面向具体问题的抽象数据类型。 如,在某编译器的模块设计时可能使用下面的数据说明: TYPE table—1IS INSTANCE OF symbol—able 假定symbol—table是在另一处定义的抽象数据类型: TYPE symbol—table IS STRUCTURE DEFINED … 该PDL的块结构描述一个过程元素,即一个块内的所有语句将作为一个整体执行 形式为 BEGIN[<块名>] <语句序列> END 2019/4/27 国防科技大学计算机学院
过程设计语言(PDL) 该PDL的分枝结构有 if—then—else和case两种形式 IF<条件描述> THEN<块结构或语句> 8.3过程设计技术和工具 过程设计语言(PDL) 该PDL的分枝结构有 if—then—else和case两种形式 IF<条件描述> THEN<块结构或语句> ELSE<块结构或语句> ENDIF CASEOF<情况变量名> WHEN<第1种情况>SELECT<块结构或语句>; WHEN<第2种情况>SELECT<块结构或语句>; … WHEN<最后一种情况>SELECT<块结构或语句>; DEFAULT:<块结构或语句>; ENDCASE 2019/4/27 国防科技大学计算机学院
过程设计语言(PDL) 循环结构包括前测试循环、后测试循环和固定循环三类,表达形式分别为 DOWHILE<条件描述> <块结构或语句> 8.3过程设计技术和工具 过程设计语言(PDL) 循环结构包括前测试循环、后测试循环和固定循环三类,表达形式分别为 DOWHILE<条件描述> <块结构或语句> ENDWHILE REPEATUNTIL<条件描述> ENDREP DOFOR<循环变量>=<循环变量取值范围,表达式或序列> ENDFOR 除标准循环构件外,此PDL还提供了NEXT和EXIT两种语句,旨在支持 受限方式退出循环。EXIT将控制转到其所在循环后的第一个语句,NEXT强迫本 次循环结束,新一轮循环开始。若外层循环带标号,EXIT和NEXT能实现从多层 嵌套的内循环中直接跳出,而不必逐层退出。 在该PDL中,子程序说明为 PROCEDURE<子程序名><属性表>INTERFACE<参数表> <块结构和/或语句序列> END 2019/4/27 国防科技大学计算机学院
过程设计语言(PDL) 属性表指明 子程序的引用特性 如,INTERNAL、EXTERNAL模式 依赖于程序设计语言的实现 8.3过程设计技术和工具 过程设计语言(PDL) 属性表指明 子程序的引用特性 如,INTERNAL、EXTERNAL模式 依赖于程序设计语言的实现 输入/输出说明部分的形式 READ/WRITETO <设备> <I/O表> 或 ASK <询问> ANSWER <响应选择项> 后一形式多用于人机交互的设计。 2019/4/27 国防科技大学计算机学院
过程设计语言(PDL) PDL扩充 多任务、并行处理、异常处理、进程同步等机制。 使用某个PDL进行过程设计,应充分了解全部内容。 8.3过程设计技术和工具 过程设计语言(PDL) PDL扩充 多任务、并行处理、异常处理、进程同步等机制。 使用某个PDL进行过程设计,应充分了解全部内容。 2019/4/27 国防科技大学计算机学院
8.3过程设计技术和工具 8.3.5过程设计工具之比较 比较前述种种设计工具之优劣须基于这样一个前提,即如果使用得当,任一种工具都将对过程设计提供宝贵的支持,反之即使是最好的工具亦可能产生难于理解的设计。 衡量一个设计工具好坏的一般准则是看其所产生的过程描述是否易于理解、复审和维护,进而过程描述能否自然地转换为代码并保证设计与代码完全一致。 2019/4/27 国防科技大学计算机学院
设计工具属性 (1)模块化(Modularity):支持模块化软件的开发并提供描述接口的机制(例如直接表 示子程序和块结构); 8.3过程设计技术和工具 设计工具属性 (1)模块化(Modularity):支持模块化软件的开发并提供描述接口的机制(例如直接表 示子程序和块结构); (2)整体简洁性(Overall Simplicity):设计表示相对易学、易用、易读; (3)便于编辑(Ease of Editing):支持后续设计、测试乃至维护阶段对过程设计进 行的修改; (4)机器可读性(Machine Readability):计算机辅助软件工程(CASE)环境已被广泛接受, 一种设计表示法若能直接输入并被CASE工具识别将带来极大便利; 2019/4/27 国防科技大学计算机学院
过程设计工具之比较 (5)可维护性(Maintainability):过程设计表示应支持各种软件配置项的维护; 8.3过程设计技术和工具 过程设计工具之比较 (5)可维护性(Maintainability):过程设计表示应支持各种软件配置项的维护; (6)强制结构化(Structure Enforcement):过程设计工具应能强制设计人员采用 结构化构件,有助于产生好的设计; (7)自动产生报告(Automatic Processing):设计人员通过分析详细设计的结果往往能突 发灵感,改进设计。若存在自动处理器,能产生有关设计的分析报告必将增强设计人员在这 方面的能力; 2019/4/27 国防科技大学计算机学院
过程设计工具之比较 (8)数据表示(Data Representation):详细设计应具备表示局部与全局数据的能力; 8.3过程设计技术和工具 过程设计工具之比较 (8)数据表示(Data Representation):详细设计应具备表示局部与全局数据的能力; (9)逻辑验证(Logic Verification):能自动验证设计逻辑的正确性是软件测试 追求的最高目标,设计表示愈易于逻辑验证其可测试性愈强; (10)可编码能力(“Code to” Ability):一种设计表示若能自然地转换为代码则能减少开发 费用,降低出错率。 2019/4/27 国防科技大学计算机学院
8.3过程设计技术和工具 过程设计工具之比较 对照上述属性,到底哪一种过程设计工具最好呢?回答将因人而异。一般认为,PDL较好地组合了这组特性。PDL还可直接嵌在源代码中作为设计文档和注释,减少维护的困难;PDL描述可用一般正文编译器或字处理软件编辑;PDL自动处理器已经面世,并有可能开发出“代码自动产生器”。 然而,这并不意味着其他的设计工具一定弱于PDL,例如,流程图和盒图能直观地表示控制流程 ;判定表因能精确地描述组合条件与动作之间的对应关系,特别适用于表格驱动一类软件的开发;其他一些设计工具也自有独到之处。经验表明,具体选择过程设计工具时,人的因素可能比技术因素更具有影响力。 2019/4/27 国防科技大学计算机学院
8.4设计规格说明与评审 软件设计阶段的输出主要是设计规格说明书,结构如表8.2所示,各条款的内容是在设计求精过程中逐步确定的。 第八章 软件设计基础 8.4设计规格说明与评审 软件设计阶段的输出主要是设计规格说明书,结构如表8.2所示,各条款的内容是在设计求精过程中逐步确定的。 2019/4/27 国防科技大学计算机学院
设计规格说明与评审 设计说明书 第一节描述与设计活动有关的各个方面,该节中许多信息取自系统规格说明书和系统定义阶段产生的其他文档。 8.4设计规格说明与评审 设计规格说明与评审 设计说明书 第一节描述与设计活动有关的各个方面,该节中许多信息取自系统规格说明书和系统定义阶段产生的其他文档。 第二节具体指明引用信息的出处。 第三节设计描述是概要设计的产物,设计由信息驱动,即软件总体结构主要受数据流程、数据结构的影响,需求分析时产生的DFD或其他某种形式的数据表示将在这一节中进一步精化,用于确定软件结构。 2019/4/27 国防科技大学计算机学院
8.4设计规格说明与评审 设计规格说明与评审 第四节的模块指软件中可单独编址的部件,如函数和过程,最初用自然语言描述它们的功能,随后采用某种过程设计工具将这些自然语言描述转换为结构化描述,第五节主要描述数据组织结构,包括辅存的文件结构、全局数据(例如FORTRAN公共区)的赋值以及这些文件与全局数据的交叉访问关系。 第六节是与需求规格说明书的交叉访问表,根据交叉访问表可断定设计是否满足所有需求,这对于完成某个具体需求的模块来说十分重要。 2019/4/27 国防科技大学计算机学院
设计规格说明与评审 第七节测试的初步计划。 8.4设计规格说明与评审 设计规格说明与评审 第七节测试的初步计划。 一旦软件结构和模块间界面确定下来之后,即可制定模块单元测试和联调计划。某些场合,要求同时开发测试规格说明书与设计规格说明书, 此时第七节之内容可从设计规格说明书中删去。软件设计常常受各种限制的影响,例如物理存储器容量、特殊外部接口对装配的要求、必要的程序复盖、虚存管理和高速处理等诸多因素都可能导致设计的修改。 第八节将逐条说明这种限制和造成的影响。 第九、十两节包括若干辅助数据,如从其他文档中节选的算法描述、候选的过程、表格化数据和其他相关信息。 2019/4/27 国防科技大学计算机学院
设计规格说明与评审 这些信息是对设计的一种特殊注释,最后可开发一个基本操作规格说明书或安装手册作为附录。 8.4设计规格说明与评审 设计规格说明与评审 这些信息是对设计的一种特殊注释,最后可开发一个基本操作规格说明书或安装手册作为附录。 为了确保文档的质量,还必须对设计文档进行复审。 复审的目的在于及早发现设计中的缺陷和错误。 在大型软件的开发过程中某些错误从一个阶段传到另一个阶段呈扩大趋势,尽早发现、纠正错误所需的代价较小。 2019/4/27 国防科技大学计算机学院
设计规格说明与评审 复审包括 软件总体结构、 数据结构、 结构的界面、 模块过程细节。 重点 软件结构能否满足需求? 结构的形态是否合理? 8.4设计规格说明与评审 设计规格说明与评审 复审包括 软件总体结构、 数据结构、 结构的界面、 模块过程细节。 重点 软件结构能否满足需求? 结构的形态是否合理? 层次是否清晰? 模块的划分是否遵循模型化和信息隐藏的思想? 系统的人机界面,各模块的接口,以及出错处理是否恰当?模块的设计能否满足功能与性能要求? 选择的算法与数据结构是否合理,能否适应编程语言? 等等。 2019/4/27 国防科技大学计算机学院
设计规格说明与评审 复审 正式复审 软件开发人员、用户代表和领域专家参加 8.4设计规格说明与评审 设计规格说明与评审 复审 正式复审 软件开发人员、用户代表和领域专家参加 采用答辩形式,与会者提前审阅了文档,设计人员在对设计方案详细说明后,答复与会者的问题并记下各种重要的评审意见。 非正式复审 同行切磋、不拘时间、不拘形式。采用 “走查”法,一 名设计人员到会,与同事逐行审阅文档,记录发现的问题。 2019/4/27 国防科技大学计算机学院
设计规格说明与评审 复审应对事不对人。 软件设计人员应真诚欢迎他人提意见和建议,尽早揭露错误。 8.4设计规格说明与评审 设计规格说明与评审 复审应对事不对人。 软件设计人员应真诚欢迎他人提意见和建议,尽早揭露错误。 参加复审的其他人员应坦诚、友好,防止把复审变为质询或辩论。 对复审中提出的问题应详细记录,不要奢望所有问题都能当场解决。 复审结束前,还应对本次复审作出结论。 2019/4/27 国防科技大学计算机学院
2019/4/27 国防科技大学计算机学院
小结 软件设计的主要任务是根据需求规格说明导出系统的实现方案。 第八章 软件设计基础 小结 软件设计的主要任务是根据需求规格说明导出系统的实现方案。 软件设计在技术上可分为总体结构设计、数据设计、过程设计和界面设计四个活动;在工程上可区分为概要设计和详细设计两个阶段。 软件设计中用到基本概念包括:抽象与逐步求精;模块化与信息隐藏;软件总体结构、数据结构与软件过程。 软件过程设计中最常用的技术和工具主要为结构化程序设计、流程图、盒图、判定表和PDL语言。 软件设计阶段的输出结果为设计规格说明书,此文档经严格复审后将作为编码阶段的输入文档。 2019/4/27 国防科技大学计算机学院
谢谢 2019/4/27 国防科技大学计算机学院