软件工程概述相关附.ppt
1/154,内容摘要,软件的概念与特点软件危机软件工程软件生命周期软件过程敏捷软件开发CASE工具与环境,第一章 软件工程概述,水利工程,建筑工程,机械工程,软件工程,本章将介绍软件的地位和作用、软件的特点、软件 的发展、软件危机、软件工程、软件生命周期以及软件过程等方面的问题和基本概念,传统工程,新兴工程,气象工程,生物工程,1.1 软件的概念与特点,1、软件,software,soft+ware,软制品(软体),软件是计算机系统中与硬件相互依存的另一部分。它包括程序、数据及其相关文档的完整集合。,2、软件特点,.软件是一种逻辑实体,而不是具体的物理实体,.软件的生产与硬件不同,.在软件的运行和使用期间,没有硬件那样的机械 磨损,老化问题,磨合调整,磨损用坏,修改点,实际曲线,理想曲线,.软件的成本相当昂贵,3、软件的分类,支撑软件,2、按软件的规模进行划分,上个世纪60年代开始显现出来的“软件危机”催生了“软件工程”这门指导计算机软件开发和维护的工程学科。,1、什么是软件危机软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。,1.2 软件危机,2、产生软件危机的原因 软件缺乏“可见性”。,对用户需求没有完整准确的认识、不能适应用户需求的变化。,缺乏对软件产品和开发过程的质量控制。,软件本身的可维护性差、开发商缺乏对维护的重视和准备、缺乏正确的维护方法。,导致“对软件开发成本、工作量、进度的估计不准确”;,导致“用户对已完成的软件系统不满意的现象经常发生”;,导致“软件产品的质量往往靠不住”;,导致“软件常常不可维护”;,开发、维护过程中文档化工作做得不好、缺乏配置管理。,硬件成本逐年下降,但软件成本居高不下。,近10来年,软件开发生产率有较大的提高,但计算机应用普及深入的速度更快。,导致“软件通常不具有良好一致性的文档资料”;,导致“软件成本在计算机系统总成本中所占的比例逐年上升”;,导致“软件开发生产率提高的速度,跟不上计算机应用普及深入的速度”。,3、解决软件危机的途径首先,应该对软件产品、系统有一个正确的认识。软件不仅仅是程序。IEEE对软件的定义:Computer programs,procedures,associated documentation and data pertaining to the operation of a computer system.应该充分认识软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。,应该总结软件开发的成功经验,应用软件工程领域的先进思想、原理、方法、技术(针对具体公司、项目进行定制)。最后,应该(开发)、采用适当的软件工具,尤其是CASE工具,来帮助完成软件开发工作。,1.3 软件工程1、软件工程介绍软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发和维护软件,并融合其他学科、行业(如:管理、建筑、客户服务)的原理、技术和经验,以规范、高效、可度量、可管理地开发出高质量的软件并维护它。“经济”?,软件工程特性:更多关注大型程序的构造;关注对复杂性、风险的控制,关注可度量、可管理性;重视软件系统的变化,要求软件系统对变化的适应性,要求变动控制;强调软件开发的效率(涉及方法、工具);,强调合作开发、团队协作、沟通重视用户(需求、反馈、技术支持等),重视和用户的交流;强调软件系统应能为用户提供价值、可用性;强调开发团队应具备相关行业的业务知识、建立系统语境、通过有效沟通准确捕获用户需求。,2、软件工程的基本原理Barry W.Boehm总结既有的软件工程准则,提出了7条软件工程基本原理:1 用分阶段的生命周期计划严格管理;2 坚持进行阶段评审;3 实行严格的产品控制(配置管理);4 采用现代(先进的)程序设计技术;5 结果应能清楚地审查;6 开发小组的成员应该少而精;7 承认不断改进软件工程实践的必要性;,3、软件工程的方法学通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学methodology。软件工程方法学包含3个要素:方法、工具和过程。,*软件工程传统途径(传统方法学)把软件生命周期的全过程依次划分为若干个阶段,顺序地完成每个阶段的任务。,每一个阶段的开始和结束都有准则或标准。,采用结构化技术(结构化分析、设计和实现)来完成软件开发各阶段的各项任务。每个阶段结束前都进行正式的技术审查和管理复审。,技术审查帮助即时、尽早发现、纠正工程技术方面的错误;保证软件质量。软件错误的积累和放大效应图目标主要是各个阶段的工程制品。,如:系统范围是否恰当?技术方案是否可行?架构是否稳定?模型是否正确?,管理复审主要任务是对项目的开销、工作量、资源(人力)、进度、风险等进行审查。,帮助决定开发是否继续,帮助对下一阶段的工作进行计划、对软件开发过程进行改进。,*面向对象方法学,客观世界的问题都是由客观世界中的实体及实体间的关系构成的。,用计算机系统解决客观世界的问题,希望实现解法的解空间与问题空间的结构尽可能一致。,传统语言提供的解空间对象不能满足要求。,面向对象方法学提供的解空间与客观世界问题空间的结构更一致。,面向对象方法是把数据和处理相结合的方法。对象是由数据及可以施加于这些数据的操作所构成的统一体。,面向对象方法把程序看作是相互协作而又彼此独立的对象的集合;而不是工作在数据上的过程或函数的集合。,要点:1 面向对象方法学认识问题空间,分析、解决问题是用对象的观点。2 把对象抽象为类,类中定义数据和方法;类实例化即为对象。3 类层次结构4 对象之间通过传递消息相互联系。,1.4 软件生命周期不同时期,不同的目标、任务。*生命周期各阶段的基本任务:1 问题定义 要解决的问题是什么?性质、范围?客户的目标?软件系统的价值?,最后系统分析员应提交开发方和客户都认可的书面报告。,2 可行性研究对上一阶段提出的问题有可行的解决方案吗?,3 需求分析用户有哪些具体需求?为了满足客户的需求,系统必须具备哪些功能?,准确、完整地捕获用户需求。系统分析员要提出经用户确认的系统逻辑模型。,技术可行性 经济可行性(时间、人员等)操作可行性,4 总体设计/架构设计要解决问题、满足用户需求,软件系统的总体架构是怎样的?,首先,架构设计师应该考虑几种可能的解决方案(Windows/Linux、.Net/J2EE、C/S or B/S、满足不同需求功能集的不同方案)。选择、推荐最佳方案。对确定的方案进行更具体的设计、描述(建立模型图、说明),包括对软件系统进行模块化,划分子系统、确定接口。,5 详细设计软件系统、子系统/模块 具体应该是怎样的?,算法(PDL语言、流程图等)。数据结构、函数/过程、类的定义。建立模型图。,6 编码和单元测试,用选定的编程语言书写程序(子系统/模块、类/组件、函数等),然后编译/翻译/汇编为机器代码。对这些子系统/模块进行单元测试。,7 综合测试软件是否实现了功能需求和非功能需求?集成测试 系统测试 用户验收测试,写:测试计划(测试策略、进度)、测试结果记录、测试结果分析、评估、报告。,维护要求、审查、计划(维护方案)、维护、回归测试、维护记录、复查验收。,8 维护 改正性维护 适应性维护 完善性维护 预防性维护,1.5 软件过程软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。通常使用生命周期模型简洁、直观地描述软件开发、运行、维护的过程。,能力成熟度模型CMM,CMM(Capability Maturity Model)即能力成熟度模型,是美国卡耐基梅隆大学软件工程研究所(SEI)在美国国防部资助下于二十世纪八十年代末建立的,用于评价软件机构的软件过程能力成熟度的模型。此模型在建立和发展之初,主要目的在于提供一种评价软件承接方能力的方法,为大型软件项目的招投标活动提供一种全面而客观的评审依据。而发展到后来,又同时被软件组织用于改进其软件过程。,软件组织的成熟与不成熟,1.不成熟的软件组织软件过程一般并不预先计划,而是在项目进行中由实际工作人员及管理员临时计划有时,即使软件过程已计划好,仍不按计划执行没有一个客观的基准来判断产品质量,或解决产品和过程中的问题对软件过程步骤如何影响软件质量,一无所知,产品质量得不到保证。而且,一些提高质量的环节,如检查、测试等经常由于要赶进度而减少或取消,产品在交付前,对客户来说,一切都是不可见的没有长远目标,管理员通常只关注解决任何当前的危机由于没有实事求是地估计进度、预算,因此他们经常超支、超时。当最后期限临近,他们往往在功能性和质量上妥协,或以加班加点方式赶进度,2.成熟的软件组织具有全面而充分的组织和管理软件开发和维护过程的能力管理员监视软件产品的质量以及生产这些产品的过程制定了一系列客观基准来判别产品质量,并分析产品和过程中的问题进度和预算可以按照以前积累的经验来制定,结果可行。预期的成本、进度、功能与性能和质量都能实现,并达到目的能准确及时地向工作人员通报实际软件过程,并按照计划有规则地(前后一致,不互相矛盾)工作,凡规定的过程都编成文档软件过程和实际工作方法相吻合。必要时,过程定义会及时更新,通过测试,或者通过成本-效益分析来改进过程。全体人员普遍地、积极地参与改进软件过程的活动。在组织内部的各项目中,每人在软件过程中的职责都十分清晰而明确,每人各守其责,协同工作,有条不紊,甚至能预见和防范问题的发生。,软件过程成熟度等级,CMM提供了一个成熟度等级框架:1级-初始级、2级-可重复级、3级-已定义级、4级-已管理级和5级-优化级。1.初始(initial)级:软件过程的特点是无秩序的,甚至是混乱的。几乎没有什么过程是经过妥善定义的,成功往往依赖于个人或小组的努力。2.可重复(repeatable)级:建立了基本的项目管理过程来跟踪成本、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功。,3.已定义(defined)级:己将管理和工程活动两方面的软件过程文档化、标准化,并综合成该机构的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件。4.已管理(managed)级:收集对软件过程和产品质量的详细度量值,对软件过程和产品都有定量的理解和控制。5.优化(optimizing)级:整个组织关注软件过程改进的持续性、预见及增强自身,防止缺陷及问题的发生。过程的量化反馈和先进的新思想、新技术促使过程不断改进。,能力成熟度模型的结构,能力成熟度模型的结构,成熟度等级表明了一个软件组织的过程能力的水平。除初始级外,每个成熟度等级都包含若干个关键过程域(Key Process Area,简称KPA)(见表1.2)达到某个成熟度级别,该级别(以及较低级别)的所有关键过程域都必须得到满足,并且过程必须实现制度化。,CMM提供了18个关键过程域,每个关键过程域都有一组对改进过程能力非常重要的目标,并确定了一组相应的关键实践 目标说明了每一个关键过程域的范围、界限和意义。关键实践描述了建立一个过程能力必须完成的活动和必须具备的基础设施,完成了这些关键实践就达到了相应关键过程域的目标,该关键过程域也就得到了满足。每个关键过程域的关键实践都是按照五个共同特性(执行约定,执行能力,执行活动,测量和分析,验证实现)进行组织的,主要解决关键实践的实施或制度化问题。,共同特性将描述关键过程域的关键实践组织起来。共同特性是一些属性,指明一个关键过程域的执行和规范化是否有效、可重复和可持续。共有5个共同特性:执行约定,执行能力,执行活动,测量和分析,验证实现。1)执行约定:执行约定描述机构为确保过程的建立和持续而必须采取的一些措施。典型内容包括建立机构策略和领导关系。,2)执行能力:执行能力描述了项目或机构完整地实现软件过程所必须有的先决条件。典型内容包括资源、机构结构和培训。3)执行活动:执行活动描述了执行一个关键过程域所必需的活动、任务和规程。典型内容包括制定计划和规程、执行和跟踪以及必要时采取纠正措施。,4)测量和分析:测量和分析描述了为确定与过程有关的状态所需的基本测量实践。这些测量可用来控制和改进过程。典型内容包括可能采用的测量实例。5)验证实现:验证实现描述了为确保执行的活动与已建立的过程一致所采取的步骤。典型内容包括管理部门和软件质量保证组实施的评审和审核。,在执行活动这个共同特性中的实践描述了建立一个过程能力所必须完成的活动。所有其他实践共同形成了一个使机构能将执行活动中描述的实践进行规范化的基础。各关键过程域的详细描述,参见能力成熟度模型(CMM):软件过程改进指南,卡耐基梅隆大学软件工程研究所编著,刘孟仁等译,电子工业出版社出版。,关键过程域实例,机构过程焦点第3级的关键过程域:已定义级 机构过程焦点的目的是,为能改进机构整体软件过程能力的软件过程活动 建立机构的职责。机构过程焦点包括,建立和维护机构的软件过程和项目软件过程(之间)的默契关系,并协调有关评估、开发、维护和改进这些过程的活动。机构提供长期的约定和资源,以协调现在和将来的软件项目的软件过程的开发和维护。该项工作由某个小组实施,例如软件工程过程组。它负责机构的软件过程活动,特别是负责开发和维护机构标准软件过程和相关过程资源(如在机构过程定义关键过程域中说明的),并协调软件项目的过程活动。,目标目标1:机构内部软件过程的制定和改进活动协调一致。目标2:相对于过程标准,所使用的软件过程的优势和薄弱环节标识清楚。目标3:机构级的过程开发和改进活动有计划。,执行约定约定1:机构遵循书面的管理策略,协调整个机构范围内的软件过程开发和改进活动。该策略一般规定:1.建立一个小组,负责机构级的软件过程活动,使这些活动与各项目协调一致。2.定期评估项目所使用的软件过程,以确定其优势和薄弱环节。,3.对机构标准软件过程进行合理地剪裁,以得到项目使用的软件过程。关于机构标准软件过程,参见综合软件管理关键过程域的活动1。4.每个项目的软件过程、工具和方法的改进和其他有用信息,可用于其他项目。,约定2:上级管理部门倡导和支持机构的软件过程开发和改进活动。上级管理部门:1.向机构成员和负责人说明有关软件过程活动的约定。2.制定资金、人员配备和其他资源的长期计划和约定。3.制定管理和执行有关软件过程开发和改进活动的策略。,约定3:上级管理部门监督机构的软件过程开发和改进活动。l.确保机构标准软件过程满足企业目标和策略。2.提出关于软件过程开发和改进活动优先次序的建议。3.参与制定软件过程开发和改进计划。a.上级管理部门与更高层人员和负责人共同协调软件过程需求及问题 b.上级管理部门与该机构负责人进行协调,以获得负责人和机构成员的支持和参与,执行能力能力1:有一个负责机构的软件过程活动的小组。一个小组是一些部门、负责人和人员的组合,负责一组任务和活动。小组的规模可以不同,既可以是单个兼职的人,也可以是多个来自不同部门的兼职人员,也可以由几个专职人员组成。组成小组时考虑的因素包括:分派的任务和活动、项目规模、机构结构和机构文化。某些小组,如软件质量保证组,集中关注项目活动;而其他一些小组,例如软件工程过程组,集中关注机构范围内的活动。,1.条件可能时,小组成员以专职工作的软件专业人员为核心,并尽可能有其他的兼职人员支持。该小组最一般的例子是软件工程过程(SEPG)。2.小组成员中有软件工程及软件相关科目的代表。软件工程及软件相关科目的实例有:软件需求分析软件设计程序编码软件测试软件配置管理软件质量保证,能力2:为实施机构的软件过程活动提供了充足的资源和资金。1.委派在特定领域具有特长的人员支持该小组。特定领域的实例有:软件重用计算机辅助软件工程技术(CASE)测量培训课程开设 2.有支持该机构软件过程活动的工具。支持工具的实例有:统计分析工具桌面出版工具数据库管理系统过程建模工具,能力3:负责机构软件过程活动的小组成员接受过实施这些活动所需的培训。培训的实例有:软件工程实践过程控制技术机构过程变动管理软件过程计划、管理和监督技术转变参见培训大纲关键过程域,能力4:软件工程组和其他软件相关小组的成员接受过机构软件过程活动及其在这些活动中的任务方面的定向培训。参见培训大纲关键过程域,执行活动活动1:定期评估软件过程,并根据评估结果制定行动计划。评估一般每隔一年、一年半至三年进行一次。评估可针对机构中所使用的所有软件过程,也可通过对过程和项目进行抽样评估。评估机构软件过程能力的方法实例之一是SEI软件过程评估方法。行动计划标识:涉及哪些评估结果针对评估结果实施更改软件过程的准则负责实施更改的小组或个人,活动2:机构制定和维护它的软件过程开发和改进活动的计划。该计划:以软件过程评估后的行动计划和其他的机构过程改进倡议为基础。确定要实施的活动及实施这些活动的进度。确定负责这些活动的小组和个人。确定所需的资源,包括人员配备和工具。初始发布和有大改动时通过同行评审。参见同行评审关键过程域。6.机构的软件负责人和上级负责人评审认可。,活动3:在机构级协调关于机构和项目的软件过程的开发和改进活动。涉及的软件过程有:1.机构标准软件过程。关于机构标准过程,参见机构过程定义关键过程域的活动1和活动2。2.项目定义的软件过程。关于项目定义的软件过程。参见综合软件管理关键过程域的活动1和活动2。,活动4:在机构级协调有关软件过程数据库的使用。机构的软件过程数据库用来收集机构和项目的软件过程以及生成的软件产品的信息。关于机构的软件过程数据库,参见机构过程定义关键过程域的活动5。,活动5:监控和评价机构中限制使用的新过程、方法和工具。合适时,推广到机构的其他部分。活动6:在机构内协调机构和项目的软件过程的培训。1.制定有关机构和项目软件过程的专题培训计划。2.合适时,培训由负责机构软件过程活动的小组(如软件工程过程组)或培训小组准备和实施。参见培训大纲关键过程域。,活动7:向与实施软件过程有关的小组通报机构和项目中软件过程开发和改进活动的情况。通报方式的实例有:过程电子公告板过程咨询委员会工作小组信息交流会调查过程改进组日常讨论,测量和分析测量1:测量机构的软件过程开发和改进活动的状态 测量的实例有:机构在过程评估、开发和改进活动中已完成的工作、工作量和耗费的资金,与计划相比较每次软件过程的评估结果,与以前的评估结果和建议相比较,验证实现验证1:上级管理部门定期评审软件过程开发和改进活动。上级管理部门实施定期评审的主要目的是适当地、及时地掌握软件过程活动。在满足机构需求的前提下,只要有适当的机制来报告异常情况,评审的时间间隔就尽可能长些。1.对照计划,评审有关开发和改进软件过程活动的进展和状态。2.讨论低层不能解决的冲突和问题。3.指定和评审行动措施,并跟踪到关闭。4.编写评审的总结报告,并分发给相关的小组和个人。,能力成熟度模型集成CMMICapability Maturity Model Integration,CMM的成功导致了各种模型的衍生,每一种模型都探讨了某一特定领域中的过程改进问题SW-CMM:适用于软件开发SE-CMM:系统工程能力成熟度模型SA-CMM:适用于软件获取SECAM:系统工程能力评估模型People CMM:讨论软件组织吸引、开发、激励、组织和留住人才的能力EIA/IS 731:替代SW-CMM和SECAMIPD-CMM:适用于集成化产品开发FAA-iCMM:集成了SE-CMM、SA-CMM、SW-CMM,相应的国际标准:ISO/IEC 12207(软件生存周期过程)、ISO/IEC 15288(系统生存周期过程)、ISO/IEC 15504(软件过程评估)模型的繁衍导致模型框架、术语等方面的矛盾和不一致包含在当代工程中各种各样的学科和工程是密切交叉在一起的,应用不同模型时效率低下且容易混淆,常常要付出极其昂贵的代价,美国国防部、美国国防工业委员会和SEI/CMU于1998年启动CMMI项目,希望CMMI是若干过程模型的综合和改进,是支持多个工程学科和领域的系统的、一致的过程改进框架,能适应现代工程的特点和需要,能提高过程的质量和工作效率2000年发布第一个CMMI模型CMMI-SE/SW/IPPD V1.0:集成了SW-CMM、EIA/IS 731、IPD CMM V0.98,2002年1月发布CMMI-SE/SW/IPPD V1.1,美国国防工业委员会在第一届CMMI国际研讨会上宣布,CMMI V1.1将至少稳定五年不变CMMI模型为每个学科的组合都提供两种表示法:阶段式模型和连续式模型,阶段式模型,阶段式模型的结构类同于软件CMM,它关注组织的成熟度,其成熟度等级如下图所示,CMMI V1.1的24个过程域的分组如下:,连续式模型,连续式模型关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级(Capability level,CL)。CMMI中包括六个过程域能力等级,等级号为05。能力等级表明了单个过程域中组织执行的好坏程度。允许组织对连续式模型的过程域进行剪裁,也允许对不同的过程域采用不同的能力等级下图给出了某组织的过程域能力等级,能力等级包括共性目标及相关的共性实践,这些实践在过程域内被添加到特定目标和实践中。当组织满足过程域的特定目标和共性目标时,就说该组织达到了那个过程域的能力等级。能力等级25的名字与成熟度等级25同名,但含义不同。能力等级可以独立地应用于任何单独的过程域,任何一个能力等级都必须满足比它等级低的能力等级的所有准则,各能力等级的含义简述如下:,CL0 未完成的:过程域未执行或未达到CL1中定义的所有目标。CL1 已执行的:其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标。CL2 已管理的:其共性目标集中于已管理的过程的制度化。根据组织级政策规定过程的运作将使用哪个过程,项目遵循已文档化的计划和过程描述,所有正在工作的人都有权使用足够的资源,所有工作任务和工作产品都被监控、控制和评审。,CL3 已定义的:其共性目标集中于已定义的过程的制度化。过程是按照组织的剪裁指南从组织的标准过程集中剪裁得到的,还必须收集过程资产和过程的度量,并用于将来对该过程的改进上。CL4 定量管理的:其共性目标集中于可定量管理的过程的制度化。使用测量和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的定量目标作为管理准则。CL5 优化的:使用量化(统计学)手段改编和优化过程域,以对付客户要求的改变和持续改进计划中的过程域的功效。,连续式模型将24个过程域划分为过程管理、项目管理、工程和支持四个过程组:,内容摘要,计算机软件软件工程软件过程软件过程模型敏捷软件开发CASE工具与环境,软件过程模型,软件过程模型是软件开发全部过程、活动和任务的结构框架也称软件开发模型或软件生存周期模型,软件过程模型,典型的软件过程模型有:瀑布模型(waterfall model)演化模型(evolutionary model)增量模型(incremental model)原型模型(prototyping model)螺旋模型(spiral model)喷泉模型(water fountain model)基于构件的开发模型(component-based development model)形式方法模型(formal methods model),瀑布模型,1970年W.Royce提出瀑布模型 特征接受上一阶段的结果作为本阶段的输入利用这一输入实施本阶段应完成的活动对本阶段的工作进行评审将本阶段的结果作为输出,传递给下一阶段 缺点缺乏灵活性,难以适应需求不明确或需求经常变化的软件开发开发早期存在的问题往往要到交付使用时才发现,维护代价大,许多软件项目在开发早期对软件需求的认识是模糊的、不确定的,因此软件很难一次开发成功。可以在获取了一组基本的需求后,通过快速分析构造出该软件的一个初始可运行版本,称之谓原型(prototype),然后根据用户在试用原型的过程中提出的意见和建议、或者增加新的需求,对原型进行改造,获得原型的新版本,重复这一过程,最终得到令客户满意的软件产品。演化模型的开发过程就是从构造初始的原型出发,逐步将其演化成最终软件产品的过程。演化模型适用于对软件需求缺乏准确认识的情况。典型的演化模型有:增量模型、原型模型、螺旋模型。,演化模型,增量模型,增量模型将软件的开发过程分成若干个日程时间交错的线性序列,每个线性序列产生软件的一个可发布的“增量”版本,后一个版本是对前一版本的修改和补充,重复增量发布的过程,直至产生最终的完善产品。增量模型融合了瀑布模型的基本成分(重复地应用)和演化模型的迭代特征增量模型强调每一个增量都发布一个可运行的产品,增量模型特别适用于:需求经常变化的软件开发市场急需而开发人员和资金不能在设定的市场期限之前实现一个完善的产品的软件开发增量模型能有计划地管理技术风险,如早期增量版本中避免采用尚未成熟的技术,原型(prototype)是预期系统的一个可执行版本,它反映了系统性质(如功能、计算结果等)的一个选定的子集。一个原型不必满足目标软件的所有约束,其目的是能快速、低成本地构建原型。原型方法从软件工程师与客户的交流开始,其目的是定义软件的总体目标,标识需求。然后快速制订原型开发的计划,确定原型的目标和范围,采用快速设计的方式对其建模,并构建原型。被开发的原型应交付给客户试用,并收集客户的反馈意见,这些反馈意见可在下一轮迭代中对原型进行改进。在前一个原型需要改进,或者需要扩展其范围的时候,进入下一轮原型的迭代开发。,原型模型,原型的类型:探索型(exploratory prototyping)其目的是要弄清目标系统的要求,确定所希望的特性,并探讨多种方案的可行性实验型(experimental prototyping)其目的是验证方案或算法的合理性,它是在大规模开发和实现前,用于考核方案是否合适,规格说明是否可靠。演化型(evolutionary prototyping)其目的是将原型作为目标系统的一部分,通过对原型的多次改进,逐步将原型演化成最终的目标系统。,原型的使用策略:废弃(throw away)策略 主要用于探索型和实验型原型的开发。这些原型关注于目标系统的某些特性,而不是全部特性,开发这些原型时通常不考虑与探索或实验目的无关的功能、质量、结构等因素,这种原型通常被废丢,然后根据探索或实验的结果用良好的结构和设计思想重新设计目标系统。追加(add on)策略 主要用于演化型原型的开发。这种原型通常是实现了目标系统中已明确定义的特性的一个子集,通过对它的不断修改和扩充,逐步追加新的要求,最后使其演化成最终的目标系统。原型可作为单独的过程模型使用,它也常被作为一种方法或实现技术应用于其它的过程模型中。,B.Boehm于1988年提出是瀑布模型和演化模型的结合,并增加了风险分析螺旋模型沿着螺线旋转,在四个象限上分别表达四个方面的活动,即:制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件风险分析:评价所选的方案,识别风险,消除风险工程实施:实施软件开发,验证工作产品客户评估:评价开发工作,提出修正建议,螺旋模型,螺旋模型出现了一些变种,它可以有3到6个任务区域。螺旋模型指引的软件项目开发沿着螺线自内向外旋转,每旋转一圈,表示开发出一个更为完善的新软件版本。如果发现风险太大,开发者和客户无法承受,则项目就可能因此而终止。多数情况下沿着螺线的活动会继续下去,自内向外,逐步延伸,最终得到所期望的系统。,喷泉模型,喷泉模型是一种支持面向对象开发的模型体现迭代和无间隙特征迭代:各开发活动常常重复工作多次,相关的功能在每次迭代中随之加入演进的系统无间隙:开发活动之间不存在明显的边界,支持软件复用(reuse)利用预先包装好的软件构件(包括组织内部开发的构件和现存商品化构件COTS)来构造应用系统,基于构件的开发模型,领域工程的目的是构建领域模型、领域基准体系结构和可复用构件库。领域分析分析该领域中各种应用系统的公共部分或相似部分,构建领域模型和领域基准体系结构(reference architecture),标识领域的候选构件。对候选构件进行可变性分析,以适应多个应用系统的需要。构建可复用构件,经严格测试和包装后存入可复用构件库(称为构件工程)。,应用系统工程的目的是使用可复用构件组装应用系统。分析待开发的应用系统,设计应用系统的体系结构,标识应用系统所需的构件。在可复用构件库中查找合适的构件(也可购买第三方的构件)。特化选中的构件,必要时作适当的修改,以适应该应用系统的需要。开发那些未找到合适构件的应用部分。组装应用系统。评价构件的复用情况,以改进可复用构件,同时对新开发的部分进行评价,并向构件工程推荐候选构件。,根据AT&T、Ericsson、HP公司的经验,有的软件复用率高达90%以上,产品上市时间可缩短25倍,错误率减少510倍,开发成本减少15%75%。仅管这些结论出自一些较好使用基于构件开发的实例,但毫无疑问,基于构件的开发模型对提高软件生产率、提高软件质量、降低成本、提早上市时间起到很大的作用。,形式方法模型,形式化方法(formal methods)是建立在严格数学基础上的一种软件开发方法。软件开发的全过程中,从需求分析、规约、设计、编程、系统集成、测试、文档生成、直至维护各个阶段,凡是采用严格的数学语言,具有精确的数学语义的方法,都称为形式化方法。形式化方法用严格的数学语言和语义描述功能规约和设计规约,通过数学的分析和推导,易于发现需求的岐义性、不完整性和不一致性,易于对分析模型、设计模型和程序进行验证。通过数学的演算,使得从形式化功能规约到形式化设计规约,以及从形式化设计规约到程序代码的转换成为可能。,净室过程模型,内容摘要,计算机软件软件工程软件过程软件过程模型敏捷软件开发CASE工具与环境,敏捷软件开发,软件开发的新挑战快速的市场进入时间,要求高生产率快速变化的需求快速发展的技术传统的软件开发方法强调过程强调文档开发人员负担过重称为重载(Heavyweight)方法,针对上述问题,产生了一系列轻载(Lightweight)方法,如XP、SCRUM等。2001年2月,新方法的一些创始人在美国犹他州成立了敏捷软件开发联盟,简称Agile 联盟。Agile 联盟起草了一个敏捷软件开发宣言,该宣言由四个价值观声明组成,并提炼出敏捷软件开发方法必须遵循的12条原则。Agile方法是在保证软件开发有成功产出的前提下,尽量减少开发过程中的活动和制品的方法。笼统的讲就是,“刚刚好”(Just enough),即开发中的活动及制品既不要太多也不要太少。,Agile方法的价值观,个人和交互高于过程和工具 不是否定过程和工具的重要性,而是更强调软件开发中人的作用和交流的作用。软件是由人组成的团队来开发的,与软件项目相关的各类人员通过充分的交流和有效的合作,才能成功地开发出得到用户满意的软件。如果光有定义良好的过程和先进的工具,而人员的技能很差,又不能很好地交流和协作,软件是很难成功地开发的。,可运行软件高于详尽的文档 通过执行一个可运行的软件来了解软件做了什么,远比阅读厚厚的文档要容易得多。敏捷软件开发强调不断地快速地向用户提交可运行的软件(不一定是完整的软件),以得到用户的认可。好的必要的文档仍是需要的,它能帮助我们理解软件做什么,怎么做以及如何使用,但软件开发的主要目标是创建可运行的软件。,与客户协作高于合同(契约)谈判 只有客户才能明确说明需要什么样的软件,然而,大量的实践表明,在开发的早期客户常常不能完整地表达他们的全部需求,有些早期确定的需求,以后也可能会改变。要想通过合同谈判的方式,将需求固定下来常常是困难的。敏捷软件开发强调与客户的协作,通过与客户的交流和紧密合作来发现用户的需求。,对变更及时做出反应高于遵循计划 任何软件项目的开发都应该制订一个项目计划,以确定各开发任务的优先顺序和起止日期。然而,随着项目的进展,需求、业务环境、技术等都可能变化,任务的优先顺序和起止日期也可能因种种原因会改变。因此,项目计划应具有可塑性,有变动的余地。当出现变化时及时做出反应,修订计划以适应变化。,Agile方法的指导原则,(1)最优先的是通过尽早地和不断地提交有价值的软件使客户满意(2)欢迎变化的需求,即使该变化出现在开发的后期,为了提升对客户的竞争优势,Agile过程利用变化作为动力(3)以几周到几个月为周期,尽快、不断地发布可运行软件(4)在整个项目过程中,业务人员和开发人员必须天天一起工作,(5)以积极向上的员工为中心建立项目组,给予他们所需的环境和支持,对他们的工作予以充分的信任(6)项目组内效率最高、最有效的信息传递方式是面对面的交流(7)测量项目进展的首要依据是可运行的软件(8)敏捷过程提倡可持续的开发,项目发起者、开发者和用户应能长期保持恒定的速度,(9)应时刻关注技术上的精益求精和好的设计,以增强敏捷性(10)简单化是必不可少的,这是尽可能减少不必要工作的艺术(11)最好的构架、需求和设计出自于自我组织的团队(12)团队要定期反思怎样才能更有效,并据此调整自己的行为,Agile方法的适用范围,Martin Fowler认为:新方法不是到处可适用的适合采用Agile方法的情况:需求不确定、易挥发(Volatile,意指今天的要求明天就不需要了)有责任感和积极向上的开发人员用户容易沟通并能参与,Agile的典型方法,Extreme Programming(简称XP)SCRUMCrystal Methodologies(简称Crystal)Feature Driven Development(简称FDD)Dynamic Systems Development Methodology(简称DSDM)Adaptive Software Development(简称ASD)Pragmatic Programming等,XP方法,由Kent Beck提出,是Agile方法中最引人注目的一个XP最初实践于1997年Crysler公司的C3项目(Smalltalk开发)适用于10人以下项目组、开发地点集中的场合 广泛用于需求模糊和挥发性强的场合IONA公司的Obix技术支持小组在采用了XP方法后,软件生产率提高了67%,XP方法的4个价值观,交流(Communication)实践表明,项目失败的重要原因之一是交流不畅,使得客户的需求不能准确地传递给开发人员,造成开发人员不能充分理解需求;模型或设计的变动未能及时告知相关人员,造成系统的不一致和集成的困难所有项目相关人员之间充分的有效的交流是软件开发成功所必不可少的XP方法提倡面对面的交流,这是一种有效的也是效率最高的交流方式,简单(Simplicity)指在确保得到客户满意的软件的前提下,做最简洁的工作(简单的过程、模型、文档、设计和实现)在开发中不断优化设计,时刻保持代码简洁、无冗余体现了敏捷开发的“刚刚好(Just enough)”思想,即开发中的活动及制品既不要太多也不要太少,刚好即可,反馈(Feedback)及时有效的反馈能确定开发工作是否正确,及时发现开发工作的偏差并加以纠正。强调各种形式的反馈,如非正式的评审(走查,Walkthrough)、小发布等,勇气(Courage)采用敏捷软件开发需要勇气:信任合作的同事,也相信自己做能做到的最简单的事只有在绝对需要的时候才创建文档让业务人员制定业务决策,技术人员制定技术决策用可能的最简单的工具,例如白板和纸,只有在复杂建模工具能提供可能的最好价值时才去使用它们相信程序员能制定设计决策,不需要给他们提供过多的细节需要勇气来承认自己是会犯错误的,需要勇气来相信自己明天能克服明天出现的问题。,XP方法的12个核心实践,1.完整的团队(Whole Team)所有的小组成员应在同一个工作地点工作成员中必须有一个现场用户(On-site User)由他提出需求,确定开发优先级通常还设一个“教练”(Coach)角色 教练指导XP方法的实施,以及与外部的沟通和协调2.计划对策(