软件工程ppt01软件工程概述课件.ppt
授课教师:梁丽,软件工程,第一章 软件工程概述,内容要点:本章概括地讲述了软件、软件危机、软件工程、软件生产、软件生存周期、软件开发模型、软件开发方法及软件开发工具。 教学重点:软件危机的产生、表现和原因软件工程的定义、性质、目标、内容和面临的问题软件生存周期各阶段的特点和内容教学难点:几种主要的软件开发模型主要的软件开发方法,本章的知识结构图,软件是由计算机程序的发展而形成的一种概念,是计算机系统中与硬件相互依存的另一部分。程序是按既定算法,用某种计算机语言所规定的指令或语句编写的一系列指令或语句的集合。软件是程序再加上程序实现和维护程序时所必须的文档的总称。,(一) 软件工程的产生,1. 软件,软件,被普遍接受的软件的定义是:软件(software)是计算机系统中与硬件(hardware)相互依存的另一部分,它包括程序(program)、相关数据(data)及其说明文档(document)。其中程序是按照事先设计的功能和性能要求执行的指令序列;数据是是程序能正常操纵信息的数据结构;文档是与程序开发维护和使用有关的各种图文资料。,软件,中国大百科全书中对软件的定义是:软件是计算机系统中的程序和有关文件(文档)。根据国际标准化组织的定义,软件是与计算机系统操作有关的程序、过程、规则、及任何有关的文档资料。,(一) 软件工程的产生,在信息处理和计算机领域内,一般认为软件是计算机程序、各种相关的文档和数据的集合,如下图所示。,(一) 软件工程的产生,文档就是为了委托、购入、使用、开发、维护软件,以及管理开发过程所需要的文书和资料,是有关计算机程序功能、设计、编制、使用的文字或图形资料。一般文档可分为面向管理人员的文档、面向开发人员的文档、面向用户的文档和面向使用维护人员的文档。,程序是计算任务的处理对象和处理规则的描述。,数据包括使系统初始运行所必须的数据,如数据库和表的结构及初始数据、系统运行中所需要的各种代码表、各种标志等。,(一) 软件工程的产生,2. 软件的特点 软件既是知识产品,又是与汽车、建筑物一样的工业产品,此外,软件还具有类似艺术、学术那样的知识性创造的特点,因此,可以说软件就是知识性工业产品,它具有一些独特的性质: 软件是逻辑产品,它具有无形性,这个特点使它与其它工程对象有着明显的差异。人们可以把它记录在纸上、内存、和磁盘、光盘上,但却无法看到软件本身的形态,必须通过观察、分析、思考、判断,才能了解它的功能、性能等特性。通过计算机的执行才能体现它的功能和作用。,软件在使用过程中,不存在磨损和消耗问题。软件在生存周期后期不会因为磨损而老化,但会为了适应硬件、环境以及需求的变化而进行修改,而这些修改有不可避免的引入错误,导致软件失效率升高,从而使得软件退化。当修改的成本变得难以接受时,软件就被抛弃。,软件没有明显的制造过程。其成本主要体现在软件的开发和研制上,一旦研制开发成功,就可以大量拷贝同一内容的副本。所以对软件的质量控制,必须着重在软件开发方面下工夫。 软件对硬件和环境有着不同程度的依赖性。这导致了软件移植的问题。 软件是复杂的,而且以后会更加复杂。软件是人类有史以来生产的复杂度最高的工业产品。软件涉及人类社会的各行各业、方方面面,软件开发常常涉及其它领域的专门知识,这对软件工程师提出了很高的要求。,开发和维护成本高。软件开发需要投入大量、高强度的脑力劳动,成本非常高,风险也大。现在软件的开销已大大超过了硬件的开销。软件的开发至今尚未完全摆脱手工作坊式的开发方式,生产效率低。软件工作牵涉到很多社会因素。许多软件的开发和运行涉及机构、体制和管理方式等问题,还会设计到人们的观念和心理。这些人的因素,常常成为软件开发的困难所在,直接影响到项目的成败。,软件技术面临的问题,规模 复杂性 生产率,例:Windows95有1000万行代码 Windows2000有5000万行代码, 3000多个工程师,几百个小团队。Exchange2000和 Windows2000开发人员结构,美国IBM公司在1963年至1966年开发IBM360机的操作系统。这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。.据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。.这个项目的负责人F. D. Brooks事后总结了他在组织开发过程中的沉痛教训时说:“.正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。.程序设计工作正像这样一个泥潭,.一批批程序员被迫在泥潭中拼命挣扎,.谁也没有料到问题竟会陷入这样的困境.”。IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。,(一) 软件工程的产生,(一) 软件工程的产生,3. 软件生产的发展 软件生产的发展经历了程序设计时代、程序系统时代和软件工程时代。 程序设计时代(60年中期以前):生产方式是个体手工劳动,使用的工具是机器语言、汇编语言,主要通过编程来实现,不重视程序设计方法。 程序系统时代(60-70年代):生产方式是作坊式小集团生产,生产工具是高级语言(Pascal、C、Ada语言) ,开始提出结构化方法,但开发技术还没有根本性突破,开发人员素质和开发技术不适应规模大、结构复杂的软件开发,导致了软件危机的产生。 软件工程时代 :生产方式是工程化生产,提出具有广泛应用前景的面向对象方法和相关的语言(Smalltalk、C+),使用数据库、开发工具、开发环境、网络、先进的开发技术和方法,使生产率大大提高,但未能完全摆脱软件危机。,4. 软件危机 1)概念指在计算机软件开发和维护过程中所遇到的一系列严重问题,这是软件生产与市场需求极不适应的严重现象。包含两方面的问题: 一是如何开发软件,怎样满足对软件的日益增长的需求; 二是如何维护数量不断膨胀的已有软件。,2)软件危机的表现 (1)对软件开发成本和进度的估计常常不准确,软件生产进度无法控制。开发成本超出预算,实际进度比预定计划一再拖延的现象并不罕见。,(2)软件需求定义不准确,易偏离用户需求。用户对“已完成”系统不满意的现象经常发生。,软件危机的表现,(3)软件的可维护程度非常之低。很多程序的错误是很难改正的,不能根据用户的需求变化在原有程序中增加新的功能。,软件危机的表现,(4)软件通常没有适当的文档资料。管理人员可以使用这些文档作为管理何评价软件开发工程的进展情况;软件开发人员可以利用他们作为信息交换工具;对于软件维护人员文档更是必不可少。,软件危机的表现,(5)软件的成本不断提高。随着技术的进步硬件成本不断降低,而软件成本随着人力资源成本的增高、软件规模的增大而不断上涨。在美国1985年的软件成本已经占到计算机系统总成本的90。(6)软件开发生产率的提高赶不上硬件的发展和人们需求的增长。(7)软件可维护性差。详见教材P2,成功的标准:,用户在用用户可很容易做完要做的事 失败的根本原因:开发人员写出的东西达不到用户要求(人的问题.技术问题),问题出在哪里?, 项目没有被很好地理解;计划不周,最终导致进度拖延。 没有充分的文档资料(documentation)(3)软件可靠性(reliability)缺少度量的标准,质量无法保证。 如何保证软件产品的质量,是非常复杂困难的问题,特别对于规模庞大的软件。 软件难以维护(maintainability) 、不易升级(evolvability),产生软件危机的原因:,在软件开发过程中出现的严重问题主要与: 软件本身有关。 软件开发与维护的方法不正确有关。,产生软件危机的原因:, 软件与硬件不同,是逻辑部件。 软件开发过程的进展情况难以衡量。 软件开发的质量也难以评价。管理与控制软件开发过程相当困难。修改或改正软件设计等软件维护比较困难。,产生软件危机的原因:, 软件不同于一般的程序,其规模庞大。 需要多人协作完成,会涉及诸多技术问题,比如:分析方法、设计方法、形式说明方法、版本控制等。需要严格、科学的管理。, 软件本身的特点也给开发和维护带来一些客观困难。,软件开发与维护中长期形成的错误认识与作法。比如:忽视软件的需求分析,急于动手编写程序;轻视软件的维护等。,二是软件专业人员自身的缺陷(软件开发人员没有掌握正确的软件开发方法,对软件开发和维护存在许多模糊、错误认识;软件管理人员软件管理技术落后,软件质量管理没有依据)(4)解决途径 详见教材P5,(一) 软件工程的产生软件工程的定义,软件工程这一术语首次出现在1968年的NATO会议上。是指导计算机软件开发和维护的工程学科。Fritz Bauer在NATO会议上给出的定义: “软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而确立和使用的健全的工程原理(方法)。”,软件工程的定义,IEEE【IEE83】给出的软件工程定义: “软件工程是开发、运行、维护和修复软件的系统方法。”,软件工程的定义,IEEE【IEE93】给出了一个更加综合的定义: “将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。”,软件工程的定义,软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。它借鉴传统工程的原则、方法,以提高质量,降低成本为目的。 其中:计算机科学、数学用于构造软件系统模型与算法;工程科学用于制定规范、标准;管理科学用于计划、资源、成本、质量控制。目标:追求软件产品的正确性、可用性和软件生产的效率工程活动:需求分析、设计、实现、测试确认、维护支持方法学问题:开发模型、设计方法、支持过程、管理过程,什么是软件工程? 是指导计算机软件开发和维护的工程学科。它采用工程的概念、原理、技术和方法来开发与维护软件,并把正确的管理技术与当前最好的技术方法结合起来。,软件工程学,自软件工程的概念形成以来,在这一研究领域吸引了众多的科学和技术人员,并开展了大量的理论和技术性的研究,从而形成了“软件工程学”这一计算机科学中的分支。,软件工程学,软件工程学就是研究如何借助科学的理论和现代工程上的技术来指导软件的开发,从而达到用较少的投资获得高质量的、可靠的软件的目的。的科学。它涉及到软件的全部活动、广泛的知识领域及其技术;包括:计算机科学、数学、管理学、经济学、心理学、认知学、行为学、美学、艺术、可靠性理论和通信技术等多个学科。具体而言,软件工程学提出了对开发理论、开发方法、开发工具的研究领域。,软件工程学,软件工程学的发展经历了三个时期:程序设计时期、软件时期、软件工程时期。,软件工程学,软件工程学所包含的内容可概括为:软件开发技术软件工程(项目)管理,软件工程学,软件开发技术所包含的内容可概括为:软件开发方法学软件工具软件工程环境,软件工程学,软件工程(项目)管理主要包括软件管理软件工程经济学软件项目管理包括软件度量、项目估算、进度控制、人员组织、配置管理、项目计划等。,软件工程学,统计数据表明,大多数软件开发项目的失败,并不是由于软件开发技术方面的原因。它们的失败是由于不适当的管理造成的。遗憾的是,尽管人们对软件项目管理重要性的认识有所提高,但在软件管理方面的进步远比在设计方法学和实现方法学上的进步小,至今还提不出一套管理软件开发的通用指导原则,“软件工程”课程 与其它软件专业课的区别,(1) 立足于系统的整体。(2) 讲授系统分析、系统设计、 测试及维护的理论和方法。(3) 构筑一个软件系统,实践 软件开发全过程。,“软件工程”课程教学与实践的目标,转变对软件开发的认识: 上升 程序 系统 转变思维定式: 上升 程序员 系统工程师 (系统分析员) 工程化训练,系统分析员的地位,用户,分析员,程序员,“一个好的工业,应有一套良好的标准来配套”,软件的工业化生产过程应具备的特点:明确的工作步骤详细具体的规范化文档明确的质量评价标准,软件工程技术的两个明显特点:,强调规范化 强调文档化,(一) 软件工程的产生,6. 软件工程的基本原理 用分阶段的生命周期计划严格管理。 坚持进行阶段评审。 实行严格的产品管理。 采用现代程序设计技术。 结果应该清楚地审查。 开发小组成员应该少而精。 承认不断改进的软件工程实践的必要性。,(二)软件工程过程和软件生存周期,1. 软件工程过程 软件工程过程就是在获取、供应、开发、操作和维护软件时,要实施的过程、活动和任务,它包含获取过程、供应过程、开发过程、操作过程、维护过程、管理过程和支持过程等。2. 软件生存周期(Software Live Cycle ) 软件生存周期是指一个软件从立项开始,经过制造、测试、使用和维护直到软件废弃为止的整个时期。其方法是从时间角度对软件开发和维护的整个复杂的过程进行分解,依次划分为若干个阶段,每个阶段都有明确并且相对独立的任务和完成标志,一个阶段的任务完成后,再进入下一阶段。,软件工程的开发传统途径:,采用生命周期法,从时间角度对软件开发和维护的复杂问题进行分解,把软件的生命周期依次划分为若干个阶段,每个阶段有相对独立的任务,然后逐步完成每个阶段的任务。,软件工程的开发传统途径:,前一阶段任务完成是开始后一阶段工作的前提和基础。后一阶段任务的完成是前一阶段的进一步具体化。 每一阶段的开始与结束都有严格的标准。在每一阶段结束之前必须进行正式严格的技术审查与管理复审。,(二)软件工程过程和软件生存周期,划分软件生存周期的方法有多种,大致可分为需求分析与计划、设计、制造、测试、使用与维护等。在国家标准“计算机软件开发规范”中,把软件生存周期划分为8个阶段,即可行性研究与计划、需求分析、概要设计、详细设计、实现、综合测试、确认测试、使用与维护,对每个阶段,都明确规定了该阶段的任务、实施方法、实施步骤和完成标志,其中特别规定了每个阶段需要产生的文档。 本书中采用的阶段划分为:可行性研究、需求分析、概要设计、详细设计、编码、测试、维护。,生命周期各阶段的基本任务:,软件的生命周期分为: 软件定义 软件开发 软件维护软件定义时期包括: 问题定义、可行性研究、需求分析。软件开发时期包括:总体设计、详细设计、编码、测试。,生命周期各阶段的基本任务:,问题定义描述我们面向的系统到底要解决什么问题?并提出问题的性质、工程目标和规模的书面报告。,生命周期法各阶段的基本任务:,可行性研究对所定义的问题,研究其范围,是否值得取解,是否有可行的解决办法。成果:系统高层逻辑模型(数据流图)。成本/效益分析(工程的规模与目标、系统成本与效益)。,生命周期法各阶段的基本任务:,需求分析确定目标系统应具备哪些功能。提出并确认系统逻辑模型(数据流图、数据字典、算法描述)。成果:对提出的需求进行分析并给出详细的定义。编写软件需求说明书或系统功能说明书及初步的系统用户手册提交管理机构评审,生命周期法各阶段的基本任务:,总体设计对所定义的问题,研究其范围,是否值得去解,是否有可行的解决办法。把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应。成果:系统高层逻辑模型(数据流图)。成本/效益分析(工程的规模与目标、系统成本与效益)。系统结构(层次图或结构图)。,生命周期法各阶段的基本任务:,详细设计 具体地实现这个系统。设计出程序的详细规格说明。 对每个模块要完成的工作进行具体的描述,为源程序编写打下基础。成果:编码规格说明(HIPO图或PDL)。,生命周期法各阶段的基本任务:,编码把对软件的详细设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”写出的程序应当是结构良好、清晰易读的,且与设计相一致的,生命周期法各阶段的基本任务:,软件测试单元测试:查找各模块在功能和结构上存在的问题并加以纠正。组装测试:将已测试过的模块按一定顺序组装起来。按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用。,生命周期法各阶段的基本任务:,软件维护改正性维护:运行中发现了软件中的错误需要修正。适应性维护:为了适应变化了的软件工作环境,需做适当变更。完善性维护:为了增强软件的功能需做变更。预防性维护:修改软件为将来的维护活动预先做准备。,(三)软件生存周期模型、方法和工具,1. 软件生存周期模型 20世纪60年代后期,当人们以工程学的观点来研究软件的开发方法时,借鉴在其他工程领域活动中所使用的方法提出了软件开发模型,这就把软件开发工程变成可视过程,受到了软件开发人员和项目管理人员的欢迎. 软件生存期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架,软件的生命周期模型:,软件生命周期模型是跨越整个生命周期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。 瀑布模型 演化模型 螺旋模型 喷泉模型 智能模型,瀑布模型,瀑布模型规定了生存期各项软件活动,包括开发计划、需求分析、系统设计、测试、维护。并且规定它们自上而下、相互衔接的固定次序。,所有过程模型的祖宗项目从开始到结束按照一定的顺序执行瀑布模型是文档驱动的,各个阶段不连续也不交叉,软件的生命周期模型:,瀑布模型,瀑布模型特点(详见教材P12)(1)阶段间具有顺序性和依赖性(2)推迟实现的观点(3)质量保证的观点 瀑布模型是6070年代为克服软件危机提出的主要软件开发模型,它在纠正软开发人员的错误观点,认识软件开发与程序设计的本质区别,在克服软件危机方面能起到一定作用。,适用场合:,当有一个稳定的产品定义和很容易被理解的技术解决方案时,纯瀑布模型特别合适当你对一个定义得很好的版本进行维护或将一个产品移植到一个新的平台上,瀑布模型也特别合适。纯瀑布模型能够降低管理费用,因为你可以预先完成所有计划。对于那些容易理解但很复杂的项目,采用纯瀑布模型比较合适,因为可以用顺序方法处理问题。在质量需求高于成本需求和进度需求的时候,它尤为出色。当开发队伍的技术力量比较弱或者缺乏经验时,瀑布模型更为适合。,优点: a.强调开发的阶段性; b.强调早期计划及需求调查; c.强调产品测试。缺点:a.依赖于早期进行的唯一一次需求调查,不能适应需求的变化;b.由于是单一流程,开发中的经验教训不能反馈应用于本产品的过程;c.风险往往迟至后期的开发阶段才显露,因而失去及早纠正的机会。,软件的生命周期模型:, 由于在项目开发的初始阶段人们对软件的需求认识常常不够清晰,因而使得开发项目难于做到一次开发成功,出现返工再开发在所难免,所以做两次。 第一次只是试验开发,其目标只是在于探索可行性,弄清软件需求。 第二次则在此基础上获得较为满意的软件产品。,该模型主要针对事先不能完整定义需求的软件开发。用户可以给出待开发系统的核心需求,并且当看到核心需求实现后,能够有效地提出反馈,以支持系统的最终设计和实现。软件开发人员根据用户的需求,首先开发核心系统。当该核心系统投入运行后,用户试用之,完成他们的工作,并提出精化系统、增强系统能力的需求。软件开发人员根据用户的反馈,实施开发的迭代过程。每一迭代过程均由需求、设计、编码、测试、集成等阶段组成,为整个系统增加一个可定义的、可管理的子集。如图所示。,演化模型,演化模型图,演化模型优点,任何功能一经开发就能进入测试以便验证是否符合产品需求。 帮助导引出高质量的产品要求。如果没有可能在一开始就弄清楚所有的产品需求,它们可以分批取得。而对于已提出的产品需求,则可根据对现阶段原型的试用而作出修改。 风险管理可以在早期就获得项目进程数据,可据此对后续的开发循环作出比较切实的估算。提供机会去采取早期预防措施,增加项目成功的机率。 大大有助于早期建立产品开发的配置管理,产品构建(build ),自动化测试,缺陷跟踪,文档管理。均衡整个开发过程的负荷。,开发中的经验教训能反馈应用于本产品的下一个循环过程,大大提高质量与效率。 如果风险管理发现资金或时间已超出可承受的程度,则可以决定调整后续的开发,或在一个适当的时刻结束开发,但仍然有一个具有部分功能的,可工作的产品。 心理上,开发人员早日见到产品的雏型,是一种鼓舞。 使用户可以在新的一批功能开发测试后,立即参加验证,以便提供非常有价值的反馈。 可使销售工作有可能提前进行,因为可以在产品开发的中后期取得包含了主要功能的产品原型去向客户作展示和试用。,演化模型缺点,如果所有的产品需求在一开始并不完全弄清楚的话,会给总体设计带来困难及削弱产品设计的完整性,并因而影响产品性能的优化及产品的可维护性。 如果缺乏严格的过程管理的话,这个生命周期模型很可能退化为一种原始的无计划的“试错改”模式。 心理上,可能产生一种影响尽最大努力的想法,认为虽然不能完成全部功能,但还是造出了一个有部分功能的产品。 如果不加控制地让用户接触开发中尚未测试稳定的功能,可能对开发人员及用户都产生负面的影响。,螺旋模型,瀑布模型与演化模型相结合,并加入两者所忽略的风险分析所建立的一种软件开发模型。该模型于1998年由美国TRW公司(B.W.Boehm)提出。软件项目风险的大小作为指引软件过程的一个重要因素,引入这一概念有可能使得软件开发被看作一种元模型,因为它能包容任何一个开发过程模型。,软件的生命周期模型:,螺旋模型 螺旋模型将开发过程分为几个螺旋周期,在每个螺旋周期内分为制定计划、风险分析、开发实施、用户评估四个步骤。开发实施基本和瀑布模型相吻合。螺旋模型适合大型软件的开发,其特征是在项目的开发阶段中找出管理上的问题点,问题点分析之后,开始各个生存期。各生存期结束后进行审查,以决定是否应进入下一个螺旋周期。,螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动,即: 制定计划确定软件目标,选定实施方案,弄清项目开发的限制条件风险分析分析所选方案,考虑如何识别和消除风险开发实施实施软件开发客户评估评价开发工作,提出修正建议,螺旋模型,风险分析,工程实施,用户通信,用户评估,产品维护项目,产品增强项目,新产品开发项目,概念开发项目,计划,建造及发布,螺旋模型优缺点,优点: 强调严格的全过程风险管理。强调各开发阶段的质量。提供机会检讨项目是否有价值继续下去。 适合大型软件的开发,是开发大型软件最实际的方法。缺点: 引入非常严格的风险识别,风险分析,和风险控制,这对风险管理的技能水平提出了很高的要求。这需要人员,资金,和时间的投入。使许多用户接受和相信此方法并不容易。螺旋模型出现晚,不如瀑布模型普及。,软件的生命周期模型:,喷泉模型该模型是由B.H.Sollers和J.M.Edwards于1990年提出的一种新的开发模型。主要用于采用对象技术的软件开发项目。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性,喷泉模型使开发过程具有迭代性和无间隙性。 迭代重复演进无间隙各阶段间无明显界限,它是一种以用户需求为动力,以对象为驱动的模型,适合于面向对象的开发方法。,其特点如下: 、开发过程有分析、系统设计、软件设计和实现4个阶段。、各阶段相互重叠,它反映了软件过程并行性的特点。 、以分析为基础,资源消耗成塔型。、反映了软件过程迭代性的自然特性,从高层返回低层无资源消耗。 、强调增量开发,整个过程是一个迭代的逐步提炼的过程。,原型化方法(Prototyping),原型是项目系统中的一个方面或者多个方面的工作模型适用于用户驱动的系统(即需求模糊或随时间变化的系统)抛弃型原型:用于试验某些概念,试验完系统将无用处进化型原型:原型系统不断被开发和被修正,最终它变为一个真正的系统。,Prototype,Modification,Feedback,原型的工作模型是一个循环的模型。快速原型法按以下步骤循环执行:1、快速分析 快速确定软件系统的基本要求,确定原型所要体现的特征(界面,总体结构,功能,性能)2、构造原型 在快速分析的基础上,根据基本规格说明,忽略细节,只考虑主要特征,快速构造一个可运行的系统。有三类原型:用户界面原型,功能原型,性能原型。3、运行和评价原型 用户试用原型并与开发者之间频繁交流,发现问题,目的是验证原型的正确性。4、修改与改进 对原型进行修改、增删。,原型的工作模型,评价,构造,快速分析或修改,运 行,构造原型,运行/评价原型,原型完成否,要细部说明否,严格说明细部,效果满意否,整理原型提供文档,修正改进原型,Y,Y,N,N,快速分析,确定初步规格说明,Y,N,细化的快速原型模型,原型的好处从实践中学习(Learning by doing)改善的通信改善的用户参与使部分已知的需求清晰化展示描述的一致性和完整性可能可以减少文档减少了维护成本特征约束(利用工具构造原型可以将某些特性落到实处,而非在纸上写的那样容易失误)试验是否能产生期待的结果,原型法的缺点用户有时误解了原型的角色,例如他们可能误解原型应该和真实系统一样可靠缺少项目标准,进化原型法有点像编码修正缺少控制,由于用户可能不断提出新要求,因而原型迭代的周期很难控制额外的花费:研究结果表明构造一个原型可能需要10%额外花费运行效率可能会受影响原型法要求开发者与用户密切接触,有时这是不可能的。例如外包软件。,(三)软件生存周期模型、方法和工具,2. 软件开发方法 软件开发方法包括分析方法、设计方法、程序设计方法、设计描述方法、测试方法、文档生成方法等,其中分析设计方法是软件开发的基础,在某种程度上决定了软件开发的成与败、质量的好与坏、效率的高与低。自软件工程诞生以来,人们提出了许多软件分析设计方法,目前应用最广的是结构化方法和面向对象方法,还有面向数据结构设计法、面向控制结构设计法、TopDown设计法、维也纳设计法等。,(三)软件生存周期模型、方法和工具,(1) 结构化分析设计方法 自1972年提出结构化程序设计方法、1974年提出结构化设计方法以来,结构化分析设计方法得到了广泛的应用和普及。该方法是一种面向数据流的开发方法,其实质就是功能分解和抽象。从对象系统的整体功能入手,自顶向下逐步求精,分解成若干个具有合适大小和功能的模块并对各个模块进行定义和描述。作为图形表示方法有数据流图和模块层次结构图。,一、结构化开发方法的组成 70年代初 结构化程序设计方法 SP法(Structured Program) 70年代中 结构化设计方法 SD法(Structured Design) 70年代末 结构化分析方法 SA法(Structured Analysis) SA,SD,SP 法相互衔接,形成了一整套开发方法。若将SA,SD 法结合起来,又称为结构化分析与设计技术(SADT 技术)。,结构化方法的工作模型 瀑布模型(Waterfall Model) 但从80年代开始,逐渐发现其不足,软件开发过程是个充满回朔的过程。而瀑布模型将其分割为独立的几个阶段,不能从本质上反映软件开发过程本身的规律。此外,过分强调复审,并不能完全避免较为频繁的变动。尽管如此,瀑布模型仍然是开发软件产品的一个行之有效的工程模型。,二、结构化方法的工作模型,(三)软件生存周期模型、方法和工具,(2) 面向对象分析设计方法面向对象方法学是20世纪90年代发展起来的软件分析设计方法。该方法把客观世界的事物或实体都看成对象,把对象作为分析设计的基本元素,把所有对象都划分成对象类,类可以派生和继承,对每个对象类都定义一组数据和方法。面向对象方法包括面向对象分析、面向对象设计和面向对象实现,是近年来取得迅速发展并具有强大生命力的软件开发方法。,一 面向对象开发方法的组成,OOSD由三部分组成: OOA(Object-Oriented Analysis)面向对象的分析 OOD(Object-Oriented Design)面向对象的设计 OOP (Object-Oriented Program)面向对象的程序设计,OOA,强调的是对一个系统中的对象特征和行为的定义。建立系统的三类模型。,OOD,与OOA密切配合顺序实现对现实世界的进一步建模。,OOP,是面向对象的技术中发展最快的,使用面向对象的程序设计语言,进行编码。,1、OOA法 就是要解决“作什么”的问题。OOA 法的基本任务就是要建立三种模型:,状态模型(动态模型) 描述任何时刻对象的联系及其联系的改变,即时序。常用状态图, 事件追踪图描述。处理模型(函数模型) 描述系统内部数据的传送处理。,显然,在三大模型中,最重要的是对象模型。,对象模型(信息模型) 定义构成系统的类和对象,它们的属性与操作。,2、OOD 法 在需求分析的基础上,进一步解决“如何作”的问题,OOD 法也分为概要设计和详细设计。概要设计:细化对象行为,添加新对象,认定类,组类库,确定外部接口及主要数据结构详细设计:加细对象描述3、OOP 法 使用面向对象的程序设计语言,如C+进行程序设计。 Coad和Yourdon给出一个面向对象的定义:面向对象=对象+类+继承+消息如果一个软件系统是按照这样四个概念设计和实现的,则可以认为这个软件系统是面向对象的。,面向对象的方法的代表性成果有:1、B.Henderson-sellers 和 J.m.Edwards提出的面向对象软件生存期喷泉模型及面向对象的系统开发方法。2、G.Booch提出的面向对象的开发方法。3、P.Coad和E.Yourd提出的OOA和OOD法。 4、J. Rumbaugh等人提出的对象建模技术(OMT)。5、Jacobson 提出的面向对象的软件工程(OOSE)。6、G.booch J.Rumbough Jacobson等人在Booch方法、OMT和OOSE的基础上推出了统一建模语言UML。,(三)软件生存周期模型、方法和工具,(3) Jackson方法 Jackson方法是一种面向数据结构的设计方法,它首先分析数据的层次结构,生成输入、输出数据结构图,把处理模块化,并在此基础上进行详细设计和编程。Jackson方法有JSP(Jackson Structure Programming)和改进的JSD(Jackson System development)方法。(4) 维也纳方法 这是一种用形式语言描述的开发方法,它将软件系统当做模型来进行描述,再逐步转换成目标系统。,(三)软件生存周期模型、方法和工具,3. 软件开发工具 软件开发工具是协助开发人员进行软件开发活动所使用的软件或环境,它包括软件分析、设计、编码、测试、教育、管理、制定计划、生成文档等的工具。随着软件工程和计算机软硬件技术的发展,功能强大的软件开发工具 计算机辅助软件工程(CASE)得到了很大的发展,目前实用化程度很高。CASE的目标是软件的分析、设计、制造、测试、维护以及管理和文档生成的半自动化甚至自动化,它对于提高软件生产率、保证软件质量有着重要的意义。,软件工程三要素:方法、工具和过程,软件工程方法为软件开发提供了 “如何做” 的技术软件工具为软件工程方法提供了自动的或半自动的软件支撑环境,软件工程过程定义了: 方法使用的顺序 要求交付的文档资料 为保证质量和适应变化所需要的管理 软件开发各个阶段完成的里程碑,软件工程过程,软件工程过程是为了获得软件产品,在软件工具支持下由软件工程师完成的一系列软件工程活动。软件工程过程包括四种基本的过程活动:软件规格说明:规定软件的功能及其运行的限制软件开发:产生满足规格说明的软件软件确认:确认软件能够完成客户提出的要求软件演进:为满足客户的变更要求,软件必须在使用的过程中演进,软件工程过程的特性,易理解性可见性:每个过程活动均能以取得明确的结果告终,使过程的进展对外可见。可支持性:易于得到计算机辅助软件工程工具的支持。可接受性:易于为软件工程师接受和使用。可靠性:不会出现过程错误,或发现在产品出现故障之前。健壮性:不受意外发生问题的干扰。可维护性:过程可随软件机构需求的变更或随认定的过程改进而演进。速度:从给出规格说明起,就能较快地完成开发而交付。,软件工程项目的基本目标,付出较低的开发成本达到要求的软件功能取得较好的软件性能开发的软件易于移植需要较低的维护费用能按时完成开发工作,及时交付使用,(四)技术审查和管理复审, 在每个阶段结束前进行正式的技术审查和管理复审是软件工程的一个基本方法。 管理复审的主要任务是在软件生命周期的每个重要的里程碑(一般是每个阶段结束时),对工程项目的成本,实际花费的经费,投资回报的前景,项目的进度等经济因素从管理的角度进行审查。,一、进行审查和复审的必要性,技术审查与管理复审,技术审查是保证软件质量的。技术审查的基本任务:在软件生命周期的每个阶段进行正式而严格的技术审查,尽量发现隐藏的错误。 软件错误具有累积效应,必须在每个阶段结束前进行严格的技术审查,尽量避免错误进入下一阶段。 技术审查是降低软件成本的一个重要措施。 通常是在技术审查合格后再进行管理复审。,二、技术审查的标准和方法,技术审查与管理复审, 成立技术审查小组。 技术审查的一般步骤:准备 简要介绍情况 阅读被审查的文档 开审查会 返工 复查 审查的目的是发现错误,而不是改正错误。,小结,知识点:软件的特点软件生产发展的三个阶段软件工程的定义、性质、目标、内容和面临的问题软件危机的表现形式及产生的原因软件生存周期模型几种主要的软件开发模型和开发方法,