第二章 软件过程 (1)
第二章内容概要 过程、软件过程和软件生命周期 经典软件过程模型 现代软件过程模型 Rational统一过程 敏捷过程与极限编程 微软过程 ★ 软件工程 - 2011 - 第二章 软件过程
过程(Process) 学习的过程与软件的开发过程 建造计算机软件是一个迭代学习的过程,其输出是在过程进行中收集、精炼和组织的知识的具体化。 过程:产生某种预定输出的一系列可预测的步骤,包含一组活动(activities)、约束(constraints)、资源要素(resources)。 软件工程 - 2011 - 第二章 软件过程
过程的特性 过程使用一定的资源,受一定的限制,并生成一定的中间及最终产品; 过程中所包含的活动事先都规定好了; 过程中每个活动的开始、结束有明确的规定; 每项活动都有相应的指导原则,用以明确其目标; 各活动之间以某种顺序组织; 过程可能包括若干相互关联的子过程; 过程中的活动、资源以及产品都可能受到约束; 软件工程 - 2011 - 第二章 软件过程
为何使用过程 过程能保证各活动之间是有组织的和一致的: 过程可被检查、理解、控制和改进; 过程也是传授经验的一种途径。 从而,不同的人使用同一过程能获得在某一层次上一致的产品; 一致性并不排斥灵活性,一致性是在某一层次上实现的; 过程可被检查、理解、控制和改进; 过程也是传授经验的一种途径。 软件工程 - 2011 - 第二章 软件过程
软件过程与软件工程 软件过程:为建造高质量软件所需完成的任务的框架,它规定了完成各项任务的工作步骤。 软件过程和软件工程的关系: 软件工程应该是由有创造力、有知识的人在定义好的、成熟的软件过程中进行的,该过程适合于他们建造的产品和他们的市场需要。 软件过程定义了软件开发中采用的方法,但软件工程还包含该过程中应用的其他技术和工具。 软件工程 - 2011 - 第二章 软件过程
软件过程与软件生命周期 当谈及的过程涉及到某种产品的建造时,常把过程称作为生命周期。 软件过程与软件生命周期的关系: 软件过程是在软件生命周期中所实施的一系列活动的集合; 软件生命周期与选择的软件过程有关,不同的软件过程可能对应不同的软件生命周期。 软件工程 - 2011 - 第二章 软件过程
第二章内容概要 过程、软件过程和软件生命周期 经典软件过程模型 现代软件过程模型 瀑布模型 快速原型模型 增量模型 螺旋模型 喷泉模型 ★ 软件工程 - 2011 - 第二章 软件过程
软件过程模型 软件过程模型是对被描述的实际过程的抽象,即,是从某种特定角度提出的对软件过程的简化描述。 经典软件过程模型可为我们提供一些范例 软件工程 - 2011 - 第二章 软件过程
瀑布模型 软件工程 - 2011 - 第二章 软件过程
瀑布模型特点 阶段间具有顺序性和依赖性 推迟实现的观点 必须等前一阶段的工作完成之后,才能开始后一阶段的工作 前一阶段的输出文档就是后一阶段的输入文档 推迟实现的观点 清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现 软件工程 - 2011 - 第二章 软件过程
瀑布模型特点 质量保证的观点 瀑布模型的本质是“一次通过” 每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。 每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。 瀑布模型的本质是“一次通过” 软件工程 - 2011 - 第二章 软件过程
瀑布模型的历史功绩 在支持开发结构化软件、控制软件开发复杂度、促进软件开发工程化方面起了显著作用; 它为软件开发和维护提供了一种当时较为有效的管理模式,根据这一模式制定开发计划、进行成本预算、组织开发人员,以阶段评审和文档控制为手段,有效地对软件开发过程进行指导,从而对软件质量有一定程度的保证; 我国曾在1988年根据该模型制定并公布了“软件开发规范”国家标准。 软件工程 - 2011 - 第二章 软件过程
瀑布模型优点 可强迫开发人员采用规范的方法(例如,结构化技术) 严格地规定了每个阶段必须提交的文档 要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证 瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型 软件工程 - 2011 - 第二章 软件过程
瀑布模型缺点 要求用户不经过实践就提出完整准确的需求,在许多情况下都是不切实际的 仅仅通过写在纸上的静态的规格说明,很难全面正确地认识动态的软件产品 将本来非线性的软件开发过程人为地加以线性化,不符合实际中的软件开发情况 软件开发耗时长,可运行版本要等到项目后期才能得到,一旦在后期发现错误,付出的代价将是巨大的。 “由文档驱动”的这个事实也是瀑布模型的一个主要缺点,这可能导致最终开发出的软件产品不能真正满足用户的需要 软件工程 - 2011 - 第二章 软件过程
V模型 软件工程 - 2011 - 第二章 软件过程
Tips:验证与确认 验证(Verification) 确认(Validation) 目标是确定系统中各项功能可以正常工作,实质上是检查实现的质量如何。 确认(Validation) 目标是确定系统实现了全部的需求,确保开发方建造的是正确的、用户需要的产品。 软件工程 - 2011 - 第二章 软件过程
V模型 瀑布模型的改进,强调测试活动与分析和设计之间的关联: 单元测试和集成测试->校验程序设计; 系统测试->校验(verify)系统设计; 验收测试->确认(validate)需求; 与瀑布模型关注文档和工作产品不同,V模型的关注点是软件开发各阶段的活动以及正确性,因此V模型是以活动驱动的。 软件工程 - 2011 - 第二章 软件过程
V模型的改良之处与存在的问题 本质是把瀑布模型中一些隐含的迭代过程明确出来,使开发活动和验证活动的相关性更加明显; 和瀑布模型一样,都是对软件开发过程过份简单、理想化的抽象,对需求变化的适应性差。 软件工程 - 2011 - 第二章 软件过程
原型/快速原型模型 所谓原型,是一个可以实际运行的模型,它在功能上可以看作是最终产品的一个子集(展示了目标系统的关键功能)。 快速原型化的软件开发大体可以如下图所示: 软件工程 - 2011 - 第二章 软件过程
原型/快速原型模型 软件工程 - 2011 - 第二章 软件过程
快速原型模型 软件工程 - 2011 - 第二章 软件过程
快速原型模型 所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。 软件工程 - 2011 - 第二章 软件过程
快速原型模型 原型模型的优势: 快速原型模型是不带反馈环的,软件产品的开发基本上是线性顺序进行的。原因如下 原型系统已经通过与用户交互而得到验证 开发人员通过建立原型系统已经学到了许多东西 利用原型能统一客户和开发人员对软件项目需求的理解,有助于需求的定义和确认; 可以考虑结合瀑布模型,二者互补性强。用快速原型做为需求分析的一种技术,用于收集客户的真实需求,然后把客户满意了的原型再作为瀑布模型的输入,从而达到优势互补。 软件工程 - 2011 - 第二章 软件过程
快速原型模型 使用原型必须要注意的问题: 由于要求能够快速建立可供运行的模型,原型不可能象最终产品一样面面俱到; 客户:不可把原型当作软件的正式运行版本; 开发人员:同上。还必须牢记原型中没有考虑质量因素的部分; 使用前要与用户达成一致:原型只是模型而已。 软件工程 - 2011 - 第二章 软件过程
阶段式开发(演化模型) 软件工程 - 2011 - 第二章 软件过程
阶段式开发(演化模型) 软件系统和其他所有复杂系统一样,是随着时间不断演化的。业务需求和产品需求随着开发向前推进经常发生改变,这使得直线式的开发模型不切实际。 来自时间、成本、人力以及技术等方面的压力往往使得演化成为软件开发的必经之路。 阶段式开发大体分为两种: 渐增式开发 迭代式开发(螺旋式开发) 软件工程 - 2011 - 第二章 软件过程
阶段式开发(演化模型) 增量开发 迭代开发 增量和迭代模型 软件工程 - 2011 - 第二章 软件过程
增量模型 增量模型采用随着日程时间的进展而交错的线性序列,每一个序列产生软件的一个可发布的“增量”; 第一个增量往往是核心的产品,实现最基本需求,提供最基本功能; 其他补充的产品特征(包括已知的和未知的)留待后续发布。 这个过程在每个增量发布后不断重复,直到产生最终完善的产品。 软件工程 - 2011 - 第二章 软件过程
增量模型 增量模型的优点: 适用于人员配备不充裕、不能在软件项目期限之前实现一个完全版本的软件的情况; 能有计划地管理技术风险; 每个增量都发布了一个高质量的可操作的版本,用户能在较短时间内使用上部分功能; 逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,减少一个全新的软件可能给客户带来的冲击。 软件工程 - 2011 - 第二章 软件过程
增量模型 增量模型存在的困难: 要求每个新的增量构件能够无缝地集成到现有的软件体系结构中,必须不破坏原来已经开发的产品; 因此软件体系结构必须是开放的,增加了设计阶段的投入; 本身具有矛盾性,一方面要求开发人员把软件看作一个整体,另一方面要求开发人员把软件看作构件序列,且构件间彼此独立。需要开发人员协调这一矛盾。 软件工程 - 2011 - 第二章 软件过程
增量模型 软件工程 - 2011 - 第二章 软件过程
增量模型 风险更大的增量模型 软件工程 - 2011 - 第二章 软件过程
螺旋模型 软件项目中的风险: 通过使用原型或其他手段降低风险,是螺旋模型中蕴涵的基本思想; 人员; 硬件设备; 项目的生存能力等。 通过使用原型或其他手段降低风险,是螺旋模型中蕴涵的基本思想; 可以把螺旋模型简单地理解为在每一个阶段之前都增加了风险分析的瀑布模型(或快速原型模型),如下图: 软件工程 - 2011 - 第二章 软件过程
螺旋模型 软件工程 - 2011 - 第二章 软件过程
螺旋模型 软件工程 - 2011 - 第二章 软件过程
螺旋模型 螺旋模型沿着螺线旋转,在四个象限上分别表达四个任务区域,即: 制定计划──确定软件目标,选定实施方案,弄清项目开发的限制; 风险分析──分析所选方案,考虑如何识别和消除风险; 实施工程──实施软件开发; 客户评估──评价开发工作,提出修正建议,并计划下一个阶段的任务; 软件工程 - 2011 - 第二章 软件过程
螺旋模型的优点 实质上相当于在瀑布模型的每个阶段开始前引入风险分析,并由客户对阶段性产品做出评审,这对保证软件产品质量十分有利; 由于引入风险分析等活动,测试活动的确定性增强了; 螺旋模型最外层代表维护,开发与维护采用同样方式,使维护得到与开发同样的重视。 软件工程 - 2011 - 第二章 软件过程
螺旋模型的缺点 主要适合内部开发,否则风险分析必须在签订合同前完成,或者争取客户的最大理解; 只适合大型软件项目的开发,否则,每个阶段的风险分析将占用很大一部分资源,增加成本; 对开发人员的风险分析能力是极大的考验,否则,模型将退化到瀑布模型,甚至更糟。 软件工程 - 2011 - 第二章 软件过程
喷泉模型 维护期 进一步开发 运行状态 集成和测试阶段 编码阶段 面向对象设计阶段 面向对象分析阶段 需求阶段 软件工程 - 2011 - 第二章 软件过程
喷泉模型 注意事项 为避免使用喷泉模型开发软件时开发过程过于无序,应该把一个线形过程作为总目标 面向对象范型本身要求经常对开发活动进行迭代或求精 软件工程 - 2011 - 第二章 软件过程
关于经典软件过程模型 上述经典软件过程模型仅是实际中使用的模型的一部分; 应根据客户、用户、开发人员所处环境及解决问题的需要来定义和剪裁过程模型; 对于可能需要从多个角度来关注的开发过程,不能局限于一种过程模型。 软件工程 - 2011 - 第二章 软件过程
课堂讨论 在你曾经经历过的软件开发任务中,采用的是近似于上面哪一种软件过程模型?有哪些主要的开发活动?有何应对后期需求变化的措施? 你认为在研究机构中,比如大学,进行的软件项目,所采用的软件过程模型与专门从事软件开发的公司所采用的模型有什么不同吗? 软件工程 - 2011 - 第二章 软件过程