软件工程pptppt课件.ppt
软 件 工 程,2009,2,Software Engineering Group,课程介绍,一、课程主要内容,软件工程原理、方法和技术传统软件工程方法面向对象软件工程(统一建模语言UML)软件过程、管理与质量软件工程工具和项目实践,2009,3,Software Engineering Group,软件工程:实践者的研究方法 Roger S.Pressman著 黄柏素 梅宏 译 机械工业出版社http:/www.uml.org/http:/www.omg.org/mda/,2009,4,Software Engineering Group,二、参考文献,2009,5,Software Engineering Group,三、软件工程所面对的问题,大规模、复杂软件系统的开发和维护,现代软件工程面对的困境,如何构造有效的过程、方法和工具以适应现代大规模、复杂性软件系统的开发和维护复杂设备中安全关键软件的正确性国家级分布式应用软件的可靠性大型实时指挥软件的时效性大型网络软件的可维护性互联网软件的安全性复杂软件系统的可生存性,2009,Software Engineering Group,2004年12月20日,美空军第422测试评估大队的一架F-22战斗机因软件问题在起飞过程中失控坠毁。,2007年2月9日同样因软件问题延迟在日本部署,复杂设备中安全关键软件的正确性,2009,7,Software Engineering Group,事件:美国F-22猛禽战斗机,多计算机系统试图同时访问同一资源引起的软件失效,国家级分布式应用软件的可靠性,2009,8,Software Engineering Group,事件:美国电力监测与控制管理系统,原因是空管软件时钟缺陷,大型实时指挥软件的时效性,2009,9,Software Engineering Group,事件:美国空管软件,2005年11月1日,东京证券交易所因为软件升级出现系统故障,导致早间股市停摆。,大型网络软件的可维护性,2009,10,Software Engineering Group,事件:东京证券交易软件,约80%的家庭用户感染了Spyware美国2004年网络犯罪非法谋利105亿美元50%以上的安全漏洞是由软件缺陷引起的,2009,11,Software Engineering Group,互联网软件安全的几个数据,互联网软件的安全性,复杂软件系统的可生存性,2009,12,Software Engineering Group,互联网安全趋势图,2002年NIST估计软件造成美国年经济损失约600亿美元,占GDP的0.6%,2009,13,Software Engineering Group,2009,14,Software Engineering Group,我们的信息基础设施正建立在脆弱的软件之上!,软件的根本问题任何机构和个人都无法确保所开发的软件一定没有问题。,2009,15,Software Engineering Group,四、为什么?,计算机系统(软件系统):,2009,16,Software Engineering Group,五、建立人与机器之间的信任关系,人与机器之间的关系,人与人之间的关系,2009,17,Software Engineering Group,第一部分传统软件工程方法,问题定义需求分析概要设计详细设计编 码测 试维 护,2009,18,Software Engineering Group,传统软件工程方法,1、基本概念2、系统定义3、需求分析4、设计5、编码6、测试7、维护,2009,19,Software Engineering Group,内容组织,软件 计算机系统中的程序及其有关文件。程序 计算任务中的处理对象和处理规则的描述。文件 为了便于了解程序所需的资料说明。,2009,20,Software Engineering Group,一、基本概念(1.1),软件的作用,2009,21,Software Engineering Group,用户与硬件的接口计算机系统的指挥者计算机系统结构设计的重要依据,1.1基本概念,软件的发展过程,2009,22,Software Engineering Group,第一阶段:从第一台计算机上的第一个程序的出现到实用的高级程序设计语言出现之前(1946-1956);第二阶段:从实用的高级程序设计语言出现到软件工程出现之前(1956-1968);第三阶段:软件工程(1968-)。,1.1基本概念,软件的分类,2009,23,Software Engineering Group,系统软件支撑软件(中间件middleware)应用软件,1.1基本概念,软件危机,2009,24,Software Engineering Group,供求关系失调开发费用失控,进度拖延可靠性差难以维护,1.1基本概念,产生软件危机的原因(软件本身的特点),2009,25,Software Engineering Group,软件开发进展情况较难衡量软件开发质量难以评价管理和控制软件开发过程相当困难软件没有“磨损”概念,软件维护通常意味着改进或修改原来的设计,1.1基本概念,产生软件危机的原因(软件开发人员的错误观点),2009,26,Software Engineering Group,产生软件危机的原因(软件开发人员的错误观点)“有一个对目标的概括描述就足以着手编写程序了,许多细节可以在以后再补充”“所谓软件开发就是编写程序并设法使它运行”“用户对软件的要求不断变化,然而软件是柔软而灵活的,可以轻易地改动”“软件投入生产性运行以后需要的维护工作并不多,而且维护是一件很容易做的简单工作”,1.1基本概念,软件工程,2009,27,Software Engineering Group,应用计算机科学、数学及管理科学等原理,以工程化原则、方法解决软件问题的工程。其中,计算机科学、数学用于构造模型与算法,工程科学用于制定规范、设计范型、降低成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。,1.1基本概念,软件工程的基本内容,2009,28,Software Engineering Group,软件设计方法论软件工具软件工程标准和规范软件工程管理软件工程理论,1.1基本概念,软件工程的基本原理:,2009,29,Software Engineering Group,严格按照计划进行管理坚持进行阶段评审实行严格的产品控制采用现代的程序技术结果要能清晰地审计开发小组人员素质要好,数量不宜多要承认不断改善软件工程实践的必要性,1.1基本概念,软件生存期(过程)模型 软件生存期是软件产品或系统一系列相关活动的全周期。从形成概念开始,经过研制,交付使用,在使用中不断增补修订,直到最后被淘汰,让位于新的软件产品的过程。对软件生存期的不同划分,形成了不同的软件生存期模型。,2009,30,Software Engineering Group,1.1基本概念,瀑布式软件生存期模型,2009,31,Software Engineering Group,强调阶段的划分及其顺序性、各阶段工作及其文档的完备性,是一种严格线性的、按阶段顺序的、逐步细化的开发模式。,1.1基本概念,瀑布式软件生存期模型把软件开发过程划分成若干阶段,每个阶段的任务相对独立,便于不同人员分工协作,从而降低了整个软件开发工程的困难程度。在软件生存期的每个阶段都采用科学的管理技术和良好的方法与技术,而且每个阶段结束之前,都从技术和管理两个角度进行严格的审查,经确认之后才开始下一阶段的工作。,2009,32,Software Engineering Group,1.1基本概念,瀑布式模型的特点:,2009,33,Software Engineering Group,结构简单明了;历史较长、应用面广泛、为广大软件工作者所熟悉;已有与之配套的一组十分成熟的开发方法和丰富的支撑工具。确定了需求分析的绝对重要性,但是在实践中要想获得完善的需求说明是非常困难的;反馈信息慢。,1.1基本概念,软件质量要素:,2009,34,Software Engineering Group,正确性:软件产品准确执行软件规格说明中所规定的能力。健壮性:在异常条件下软件仍能运行的能力。可靠性:软件在给定的时间内和规定的环境条件下,按规格说明的规定成功地运行的概率。可靠性理解为正确性和健壮性之和。,1.1基本概念,2009,35,Software Engineering Group,SE Humor,1.1基本概念,1、问题定义的关键任务 确切地定义用户要求解决的问题,也就是确定问题的性质、工程的目标和规模。,2009,36,Software Engineering Group,二、问题定义(1.2),可行性研究对软件进行分析与估算确定软件作用范围,可行性研究:,2009,37,Software Engineering Group,经济可行性技术可行性法律可行性不同的方案,1.2 问题定义,对软件进行分析与估算:,2009,38,Software Engineering Group,确定软件的范围估算完成软件开发任务所需的资源估算软件的成本估算和安排软件开发项目的进度,1.2 问题定义,确定软件的作用范围,2009,39,Software Engineering Group,详细描述软件的任务和具体的要求,抱括软件的功能、性能、接口和可靠性等四个方面的内容。,1.2 问题定义,范围(研制的目标,主要功能,其他特性,开发概况)资源(人力资源、硬件资源、软件资源、可用性资源窗口)成本进度安排,2009,40,Software Engineering Group,2、软件计划:,1.2 问题定义,软件需求分析是软件生存期的一个重要阶段,是软件开发项目得以成功的基础。其最根本的任务是确定为了满足用户的需要软件系统必须做什么。软件需求分析是一个不断发现和决定的过程,在此过程中,软件开发者和软件申请者(用户)同样起着重要的作用。在需求分析与说明过程中,需要大量交换意见,其间充满着传错信息和发生误解的可能性:“我知道你相信你明白了你认为我所说的是什么,但是我不能肯定你是否意识到你听到的并不是我所指的意思.”。,2009,41,Software Engineering Group,三、需求分析(1.3),1、需求分析几点说明,2009,42,Software Engineering Group,1.3 需求分析,2、软件需求分析实现以下几个目标:,2009,43,Software Engineering Group,给出软件系统的数据流程图与数据结构,构造一个完全的系统逻辑模型;提出详细的功能说明确定设计限定条件,规定性能要求;密切与用户的联系,使用户明确自己的任务,以便实现上述两项目标。,1.3 需求分析,3、软件需求分析包括的工作:,2009,44,Software Engineering Group,问题的认识 需求分析人员通过频繁与用户联系,充分理解用户提出的每一个功能与性能要求,从软件系统特征、软件开发全过程以及软件计划给出的资源和时间约束,来确定软件开发的总策略。评价与综合 需求分析人员必须求得数据的流程和数据结构,评价优缺点;结合用户要求,修改现行的系统,提出新系统的功能,加以细化;提出软件的约束条件、响应时间、存储条件等。,1.3 需求分析,建立需求说明书 软件需求说明书包含软件功能、性能、接口、有效性和逻辑模型的描述。为了证实软件能否被成功实现就要规定相应的检验标准,这些标准在软件开发期间将作为测试的依据。复审 由软件开发人员和用户共同对需求说明书进行严格的审查。,2009,45,Software Engineering Group,1.3 需求分析,4、软件需求分析人员应该具备的特征:,2009,46,Software Engineering Group,善于领会一些抽象的概念,重新整理使之成为各种逻辑成分,并根据各种逻辑成分综合出问题的解决办法;善于从各种相互冲突或混淆的原始资料中吸取恰当的论据;能够理解用户的环境及领域知识;,1.3 需求分析,具备把系统的硬件和软件部分应用于用户环境的能力;具备良好的书面和口头形式进行讨论和交换意见的能力;具有“既能看到树木,又能看到森林”的能力。,2009,47,Software Engineering Group,1.3 需求分析,6、结构化分析方法(SA),2009,48,Software Engineering Group,SA方法采用“抽象”和“分解”两个基本手段,用抽象模型的概念,按照软件内部数据传递、变换关系,由顶向下逐层分解,直到找到满足功能需要的所有可实现的软件元素为止。SA方法采用“分解”的方式来理解一个复杂系统,“分解”需要有描述手段,数据流程图就是作为描述信息流程和分解的手段而引入的。,1.3 需求分析,数据流程图,2009,49,Software Engineering Group,流程图符号介绍,1.3 需求分析,5、基本系统模型,2009,50,Software Engineering Group,软件系统的全部功能被表示成一个单一的信息变换过程,1.3 需求分析,例:病员监视系统,病员病历,病员监视系统,病员,护士,护士,基本模型,病情信号,报告,警告信号,病历数据,请求提出报告,2009,51,Software Engineering Group,1.3 需求分析,2009,52,Software Engineering Group,1.3 需求分析,2009,53,Software Engineering Group,1.3 需求分析,数据流程图的特点:,2009,54,Software Engineering Group,可以表示任何一个系统(人工的、自动的、或混合的)中的数据流程;每个表示加工的圆圈可能需要进一步分解以求得对问题的全面理解;着重强调的是数据流程而不是控制流程。,1.3 需求分析,推导数据流程图的简单准则:,2009,55,Software Engineering Group,第一层数据流程图应当是基本的系统模型;应当仔细说明原始的输入/输出文件;所有箭头和圆圈均应当加上标注(使用有意义的名字);必须保持信息的连续性;每次只加工一个圆圈。,1.3 需求分析,顶层数据流图,随着需求分析活动的深入,较高抽象级别的复杂加工逐步精化为一系列相互关联的数据流和子加工。,数据流图的精化与平衡,逐层精化必须保持数据流图的平衡数据流与加工精化必须保持一致需求分析活动只求对问题全面、清晰的理解,不考虑软件设计细节,例子:商店业务处理系统,第一层数据流图,加细每一个加工框 销售细化,采购细化,数据流程图中,所有的图形元素都进行了命名,所有名字的定义集中起来就构成一本数据字典。数据字典最重要的用途是作为分析阶段的工具。在数据字典中建立的一组严密一致的定义有助于改进分析员和用户之间的通信,因此将消除许多可能的误解。对数据的这一系列严密一致的定义也有助于改进在不同的开发人员之间或者不同开发小组之间的通信。如果要求所有开发人员都根据公共的数据字典描述数据或设计模块,则能避免许多麻烦的接口问题。,2009,62,Software Engineering Group,数据字典,1.3 需求分析,信息结构是各个数据成分之间逻辑关系的一种表示方法。数据结构决定信息的组织、存取方法、结合性程度以及不同的处理方案。典型的数据结构包括标量项、顺序向量、n维空间、链接表等。,2009,63,Software Engineering Group,信息结构,1.3 需求分析,分层数据结构表示法:,2009,64,Software Engineering Group,分层框图Warnier图,1.3 需求分析,分层框图,2009,65,Software Engineering Group,分层框图把信息用多层方框按照树形结构组织起来。在结构的顶层,用一个方框代表整个结构。下面各层由表示不同信息类别的方框组成,它们可以看成是上一层方框的子集。在该图的最低一层,每个框包含单独的数据实体。,1.3 需求分析,.,.,.,2009,66,Software Engineering Group,分层框图示例,1.3 需求分析,Warnier图,2009,67,Software Engineering Group,Warnier图把信息表示成一种树形数据结构。可以规定某些信息种类或信息量是重复性的,也可以说明在某一种类中信息是有条件出现的。,1.3 需求分析,2009,68,Software Engineering Group,Warnier图示例,1.3 需求分析,7、软件需求说明书,2009,69,Software Engineering Group,1.3 需求分析,8、初步的用户手册,2009,70,Software Engineering Group,手册的准备迫使分析人员从用户的角度来看待软件,从而及早考虑接口方面的人机环境工程。用户可以审查一个明确描述人机接口的实际文件。,当确定了人机交互作用的软件需求后,准备一份初步的用户手册是作为对所要求文件的补充往往是有用的,这种手册将起到两个作用:,1.3 需求分析,9、软件需求说明的审查,2009,71,Software Engineering Group,审查需求的一致性审查需求的现实性审查需求的完整性和有效性,1.3 需求分析,软件需求说明审查中的问题,2009,72,Software Engineering Group,所规定的软件目标和任务与系统的目标和任务相符合吗?与所有系统成分的重要接口都已被描述了吗?研制项目的数据流程图、数据字典、数据结构充分确定了吗?图表都清楚吗?每个图表在不加补充说明的情况下能被理解吗?主要功能在规定的范围之内吗?每一种功能被充分说明了吗?,1.3 需求分析,设计的限制条件是现实的吗?开发的技术风险是什么?考虑过软件需求的其他方案吗?检验标准是否详细?他们能否确认系统是成功的?有无遗漏、重复或不一致的地方?用户是否审查了初步的用户手册?软件计划中的估算是否需要修改?,2009,73,Software Engineering Group,1.3 需求分析,10、用于软件需求分析的工具,2009,74,Software Engineering Group,自然语言描述的问题-不可判定问题What to do-可判定问题,需要无穷资源形 式化语言How to do-可判定问题,需要有穷资源,1.3 需求分析,软件设计是把软件需求变为软件的具体方案软件设计包括两个阶段:概要设计和详细设计概要设计根据软件需求所确定的信息流程或信息结构,导出软件的总体表示-软件结构或程序过程,2009,75,Software Engineering Group,四、概要设计(1.4),关于软件设计,Design,Data design,Architectural design,Interface design,Component-level design,The design model,1、软件结构,2009,77,Software Engineering Group,软件结构是一种层次化的表示,其指出了由需求分析隐含地确定的某一问题的软件解法的各个元素(称之为模块)之间的相互控制关系软件结构的演变从确定问题开始,当该问题的每个部分用一个或多个软件加以解决以后,整个问题的解也就有了,软件结构概念,1.4 概要设计,2009,78,Software Engineering Group,1.4 概要设计,软件结构的度量和术语,2009,79,Software Engineering Group,深度:表示控制的层数。宽度:表示控制(同一层次)总跨度。扇出数:指由一模块直接控制的其他模块的数目。扇入数:指有多少个模块直接控制一个给定的模块。上级模块下级模块,1.4 概要设计,Design,Width,Depth,Fan-out,Fan-in,2、程序过程,2009,81,Software Engineering Group,程序过程是用于描述每个模块的操作细节,是关于模块算法的详细描述,它应当包括处理的顺序、精确的判定位置、重复的操作以及数据组织和结构等。,1.4 概要设计,3、模块,2009,82,Software Engineering Group,模块是数据说明、可执行语句等程序对象的集合,是单独命名的并且可以通过名字来访问,例如过程、函数、子程序、宏、modula等。,1.4 概要设计,4、模块化,2009,83,Software Engineering Group,软件被划分成独立命名和可独立访问的被称作模块的构件,每个模块完成一个子功能,它们集成到一起满足问题需求。,1.4 概要设计,模块化论据,2009,84,Software Engineering Group,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),1.4 概要设计,2009,85,Software Engineering Group,1.4 概要设计,实现模块化的手段,2009,86,Software Engineering Group,抽象:抽出事物的本质特性而暂时不考虑它们的细节。信息隐蔽:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不可访问的。,1.4 概要设计,模块独立性:模块独立是指开发具有独立功能而且和其它模块之间没有过多的相互作用的模块。模块独立的意义:功能分割,简化接口,易于多人合作开发同一软件;独立的模块易于测试和维护。,2009,87,Software Engineering Group,模块独立性,1.4 概要设计,模块独立程度的衡量标准,2009,88,Software Engineering Group,耦合性:对一个软件结构内不同模块间互连程度的度量。内聚性:标志一个模块内各个处理元素彼此结合的紧密程度,理想的内聚模块只做一件事情。,1.4 概要设计,耦合分类,2009,89,Software Engineering Group,无任何连接:两个模块中的每一个都能独立地工作而不需要另一个的存在(最低耦合)。数据耦合:两个模块彼此通过参数交换信息,且交换的仅仅是数据(低耦合)。控制耦合:两个模块之间传递的信息有控制成分(中耦合)。,1.4 概要设计,公共环境耦合:两个或多个模块通过一个公共环境相互作用:1、一个存数据,一个取数据(低耦合);2、都存取数据(低-中之间)。内容耦合:1、一个模块访问另一个模块的内部数据;2、两个模块有一部分程序代码重叠;3、一个模块不通过正常入口而转移的另一个的内部;4、一个模块有多个入口(意味着该模块有多个功能)。,2009,90,Software Engineering Group,1.4 概要设计,内聚分类,2009,91,Software Engineering Group,偶然内聚:一组任务关系松散(低)逻辑内聚:一组任务在逻辑上同属一类,例如均为输出(低)时间内聚:一组任务必须在同一段时间内执行(低)信息内聚:模块内所有元素都引用相同的输入或输出数据集合(中)顺序内聚:模块中的每个元素都是与同一功能紧密相关,一个元素的输出是下一个元素的输入(高)功能内聚:一个模块完成一个且仅完成一个功能(高),1.4 概要设计,关于耦合性和内聚性的设计原则,2009,92,Software Engineering Group,力争尽可能弱的耦合性:尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合力争尽可能高的内聚性:力争尽可能高的内聚性,并能识别出低内聚性,1.4 概要设计,5、概要设计的启发式准则,2009,93,Software Engineering Group,改进软件结构,提高模块独立性模块规模应该适中(最好能写在一页纸上)大模块分解不充分;小模块使用开销大,接口复杂。尽量减少高扇出结构的数目,随着深度的增加争取更多的扇入扇出过大意味着模块过分复杂,需要控制和协调过多的下级模块。一般来说,顶层扇出高,中间扇出少,低层高扇入。,1.4 概要设计,模块的作用范围保持在该模块的控制范围内 模块的作用范围是指该模块中一个判断所影响的所有其它模块;模块的控制范围指该模块本身以及所有直接或间接从属于它的模块。力争降低模块接口的复杂程度 模块接口的复杂性是引起软件错误的一个主要原因。接口设计应该使得信息传递简单并且与模块的功能一致。,2009,94,Software Engineering Group,1.4 概要设计,设计单入口单出口的模块 避免内容耦合,易于理解和维护。模块的功能应该可以预测 相同的输入应该有相同的输出,否则难以理解、测试和维护。,2009,95,Software Engineering Group,1.4 概要设计,6、设计方法,2009,96,Software Engineering Group,结构化程序设计(Dijkstra)结构化程序设计的基础建立在三种能够构成结构化程序的逻辑构造(顺序,选择,重复)上。,面向数据的设计方法,面向数据流的设计面向数据结构的设计,1.4 概要设计,面向数据流的设计,2009,97,Software Engineering Group,面向数据流的设计方法把信息流映射成软件结构信息流的类型决定了映射的方法信息流有两种类型:变换流、事务流,1.4 概要设计,变换流,2009,98,Software Engineering Group,信息沿输入通路进入系统,同时由外部形式变换成内部形式。进入系统的信息通过变换中心,经过加工处理以后再沿着输出通路变换成外部形式离开系统。,1.4 概要设计,2009,99,Software Engineering Group,1.4 概要设计,2009,100,Software Engineering Group,事务流的特点是数据沿着接收通路把外部世界的信息转换成一个事务项,然后,计算该事务项的值,根据它的值激励起多条活动通路中的一条数据流。发出多条通路的信息流中枢被称为“事务中心”。,事务流,1.4 概要设计,2009,101,Software Engineering Group,1.4 概要设计,第1步 复查基本系统模型。第2步 复查并精化数据流图。第3步 确定数据流图具有变换特性还是事务特性。第4步 确定输入流和输出流的边界,从而孤立出变 换中心。,2009,102,Software Engineering Group,变换型分析,1.4 概要设计,2009,103,Software Engineering Group,第5步 完成“第一级分解”。软件结构代表对控制的自顶向下的分配,所谓分解就是分配控制的过程。对于变换流,数据图将被映射成一个特殊的软件结构,这个结构控制输入、变换和输出信息等处理过程:位于软件结构最顶层的控制模块Cm协调下述从属的控制功能:(1)输入信息处理控制模块Ca,协调对所有输入数据的接收;(2)变换中心控制模块Ct,管理对内部形式的数据的所有操作;(3)输出信息控制模块Ce,协调输出信息的产生过程。,1.4 概要设计,2009,104,Software Engineering Group,1.4 概要设计,第6步 完成“第二级分解”。把数据流图中的每一个处理映射成软件结构中一个适当的模块:从变换中心的边界开始沿着输入通路向外移动,把输入通路中每个处理映射成软件结构中Ca控制下的一个低层模块;然后沿输出通路向外移动,把输出通路中每个处理映射成直接或间接受Ce控制的一个低层模块;最后把变换中心内的每个处理映射成受Ct控制的一个模块。第7步 使用设计度量和启发式规则对得到的软件结构进一步精化。,2009,105,Software Engineering Group,1.4 概要设计,2009,106,Software Engineering Group,1.4 概要设计,第1步 复查基本系统模型。第2步 复查并精化数据流图。第3步 确定数据流图具有变换特性还是事务特性。第4步 确定事务中心和每个活动通路的流程特征。,2009,107,Software Engineering Group,事务型分析,1.4 概要设计,第5步 把数据流图映射成一个适合于事务处理的软件结构。第6步 对事务中心的结构和每个活动通路的结构进行分解、合并和改进。第7步 使用设计度量和启发式规则对得到的软件结构进一步精化。,2009,108,Software Engineering Group,1.4 概要设计,C通路,2009,109,Software Engineering Group,1.4 概要设计,面向数据结构的设计:,2009,110,Software Engineering Group,面向数据结构的设计方法用信息结构导出程序过程,面向数据结构的设计过程分为如下几步:(1)分析数据结构的特性;(2)用一些基本类型(如:顺序,选择和重复)来描述数据;(3)把数据结构表示映射成软件的控制层次;(4)利用一组规则改进软件的层次结构;(5)最后得到软件的过程性描述。,1.4 概要设计,Jackson方法的精髓在于:应该把问题分解成仅用三种结构化形式(顺序,选择和重复)来表示的层次结构。Jackson方法包括一种数据结构符号和一组映射或转换步骤。,2009,111,Software Engineering Group,Jackson方法,1.4 概要设计,Jackson图(数据结构符号):,A seq do B;do C;do D;A end,A iter do B;A end,A select do B;A or do C;A or do D;A end,2009,112,Software Engineering Group,1.4 概要设计,Jackson图的特点:,2009,113,Software Engineering Group,便于表示层次结构,而且是对结构进行自顶向下分解的有力工具;形象直观,可读性好;既能表示数据结构,又能表示程序结构。,1.4 概要设计,建立程序结构,这里类别可以是“教师”或“学生”两种。“状态”一项,如果是教师则印出他的“工龄”,如果是学生则印出他的年级。,2009,114,Software Engineering Group,例1:设计一个打印表格的程序。表格如下:,1.4 概要设计,2009,115,Software Engineering Group,1.4 概要设计,2009,116,Software Engineering Group,1.4 概要设计,例2:仓库中存放了多种零件,每种零件的每次变动(收到或发出)都有一张卡片作出记录,库存管理系统每月要根据这些卡片打印一张月报表,列出各种零件在这个月中库存量的净变化。,2009,117,Software Engineering Group,1.4 概要设计,2009,118,Software Engineering Group,1.4 概要设计,根据输入文件产生月报表,产生表头,产生表体,从零件组产生行*,处理文件,产生行,处理卡片*,处理发#,处理收#,2009,119,Software Engineering Group,1.4 概要设计,Jackson方法的基本步骤:,2009,120,Software Engineering Group,(1)分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描述这些数据结构;(2)找出输入数据和输出数据结构中有对应关系的数据单元。所谓对应关系是指有直接的因果关系,在程序中可以同时处理的数据单元(对于重复出现的数据单元必须重复的次数相同才可能有对应关系);,1.4 概要设计,(3)用下述三条规则从描述数据结构的Jackson图导出描述程序结构的Jackson图:第一,为每对有对应关系的数据单元,按照它们在数据结构图中的层次在程序结构图的相应层次画一个处理框(注意,若这对数据单元在输入数据结构和输出数据结构中所处的层次不同,则和它们对应的处理框在程序结构图中所处的层次与它们之中在数据结构图中层次低的那个对应);,2009,121,Software Engineering Group,1.4 概要设计,(3)用下述三条规则从描述数据结构的Jackson图导出描述程序结构的Jackson图:第二,根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图中的相应层次分别为它们画上对应的处理框;第三,根据输出数据结构中剩余的每个数据单元所处的层次,在程序结构图中的相应层次分别为它们画上对应的处理框。,2009,122,Software Engineering Group,1.4 概要设计,(4)列出所有操作和条件(包括分支条件和循环结束条件),并且把它们分配到程序结构图的适当位置。(5)用伪码表示程序。,2009,123,Software Engineering Group,1.4 概要设计,例:输入一个文件FIPT,此文件只包含三种记录类型T1、T2和T3,现在要对该文件作如下处理:,2009,124,Software Engineering Group,(1)统计出现的第一个T1类型的记录前的记录总数(计数A);(2)显示第一个T1类型的记录;(3)显示最后一个记录,最后一个记录是在第一个T1类型的记录后的 第一个T2类型的记录;(4)计算第一个T1类型的记录后的记录批数(一批记录指一串连续的 T1类型的记录或一串连续的T3类型的记录(计数B);(5)统计在第一个T1类型的记录后出现的T1类型记录的总数(计数C);(6)计算在第一个T1类型的记录后的T3类型记录的批数(计数D)。,1.4 概要设计,FIPT,前缀,批数部分,T2,非T1*,批*,T1批#,T3批#,T1*,T3*,第一个T1,2009,125,Software Engineering Group,1.4 概要设计,处理FIPT,处理前缀,处理第一个T1,处理批数部分,处理T2,处理非T1*,处理批*,处理T1批#,处理T3批#,处理T1*,处理T3*,2009,126,Software Engineering Group,1.4 概要设计,列出所有的操作:(1)CA:=0(2)CB:=0(3)CC:=0(4)CD:=0(5)CA:=CA+1(6)CB:=CB+1(7)CC:=CC+1(8)CD:=CD+1(9)显示第一个T1记录(10)显示最后一个T1记录(11)显示所有计数器的内容(12)打开FIPT文件(13)关闭FIPT文件(14)终止运行(15)读FIPT文件记录,2009,127,Software Engineering Group,1.4 概要设计,处理FIPT,12151,处理前缀,处理非T1*,处理第一个T1,234,批数部分,处理T2,1113,14,处理批*,处理批部分,5,10,15,9,15,5,15,处理T1批#,处理T3批#,处理T1*,处理T3体,处理T3*,3,15,7,15,2009,128,Software Engineering Group,1.4 概要设计,没有一种方法能够适用于所有的应用领域;设计“优劣程度”的评定标准,大都建立在不可证明的假设的基础之上;“设计”首先是解决问题的活动,而解决问题的过程和办法是因人而异的;方法是重要的,但只有在支撑环境中运用它们才能得到成功。,2009,129,Software Engineering Group,设计方法比较,1.4 概要设计,详细设计是