1、软 件 设 计 Software Design,第 三 章 Chapter 3,第三章 软件设计,3.1 软件设计概述,3.2 软件体系结构设计,3.3 模块分解,3.5 详细设计描述工具,3.6 用户界面设计,3.4 面向数据流的设计方法*,3.1 软件设计概述,3.1.1 软件设计在开发阶段中的重要性,3.1.2 软件设计阶段的任务,3.1 软件设计概述,软件需求分析阶段解决了所开发的软件“做什么”的问题;软件设计阶段要解决软件“怎么做”的问题。,3.1.1 软件设计在开发阶段中的重要性,软件 设计,编码,软件 测试,开发阶段信息流图示,软件需求确定以后,进入由软件设计、编码、测试三个关联
2、阶段构成的开发阶段。在设计步骤中,根据软件的功能和性能需求,采用某种设计方法进行系统结构设计、数据结构设计、过程设计和界面设计。,系统结构设计用于定义软件系统的整体结构,是软件开发的核心步骤。在设计步骤中,建立软件主要成份之间的关系。 数据设计侧重于数据结构、数据库、文件的定义。 过程设计则是把结构成份(模块)转换成软件的过程性描述。 界面设计是对系统边界的描述,是用户和系统进行交互的工具。 在编码步骤中,根据这种过程性描述,生成源程序代码,然后通过测试,最终得到完整有效的软件。 软件设计决定了软件质量。,3.1.2 软件设计阶段的任务,一、软件设计的任务将分析阶段获得的需求规格说明转换为计算
3、机中可实现的系统,完成软件的数据设计、系统结构设计、过程设计和界面设计,最后得到软件设计说明书。,总体 设计,复审,修 改,详细 设计,模块描述 (过程描述),复审,修 改,软件设计工作流程图示,一般地,从工程管理的角度,软件设计分两步完成:总体设计(概要设计)和详细设计。其工作流程如图所示。,设计阶段结束时要交付的文档是设计规格说明书。根据设计方法的不同,有不同的设计文档。每个设计步骤完成后,都应进行复审。,首先做概要设计,将软件需求转化为软件的系统结构、数据结构、用户界面;然后是详细设计,即过程设计,通过对过程模块的详细描述,得到软件详细的数据结构和算法。,1、确定软件结构,划分子系统模块
4、好的软件结构可以使软件的开发过程流畅自如,同时也能为软件的部署带来好处。合理的模块划分可以降低软件开发的浮渣度,同时也能提高软件的可重用性。,软件设计阶段的任务可分为四部分:,软件设计的目标,2、确定系统的数据结构数据结构的建立对于信息系统而言尤为重要。要确定数据元素的类型,组织、存取方式以及处理方式等。,软件设计阶段的任务可分为四部分:,软件设计的目标,三类设计任务,3、过程设计通过对过程模块的详细描述,得到软件详细的数据结构和算法。,软件设计阶段的任务可分为四部分:,三类设计任务,4、用户界面设计作为人机接口的用户界面起着越来越重要的作用,它直接影响到软件的寿命。,软件设计阶段的任务可分为
5、四部分:,二、软件设计的目标 在设计阶段应达到的目标是:提高可靠性;提高可维护性;提高可理解性;提高效率。,衡量该目标的准则: 1、软件实体有明显的层次结构,有利于软件的维护。 2、软件实体应该是模块化的,且每个模块具有独立功能。 3、软件实体与外部环境的界面清晰。 4、设计规格说明清晰、简洁、完整和无二义性。,常用的设计方法有:SD法、Jackson法、HIPO法、Parnas法、Warnier法等;还有面向对象的设计方法(OOD)。,3.2 软件体系结构设计,3.2.1 软件体系结构的基本概念,3.2.2 几种典型的软件体系结构,3.2.3 体系结构设计原则,3.2.1 软件体系结构的基本
6、概念,起初,人们把软件设计的重点放在数据结构和算法的选择上,随着软件规模的扩大,对总体的系统结构设计和规格说明比数据结构和算法的选择明显重要得多。 当着一个软件被划分为若干个模块,并且模块之间相互作用,形成一个整体时,它就具有了体系结构。 软件的体系结构定义:为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式,以及这些模式的约束组成。,软件体系结构的意义主要体现在如下3个方面: 重用:人们希望系统能够重用以前的代码和设计,从而提高开发效率。 扩展:人们希望在系统能够保持结构稳定的前提下很容易地扩充功能和提高性能。 简洁:好的架构一定易
7、于理解、易于学习、易于维护。,所谓软件架构师实际上就是软件的总体设计者。 一般地,应用程序的功能模块划分:用户界面(user interface)、业务逻辑(business logic)和数据存储(data storage)。 其中,,用户界面是应用程序呈现给最终用户的使用界面,与用户直接打交道的部分,用于表现和描绘数据。 业务逻辑是应用程序的核心部分,处理业务流程和数据,是真正实现应用程序的功能模块。 数据存储是业务逻辑部分所需处理或已处理结果的存储,是保存运算结果部分。,用户界面,数据存储,业务逻辑,基于宿主机的计算模型 客户/服务器(C/S)模型 三层C/S结构模型 浏览器/服务器(B
8、/S)模型 异构结构模型(C/S与B/S混合软件体系结构),集中型:,分布型:,优秀的开发者常常会使用一些体系结构模式(architecture pattern)作为软件系统结构设计策略。这里重点介绍集中型和分布式结构。,3.2.2 几种典型的软件体系结构,基于宿主机的计算模型(集中式),用户界面、业务逻辑和数据存储功能都集中在大、中/小型机上实现(用户通过哑终端来共享大、中/小型机的资源)。,数据表示,业务逻辑,数据存储,单层应用模型,仓库模型(The repository model)也称“容器模型 ”,是一种集中式的模型。各子系统可以直接访问中央数据仓库存储的共享数据。子系统之间紧密耦合
9、。,仓库模型(The repository model),各子系统共享中央数据库中的数据共享容器模型 各子系统可以有自己的数据库,子系统之间通过消息传递实现数据交换。,适宜命令控制系统、CAD系统,仓库模型的主要优缺点: 优点:1.共享大数据量的有效方法。2.子系统不必关心其它的子系统如何使用它所产生的数据。3.易于将新子系统集成,若新子系统也采用相同规范 。,缺陷:1.为了共享数据 ,各子系统必须有一致的数据视图 ,不可避免地会影响了整个系统的性能。2.子系统的改变,使产生的数据结构也可能发生改变。3.统一的数据库 结构(备份、安全、访问控制和恢复的策 ),将影响子系统的效率 。,客户/服务
10、器(C/S)模型(分布式),随着PC机诞生和应用,用户界面和部分的业务逻辑被移到了PC端。服务器端(后台)负责数据管理,客户机(前台)完成与用户的交互任务。,业务逻辑,数据存储,数据表示,业务逻辑,数据库服务器,C/S结构的优缺点,便于进行快速应用开发,市场上有很多这样的工具,如PB、Delphi、Visual Basic、Visual C+等。C/S结构具有响应速度快,操作界面设计个性化,直观、简单、方便的特点。 C/S结构不足: 开发成本高,软件维护和升级困难,因此,新技术不能轻易应用。 需要专门的客户端安装程序,分布功能弱。 兼容性差,软件移植困难。,完整的应用包含三个相对独立的逻辑部分
11、,而两层的C/S结构只有两个端应用。应用逻辑应该映射到哪一端上呢? 三种情况:,两层C/S架构将数据表示和处理逻辑分开 ,但应用逻辑和两端之一是紧耦合的 ,不适宜多用户、多数据库,是非安全的网络环境。,三层C/S结构,随着中间件技术的发展,出现了三层C/S结构。与二层C/S结构相比,增加了一个应用服务器。,数据库服务器,数据库服务器,应用服务器,表示层,数据层,功能层,Internet Intranet,三层C/S结构风格,表示层:应用的用户接口部分,担负找用户与应用间的对话功能。用于检查用户从键盘等设备输入的数据,显示应用输出的数据。 功能(或业务逻辑)层:将具体的业务处理逻辑编入程序中,并
12、确认用户对应用和数据库存取权限的功能 数据层:数据库管理系统,负责管理数据库数据的读写。,在多层模型中,中间层会用到应用服务,包括事务服务、消息服务等等。常见的事务服务器有Microsoft Transaction Server,消息服务器有Microsoft Message Queue。,浏览器/服务器(B/S)风格,基于Web的B/S风格其实也是一种客户机/服务器风格,只不过它的客户端是浏览器。为了区别传统的C/S风格,才特意称其为B/S风格。它实际上是一种三层应用结构的一种实现方式,即:浏览器/Web服务器/数据库服务器。,数据库服务器,Internet Intranet,Web服务器,
13、表示层,数据层,功能层,数据库,B/S结构的优缺点,B/S结构具有分布式、基于Web、开放性和适应性的优势,它使业务扩展简单,维护方便。 但与C/S结构相比,B/S结构也有许多不足之处: 个性化特点明显降低,实现个性化设计要求难。 缺乏对动态页面的支持能力,没有集成有效的数据库处理能力; 扩展能力差,安全性难以控制; 数据查询等响应速度远低于C/S结构; 数据提交一般以页面为单位,数据的动态交互性不强,不利于在线事务处理(OLTP)应用。,C/S与B/S混合的软件体系结构,“内外有别”模型 企业内部用户通过局域网直接访问数据库服务器,软件系统采用C/S结构;企业外部用户通过Internet访问
14、Web服务器,通过Web服务器再访问数据库服务器,软件系统采用B/S结构。,数据库 服务器,Internet Intranet,Web服务器,企业 内部,企业 外部,C/S结构,B/S结构,查询浏览PC,查询浏览PC,修改维护PC,修改维护PC,Internet 用户,内部局域网,企业 内部,企业 外部,“查改有别”模型 不管用户是通过什么方式(局域网或Internet)连接到系统,凡是需要执行维护和修改数据操作的,就使用C/S结构;若只是执行一般的查询和浏览操作,则使用B/S结构。,数据库 服务器,Intenet Intranet,Web服务器,企业 内部,企业 外部,C/S结构,B/S结构
15、,查询浏览PC,查询浏览PC,修改维护PC,修改维护PC,Internet 用户,内部局域网,C/S结构,案 例,背景:电力系统精简机构,变电站向无人、少人和以点带面方向发展(“减人增效”)变电综合信息管理系统。 功能需求:包括变电运行所需的运行记录、图形开票、安全生产管理、生产技术管理、行政管理、总体信息管理、技术台帐管理、班组建设、学习培训、系统维护等功能。 体系结构设计:充分考虑变电站分布管理需要,采用“内外有别”模型。,本系统采用C/S与B/S混合的软件体系结构(“内外有别”)。,Intenet Intranet,县调,地调,省调,Internet用户,Web服务器,变电站 内部,B/
16、S结构,中央控制室,系统管理员,变电站 内部局域网,站长、其他,C/S结构,数据库 服务器,变电站 外部,在架构设计中,系统划分方式通常有两种:横向划分和纵向划分,其中: 纵向划分是将系统划分成若干层,每个层完成一定的处理功能,如数据存储层、商务逻辑层和应用表达层等。 横向划分是将系统按照商业逻辑进行划分,例如将一个网上书店系统划分为进货、销售、库存管理、员工管理等。,一般地,,分布式对象结构(Distributed Objects Architecture),在C/S模型中,客户和服务器在服务/请求上的差别,在一定程度上限制了系统的灵活性和可扩展性。,采用分布式对象结构 :“对象(Objec
17、t)”提供服务的系统组件(System Component)。每个对象在逻辑上是平等的,它们可以互相为对方提供所需的服务。提供服务的对象就是服务器,而提出服务请求的对象就是客户。,“软件总线(Software Bus)”的中间件(Middleware) 即对象请求代理(Object Request Broker,简称ORB) 分布式对象结构具有很好的开放性和透明性,用户可以非常方便地在总线上添加、更新或删除组件对象。,分布式对象结构具有优良特性:1.可在系统布署完成后,再具体考虑服务的分布和如何提供服务的问题。2.具有开放式结构,提供了极好的灵活性和可伸缩性。3.系统可进行动态分配。,流行的O
18、RB技术标准有两种:CORBA(Common Object Request Broker Architecture)DCOM(Distributed Component Object Model), 抽象机模型,又称为分层模型,通常用于建立子系统的接口模型。每层提供一组服务,每层定义一个抽象机。典型的例子:,ISO/OSI 开放系统互连参考模型,优点:支持增量式开发。 缺点:系统构成,性能保证较困难。,3.2.3 体系结构设计原则,合适性结构稳定性可扩展性可复用性,3.3 模块分解,一旦确立软件体系结构以后,需要做的工作就是进行系统的模块分解。,模块是程序对象的集合,并且被命名。例如,过程、函
19、数、子程序、宏;类等,是构成软件系统结构的基本元素。,所谓模块化(modularization) ,就是将系统划分为若干个模块,每个模块完成一个子功能。模块化的目的是将系统“分而治之”,模块化能够降低问题的复杂性,使软件结构清晰,易阅读、易理解,易于测试和调试,因而也有助于提高软件的可靠性。,一、模块化,模块化降低了软件复杂度。,令:C(X)表示问题 X 的复杂度函数;E(X)解决问题 X 所需工作量的复杂度函数; 若:有问题 P1,P2 ;C(P1) C(P2); 显然:E(P1) E(P2),由经验:C(P1+P2) C(P1)+ C(P2)于是:E(P1+P2) E(P1)+ E(P2)
20、将问题(P1+P2)划分为两个问题P1和P2后,其工作量和复杂度都降低。,并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加。显然,每个软件系统都有一个最佳模块数M。注意选择分解的最佳模块数。右图描述了模块化与软件成本的关系。,二、模块之间的关系,模块之间关系决定了整个系统的结构,也确定了系统的质量。模块之间的关系可有多种,一般可表示为层次结构和网状结构。,层次结构(或树状结构),在树状结构中,位于最上层的根部是顶层模块,它是程序的主模块。与其联系的有若干下属模块,各下属模块还可以进一步引出更下一层的下属模块,如图所示的树状结构。,树状结构的特点:整个结构只有一个顶层模块,而对于任何一
21、个下属模块来说,它只有一个上级模块,而且同一层模块之间不发生关系。,深度:表示软件结构中从顶层模块到最底层模块的层数。 宽度:表示控制的总分布。 扇出数:指一个模块直接控制下属的模块个数。 扇入数:指一个模块的直接上属模块个数。,衡量模块层次结构的有关指标是:,顶层,1层,2层,扇入为2,扇出为3,扇入为3,3层,4层,软件结构示意图,一个好的软件结构的形态准则是:顶部宽度小,中部宽度大,底部宽度次之;在结构顶部有较高的扇出数,在底部有较高的扇入数。,软件的层次结构相关指标:,上图是网状结构的两个例子。在网状结构中,任何两个模块间都可以有双向的关系。由于不存在上级模块和下属模块的关系,也就分不
22、出层次来。任何两个模块都是平等的,没有从属关系。,网状结构,(a),(b),网状结构,分析比较两种结构的特点后可以看出,对于不加限制的网状结构,由于模块间相互关系的任意性,使得整个结构十分复杂,处理起来势必引起许多麻烦,这与原来划分模块为便于处理的意图相矛盾。所以在软件开发的实践中,人们通常采用树状结构,而不采用网状结构。,三、模块的独立性,模块化的主要优点是降低了软件系统的复杂性,使得系统容易修改,同时使得系统各个部分可以并行开发,从而提高了软件的生产率。提高模块质量在于提高模块独立性。模块的独立性用耦合性和内聚性来衡量。,1、模块独立性 (module independence),“模块”
23、,又称“构件”,一般指用一个名字可调用的一段程序。它一般具有如下三个基本属性: 功能 即指该模块实现什么功能,做什么事情。必须注意,这里所说的模块功能,应是该模块本身的功能加上它所调用的所有子模块的功能。 逻辑 即描述模块内部怎么做。 状态 即该模块使用时的环境和条件。,所谓模块的独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的。即功能专一,模块之间无过多的相互作用的模块。这种类型的模块可以并行开发,模块独立性越强,开发越容易。独立性强的模块,还能减少错误的影响,使模块容易组合、修改及测试。,耦合性(Coupling):用于描述模块之间联系的紧密
24、程度。内聚性(Cohesion) :用于描述模块内部联系的紧密程度。模块独立性比较强的模块应该是具有高内聚性和的低耦合度。,模块独立性的度量标准是两个定性准则:,2、耦合性(Coupling),耦合性是模块间相互连接性的度量。,模块分解的一个目标是使块间联系尽可能小,块间联系的大小可从三个方面衡量:, 方式 块间联系方式有“直接引用”或“用过 程语句调用”。 作用 块间传送的共用信息(参数)类型,可为“数据型”、“控制型”或“混合型”(数据/控制型)。 数量 块间传送的共用信息的数量。,方式:每个模块用过程语句(或函数方式等)调用其他模块。作用:模块间传送的参数为数据型。数据:模块间公用的信息
25、(如参数等)尽量少。,模块分解的一个目标是使块间联系尽可能小,达到这个目标可通过以下措施:,软件工程,模块独立性,非直接耦合,数据耦合,标记耦合,控制耦合,外部耦合,公共耦合,内容耦合,低,高,强,弱,模块耦合度,模块独立性,软件工程,模块间的耦合,模块之间耦合性越强,功能独立性越差,这样形成的模块结构界面不好。,软件工程,非直接耦合(Nondirect Coupling),两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。 非直接耦合的模块独立性最强。,软件工程,数据耦合 (Data Coupling),一个模块访问另一个模块时,彼此之间是通过简单数据参数 (不是
26、控制参数、公共数据结构或外部变量) 来交换输入、输出信息的。,软件工程,标记耦合 (Stamp Coupling),一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。,软件工程,控制耦合 (Control Coupling),如果一个模块通过传送开关、标志、名字等控制参数,明显地控制选择另一模块的功能,就是控制耦合。,软件工程,外部耦合(External Coupling) 一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。 当模块连接到软件、硬件外部环境上时会发生的偶合关系,是相对较高的
27、偶合度。 例:I/O将模块耦合到特定设备、合适和通信协议上。应将外部耦合局限在少量的模块中。,软件工程,公共耦合(Common Coupling) 若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。 公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。,松散的公共耦合,紧密的公共耦合,软件工程,如果发生下列情形,模块之间就是内容耦合: 一个模块直接访问另一个模块的内部数据; 一个模块不通过正常入口转到另一模块内部; 两个模块有一部分
28、程序代码重迭(只可能出现在汇编语言中); 一个模块有多个入口。,内容耦合 (Content Coupling),软件工程,c,进入另一模块内部,模块代码重叠,模块多个入口,软件工程,其他耦合 编译器耦合:将源代码同编译器的特定(一般是非标准的)属性联系到一起。 操作系统耦合:将设计和结果代码同操作系统联系到一起,当OS发生变化时会造成严重的破坏。,软件工程,软件工程,耦合小结,不希望的,可接受的,理想的,软件工程,模块内聚,模块内聚性越强,功能独立性越好,对于形成的模块结构有比较好的作用。 要求模块结构达到高内聚,低耦合。,软件工程,一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或
29、者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。 功能内聚模块的功能独立性最强。,功能内聚 (Functional Cohesion),软件工程,这种模块完成多个功能,各个功能相互独立但都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。 由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。 信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。,信息内聚 (Informational Cohesion),软件工程,初始化,插入,删除,查找,修
30、改,符 号 表,软件工程,如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。 模块内各个功能是紧密相连的。,通信内聚 (Communication Cohesion),软件工程,软件工程,使用流程图做为工具设计程序时,如果流程图太大,可以把流程图中的某一部分划出组成模块,就得到过程内聚模块。 例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。,过程内聚(Procedural Cohesion),软件工程,时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的
31、执行与时间有关,通常要求所有功能必须在同一时间段内执行。 例如,初始化模块和终止模块就是时间内聚模块。,时间内聚(Classical Cohesion),软件工程,这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。,逻辑内聚(Logical Cohesion),软件工程,当几个模块内正好有一段代码是相同的,将它们抽取出来形成单独的模块,即巧合内聚模块。这种模块没有独立功能,各部分之间没有联系,或联系很松散。,巧合内聚(Coincidental Cohesion),软件工程,内聚小结,在软件设计过程中不必要确定内聚的精确级别,但要识别低端内聚,
32、争取中高端内聚。,不希望的,可接受的,理想的,4、信息隐蔽(information concealment),每个模块的实现细节对于其他模块来说是隐蔽的。也就是说,模块中所包含的信息(数据和过程)不允许其他不需要这些信息的模块使用。该原则有利于提高模块的内聚性。在软件开发中抽象数据类型,如类、对象等。利用他们,在将来修改软件时,可将偶然引入错误所造成的影响限制在一个局部范围之内,不致波及到软件的其他部分。,例如:顺序栈类模板定义 const int MAX_SIZE=100;template class seqStackpublic:seqStack ( ) ;seqStack ( );voi
33、d Push ( T x );T Pop ( );T GetTop ( );bool Empty ( );private:T dataMAX_SIZE;int top; 其信息被封装,只能通过访问函数进行处理。,template class BiTree public:BiTree( )root=NULL; BiTree(BiNode *root); BiTree( ); void PreOrder(BiNode *root); void InOrder(BiNode *root); void PostOrder(BiNode *root); void LeverOrder(BiNode *r
34、oot); private:BiNode *root; void Creat(BiNode *root); void Release(BiNode *root);,再如:二叉链表类声明,3.4 面向数据流图的设计方法,一、变换分析,基本思想:DFD System Hierarchy,事实上所有信息流都可归结为变换流(Transform Flow)。, 确定主加工及逻辑输入/输出主加工 描述了系统的主要功能、特征。其特点是:输入/输出数据流较多,往往主加工不止一个。逻辑输入/输出 是指输入/输出主加工的数据流。输入流 是把物理输入转换为逻辑输入的数据流。 输出流 是将逻辑输出转换为物理输出的数据
35、流。,变换分析步骤:,输 入 流,变换流,输出 流,输 入 流,变换流,输出 流, 进行一级分解,设计上层模块为每个输入设计一个输入模块,为每个输出设计一个输出模块,同时为每个主加工设计一个处理模块。,M,CI,CT,CO,C,C,D,D,CI,CT,CO,变换分析, 进行二级分解,设计中下层模块这一步的工作是自顶向下,逐步细化,为第一层的每一个输入模块、输出模块、处理模块设计它们的从属模块,设计下层模块的顺序一般从设计输入模块的下层开始。,M,CI,CT,CO,处理C,取B,转换B,转换D,送E, 进一步细化,取A,转换A,转换E,送F,变换分析技术,F,二、事务分析,当信息流具有明显的“发
36、射中心”时,可归结为事务流(Transaction Flow) 。,二、事务分析(续),事务分析步骤:, 确定流界首先从数据流图中找出事务流、事务处理中心和事务路径。事务中心前是接受事物,事务中心后是事物路径。,进行一级分析,设计上层模块事务分析的任务是从数据流图中导出具有接受分支和发送分支的软件结构。对事务中心应设计“事物控制”模块;对事物流应设计“接受事物”模块;对事务路径,应设计“发送控制”模块。,进行二级分解,设计中下层模块对于接受分支,可用类似于转换处理型数据流图中对输入数据流的方法设计中下层。对于发送分支,在发送控制模块下为每条事务路径设计一个事务处理模块,这一层称为事务层。在事务
37、层模块下,沿各事务路径进行进一步细化。,对 应 模 块 图,事务控制,接受事务,发送事务,P1,P2,P3,事务分析,面向数据流的设计方法举例:,例如:汽车数字仪表板的设计,功能: 通过模 - 数转换实现传感器和微处理机接口; 在发光二极管面板上显示数据; 指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等; 指示加速或减速; 如果车速超过55mph,则发出警告铃声。,第一步:DFD的分界,先分出I、P、O三块,一般问题的一级分解方法:,第二步:映射,例如:,第三步:修改 本着高内聚、低耦合的原则。 例:对上面数字仪表板系统的软件结构进一步精化。 下面是某些可能的修改:
38、 输入结构中的“转换成rpm”和“收集sps”可以合并。 模块“确定加速/减速”可以放在模块“计算mph”下面,以减少耦合。 模块“加速/减速显示”可以相应地放在模块“显示mph”下面。,例如:,例:精化后的数字仪表板系统的软件结构。,加速/减速 显示,确定加速 /减速,注:每个模块应附一简要说明描述 进出该模块的信息(接口描述); 模块内部的信息; 过程陈述,包括主要判定点及任务等; 对约束和特殊特点的简短讨论。,面向数据流的设计的总体过程:,按照“降低块间联系,提高块内联系”的设计总则进行修改,完善系统的模块图,写出模块的功能说明。,软件结构图的改进:,具体应从以下方面改进: 1)尽可能建
39、立功能模块 功能模块具有最强的内聚性,满足信息屏蔽原则: 一个模块内所包含的信息(过程和数据)对不需 要这些信息的模块是不能访问的(黑盒)。一个功能模块应由3部分组成:执行某项任务的部分 出错处理部分返回结束标志,消除重复功能,(a),(b),(c),(d),Q,重复部分,2)消除重复功能 若两模块含有重复的部分,应设法将重复的功能消去。 如下图所示,Q1和Q2两个模块具有类似的功能,图(b)、(c)、(d)方案就是可能的解决方案。,控制范围 结构方面的特点,包括模块及其所有下属模块。 作用范围 判断所涉及到的模块,是从功能特点考虑的。SD方法认为:当作用范围为控制范围的子集时,才能获得较低的
40、块间联系。,3)模块的作用范围与控制范围,图(b)中模块TOP 的控制范围是: 模块 TOP、X、T、B、A、B1、B2; 模块B的控制范围与作用范围相同,均为: 模块B、A、B1、B2,图(a)中模块A的控制范围:A、B、C、D、G、E、F 如果模块F的判定涉及到模块B、E、F。 则F的的作用范围:B、E、F,(a),(b),答案,显然,图(a)不满足作用范围应在控制范围之内的原则,模块F的作用范围不在控制范围之内。 图(b)中模块TOP和图(c)中模块B虽然满足上述原则,但其作用范围所涉及到的模块不是直接的。 图(d)的模块设计最合理。,应用范围与作用范围举例:,比较(a)、(b)、(c)
41、、(d)4种设计方案的优劣!,4)模块的大小适当模块大小指其篇幅,一般模块大小约50-100行为宜。 5)模块的扇入扇出数不宜太多一个模块调用其他模块的个数,称为该模块的扇出。模块的扇出不宜过大,一般认为不要超出个。 一个模块被其他模块调用的个数,称为该模块的扇入。扇入越大,除服务性模块外,模块的扇入扇出数不宜太多,否则块间联系增加。,3.5.1 程序流程图(PFC图),3.5.2 盒式图(N-S图),3.5.3 问题分析图(PAD图),3.5 详细设计 (Program Design Coding),3.5.4 过程设计语言PDL,详细设计的任务:开发一个可以直接转换为程序的软件表示,即对系
42、统中每个模块的内部过程进行设计和描述。,3.5 详细设计描述工具,结构化程序设计的特点: 自顶向下逐步求精; 具有单入口和单出口的控制结构(取消GOTO语句),常用的描述工具: 1、PFC图(Program Flow Chart) 2、N-S图(Nassu-Shneiderman) 3、PAD图(Problem Analysis Diagram) 4、PDL语言(Procedure Design Language),1、程序流程图(Program Flow Chart),5种基本控制结构为:,(1) 顺序结构(sequential structure),(2) 选择结构(selective s
43、tructure),(3) 先判定型循环结构(while-loop structure),(4) 后判定型循环结构(until-loop structure),(5) 多情况选择(case structure),任何复杂的程序流程图都应由以上五种基本结构组合而成。,缺点:本质上不具备逐步求精的特点,对于提高大型系统的可理解性作用甚微;不易表示数据结构;转移控制太方便。,优点:容易掌握,且历史“悠久”,使用广泛。,ISO 认可的规定符号,b,X1,X2,X7,X6,X4,X3,X5,h,i,g,f,e,d,c,F,T,F,F,F,T,T,T,多分支选择结构,先判定型循环结构,选择结构,后判定型循
44、环结构,PFC图,程序流程图,a,j,课堂练习 请问:这是结构化程序吗?为什么?试设计一个与它等价的结构化程序。,2、盒图(Box Diagram): Nassi &Shneiderman 1973年提出,又称为N-S Charts。Chapin 1974年作扩充,故也称为Chapin charts.,例:,N-S图由而且仅由顺序、选择、循环三种基本结构组成。 基本图例如下:,NS图,NS图,N-S图举例,NS图举例,特点: 没有箭头,不允许随意转移控制; 每个矩形框(Case中条件取值例外)都是一个功能域(即一个特定结构的作用域),结构表示明确; 局部及全程数据的作用域易见; 易表现嵌套关系
45、(embedded structure)以及模块的层次结构。,3、PAD(Problem Analysis Diagram): 日立公司,1973,基本控制结构如下:,PAD图,PAD图基本结构,例:对数组X进行排序。 “自顶而下,逐步求精”,1、循环一次,排好一个Xh,2、细化,3、连接各图,构成完整的PAD图,W:=Xh Xh:=Xj Xj:=w,BEGINFIRST:=K1;SECOND:=0;,FIRST=KI SECOND=0,SECOND =FIRST FIRST=KI,SECOND =KI,ELSE SECOND:=KIENDENDEND,PASCAL源程序段,对应PAD图,FO
46、R I:=2 TO N DO,BEGIN IF K1SECOND THEN,BEGIN IF KIFIRST,THEN BEGIN SECOND:=FIRST; FIRST:=KIEND,例:,PAD图应用举例,一个加工在一页中画不下时,可在另一页上画出。,PAD图的扩充图式,例:N-S图与PAD的转换,特点: 结构清晰,层次分明,易读; 支持逐步求精的设计思想; 容易将PAD自动转换为高级语言源程序。,4、判定表 & 判定树(Decision Table & Tree),表示复杂的条件(input)组合与应做动作(output)之间的对应关系。,工具,例:航空行李托运费的算法 按规定:重量不
47、超过30公斤的行李可免费托运。重量超过30公斤时,对超运部分,头等舱国内乘客收4元/公斤;其它舱位国内乘客收6元/公斤;外国乘客收费为国内乘客的2倍;残疾乘客的收费为正常乘客的1/2。,工具,用判定树表示计算行李费的算法,注:判定表与判定树并不适用于作为一种通用的设计工具,通常将之用于辅助测试,5、PDL (Program Design Language):又称 Pseudocode。,例:, 有固定的外语法(keyword);, 有数据说明,例如:TYPE number IS STRING LENGTH (12)TYPE table IS INSTANCE OF symbol_table,有子程序定义与调用机制,例如:PROCEDURE INTERFACE pseudocode lines END调用时可用:PERFORM USING, 内语法用自然语言描述;,抽象类型,应具备以下特点:,优点:易于实现由PDL到源代码的自动转换。 缺点:不够直观。,3.6.1 用户界面设计的特性及任务,3.6.3 用户界面的基本类型,3.6.4 I/O用户界面设计,