《软件设计-模块化》PPT课件.ppt_第1页
《软件设计-模块化》PPT课件.ppt_第2页
《软件设计-模块化》PPT课件.ppt_第3页
《软件设计-模块化》PPT课件.ppt_第4页
《软件设计-模块化》PPT课件.ppt_第5页
已阅读5页,还剩195页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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结构模型 浏览器

8、/服务器(B/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 Int

13、ranet,Web服务器,表示层,数据层,功能层,数据库,B/S结构的优缺点,B/S结构具有分布式、基于Web、开放性和适应性的优势,它使业务扩展简单,维护方便。 但与C/S结构相比,B/S结构也有许多不足之处: 个性化特点明显降低,实现个性化设计要求难。 缺乏对动态页面的支持能力,没有集成有效的数据库处理能力; 扩展能力差,安全性难以控制; 数据查询等响应速度远低于C/S结构; 数据提交一般以页面为单位,数据的动态交互性不强,不利于在线事务处理(OLTP)应用。,C/S与B/S混合的软件体系结构,“内外有别”模型 企业内部用户通过局域网直接访问数据库服务器,软件系统采用C/S结构;企业外部用

14、户通过Internet访问Web服务器,通过Web服务器再访问数据库服务器,软件系统采用B/S结构。,数据库 服务器,Internet Intranet,Web服务器,企业 内部,企业 外部,C/S结构,B/S结构,查询浏览PC,查询浏览PC,修改维护PC,修改维护PC,Internet 用户,内部局域网,企业 内部,企业 外部,“查改有别”模型 不管用户是通过什么方式(局域网或Internet)连接到系统,凡是需要执行维护和修改数据操作的,就使用C/S结构;若只是执行一般的查询和浏览操作,则使用B/S结构。,数据库 服务器,Intenet Intranet,Web服务器,企业 内部,企业 外

15、部,C/S结构,B/S结构,查询浏览PC,查询浏览PC,修改维护PC,修改维护PC,Internet 用户,内部局域网,C/S结构,案 例,背景:电力系统精简机构,变电站向无人、少人和以点带面方向发展(“减人增效”)变电综合信息管理系统。 功能需求:包括变电运行所需的运行记录、图形开票、安全生产管理、生产技术管理、行政管理、总体信息管理、技术台帐管理、班组建设、学习培训、系统维护等功能。 体系结构设计:充分考虑变电站分布管理需要,采用“内外有别”模型。,本系统采用C/S与B/S混合的软件体系结构(“内外有别”)。,Intenet Intranet,县调,地调,省调,Internet用户,Web

16、服务器,变电站 内部,B/S结构,中央控制室,系统管理员,变电站 内部局域网,站长、其他,C/S结构,数据库 服务器,变电站 外部,在架构设计中,系统划分方式通常有两种:横向划分和纵向划分,其中: 纵向划分是将系统划分成若干层,每个层完成一定的处理功能,如数据存储层、商务逻辑层和应用表达层等。 横向划分是将系统按照商业逻辑进行划分,例如将一个网上书店系统划分为进货、销售、库存管理、员工管理等。,一般地,,分布式对象结构(Distributed Objects Architecture),在C/S模型中,客户和服务器在服务/请求上的差别,在一定程度上限制了系统的灵活性和可扩展性。,采用分布式对象

17、结构 : “对象(Object)”提供服务的系统组件(System Component)。 每个对象在逻辑上是平等的,它们可以互相为对方提供所需的服务。 提供服务的对象就是服务器,而提出服务请求的对象就是客户。,“软件总线(Software Bus)”的中间件(Middleware) 即对象请求代理(Object Request Broker,简称ORB) 分布式对象结构具有很好的开放性和透明性,用户可以非常方便地在总线上添加、更新或删除组件对象。,分布式对象结构具有优良特性: 1.可在系统布署完成后,再具体考虑服务的分布和如何提供服务的问题。 2.具有开放式结构,提供了极好的灵活性和可伸缩性

18、。 3.系统可进行动态分配。,流行的ORB技术标准有两种: 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(P

20、2) 于是:E(P1+P2) E(P1)+ E(P2) 将问题(P1+P2)划分为两个问题P1和P2后,其工作量和复杂度都降低。,并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加。显然,每个软件系统都有一个最佳模块数M。 注意选择分解的最佳模块数。右图描述了模块化与软件成本的关系。,二、模块之间的关系,模块之间关系决定了整个系统的结构,也确定了系统的质量。模块之间的关系可有多种,一般可表示为层次结构和网状结构。,层次结构(或树状结构),在树状结构中,位于最上层的根部是顶层模块,它是程序的主模块。与其联系的有若干下属模块,各下属模块还可以进一步引出更下一层的下属模块,如图所示的树状结构

21、。,树状结构的特点: 整个结构只有一个顶层模块,而对于任何一个下属模块来说,它只有一个上级模块,而且同一层模块之间不发生关系。,深度:表示软件结构中从顶层模块到最底层模块的层数。 宽度:表示控制的总分布。 扇出数:指一个模块直接控制下属的模块个数。 扇入数:指一个模块的直接上属模块个数。,衡量模块层次结构的有关指标是:,顶层,1层,2层,扇入为2,扇出为3,扇入为3,3层,4层,软件结构示意图,一个好的软件结构的形态准则是:顶部宽度小,中部宽度大,底部宽度次之;在结构顶部有较高的扇出数,在底部有较高的扇入数。,软件的层次结构相关指标:,上图是网状结构的两个例子。在网状结构中,任何两个模块间都可

22、以有双向的关系。由于不存在上级模块和下属模块的关系,也就分不出层次来。任何两个模块都是平等的,没有从属关系。,网状结构,(a),(b),网状结构,分析比较两种结构的特点后可以看出,对于不加限制的网状结构,由于模块间相互关系的任意性,使得整个结构十分复杂,处理起来势必引起许多麻烦,这与原来划分模块为便于处理的意图相矛盾。 所以在软件开发的实践中,人们通常采用树状结构,而不采用网状结构。,三、模块的独立性,模块化的主要优点是降低了软件系统的复杂性,使得系统容易修改,同时使得系统各个部分可以并行开发,从而提高了软件的生产率。 提高模块质量在于提高模块独立性。模块的独立性用耦合性和内聚性来衡量。,1、

23、模块独立性(module independence),“模块”,又称“构件”,一般指用一个名字可调用的一段程序。它一般具有如下三个基本属性: 功能 即指该模块实现什么功能,做什么事情。必须注意,这里所说的模块功能,应是该模块本身的功能加上它所调用的所有子模块的功能。 逻辑 即描述模块内部怎么做。 状态 即该模块使用时的环境和条件。,所谓模块的独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的。即功能专一,模块之间无过多的相互作用的模块。 这种类型的模块可以并行开发,模块独立性越强,开发越容易。独立性强的模块,还能减少错误的影响,使模块容易组合、修改

24、及测试。,耦合性(Coupling):用于描述模块之间联系的紧密程度。 内聚性(Cohesion) :用于描述模块内部联系的紧密程度。 模块独立性比较强的模块应该是具有高内聚性和的低耦合度。,模块独立性的度量标准是两个定性准则:,2、耦合性(Coupling),耦合性是模块间相互连接性的度量。,模块分解的一个目标是使块间联系尽可能小,块间联系的大小可从三个方面衡量:, 方式 块间联系方式有“直接引用”或“用过 程语句调用”。 作用 块间传送的共用信息(参数)类型,可为“数据型”、“控制型”或“混合型”(数据/控制型)。 数量 块间传送的共用信息的数量。,方式:每个模块用过程语句(或函数方式等)

25、调用其他模块。 作用:模块间传送的参数为数据型。 数据:模块间公用的信息(如参数等)尽量少。,模块分解的一个目标是使块间联系尽可能小,达到这个目标可通过以下措施:,软件工程,模块独立性,非直接耦合,数据耦合,标记耦合,控制耦合,外部耦合,公共耦合,内容耦合,低,高,强,弱,模块耦合度,模块独立性,软件工程,模块间的耦合,模块之间耦合性越强,功能独立性越差,这样形成的模块结构界面不好。,软件工程,非直接耦合(Nondirect Coupling),两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。 非直接耦合的模块独立性最强。,软件工程,数据耦合 (Data Coup

26、ling),一个模块访问另一个模块时,彼此之间是通过简单数据参数 (不是控制参数、公共数据结构或外部变量) 来交换输入、输出信息的。,软件工程,标记耦合 (Stamp Coupling),一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。,软件工程,控制耦合 (Control Coupling),如果一个模块通过 传送开关、标志、 名字等控制参数, 明显地控制选择另 一模块的功能,就 是控制耦合。,软件工程,外部耦合(External Coupling) 一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则

27、称之为外部耦合。 当模块连接到软件、硬件外部环境上时会发生的偶合关系,是相对较高的偶合度。 例:I/O将模块耦合到特定设备、合适和通信协议上。应将外部耦合局限在少量的模块中。,软件工程,公共耦合(Common Coupling) 若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。 公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。,松散的公共耦合,紧密的公共耦合,软件工程,如果发生下列情形,模块之间就是内容耦合: 一个模块直接访问

28、另一个模块的内部数据; 一个模块不通过正常入口转到另一模块内部; 两个模块有一部分程序代码重迭(只可能出现在汇编语言中); 一个模块有多个入口。,内容耦合 (Content Coupling),软件工程,c,进入另一模块内部,模块代码重叠,模块多个入口,软件工程,其他耦合 编译器耦合:将源代码同编译器的特定(一般是非标准的)属性联系到一起。 操作系统耦合:将设计和结果代码同操作系统联系到一起,当OS发生变化时会造成严重的破坏。,软件工程,软件工程,耦合小结,不希望的,可接受的,理想的,软件工程,模块内聚,模块内聚性越强,功能独立性越好,对于形成的模块结构有比较好的作用。 要求模块结构达到高内聚

29、,低耦合。,软件工程,一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。 功能内聚模块的功能独立性最强。,功能内聚 (Functional Cohesion),软件工程,这种模块完成多个功能,各个功能相互独立但都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。 由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。 信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。,信息内聚 (In

30、formational Cohesion),软件工程,初始化,插入,删除,查找,修改,符 号 表,软件工程,如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。 模块内各个功能是紧密相连的。,通信内聚 (Communication Cohesion),软件工程,软件工程,使用流程图做为工具设计程序时,如果流程图太大,可以把流程图中的某一部分划出组成模块,就得到过程内聚模块。 例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。,过程内聚(Procedural Cohesion

31、),软件工程,时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。 例如,初始化模块和终止模块就是时间内聚模块。,时间内聚(Classical Cohesion),软件工程,这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。,逻辑内聚(Logical Cohesion),软件工程,当几个模块内正好有一段代码是相同的,将它们抽取出来形成单独的模块,即巧合内聚模块。这种模块没有独立功能,各部分之间没有联系,或联系很松散。,巧合内聚(Coincidental Cohesion)

32、,软件工程,内聚小结,在软件设计过程中不必要确定内聚的精确级别,但要识别低端内聚,争取中高端内聚。,不希望的,可接受的,理想的,4、信息隐蔽(information concealment),每个模块的实现细节对于其他模块来说是隐蔽的。也就是说,模块中所包含的信息(数据和过程)不允许其他不需要这些信息的模块使用。 该原则有利于提高模块的内聚性。 在软件开发中抽象数据类型,如类、对象等。利用他们,在将来修改软件时,可将偶然引入错误所造成的影响限制在一个局部范围之内,不致波及到软件的其他部分。,例如:顺序栈类模板定义 const int MAX_SIZE=100; template class s

33、eqStack public: seqStack ( ) ; seqStack ( ); void 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);

34、void PostOrder(BiNode *root); void LeverOrder(BiNode *root); 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,处

36、理C,取B,转换B,转换D,送E, 进一步细化,取A,转换A,转换E,送F,变换分析技术,F,二、事务分析,当信息流具有明显的“发射中心”时,可归结为事务流(Transaction Flow) 。,二、事务分析(续),事务分析步骤:, 确定流界 首先从数据流图中找出事务流、事务处理中心和事务路径。事务中心前是接受事物,事务中心后是事物路径。,进行一级分析,设计上层模块 事务分析的任务是从数据流图中导出具有接受分支和发送分支的软件结构。对事务中心应设计“事物控制”模块;对事物流应设计“接受事物”模块;对事务路径,应设计“发送控制”模块。,进行二级分解,设计中下层模块 对于接受分支,可用类似于转换

37、处理型数据流图中对输入数据流的方法设计中下层。对于发送分支,在发送控制模块下为每条事务路径设计一个事务处理模块,这一层称为事务层。在事务层模块下,沿各事务路径进行进一步细化。,对 应 模 块 图,事务控制,接受事务,发送事务,P1,P2,P3,事务分析,面向数据流的设计方法举例:,例如:汽车数字仪表板的设计,功能: 通过模 - 数转换实现传感器和微处理机接口; 在发光二极管面板上显示数据; 指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等; 指示加速或减速; 如果车速超过55mph,则发出警告铃声。,第一步:DFD的分界,先分出I、P、O三块,一般问题的一级分解方法:

38、,第二步:映射,例如:,第三步:修改 本着高内聚、低耦合的原则。 例:对上面数字仪表板系统的软件结构进一步精化。 下面是某些可能的修改: 输入结构中的“转换成rpm”和“收集sps”可以合并。 模块“确定加速/减速”可以放在模块“计算mph”下面,以减少耦合。 模块“加速/减速显示”可以相应地放在模块“显示mph”下面。,例如:,例:精化后的数字仪表板系统的软件结构。,加速/减速 显示,确定加速 /减速,注:每个模块应附一简要说明描述 进出该模块的信息(接口描述); 模块内部的信息; 过程陈述,包括主要判定点及任务等; 对约束和特殊特点的简短讨论。,面向数据流的设计的总体过程:,按照“降低块间

39、联系,提高块内联系”的设计总则进行修改,完善系统的模块图,写出模块的功能说明。,软件结构图的改进:,具体应从以下方面改进: 1)尽可能建立功能模块 功能模块具有最强的内聚性,满足信息屏蔽原则: 一个模块内所包含的信息(过程和数据)对不需 要这些信息的模块是不能访问的(黑盒)。 一个功能模块应由3部分组成: 执行某项任务的部分 出错处理部分 返回结束标志,消除重复功能,(a),(b),(c),(d),Q,重复部分,2)消除重复功能 若两模块含有重复的部分,应设法将重复的功能消去。 如下图所示,Q1和Q2两个模块具有类似的功能,图(b)、(c)、(d)方案就是可能的解决方案。,控制范围 结构方面的

40、特点,包括模块及其所有下属模块。 作用范围 判断所涉及到的模块,是从功能特点考虑的。 SD方法认为:当作用范围为控制范围的子集时,才能获得较低的块间联系。,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)中

41、模块B虽然满足上述原则,但其作用范围所涉及到的模块不是直接的。 图(d)的模块设计最合理。,应用范围与作用范围举例:,比较(a)、(b)、(c)、(d)4种设计方案的优劣!,4)模块的大小适当 模块大小指其篇幅,一般模块大小约50-100行为宜。 5)模块的扇入扇出数不宜太多 一个模块调用其他模块的个数,称为该模块的扇出。模块的扇出不宜过大,一般认为不要超出个。 一个模块被其他模块调用的个数,称为该模块的扇入。扇入越大,除服务性模块外,模块的扇入扇出数不宜太多,否则块间联系增加。,3.5.1 程序流程图(PFC图),3.5.2 盒式图(N-S图),3.5.3 问题分析图(PAD图),3.5 详

42、细设计 (Program Design Coding),3.5.4 过程设计语言PDL,详细设计的任务:开发一个可以直接转换为程序的软件表示,即对系统中每个模块的内部过程进行设计和描述。,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

43、Flow Chart),5种基本控制结构为:,(1) 顺序结构(sequential structure),(2) 选择结构(selective structure),(3) 先判定型循环结构(while-loop structure),(4) 后判定型循环结构(until-loop structure),(5) 多情况选择(case structure),任何复杂的程序流程图都应由以上五种基本结构组合而成。,缺点:本质上不具备逐步求精的特点,对于提高 大型系统的可理解性作用甚微; 不易表示数据结构; 转移控制太方便。,优点:容易掌握,且历史“悠久”,使用广泛。,ISO 认可的规定符号,b,X

44、1,X2,X7,X6,X4,X3,X5,h,i,g,f,e,d,c,F,T,F,F,F,T,T,T,多分支选择结构,先判定型循环结构,选择结构,后判定型循环结构,PFC图,程序流程图,a,j,课堂练习 请问:这是结构化程序吗?为什么? 试设计一个与它等价的结构化程序。,2、盒图(Box Diagram): Nassi SECOND:=0;,FIRST=KI SECOND=0,SECOND =FIRST FIRST=KI,SECOND =KI,ELSE SECOND:=KI END END END,PASCAL源程序段,对应PAD图,FOR I:=2 TO N DO,BEGIN IF K1SEC

45、OND THEN,BEGIN IF KIFIRST,THEN BEGIN SECOND:=FIRST; FIRST:=KI END,例:,PAD图应用举例,一个加工在一页中画不下时,可在另一页上画出。,PAD图的扩充图式,例:N-S图与PAD的转换,特点: 结构清晰,层次分明,易读; 支持逐步求精的设计思想; 容易将PAD自动转换为高级语言源程序。,4、判定表 & 判定树(Decision Table & Tree),表示复杂的条件(input)组合与应做动作(output)之间的对应关系。,工具,例:航空行李托运费的算法 按规定:重量不超过30公斤的行李可免费托运。重量超过30公斤时,对超运

46、部分,头等舱国内乘客收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 I

47、NTERFACE pseudocode lines END 调用时可用:PERFORM USING, 内语法用自然语言描述;,抽象类型,应具备以下特点:,优点:易于实现由PDL到源代码的自动转换。 缺点:不够直观。,3.6.1 用户界面设计的特性及任务,3.6.3 用户界面的基本类型,3.6.4 I/O用户界面设计,3.6 用户界面(UI)设计,3.6.5 MVC模式,3.6.2 用户界面设计的原则,随着各种应用软件的面市,作为人机接口的用户界面具有越来越重要的作用,用户界面是否友好直接影响到软件的寿命与竞争力。因此,对用户界面的设计必须予以足够的重视。,User Interface(UI),

48、Friendly UI,用户界面应具有的特性 什么是友好的用户界面。 用户界面设计的任务 用户界面设计应该完成的工作。 用户界面的基本类型 用户界面的工作模式。,用户界面设计中的主要问题:,一、用户界面应具有的特性 1、可使用性(availability) 使用简单。 用户界面中所用术语的标准化和一致性。 具有HELP功能。 快速的系统响应和低的系统成本。 具有容错能力。,3.6.1 用户界面设计的特性及任务,2、灵活性(agility) 考虑用户的特点、能力、知识水平。 提供不同的系统响应信息。 提供根据用户需求制定和修改界面。,3、界面的复杂性与可靠性(complexity & relia

49、bility) 复杂性界面规模及组织的复杂程度。应该愈简单愈好。 可靠性指无故障使用的时间间隔。用户界面应该能够保证用户正确、可靠地使用系统,及程序、数据的安全。,1、用户特性分析 用户模型 了解所有用户的技能和经验,针对用户能力设计或更改界面。从以下方面分析:,二、用户界面设计的任务,这部分工作应该与软件需求分析同步进行。主要包括以下内容:,用户类型 通常分为:外行型、初学型、熟练型、专家型。 用户特性度量 与用户使用模式和用户群体能力有关。包括:用户使用频度、用户用机能力、用户的知识、思维能力等。,2、用户界面的任务分析 任务模型(DFD图) 是对系统内部活动的分解,不仅要进行功能分解(用

50、DFD图描述),还要包括与人相关的活动。每个加工即一个功能或任务。,3、确定用户界面类型 字符界面 GUI界面 无交互界面,3.6.2 用户界面的原则,提高易用性的设计原则: 用户界面适合于软件的功能 容易理解 风格一致 及时反馈信息 出错处理 适应各种用户 国际化 个性化 提高美观程度的设计原则: 合理的布局 和谐的色彩,3.6.3 用户界面的基本类型,从用户角度出发,用户界面设计的类型主要有菜单、图像、对话框和窗口以及问题描述语言、数据表格、图形与图标等。 每一种类型都有不同的特点和性能。,混合菜单,1、菜单(menu) 按照显示方式: 正文菜单、图标菜单、正文和图标混合菜单,如“开始”菜

51、单。,按屏幕位置和操作风格: 固定位置、浮动位置(弹出)、下拉式、嵌入式 。,2、图像(image) 在用户界面中,加入丰富多彩的画面,将能够更加形象地为用户提供有用的信息,以达到可视化的目的。主要的处理操作有:图像的隐蔽和再现、屏幕滚动和图案显示、动画等。,3、对话框(dialogue box) 对话框是在需要时,显示在屏幕上一个矩形区域内的图形和正文信息。通过对话,实现系统和用户之间的通信。 对话框显示的方式与弹出式菜单类似,即瞬时弹出。同时,系统还应将对话框所覆盖的原图像进行保存,以便在对话结束后能立即恢复。 有三种对话形式:,必须回答式对话框,无需回答式对话框,警告式对话框,必须回答式

52、 无需回答式 警告式,4、窗口(window) 图形学中称为视图区(Viewport),视为虚拟屏幕。一个实用窗口,可包含部件:,菜单区(menu bar) 标题区(title bar) 大小区(size bar) 用户工作区(users work bar) 横向滚动区(horizontal scroll bar) 纵向滚动区(vertical scroll bar) 图标区(icon bar) 移动区(move bar) 退出区(quit bar),下图描述了一个包括多个部件的窗口.,3.6.4 I/O用户界面设计,I/O用户界面的设计,尤其是数据输入界面的设计,直接影响到用户使用系统的效率

53、。特别是输入数据量大时,主要考虑提高输入速度。,、数据输入界面设计 数据输入界面设计是系统的一个重要组成部分,一个好的输入界面应该尽可能方便而有效地进行数据输入。,尽量减少输入工作量 采用对相同内容输入设置默认值(缺省值)、自动填入 、列表或点击选择 输入屏幕与输入格式匹配 应以操作简便为主要原则。 数据输入的一般规则 常常考虑确定输入、交互动作、确定删除、提供反馈数据等。,、输出界面设计,数据输出界面设计,首先应该了解数据显示的要求,选择适当的显示内容和显示的形式。, 显示内容选择的原则是: 只选择必需的数据显示,联系紧密的数据应一起显示 ,每一屏数据的数量 不超过整个屏幕的30%。 安排显

54、示结构的规则: 数据安排要方便用户使用,要提供明了的提示帮助信息。 信息的表示方法 例:1l显示重要信息时应注意文字和数值的显示 显示数值信息时,我们应根据信息是定量还是定性表达来选择显示方式。,3、颜色的使用,1)限制使用的颜色数目并且用一种保守的方式使用它们。 2)使用颜色的改变来表示系统状态的改变。 3)用有意义的和一致的方式使用颜色。 4)考虑颜色的生理作用。 5)尽量不要选择高亮度或者高饱和度的纯色,并注意合适的颜色搭配。,View,Controller,Model,Table Class,嵌入SQL,Data,V:呈现给用户的界面,也是表现数据的层次,负责人机界面。,C:用户界面与

55、业务逻辑层的通信控制层,一方面解释来自用户界面的输入,调用相应的Model中的方法,另一方面处理来自Model的事件和返回的执行结果,调用适当的View给用户。,M:整个模型的核心部分,代表解决方案的真正业务逻辑部分。,D:数据存储层,负责模型与数据库相联系。,3.6.5 MVC模型,举例:,通常结构化分析包括问题定义、可行性研究和需求分析3个阶段;接下来,就进入结构化设计。,例1:利用结构化方法分析和设计一个工资支付系统。,软件设计实例,某校财务部门人工计算工资并编制财务报表,每个月都需要两名会计紧张工作半个月才能完成,不仅效率低而且成本高。 现在寻找一种比较便宜的生成工资明细表和各种财务报

56、表的办法。,一个工资支付系统,1)问题定义,预期项目规模:目前计算工资所花费的成本;新系统的开发成本;运行费用。,项目名称:工资支付。 问题:目前计算工资和编制报表的费用太高。 项目目标:研究开发费用较低的新工资支付系统的可能性。 项目规模:开发成本应该不超过7.2万元(50%)。(假定一名会计人工费2.4万/年;新系统年获利2.4万;3年可收回投资即7.2万;所以7.2万可能是投资上限。) 初步设想:用自己的计算机系统生成工资明细表和财务报表。 可行性研究:为了更全面地研究工资支付项目的可行性,建议进行大约2周的可行性研究。这个研究成本不超过4000元。,问题定义结果:,2)可行性研究 用最小的代价尽快确定问题是否能够解决,以避免盲目投资带来的巨大浪费。 -澄清系统规模和目标; -研究现有系统;(用系统流程图描述处理工资事务的大致过程;现有人工工资支付系统的工作流程。),-导出高层逻辑模型(工资支付系统的数据流图),-进一步确定系统规模和目标 步骤到是一个循环过程。 -导出供选择的解法,进行可行性分析,包括技术可行性、操作可行性和经济可行性。 通常分析员应该至少提出3种类型的供选择的方案:低成本系统、中等成本系统和高成本系统。,-低成本方案

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论