信息化综合资料→软件技术基础知识之软件工程.ppt
软件技术基础-软件工程,计算机软件基础之一,第三部分 软件工程,目的与要求讲课内容与学时参考资料,目的与要求,学习、掌握和了解软件工程的概念掌握软件工程的方法和软件开发的过程初步了解对软件开发质量的监控和管理,讲课内容与学时,软件工程的基本概念(2)软件开发方法与工作模型(2)结构化开发方法概述(2)小结与习题(2),教科书、参考书,孙淑霞、肖阳春等编,2000 软件技术基础,成都理工大学黄迪明编,1998,软件技术基础,电子科技大学出版社郑人杰,软件工程与软件工程管理,讲座国际标准 ISO 8631国家标准 GB8566-88CMM软件成熟度模型,第三部分 软件工程,软件工程的基本概念软件开发方法与工作模型结构化开发方法概述习题,1 软件工程的基本概念,1.1 软件工程学的形成和发展1.2 软件工程学研究的内容1.3 软件与软件生命周期1.4 软件工程基本原则,1.1 软件工程学的形成和发展,软件工程学是在克服60年代末所出现的“软件危机”(software crisis)的过程中逐渐形成与发展起来的而所谓“软件危机”是在软件的规模越来越大,复杂度不断增加,软件需求量不断增大的情况下出现的由于软件开发过程是一种高密度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要,所以“软件危机”便产生了,软件工程的发展,计算机软件发展至今经历了三个不同的发展时期:程序设计时期(20世纪50年代60年代)软件时期(20世纪60年代中期70年代)软件工程时期(20世纪70年代现在),发展,程序设计语言(Programming)机器语言汇编语言ALGOL60FORTRANCOBOLBASIC软件(Software)1960程序文档数据 软件危机引出软件工程(Software Engineering)软件开发工程化 1968 NATO软件开发阶段与瀑布模型软件工程标准,焦点,目标少资源、高效益在人力投入、开发期、成本、质量诸方面求得最佳风险需求:不明与变更人员流动软件知识产权保护不存在绝对无缺陷的软件产品,成功的标志,如期完成预算内完成达到质量要求(需求和希望),软件业与制造业的差异,|设计|生产|运 输|仓 储|功能度,.,制造业,大量,|设计(开发)|生产|运输|仓储|功能度,.,软件业,大量,软件的特点,软件是一种逻辑实体,具有抽象性这个特点使它与其他工程对象有着明显的差异人们可以把它记录在纸上、内存和磁盘、光盘上,但却无法看到软件本身的形态,必须通过观察、分析、思考、判断,才能了解它的功能、性能等特性软件没有明显的制造过程一旦研制开发成功,就可以大量拷贝同一内容的副本,所以对软件的质量控制,必须着重在软件开发方面下工夫软件在使用过程中,没有磨损、老化的问题软件在生存周期后期不会因为磨损而老化,但会为了适应硬件、环境以及需求的变化而进行修改,而这些修改又不可避免地引入错误,导致软件失效率升高,从而使得软件退化当修改的成本变得难以接受时,软件就被抛弃软件对硬件和环境有着不同程度的依赖性这导致了软件移植的问题,软件的特点(cont.),软件的开发至今尚未完全摆脱手工作坊式的开发方式,生产效率低软件是复杂的,而且以后会更加复杂软件是人类有史以来生产的复杂度最高的工业产品软件涉及人类社会的各行各业、方方面面,软件开发常常涉及其他领域的专门知识,这对软件工程师提出了很高的要求软件的成本相当昂贵软件开发需要投入大量、高强度的脑力劳动,成本非常高,风险也大现在软件的开销已大大超过了硬件的开销软件工作牵涉到很多社会因素许多软件的开发和运行涉及机构、体制和管理方式等问题,还会涉及到人们的观念和心理这些人的因素,常常成为软件开发的困难所在,直接影响到项目的成败,软件危机(software crisis),软件危机是指计算机软件开发和维护过程中所遇到的一系列严重问题软件的数量急剧膨胀,软件需求日趋复杂,维护的难度越来越大,开发成本令人吃惊地高,而失败的软件开发项目却屡见不鲜它主要包含两个方面的问题:如何开发软件,以满足不断增长,日趋复杂的需求软件产品质量低劣,甚至开发过程就夭折如何维护数量不断膨胀的软件产品软件生产率低,不能满足需要,软件危机的表现,对软件开发成本和进度的估计常常不准确,开发成本超出预算,实际进度比预定计划一再拖延的现象并不罕见用户对“已完成”系统不满意的现象经常发生软件产品的质量往往靠不住,Bug一大堆,Patch一个接一个软件的可维护程度非常之低软件通常没有适当的文档资料软件的成本不断提高软件开发生产率的提高赶不上硬件的发展和人们需求的增长,产生软件危机的原因,由于软件本身的特点,管理和控制软件开发过程相当困难,而且软件维护较难软件是一种高智力活动,由复杂的逻辑、复杂的运算和复杂的关联等构成由于对软件开发与软件维护的不正确方法,产生了软件危机软件规模越来越大,功能越来越强,导致软件结构非常复杂忽视软件开发前期的需求分析开发过程没有统一的、规范的方法论的指导,文档资料不齐全,忽视人与人的交流忽视测试阶段的工作,提交用户的软件质量差轻视软件的维护;等等,对软件看法的转变,早期那些被认为是优秀的程序常常很难被别人看懂,通篇充满了程序技巧现在人们普遍认为优秀的程序除了功能正确,性能优良之外,还应该容易看懂、容易使用、容易修改和扩充,软件的定义,软件(software)是计算机系统中与硬件(hardware)相互依存的另一部分,它包括:程序(program)是按照事先设计的功能和性能要求执行的指令序列相关数据(data)是程序能正常操纵信息的数据结构说明文档(document)是与程序开发维护和使用有关的各种图文资料,软件工程(software engineering),提出1968年秋季,NATO(北约)的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。在那次会议上第一次提出了软件工程这个概念。软件工程的定义软件工程是一门研究如何用系统化、规范化、数量化等工程原则和方法去进行软件的开发和维护的学科。,1 软件工程的基本概念,1.1 软件工程学的形成和发展1.2 软件工程学研究的内容1.3 软件与软件生命周期1.4 软件工程基本原则,1.2 软件工程学研究的内容,“软件工程”是软件工程人员寻求解决出现的软件危机而产生的它的核心思想是采用工程化的原理与方法对软件进行计划、开发和维护,产品需求,产品,资源,管理!?!,高效率、低成本地开发高质量的软件!,软件工程面对的挑战,软件工程两个方面的内容,软件开发技术软件开发方法学软件工具软件工程环境,软件项目管理软件度量项目估算进度控制人员组织配置管理项目计划等,1 软件工程的基本概念,1.1 软件工程学的形成和发展1.2 软件工程学研究的内容1.3 软件与软件生命周期1.4 软件工程基本原则,1.3 软件与软件生命周期,关于软件要纠正那种认为“软件就是程序,开发软件就是编写程序”的错误观念软件应是“程序以及开发、使用和维护程序所需的所有文档”。具体来说是由:应用程序:面向用户,为解决各种特定问题编写的程序系统程序:面向硬件,为应用程序服务的程序面向用户的文档:如何使用和维护应用程序的资料面向开发者的文档:记载了应用程序的设计和开发过程,以便进一步开发和修改,1.3 软件与软件生命周期,软件生命周期(SLC)软件生命周期是指从软件开发到报废的全过程,也称软件生存期软件生命周期的描述模型瀑布模型(经典)快速原型模型软件生命周期的三个时期定义时期开发时期维护时期,瀑布模型,问题定义,可行性研究,需求分析,设 计,编 程,测 试,运行与维护,目标与范围说明书,可行性论证报告,需求说明书,设计文档,程序,测试报告,维护报告,计划时期,开发时期,运行时期,快速原型模型,需求分析,原型开发,原型评定,目标系统设计,目标系统实现,用户意见,软件开发流程,用 户,初始需求,交付的软件,运行维护,分析定义,需求规格说明,设计,设计文档,实现,测试,源程序,软件生命周期定义期,定义期要为被开发的软件规定“做什么”开发人员要确定软件将处理什么信息软件的功能软件的性能建立什么样的接口要考虑什么设计限制软件开发成功的确认标准,软件生命周期定义期,定义期包括三个阶段的工作系统分析把软件要完成的工作与整个计算机系统的其他部分,如硬件,操作人员及数据库等应完成的工作区分开来软件项目计划确定软件开发总目标,进行风险分析,资源分配,成本估计,规定工作任务和进度安排需求分析更明确地确定软件做什么给出所开发软件的功能,性能,用户接口对数据流进行分析给出功能说明写出用户手册初稿,软件生命周期开发期,开发期着重解决所开发软件“怎么做”的问题开发期要进行设计数据结构设计软件总体结构实现软件的过程细节将设计转换成程序语言进行测试,软件生命周期开发期,开发期含有以下三个阶段软件设计把已经确定的软件需求转换成特定形式的设计表示,使其得以实现程序编制用某个编程语言表达软件设计时确定的处理过程算法软件测试对已编制的程序进行测试,以找出其中功能上、逻辑上和实现中的错误,软件生命周期维护期,运行维护期着重解决因多种原因软件要做的变更软件投入使用后,要对软件作变更的理由开发期中存在的问题,当时未能发现和及时解决适应变更了的软件运行环境软件需进一步完善用户需求较小的变化,软件生存周期,软件生存期的三个时期有时也笼统地称为软件开发为更清楚地表达生存期内各个阶段的工作和各阶段间的关系,可为生存期设计不同的范型,或称模型。如:瀑布模型螺旋模型喷泉模型,软件生存周期方法学,软件工程采用的生存周期方法学就是从时间角度对软件开发和维护的复杂问题进行分解将软件的生存周期分为若干阶段需求定义软件设计编程测试运行维护等每个阶段有相对独立的任务,便于分工协作使软件开发过程按有秩序能管理的方式组织起来,从而降低软件开发的难度,软件生命周期的花费比例,1 软件工程的基本概念,1.1 软件工程学的形成和发展1.2 软件工程学研究的内容1.3 软件与软件生命周期1.4 软件工程基本原则,1.4 软件工程基本原则,通用性和指导性软件工程实践总结出的基本现象稳定性不会时时改变,不依赖于采用的技术、方法和工具概括性针对软件工程和软件产品特性的抽象描述基础性理解和采用它需有具体的方法和技术做补充,软件工程的原则,原则,方法与技术,方法学,工具,Principle,Method&Technique 体现原则的途径和步骤,Methodology 方法和技术的组合,支持整个软件工程过程,Tools 支持方法、技术和方法学的软件,一般性原则,严格性与形式化复杂性和分解模块化抽象性和细化变更预见性通用性与复用性递增式,软件质量管理原则,产品质量以满足用户需求为最高准则质量第一以人为本质量与生产率质量成本密切与用户的联系尽早排除缺陷实施过程质量控制,文档编制原则,在文档标准基础上剪裁注意读者对象便于使用和查找使用术语、概念不应有矛盾描述的精确性,无多义性专职人员与开发人员结合独立性,需求分析与定义原则,编制需求规格说明以前,必须十分明确要解决的问题,即应先明确需求真正弄清需求,还应包括为什么这样定义需求不清必将导致预算不准总结产生错误的原因:需求变更,遗漏重要需求,与用户交流不畅需求分析不充分,需求规格说明质量低劣发现需求规格说明中有问题,应立即着手解决,不可将其带入后续开发阶段需求规格说明中不应含有待确定的部分进行需求分析时不做设计,不应将需求分析做什么与如何做混淆,设计原则,重视需求向设计转化工作,必要时比较多个设计方案设计应能和需求对应,保证每项需求均在设计中得到体现设计文档是设计的成果,头脑中的设想不是设计尽可能复用一切可复用的部分设计应易于变更、易于维护、易于排错优秀的设计出自优秀人才之手,编码原则,简明清晰尽可能少用、甚至不用全局变量程序执行速度不应优先于正确性的考虑命名易记,充分注释,命名唯一,可追溯注意常见的规律是:编码错误通常相对集中,管理原则,大型复杂项目管理重于技术人员不在多,而在精计划指标应切合实际,不作不切实际的计划注意收集、积累数据不求一次估算能十分精确,但求不断调整大型项目重视风险分析项目进展快需分析原因,不可盲目乐观项目完成以后,总结分析有益于积累经验,软件过程改进,质量依赖于过程过程需要管理软件过程包括哪些过程如何改进能力成熟度水平:CMM五级软件过程改进(SPI),不成熟过程的特征,随意的非强制性的主要依赖于实践者产品的功能、质量和进度常有冲突引入新技术时的风险质量难以预测,成熟过程的特征,工作按计划有序地进行过程、规程、文档规范有定义、文档化易理解、易使用、可裁减可持续改进管理的可见性产品和过程可度量、可预测新技术可以及时得到有效应用,CMU/SEI,2级-可重复层软件配置管理软件质量保证软件子合同管理*软件项目追踪与监控软件项目计划需求管理,软件过程成熟度模型的关键子过程域,能力成熟度模型,第三部分 软件工程,软件工程的基本概念软件开发方法与工作模型结构化开发方法概述习题,2 软件开发方法与工作模型,2.1 结构化开发方法2.2 原型化方法2.3 面向对象的开发方法,2.1 结构化开发方法,结构化方法是现有软件开发方法中最成熟,应用最广泛的方法结构化开发方法的主要特点是快速,自然和方便结构化程序设计的概念首先是从编写程序中使用转向(GOTO)语句引起的GOTO语句的过多使用使得程序结构混乱,容易出错,且出错后不易发现和更正,结构化开发方法,结构化开发方法的出发点为了保证程序设计的质量使设计程序具有易读性、易理解性、通用性好,执行时具有较高的效率结构化开发方法的基本要求在详细设计阶段所有的模块只用三种基本控制结构单入口、单出口和顺序选择循环在设计过程中采用自顶向下逐步求精的设计方法,结构化开发方法,结构化开发方法的组成70年代初 结构化程序设计方法 SP法70年代中 结构化设计方法 SD法70年代末 结构化程序分析方法 SA法SA,SD,SP法相互衔接,形成了一整套开发方法若将SA,SD法结合起来,又称为结构化分析与设计技术(SADT技术),结构化方法的工作模型,瀑布模型(Waterfall Model)是结构化方法的工作模型但从80年代开始,逐渐发现其不足:软件开发过程是一个充满回朔过程,而瀑布模型将其分割为独立的几个阶段,不能从本质上反映软件开发过程本身的规律过分强调复审,并不能完全避免较为频繁的变动尽管如此,瀑布模型仍然是开发软件产品的一个行之有效的工程模型,2 软件开发方法与工作模型,2.1 结构化开发方法2.2 原型化方法2.3 面向对象的开发方法,2.2 原型化方法,原型是软件开发过程中软件的一个早期可运行的版本,它反映了最终系统的部分重要特征原型化方法的基本思想是花费少量代价建立一个可运行的系统,使用户及早获得学习的机会,原型化方法又称速成原型法(Rapid Prototyping)强调的是软件开发人员与用户的不断交互,通过原型的演进不断适应用户任务改变的需求将维护和修改阶段的工作尽早进行,使用户验收提前,从而使软件产品更加适用,原型化方法分类,原型化方法按运用原型的目的和方式的不同分为:快速建立渐进原型(RSP法,Rapid Sequential Prototyping)该法建立的原型反映了系统的某些特征,让用户学习,有利于获得更加精确的需求说明书,后阶段的工作仍按照瀑布模型开发快速建立需求规格原型(RCP法,Rapid Cyclic Prototyping)该法采用循环渐进的开发方式,对系统模型作连续精化,将系统需要具备的性质逐步添加上去,直至所有性质全部满足,此时的原型模型也就是最终的产品速成原型适合于开发“探索型”,“实验型”与“进化型”一类的软件系统速成原型的工作模型是一个循环的模型,循环的速成原型工作模型,速成原型循环方式步骤:快速分析 快速确定软件系统的基本要求确定原型所要体现的特征(界面,总体结构,功能,性能)构造原型 在快速分析的基础上根据基本规定说明,忽略细节,只考虑主要特征,快速构造一个可运行的系统它有三类原型:用户界面原型,功能原型,性能原型运行和评价原型 用户试用原型并与开发者之间频繁交流,发现问题,目的是验证原型的正确性修正与改进 对原型进行修改,增删,原型,循环的速成原型工作模型,细化的速成原型工作模型,快速分析,确定初步规格说明,构造原型,运行/评价原型,原型完成否,要细部说明否,效果满意否,严格说明细部,整理原型提供文档,修正改进原型,N,N,Y,Y,Y,N,2 软件开发方法与工作模型,2.1 结构化开发方法2.2 原型化方法2.3 面向对象的开发方法,2.3 面向对象的开发方法,面向过程的开发方法面向数据流设计面向数据结构设计面向对象的开发方法(OOSD)面向对象的分析(OOA)面向对象的设计(OOD)面向对象的程序设计(OOP),面向过程的开发方法,早期的高级语言都是面向过程的程序设计者必然要专注于:程序对数据的处理过程面向数据流设计数据结构面向数据结构设计因此,由软件解决的问题通常用软件系统的数据流图或数据结构来表示,面向过程的开发方法,数据流图描述软件系统的数据从输入到输出的流程,适用于几乎所有顺序处理的软件数据结构描述软件系统的输入输出数据结构,适用于数据处理,尤其输入与输出数据结构相似的软件系统,面向对象的开发方法(OOSD),面向对象的开发方法(OOSD,Object-Oriented Software Development)根据稳定的对象建立系统模型,可很好地适应需要的变化具有良好的可维护性、可扩充性和可重用性是软件工程领域的一个研究重点被誉为90年代软件的核心技术之一,面向对象的开发方法基本思想,对问题领域进行自然的分割,以便接近人类通常思维的方式建立问题领域的模型,以便对客观的信息实体进行结构和行为的模拟,从而使设计的软件更直接地表现问题的求解过程以对象作为最基本的元素分析和解决问题的核心,面向对象的开发方法组成,面向对象的开发方法的组成面向对象的分析(OOA,Object-Oriented Analysis)面向对象的设计(OOD,Object-Oriented Design)面向对象的程序设计(OOP,Object-Oriented Programming)OOP是OOSD的基础OOA和OOD是应用OOP的基础,面向对象的分析(OOA),OOA分析阶段将系统水平划分为五个层次主体类和对象结构属性方法OOA的任务就是通过分析问题域,建立系统的概念模型,面向对象的分析(OOA),OOA提供了三种模型:信息模型定义构成系统的类和对象,它们的属性与操作状态模型描述系统的控制结构,即描述任何时刻对象的联系以及联系的变化,或称为时序,常用状态图和事件追踪图来描述处理模型描述系统内部数据的传送和处理方法面向对象的分析(OOA)和设计(OOD)就是把面向对象的方法应用到软件工程的分析和设计阶段,从而建立更加适应当今庞大、复杂且易变的系统的模型,面向对象的设计(OOD),在OOA建立的五个水平层次(主体、类和对象、结构、属性、方法)基础上,将系统结构在纵向上划分为:问题部件人机交互部件任务管理部件数据管理部件,面向对象的设计(OOD),OOD法分为概要设计细化对象行为添加新对象认定类组类库确定外部接口主要数据结构详细设计加细对象描述,面向对象的程序设计(OOP),使用面向对象的程序设计语言进行程序设计如:C+,Delphi,Ada,SmallTalk,Java面向对象的定义:面向对象=对象+类+继承+消息如果一个软件系统是按照这样四个概念设计和实现的,则可以认为这个软件系统是面向对象的,面向对象的程序设计(OOP),OOP具有三个重要特征:封装封装是将数据和对这些数据进行处理所需的各种操作连接在一个根下的技术继承继承是引用已经定义的各种类,并将它们扩充以满足新的功能的一种技术多态性多态性实质上就是同一个名字可以用于多种目的,面向过程与面向对象,传统的面向过程(函数)的编程方法代码和数据是分开的函数是最重要的,一个程序中的所有代码都应围绕这些函数来设计,面向对象编程方法必须将代码与数据构造在一个程序块中,并且统一来管理对象是最重要的,程序是围绕这些对象来设计的,函数是第二位的用对象调用函数,而不是简单地将对象(数据)传递给函数,面向对象的基本概念,对象(Object)类(Class)继承(Inheritance)消息(Message)软件IC(Integrate Circuit),面向对象的基本概念,对象(Object)是对客观存在的事物的描述,可以是事、物,或概念对象是将一组数据和使用该数据的一组基本操作或过程封装在一起的实体用户不必知道对象行为的实现细节,只需根据对象提供的外部特征接口访问对象对象的动作取决于发送给该对象的消息,消息通知对象要求完成某个功能。即,对象之间的通讯是以“做什么”的消息发送为契机的,并认为接受消息的对象知道如何去做,消息激活对象的相应功能“面向对象”的基本思想就是把要构造的系统表示为对象的集合,面向对象的基本概念,类(Class)是一组具有相同数据结构和相同操作的对象的集合在一个类中,每个对象都是类的实例,它们都可以使用类中提供的函数类相当于C语言中的结构,或者说它是一种行为抽象数据类型现实世界词汇中的每一个名词都表示一类对象,具有一组属性或行为特征例如,一个好吃的苹果是苹果类中的一部分,同样也是水果类中的一部分,它也存在于食品这一大类中若不使用类的概念,则每一个对象都需明确定义其所有的特征,若是使用类的概念,则每一对象就只需定义它在大类中的特殊部分,对于类中共有的特性它可以继承,面向对象的基本概念,继承(Inheritance)是使用现存的定义作为基础,建立新定义的技术继承性分为:单重继承:一个子类只有一个父类多重继承:一个子类可有多个父类一个子类可以从它的基类那里继承所有的数据和操作,并扩充自己的数据和操作基类抽象出共同特性,子类表达其差别,现存类定义,父类(基类),新类定义,子类(派生类),继承,面向对象的基本概念,消息(Message)对象之间的联系可表示为对象间的消息传递,即对象间的通讯机制当一个消息发送给某个对象时,包含要求接收信息的对象去执行某个功能的消息从程序设计的角度来说消息类似于函数调用消息是开发Windows应用程序用得最多的一个概念,我们程序所做的工作就是产生消息、传递消息、处理消息Windows正是通过消息来管理各种资源,并由此实现多任务功能,面向对象的基本概念,软件IC(Integrate Circuit)由来:程序常常涉及到频繁使用功能相同的模块,尽管这些模块对具体应用的实现细节可能有些不同,如何使用和组合这些模块,是构建可重用模块需要解决的技术问题类和继承的概念有助于程序员开发这种共同性软件IC又称软件集成,它的思想是:用一种集成机制将已经成熟的软件单元制成一个相对独立的实体,使它们不加改动或做很少改动就可用于新的软件系统中,从而减少重复劳动,提高生产率“软件IC”是一种可重用模块软件IC的特征:模块性好,可靠性好,连接简单,封装性好,内部功能高效实现,具有清晰、简明的说明类充当了面向对象系统的构造单元,第三部分 软件工程,软件工程的基本概念软件开发方法与工作模型结构化开发方法概述习题,3 结构化开发方法概述,3.1 结构化分析方法3.2 结构化设计方法3.3 软件编码3.4 软件测试3.5 软件维护,3.1 结构化分析方法(SA),结构化分析方法是需求分析中最常用的方法之一在进行需求分析(结构化分析)之前,需要先进行:系统分析实施计划报告,系统分析,系统分析是制定软件项目计划的第一步,它决定了所开发软件的总目标,其任务包括:确定所开发软件的总体要求和适用范围;描述所开发软件与外界接口关系;确定所需的硬、软件支持;对开发的进度和成本的估计;分析系统的可行性;确定所开发软件与原有软件的兼容性关系或其他关系;确定所开发软件的性能,预计内部复杂性之间的折衷关系。,系统分析,在确定以上各项时,常常要设想多种可能的方案,再根据需要从中进行比较选择系统分析中对系统的可行性分析是十分重要的,这是此项目能否进行的关键,它包括以下方面:技术可行性研究必须明确现有的条件是否能满足开发软件所需的技术设备、用户的技术要求,开发时间是否合理等经济可行性研究对开发所需的经费和软件所带来的经济效益进行估计社会可行性研究考虑所开发的软件项目是否涉及版权纠纷等法律问题,以及投入运行后对生产、管理或经营体制带来什么社会影响,实施计划报告,在认真做好上述系统分析工作的基础上,要制定一个大致的实施计划,也就是编写一个实施计划报告这个报告只是对实施方案进行粗略的描述,主要有四个方面的内容开发进度人员投入计划人员组织资源的利用,实施计划报告,一个实施计划报告的提要实例:软件开发项目名称任务概述负责单位(包括:管理机构和任务的分解)开发人员组织(包括:组织结构和任务的分配)人员投入计划(包括:总估计和各阶段投入计划)其他资源利用(包括:设备和资料)开发进度(包括:阶段的划分,各阶段的评审时间和提供开发进展报告时间)项目完成检验(包括:检验机构,检验方式和交付产品的清单)编写的实施计划报告只是对开发项目的初步设想,但也要反映出实施方案的主要内容,实施计划报告,在软件开发项目实施计划得到批准以后,便可开始工作,这时不要急于进行软件设计,而是要弄清楚用户的需要需求分析做得不好,用户和软件开发人员未能全面地、精确地理解和表达这些需求,致使一些隐藏的问题随着开发工作的进行带给后面阶段,最终将给开发工作造成不良的影响,需求分析中发生的问题对后期开发工作造成的影响示意图,结构化分析方法,需求分析最常用的方法是结构化分析方法(Structured Analysis),它适用于分析大型数据处理系统该方法简明,易于掌握,与设计阶段的结构化方法相衔接,将取得良好的设计效果,结构化分析方法的基本思想和步骤,结构化分析方法的基本思想是采用“分解”和“抽象”的基本手段,由顶向下逐层分解,具体步骤为:理解当前的现状环境,建立当前系统的“具体模型”从当前系统的“具体模型”抽象出当前系统的“逻辑模型”分析目标系统与当前系统在逻辑上的差别,建立目标系统的逻辑模型为了对目标系统做完整的描述,还需要考虑人机界面和其他一些问题,结构化分析方法的描述方法,数据流图(DFD)和分层的数据流图数据词典(DD,Data Dictionary)加工说明,(1)数据流图(DFD,Data Flow Diagram),数据流图以图形的方式表示系统中的信息变换和传递的过程,数据流图的基本符号只有下列四种:数据流加工数据存储数据源点及数据终点画DFD图的方法:由外向里,自顶而下,逐层分解,数据流图的基本符号,数据流数据流是具有名字且具有流向的数据,用标有名字的箭头表示。每条数据流表示在这条流水线上有一组由一定成分组成的数据流动。加工表示对数据进行的加工或变换。数据流图中以标有名字的圆圈代表加工,名字表示加工的含义,指向加工的数据流是该加工的输入数据,离开加工数据流是该加工的输出数据。数据存储文件是数据存储形式的统称,它表示了数据流在加工过程中需要存储或查找的信息。文件以标有名字的粗线表示。数据源点及数据终点标明数据处理过程的数据来源和数据去向,数据流图中已有名的方框表示,它只起到注释作用,补充说明系统与其他外界环境的联系。,银行取款过程的数据流图,储户,取款信息,付款信息,取款信息,存折,取款单,无余拒付,帐卡,存折,分层的数据流图DFD,画分层DFD图的基本原则(注:DFD图不是流程图)数据守恒与数据封闭原则加工的输入输出数据流是否匹配,应成对出现,即每一个加工既有输入数据流又有输出数据流加工分解的原则画分层DFD图时,各子系统的分解速度应大致均匀,保持同步扩展一般情况下,每次每一加工可以分解为24个加工,至多不超过78个,以免阅读时增加理解的困难在上层时分解的速度可略快,越到下层功能越具体,分解速度应放慢,分层的数据流图DFD,画分层DFD图的基本原则(cont.)子图与父图的“平衡”在分层图中,每一层都是它下层的父图,同时又是它上层的子图父子平衡是父图与子图在输入数据与输出数据上应保持信息的连续性合理使用文件为了优先考虑重要问题,允许将某些细节推迟到下层DFD图处理除出错处理外,对文件的处理也常常推迟具体地说,上层DFD图往往只画出少量文件,借以保持画面整洁,越往下层,画出的文件越多,(2)数据词典(DD,Data Dictionary),数据词典是SA方法的主要工具之一它与数据流图共同构成系统的逻辑模型没有数据流图则数据词典难发挥作用没有数据词典则数据流图就不严格数据词典对数据流图中出现的所有数据元素给出逻辑定义有了数据词典,使数据流程图上的数据流加工和文件得到确切的解释,数据词典的条目,数据词典中有四种类型的条目数据流(由多少个数据项组成)文件数据项(单项数据)加工,数据流条目,数据流条目给出某个数据流的定义,它通常是列出该数据流的定义在进行数据流定义时,可采用如下符号:“=”表示定义为“+”表示“与”“|”表示“或”,即选择括号中的某一项“”表示“重复”,即括号中的项要重复若干次,重复次数的上下限也可以在括号中标出“()”表示“可选”,文件条目,文件条目给出某个文件的定义同数据流一样,文件的定义通常是列出文件记录的组成数据项文件条目还可以指出文件的组织方式,如按单号递增次序排列等,数据项条目,数据项条目给出某个数据单项的定义通常是数据项的值类型,允许的取值范围等,加工条目,加工条目又称小说明对数据流图中的每一个不能再分解的基本加工都必须有一个小说明给出这个加工的精确描述,(3)加工说明,结构化语言(简单,易学,少二义性)判断树(描述一般组合条件,较清楚)判断表(用于较复杂的组合条件),结构化语言(结构化英语),结构化语言介于自然语言和形式语言之间的一种半形式语言,是描述基本加工条目中的加工说明的常用工具,是自然语言的一个受某些限制的子集,没有形式语言那么精确,严格,具有自然语言的简单,易懂的特点结构化语言一般分为内,外两层外层语法比较具体外层语法描述操作的控制结构,如顺序,选择和循环等内层语法比较灵活内层语法根据系统的具体特点以及用户的接受能力来确定,通常采用有动词和宾语构成的祈使句,结构化语言的例子,顺序结构 MOVE 单科成绩 TO 学生单科成绩表选择结构 IF 存货小于标准点 DO 定货 ELSE(不小于标准点)SET 标志,重复结构 FOR 每一个学员号码 PUT 学员成绩 REPEAT FROM 消息线 GET 下一个消息 WRITE 消息正文 WRITE 消息头和长度 UNTIL 消息头和长度达到某种条件,判断树(Decision Tree),判断树比判断表更直观用它来描述具有多个条件的数据加工更容易被用户接受树状的分支表示多种不同的条件,分支的端点表示该分支对应的条件要作的处理,新生录取系统,已达录取分数线,未达录取分数线,体检合格录取,体检不合格转下一志愿学校,体检不合格不录取,体检合格转下一志愿学校,例:,判断表(Decision Table),判断表由四部分组成左上部分是决定这组条件的对象右上部分列出各种可能的条件组合左下部分列出所有的操作右下部分说明在对应的条件组合下,某个操作是否要执行,3 结构化开发方法概述,3.1 结构化分析方法3.2 结构化设计方法3.3 软件编码3.4 软件测试3.5 软件维护,3.2 结构化设计方法,软件设计的任务是将需求分析阶段获得的需求说明转换为计算机中可实现的系统完成系统的结构设计,包括数据结构和程序结构最后得到软件设计说明书有代表性的设计方法有结构设计方法其设计是以数据流图为基础构成模块结构数据结构(JACKSON)方法其设计是以数据结构为基础建立模块结构PARNAS方法以信息隐藏为原则建立模块结构,结构化设计方法,结构化设计就是采用最佳的可能方法设计系统的各个组成部分,以及各成分之间的相互联系的技术结构化设计是这样一个过程,它决定用哪些方法把哪些部分联系起来,才能解决好某个具有清楚定义的问题,软件设计,软件设计是软件开发的关键步骤,直接影响软件质量分为两个阶段总体设计解决系统的模块结构,分解模块,确定系统的模块层次关系详细设计对系统中的每个模块的内部过程进行设计和描述,(1)总体设计,具体任务划分模块确定模块功能确定模块间的调用关系确定模块间的界面设计步骤(1)分析系统DFD图的类型,将其转换为初始的模块结构图(Structured Chart,简称SC图)(2)按照“降低块间联系,提高块内联系”的设计总则修改、完善系统的模块图,写出模块的功能说明,总体设计步骤1分析系统DFD图,通常可把数据流图分为转换处理型采用转换分析事务处理型采用事务分析SD方法的任务是按照DFD图的不同结构类型,分别采用转换分析和事务分析,从DFD图导出目标系统的模块结构SC图,数据流图转换处理型,转换处理过程和所包含的数据流可分为输入数据输入流信息由外部数据转换为内部形式进入系统变换数据转化流在转换流中,对内部形式的信息进行一系列加工处理,得到内部形式的结果输出数据输出流在输出流中,信息由内部形式的结果转换为外部形式数据流出系统,输入信息,内部结果,内部数据,输出信息,数据流图事务处理型,在事务处理中输入数据流事务流加工事务中心若干平行数据流事务路径当事务流中的事务送到事务中心后,事务中心分析每一事务,根据事务处理的特点和性质选择一个事务路径继续进行处理,接收部分,事务中心,发送部分,转换处理型转换分析,转换分析是系统结构设计的一种策略使用转换分析技术可把转换型处理数据流图转换为初始的标准结构根据软件结构的度量准则、模块化准则、模块独立性准则,修改完善软件结构图,从而得到结构良好的最终结构图转换分析步骤为确定数据流图的类型确定输入流、转换流、输出流的流界(边界)进行一级分解,设计上层模块进行二级分解,设计中下层模块进一步细化,转换处理与事务处理,通常一个大型软件系统是转换处理型结构和事务型结构的混合结构所以,设计者常利用以转换分析为主,事务分析为辅的方式进行软件结构设计当数据流图明显呈现出事务型特征时,就要用事务型分析技术,从相应的数据流程图导出标准构图,其步骤与转换分析相同,总体设计步骤2完善系统模块图,具体应从以下方面改进:尽可能建立功能模块消除重复功能模块的作用范围应是控制范围的子集作用范围包括模块本身及其所有下属模块控制范围是指判断所涉及到的模块模块的大小恰当,总行数在10100,最好在3060模块的扇入扇出数不宜太多(除服务性模块外)一个模块直接控制下属模块的个数称为该模块的扇出数一个模块的上级模块个数称为扇入数扇入高可增加模块的利用率,扇出低可减少模块调用和控制的复杂度,(2)详细设计,对系统中的每个模块的内部过程进行设计和描述常用的描述方法有:流程图(程序框图)N-S图(方框图)PAD图PDL语言UML,流程图(程序框图),表达算法简明直观,易于学习掌握,是一种常用的详细设计工具,流程图(程序框图),N-S图(方框图),每个处理步骤都用方框表示,这些处理步骤可以是语句或语句序列,比传统的流程图具有明显的优点:它强制设计人员按结构化程序设计方法进行思考并描述设计方案,因为除了表示几种标准控制结构的符号之外,它不再提供其他描述手段,这就保证了程序设计和质量方框图形象直观,易于表达嵌套结构,容易确定局部数据和全程数据的作用域,具有良好的可见度,容易理解设计意图,为编程、复审、选择测试用例、维护等都带来了方便,N-S图(方框图),顺序结构,选择结构,循环结构,情况结构,循环结构,PAD图(问题分析图),PAD图(problem analysis diagram)使用五种基本控制结构分支结构由两部分组成,带锯齿的框为条件判断,每一个锯齿表示该判定中的一种条件,与该齿连接的处理框表示该分支要执行的处理循环结构也由两个部分组成,左边的一个框(右边多一条竖线)表示循环的类型和终止条件,右边的一个框表示要重复执行的循环体任何PAD图都是由下述的基本控制模块构成它是一种二维平面图形,从左向右扩展一条竖线PAD图中竖线的总条数就是程序的层次数,PAD图(问题分析图),顺