软件的系统设计课件

上传人:磨石 文档编号:243001850 上传时间:2024-09-13 格式:PPT 页数:65 大小:244.50KB
返回 下载 相关 举报
软件的系统设计课件_第1页
第1页 / 共65页
软件的系统设计课件_第2页
第2页 / 共65页
软件的系统设计课件_第3页
第3页 / 共65页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第三章 软件的系统设计,软件工程,软件的系统设计-概要设计,陈巧丽,第三章 软件的系统设计,回顾引入:,Why to do? 可行性研究,What to do?需求分析,How to do? 系统设计,本章从三个阶段介绍了项目中期所要完成的工作,它们是项目的系统分析阶段、系统设计阶段和代码实现阶段。,在系统分析阶段,可采用CASE(,计算机辅助软件工程,)工具确定问题域,进行需求建模,利用数据流图可建立起分析对象模型,然后进行系统的分析合并,再进行测试和验收。,本章以实例为驱动,在系统设计阶段进行界面的设计,建立出设计模型,结合第七章面向对象技术和第九章UML的初步知识进行详细设计。在代码实现方面根据具体的软件项目分析软件的开发工具准备,利用中间件技术(中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享系统和网络资源,如ODBC、JDBC、OLE DB等)开发MIS(管理信息系统)等知识。,系统分析与需求分析的区别,需求分析是一个项目的开端,也是项目建设的基石。是对用户需求的定义,对软件系统的描述。,在以往建设失败的项目中,80是由于需求分析的不明确而造成的。因此一个项目成功的关键因素之一,就是对需求分析的把握程度。而项目的整体风险往往表现在需求分析不明确、业务流程不合理,用户不习惯或不愿意去用承建方的软件。作为第三方的监理公司,必须提醒承建方、客户方重视需求分析的重要性。,系统分析的任务:将用户的业务逻辑转化为程序逻辑,计算时间和成本。根据开发人员的理论知识和实际的经验,人们会采用各种满足实际情况的系统分析、开发方法、步骤以及文档等等。,一般情况下,在系统分析书中应该有以下内容(视项目而定):1、系统需求说明说明系统是一个什么样的系统,用市场上现有的系统来类比, 用客户(或是我们自己)需要一个什么样的系统进行说明,力求完整。,2、 系统资源说明对系统所需要的软件、硬件资源进行说明。描述系统所需要的所有的成本(包括人员、时间、设备、系统、一次性投入资金、持续性投入资金这样的所有资源)。,3、 系统可行性分析对系统的实施中的资源进行分析,说明投入的合理性和必然性,对其中的所有不可预见性的投入进行合理的量化说明,来说明系统的实施的可行性 。,系统分析阶段就是要全面了解系统的商业需求和处理要求并制作书面文件,详细地定义信息系统的功能。这一阶段的最根本的目的就是解决系统要做什么的问题-,What to do?,系统分析准备,在进行详细的系统开发前,开发人员必须先理解,一些概念,包括方法、模型、工具和技术。,1模型,:是对问题做出的一种抽象,它由一组图示符号和组织这些符号的规则组成。,建模是问题域中定义软件解的一种方法。建模的目的主要是为了减少问题的复杂性。,2. 工具,系统开发工具是一些帮助生成模型或其它组件的软件,。,系统开发人员常用的是CASE工具,,如,Microsoft Visio 、 RationalRose,等,。,用了CASE工具,开发软件能更加规范,标准化,从而提高软件开发的效率,。,3. 技术,技术就是帮助分析员完成系统开发活动或任务的一组方法。,有时一种技术适用于整个生命周期。,常在开发过程中使用的技术有:项目管理技术、用户面谈技术、数据建模技术、结构化分析技术、软件测试技术、面向对象分析与设计技术等。,4. 系统开发方法,方法,是一组完成系统开发生命周期每一阶段活动的技术,它提供了完成每一步的详细指导。常用的方法有,结构化方法,和,面向对象方法。,本章主要以结构化方法为例。,20世纪70年代出现了结构化的系统分析设计方法。,结构化系统分析(Structured Analysis ,简称SA),,是一种简单实用,使用很广的方法。它往往是将一个复杂的系统分解、抽象成为多个简单的子系统;使用,自顶向下逐层分解,的方式,将一个复杂系统分解,抽象成为多个简单的子系统,如果某个子系统仍然复杂,将其进一步分解。,目前作为针对“软件危机”的最佳对策,,面向对象(,OO)技术已经引起人们的普遍关注。,而许多编程语言(C+、VB、VF、PB、Delphi等)也都推出了支持面向对象的新版本。,面向对象方法的基本思想,是,从现实世界客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题。,面向方法强调直接以现实世界中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。,这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。,系统分析阶段的任务主要解决了系统“做什么”的问题,系统设计阶段要解决的任务则是系统“怎么做”的问题。,系统分析员审查,可行性研究报告,、,软件项目开发计划,、,软件需求规格说明书,,提出候选的最佳推荐方案,用系统流程图(注意画法,见前面),组成系统物理元素清单,将成本效益分析、系统的进度计划,供专家审定,审定后即进入软件设计阶段。,软件设计阶段的主要任务,是要实现逻辑模型(DFD和DD等)向物理模型转换,即要解决“系统如何实现”问题,,该阶段又可画分为概要设计和详细设计两个阶段。,3.1概要设计,1.基本任务,设计软件系统结构:,采用某种设计方法,将一个复杂的系统按功能划分成模块。,确定每个模块的功能。,确定模块之间的调用关系。,确定模块之间的接口,即模块之间传递的信息。,评价模块结构的质量.,数据结构设计: 采用“逐步细化”的方法,如采用数据字典描述逐步细化。设计有效的数据结构(如队列,线性表,链表等),大大简化软件模块处理过程的设计。,编写概要设计文档:,概要设计说明书。,数据库设计说明书:主要给出所使用的DBMS简介、数据库的概要模型、逻辑设计、结果。,用户手册:对需求分析阶段编写的用户手册进行补充。,修订测试计划,对测试策略、方法、步骤提出明确要求。,评审。,2、软件设计文档:包括“概要设计说明书”,“详细设计说明书” ,“数据库设计说明书”。,3、软件设计的基本原理,(一)、模块的概念,1.定义,所谓,模块,,,是指具有相对独立性的,由数据说明、执行语句等程序对象构成的集合,。程序中的每个模块都需要单独命名,通过名字可实现对指定模块的访问,。,在高级语言中,模块具体表现为,函数、子程序、过程,等。,一个模块具有输入/输出(接口)、功能、内部数据和程序代码四个特征,。,模块化,是指将整个程序划分为若干个模块,每个模块用于实现一个特定的功能,。划分模块对于解决大型复杂的问题是非常必要的,可以大大降低解决问题的难度。,例如,我们设,C(x),为问题x所对应的,复杂度函数,,,E(x),为解决问题x所需要的,工作量函数,。对于两个,问题,P1和P2,,如果:,C(P1) C(P2),即问题P1的复杂度比P2高,则显然有:,E(P1) E(P2),即解决问题P1比P2所需的工作量大。,在人们解决问题的过程中,发现存在有另一个,有趣的规律,:,C(P1+P2) C(P1)+C(P2),即解决由多个问题复合而成的大问题的复杂度大于单独解决各个问题的复杂度之和,。也就是说,对于一个复杂问题,将其分解成多个小问题分别解决比较容易。由此我们可以推出:,E(P1+P2) E(P1)+E(P2),即将复杂问题分解成若干个小问题,各个击破,所需要的工作量小于直接解决复杂问题所需的工作量,。,模块化可以降低解决问题的复杂度,从而降低软件开发的工作量,。,模块化不但可以降低软件开发的难度,而且可以使程序结构清晰,增加易读性和易修改性。此外,模块化还有利于提高代码的可重用性及团队合作开发大型软件的可行性。,模块化和软件成本的关系,(二)、抽象,抽象,是人类在解决复杂问题过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细节,软件系统进行模块设计时,可有不同的抽象层次。,在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题的解法。,在较低的抽象层次上,则采用过程化的方法。,结构化程序中自顶向下、逐步求精的模块划分思想,正是人类思维中运用抽象方法解决复杂问题的体现,。此外,,在程序设计中运用抽象的方法还能够提高代码的可重用性。,(三)、信息隐蔽,信息隐蔽,:在设计和确定模块时,使得一个模块包含的信息对于不需要这些信息的其它模块来说是不能访问的,也就是说,模块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用。,信息隐蔽的目的主要是为了提高模块的独立性,减少将一个模块中的错误扩散到其他模块的机会。,(四)、模块的独立性,模块独立性, 是指软件系统中每个模块只涉及软件要求的具体的子功能, 而和软件系统中其它的模块的联系最小且接口是简单的,一般采用两个准则度量模块独立性。即模块间,耦合,和模块,内聚,耦合,是模块之间的互相连接的紧密程度的度量。,内聚,是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。,模块独立性比较强的模块应是,高内聚低耦合,的模块。,非直接,数据 标记 控制 外部 公共 内容,耦合 耦合 耦合 耦合 耦合 耦合 耦合,耦合性,模块独立性,模块间的耦合,非直接耦合(Nondirect Coupling),两个模块之间没有直接关系,它们之,间的联系完全是通过主模块的控制和,调用来实现的。,非直接耦合的,模块独立性最,强。,数据耦合 (Data Coupling),一个模块访问另一个模块时,彼此之间是通过,简单数据参数,(不是控制参数、公共数据结构或外部变量) 来传递交换输入、输出信息的(“传值”)。,main(),int x,y;,printf(x+y= %d,sum(x,y);,/*主函数与sum函数之间即为数据耦合关系*/,sum(int a,int b),int c;,c=a+b;,return(c);,标记耦合 (Stamp Coupling),一组模块通过数据结构(标记)传递,记录信息,,就是标记耦合。这个标记是某一数据结构的子结构,而不是简单变量 (“传地址”) 。例如高级语言中的数组名,记录名,文件名等即为标记,其实传递的标记的地址.,控制耦合 (Control Coupling),如果一个模,块通过传送开,关、标志、名,字等控制信息,,明显地控制选,择另一模块的,功能,就是控,制耦合。,标志变量,外部耦合(External Coupling),一组模块都访问,同一全局简单变量,而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。,公共耦合(Common Coupling),若一组模块都访问,同一个公共数据环境,,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。,公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。,内容耦合 (Content Coupling),如果发生下列情形,两个模块之间就发生了内容耦合 (1) 一个模块直接访问另一个模块的内部数据; (2) 一个模块不通过正常入口转到另一模块内部; (3) 两个模块有一部分程序代码重迭(只可能出现在汇编语言中); (4) 一个模块有多个入口。,c,总结:数据耦合的程度最低,其次是控制耦合,再其次是公共耦合,程度最高的是内容耦合。,模块内聚,内聚性,是对一个模块内部各个组成元素之间相互结合的紧密程度的度量指标,。模块中组成元素结合的越紧密,模块的内聚性就越高,模块的独立性也就越高。,理想的内聚性要求模块的功能应明确、单一,即一个模块只做一件事情。,在进行模块化设计时,耦合性和内聚性都是必须考虑的重要指标。但经实践证明,,保证模块的高内聚性比低耦合性更为重要,,在软件设计时应将更多的注意力集中在提高模块的内聚性上。,模块的内聚性主要可划分为如上几种不同的类型。,巧合 逻辑 时间 过程 通信 信息 功能,内聚 内聚 内聚 内聚 内聚 内聚 内聚,内聚性,模块独立性,偶然内聚(Coincidental Cohesion),巧合内聚 (偶然内聚)。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,,则称这种模,块为巧合内,聚模块,它,是内聚程度,最低的模块。,逻辑,内聚(Logical Cohesion),这种模块把几种,相关的功能组合,在一起,每次被,调用时,由传送,给模块的判定参,数来确定该模块,应执行哪一种功,能。,时间内聚,(Classical Cohesion),时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。例如初始化模块和终止模块。,过程内聚,(Procedural Cohesion),使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。,通信内聚,(Communication Cohesion),如果一个模块内所有处理元素都在同一个数据结构上或各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。,顺序内聚,(Squence Cohesion),一个模块内的处理元素和同一个功能密切相关,且必须顺序执行。,功能内聚:是最强的内聚,(Functional Cohesion),一个模块中各个部分都是,完成某一具体功能,必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,不可分割的。则称该模块为功能内聚模块。,3.1.2 软件结构设计准则,(1)模块的分解,尽量做到“,高内聚,低耦合,”。,分解是指把一个模块分解成若干个从属于它的下层模块。,一般按功能分解,分解到成为一个小的功能单一的模块为止。,一般一个模块内包含的语句在30-50条左右较好(指高级语言)。,3.1.2 软件结构设计准则,(2)模块的扇出和扇入,模块的,扇出,指一个模块拥有的直属下级模块的个数,一般扇出数控制在7以内。,模块的,扇入,是指一个模块的直接上级模块的个数。,在设计中,扇入系数大,说明模块分解得好,通用性强,冗余度低。,3.1.2 软件结构设计准则,(3)模块的控制范围和判断作用范围,模块的控制范围:本身及其所有下级模块。,模块的判断作用范围:被判断调用的模块。,原则:,A.对于任何一个内部存在判断调用的模块,它的判断作用的范围应该是其控制范围的一个子集。,B.,存在判断调用的模块,所在层次不要与那些属于判断作用范围的模块所在的层次相隔太远。,3.1.2 软件结构设计准则,A,B,C,D,E,F,G,模块G中有一条判断调用D的语句,违反第1条原则,3.1.2 软件结构设计准则,A,B,C,D,E,F,G,违反第2条原则,3.1.2 软件结构设计准则,A,B,C,D,E,F,G,违反第2条原则,3.1.2 软件结构设计准则,A,B,C,D,E,F,G,正确,3.1.2 软件结构设计准则,(4)力争降低模块接口的复杂程度,模块接口复杂是软件发生错误的一个主要原因。应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。,接口复杂或不一致(即看起来传递的数据之间没有联系),是紧联结或低聚合的征兆,应该重新分析这个模块的独立性。,(5)设计单入口单出口的模块,(6)模块功能应该可以预测,模块的功能应该能够预测,但也要防止模块功能过分局限。,3.1.3 软件系统设计技术,层次图和HIPO,(=H,层次,图+IPO,输入处理输出,图),改进的IPO图(表):,IPO 表,系统:_ 作者:_,模块:_ 日期:_,编号:_,被调用:,处理:,调用:,输出:,输入:,局部数据元素,注释:,结构图:,结构化设计的主要思想是自顶向下地分解功能,以使分解后的功能可由系统的一个给定程序执行。结构图可以将程序功能有层次地组织起来,其中的每一个程序都执行一系列的功能。建立结构图的主要规则是:程序是分层的,模块按高内聚、低耦合的方式组织。,(1) 结构图的主要内容(如图3.2.5) (2)图3-10(书P44),3.1.3 软件系统设计技术,面向数据流的设计方法,(即结构化设计SD-与SA衔接),以需求分析阶段产生的DFD为基础,把信息流映射成软件结构,信息流的类型决定了映射的方法。信息流分为两种类型:变换流和事务流。,(一)概念,1.变换流,2.事务流,3.设计过程,3.1.3 软件系统设计技术,1.变换流,外部表示,内部表示,信息,输入流,输出流,变换流,信息流,时间,参看图形,信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经过加工处理以后再沿输出通路变换成外部形式离开软件系统。,当数据流具有这些特征时,这种,信息流称为变换流。,3.1.3 软件系统设计技术,2.事务流,T,事务,事务中心,数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这种“以事务为中心的”的数据流,成为“事务流”。,处理T称为事务中心,完成以下任务:接收输入数据;分析每个事务以确定它的类型;根据事务类型选取一条活动通路。,精化数据流程图,流类型,区分事务中心和数据接收通路,区分输入和输出分支,映射成事务结构,映射成变换结构,运用模块设计规则,精化软件结构,导出接口描述和全程数据结构,复查,详细设计,事务分析,变换分析,事务,变换,面向数据流的设计过程,3.1.3 软件系统设计技术,(二)变换分析,1.复查基本系统模型,复查的目的是确保系统的输入数据和输出数据符合实际。,2.复查并精华数据流程图,3.确定数据流程图具有变换特性还是事务特性,只有当遇到有明显事务特性的信息流时,才采用事务分析方法,否则,一般都认为是变换流,采用变换分析的方法。,3.1.3 软件系统设计技术,4.确定输入流和输出流的边界,从而孤立出变换中心,(1)检查“输入流”的边界,从输入的数据源开始,沿着每一个由数据源传入的数据流的移动方向进行跟踪分析,逐个分析它所经过的处理逻辑功能。如果仅是传入的数据流作形式上的转换,逻辑上没有进行实际的数据处理功能,则这些处理逻辑属于系统的“输入处理部分”。顺着传入的数据流的移动方向,一直跟踪到它被真正地处理为止。,3.1.3 软件系统设计技术,(2)检查“输出流”的边界,从输出结果的地方开始,逆着每一个传递出去的数据流,由外向里反方向跟踪,逐个分析它的处理逻辑功能,一直反方向跟踪到它被真正地产生出来为止。,(3)得到变换中心,根据前两步的分析结果,画出一个闭环界线,在界线以内的就是变换中心。,3.1.3 软件系统设计技术,5.完成“第一级分解”,C,m,C,a,C,t,C,e,第一级分解的方法,3.1.3 软件系统设计技术,控制模块C,m,是抽象出来的,它位于软件结构最顶层,协调控制下属模块。,输入信息处理控制模块C,a,,协调对所有输入数据的接收。,变换中心控制模块C,t,,管理对内部形式的数据的所有操作。,输出信息处理控制模块C,e,,协调输出信息的产生过程。,3.1.3 软件系统设计技术,6.完成“第二级分解”,所谓第二级分解就是把数据流程图中的每个处理映射成软件结构中一个适当的模块。,完成第二级分解的方法是,从变换中心的边界开始沿着输入通路向外移动,把输入通路中每个处理逻辑映射成软件结构中C,a,控制下的一个低层模块;,然后沿输出通路向外移动,把输入通路中每个处理逻辑映射成直接或间接受模块C,e,控制的一个低层模块;,最后把变换中心内的每个处理映射成受C,t,控制的一个模块。,3.1.3 软件系统设计技术,A,D,C,B,C,m,C,a,C,B,D,A,第二级分解的方法,3.1.3 软件系统设计技术,7.使用模块的设计原则,对第一次分割得到的软件结构进一步精化。,为了得到一个易于实现、易于测试和易于维护的软件结构,根据软件设计的基本原则和其它启发性原则,对初步分割得到的模块进行再分解或合并。,3.1.3 软件系统设计技术,(三)事务分析,事务分析的设计步骤和变换分析的设计步骤大部分相同或类似,主要差别仅在由数据流程图到软件结构的映射方法不同。由事务流映射成的软件结构包括一个接收分支和一个发送分支。,映射出,接收分支,结构的方法和变换分析映射出输入结构的方法相似,即从事务中心的边界开始,把沿着接收流通路的处理逻辑映射成模块。,发送分支,的结构包含一个调度模块,它控制下层的所有活动模块;然后把数据流程图中的每一个活动流通路映射成与它的特征相对应的结构。,总控,调度,A_CTL,B_CTL,C_CTL,接收通路,C通路,B通路,A通路,事务分析的映射方法,3.1.3 软件系统设计技术,(四)总结,对于一个大系统,常常把变换分析和事务分析应用到同一个数据流程图的不同部分,由此得到的子结构形成“构件”,可以利用它们构造完整的软件结构。,一般说来,如果数据流不具有显著的事务特点,最后使用变换分析;反之,如果具有明显的事务中心,则应该采用事务分析技术。,作业,作业:P72 一,二(书上做),三,1,2,小结:自已进行。,谢谢使用,本课件!,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 方案规范


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!