1、第二章 软件过程 (1),2,软件工程 - 2010 - 第二章 软件过程,第二章内容概要,过程、软件过程和软件生命周期 经典软件过程模型 现代软件过程模型 Rational统一过程 敏捷过程与极限编程 微软过程,3,软件工程 - 2010 - 第二章 软件过程,20个BUG,1. 程序员写出自认为没有Bug的代码。 2. 软件测试,发现了20个Bug。 3. 程序员修改了10个Bug,并告诉测试组另外10个不是Bug。 4. 测试组发现其中5个改动根本无法工作,同时又发现了15个新Bug。 5. 重复3次步骤3和步骤4。 6. 鉴于市场方面的压力,为了配合当初制定的过分乐观的发布时间表,产品
2、终于上市了。 7. 用户发现了137个新Bug。 8. 已经领了项目奖金的程序员不知跑到哪里去了。 9. 新组建的项目组修正了差不多全部137个Bug,但又发现了456个新Bug。 10. 最初那个程序员从斐济给饱受拖欠工资之苦的测试组寄来了一张明信片。整个测试组集体辞职。 11. 公司被竞争对手恶意收购。收购时,软件的最终版本包含783个Bug。 12. 新CEO走马上任。公司雇了一名新程序员重写该软件。 13. 程序员写出自认为没有Bug的代码。,4,软件工程 - 2010 - 第二章 软件过程,学习的过程与软件的开发过程 建造计算机软件是一个迭代学习的过程,其输出是在过程进行中收集、精炼
3、和组织的知识的具体化。 过程:产生某种预定输出的一系列可预测的步骤,包含一组活动(activities)、约束(constraints)、资源要素(resources)。,过程(Process),5,软件工程 - 2010 - 第二章 软件过程,过程使用一定的资源,受一定的限制,并生成一定的中间及最终产品; 过程中所包含的活动事先都规定好了; 过程中每个活动的开始、结束有明确的规定; 每项活动都有相应的指导原则,用以明确其目标; 各活动之间以某种顺序组织; 过程可能包括若干相互关联的子过程; 过程中的活动、资源以及产品都可能受到约束;,过程的特性,6,软件工程 - 2010 - 第二章 软件过
4、程,过程能保证各活动之间是有组织的和一致的: 从而,不同的人使用同一过程能获得在某一层次上一致的产品; 一致性并不排斥灵活性,一致性是在某一层次上实现的; 过程可被检查、理解、控制和改进; 过程也是传授经验的一种途径。,为何使用过程,7,软件工程 - 2010 - 第二章 软件过程,软件过程:为建造高质量软件所需完成的任务的框架,它规定了完成各项任务的工作步骤。 软件过程和软件工程的关系: 软件工程应该是由有创造力、有知识的人在定义好的、成熟的软件过程中进行的,该过程适合于他们建造的产品和他们的市场需要。 软件过程定义了软件开发中采用的方法,但软件工程还包含该过程中应用的其他技术和工具。,软件
5、过程与软件工程,8,软件工程 - 2010 - 第二章 软件过程,当谈及的过程涉及到某种产品的建造时,常把过程称作为生命周期。 软件过程与软件生命周期的关系: 软件过程是在软件生命周期中所实施的一系列活动的集合; 软件生命周期与选择的软件过程有关,不同的软件过程可能对应不同的软件生命周期。,软件过程与软件生命周期,9,软件工程 - 2010 - 第二章 软件过程,第二章内容概要,过程、软件过程和软件生命周期 经典软件过程模型 瀑布模型 快速原型模型 增量模型 螺旋模型 喷泉模型 现代软件过程模型,10,软件工程 - 2010 - 第二章 软件过程,软件过程模型是对被描述的实际过程的抽象,即,是
6、从某种特定角度提出的对软件过程的简化描述。 经典软件过程模型可为我们提供一些范例,软件过程模型,11,软件工程 - 2010 - 第二章 软件过程,瀑布模型,1970年温斯顿罗伊斯(Winston Royce)提出了著名的“瀑布模型”,直到80年代早期,它一直是唯一被广泛采用的软件开发模型。 瀑布模型核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。从本质来讲,它是
7、一个软件开发架构,开发过程是通过一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,开发进程从一个阶段“流动”到下一个阶段,这也是瀑布开发名称的由来。,12,软件工程 - 2010 - 第二章 软件过程,瀑布模型,13,软件工程 - 2010 - 第二章 软件过程,阶段间具有顺序性和依赖性 必须等前一阶段的工作完成之后,才能开始后一阶段的工作 前一阶段的输出文档就是后一阶段的输入文档 推迟实现的观点 清楚地区分逻辑设计与物理设计,尽可能推迟程序的物理实现,瀑布模型特点,14,
8、软件工程 - 2010 - 第二章 软件过程,质量保证的观点 每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。 每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。 瀑布模型的本质是“一次通过”,瀑布模型特点,15,软件工程 - 2010 - 第二章 软件过程,在支持开发结构化软件、控制软件开发复杂度、促进软件开发工程化方面起了显著作用; 它为软件开发和维护提供了一种当时较为有效的管理模式,根据这一模式制定开发计划、进行成本预算、组织开发人员,以阶段评审和文档控制为手段,有效地对软件开发过程进行指导,从而对软件质量有一定程度的保证; 我国曾在1988
9、年根据该模型制定并公布了“软件开发规范”国家标准。,瀑布模型的历史功绩,16,软件工程 - 2010 - 第二章 软件过程,可强迫开发人员采用规范的方法(例如,结构化技术) 严格地规定了每个阶段必须提交的文档 要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型,瀑布模型优点,17,软件工程 - 2010 - 第二章 软件过程,要求用户不经过实践就提出完整准确的需求,在许多情况下都是不切实际的 仅仅通过写在纸上的静态的规格说明,很难全面正确地认识动态的软件产品 将本来非线性的软件开发过程人为地加以线性化,不符合实际中的软件开发情
10、况 软件开发耗时长,可运行版本要等到项目后期才能得到,一旦在后期发现错误,付出的代价将是巨大的。“由文档驱动”的这个事实也是瀑布模型的一个主要缺点,这可能导致最终开发出的软件产品不能真正满足用户的需要,瀑布模型缺点,18,软件工程 - 2010 - 第二章 软件过程,V模型,V模型是在快速应用开发 (RAD,Rap Application Development)模型基础上演变而来,由于将整个开发过程构造成一个V字形而得名。V模型强调软件开发的协作和速度,将软件实现和验证有机地结合起来,在保证较高的软件质量情况下缩短开发周期。,19,软件工程 - 2010 - 第二章 软件过程,20,软件工程
11、 - 2010 - 第二章 软件过程,水平分析,左边是设计和分析,是软件设计实现的过程,同时伴随着质量保证活动审核的过程,也就是静态的测试过程;右边是对左边结果的验证,是动态测试的过程,即对设计和分析的结果进行测试,以确认是否满足用户的需求。 从中可以看出,V模型使我们能清楚地看到质量保证活动和项目同时展开, 项目一启动,软件测试的工作也就启动了,避免了瀑布模型所带来的误区软件测试是在代码完成之后进行。,21,软件工程 - 2010 - 第二章 软件过程,垂直分析,水平虚线上部表明,其需求分析、定义和验收测试等主要工作是面向用户,要和用户进行充分的沟通和交流,或者是和用户一起完成。水平虚线下部
12、的大部分工作,相对来说,都是技术工作,在开发组织内部进行,主要是由工程师、技术人员完成。,22,软件工程 - 2010 - 第二章 软件过程,抽象的V模型,23,软件工程 - 2010 - 第二章 软件过程,验证(Verification) 目标是确定系统中各项功能可以正常工作,实质上是检查实现的质量如何。 确认(Validation) 目标是确定系统实现了全部的需求,确保开发方建造的是正确的、用户需要的产品。,Tips:验证与确认,24,软件工程 - 2010 - 第二章 软件过程,瀑布模型的改进,强调测试活动与分析和设计之间的关联: 单元测试和集成测试校验程序设计; 系统测试校验(veri
13、fy)系统设计; 验收测试确认(validate)需求; 与瀑布模型关注文档和工作产品不同,V模型的关注点是软件开发各阶段的活动以及正确性,因此V模型是以活动驱动的。,V模型,25,软件工程 - 2010 - 第二章 软件过程,本质是把瀑布模型中一些隐含的迭代过程明确出来,使开发活动和验证活动的相关性更加明显; V模型使抽象等级的概念也更明显:所有从需求到实现部分的活动关注的是建立更多的系统详细表述,而所有从实现到交付运行的活动关注的是对系统的验证和确认。 和瀑布模型一样,都是对软件开发过程过份简单、理想化的抽象,对需求变化的适应性差。,V模型的改良之处与存在的问题,26,软件工程 - 201
14、0 - 第二章 软件过程,所谓原型,是一个可以实际运行的模型,它在功能上可以看作是最终产品的一个子集(展示了目标系统的关键功能)。 快速原型化的软件开发大体可以如下图所示:,原型/快速原型模型,27,软件工程 - 2010 - 第二章 软件过程,原型/快速原型模型,28,软件工程 - 2010 - 第二章 软件过程,快速原型模型,29,软件工程 - 2010 - 第二章 软件过程,所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。,快速原型模型,30,软件工程 - 2010 - 第二章 软件过程,原型模型的优势: 快速原型模型是不带反馈
15、环的,软件产品的开发基本上是线性顺序进行的。原因如下 原型系统已经通过与用户交互而得到验证 开发人员通过建立原型系统已经学到了许多东西 利用原型能统一客户和开发人员对软件项目需求的理解,有助于需求的定义和确认; 可以考虑结合瀑布模型,二者互补性强。用快速原型做为需求分析的一种技术,用于收集客户的真实需求,然后把客户满意了的原型再作为瀑布模型的输入,从而达到优势互补。,快速原型模型,31,软件工程 - 2010 - 第二章 软件过程,使用原型必须要注意的问题: 由于要求能够快速建立可供运行的模型,原型不可能象最终产品一样面面俱到; 客户:不可把原型当作软件的正式运行版本; 开发人员:同上。还必须
16、牢记原型中没有考虑质量因素的部分; 使用前要与用户达成一致:原型只是模型而已。,快速原型模型,32,软件工程 - 2010 - 第二章 软件过程,阶段式开发(演化模型),33,软件工程 - 2010 - 第二章 软件过程,软件系统和其他所有复杂系统一样,是随着时间不断演化的。业务需求和产品需求随着开发向前推进经常发生改变,这使得直线式的开发模型不切实际。 来自时间、成本、人力以及技术等方面的压力往往使得演化成为软件开发的必经之路。 阶段式开发大体分为两种: 渐增式开发 迭代式开发(螺旋式开发),阶段式开发(演化模型),34,软件工程 - 2010 - 第二章 软件过程,阶段式开发(演化模型),
17、35,软件工程 - 2010 - 第二章 软件过程,增量模型采用随着日程时间的进展而交错的线性序列,每一个序列产生软件的一个可发布的“增量”; 第一个增量往往是核心的产品,实现最基本需求,提供最基本功能; 其他补充的产品特征(包括已知的和未知的)留待后续发布。 这个过程在每个增量发布后不断重复,直到产生最终完善的产品。,增量模型,36,软件工程 - 2010 - 第二章 软件过程,增量模型的优点: 适用于人员配备不充裕、不能在软件项目期限之前实现一个完全版本的软件的情况; 能有计划地管理技术风险; 每个增量都发布了一个高质量的可操作的版本,用户能在较短时间内使用上部分功能; 逐步增加产品功能可
18、以使用户有较充裕的时间学习和适应新产品,减少一个全新的软件可能给客户带来的冲击。,增量模型,37,软件工程 - 2010 - 第二章 软件过程,增量模型存在的困难: 要求每个新的增量构件能够无缝地集成到现有的软件体系结构中,必须不破坏原来已经开发的产品; 因此软件体系结构必须是开放的,增加了设计阶段的投入; 本身具有矛盾性,一方面要求开发人员把软件看作一个整体,另一方面要求开发人员把软件看作构件序列,且构件间彼此独立。需要开发人员协调这一矛盾。,增量模型,38,软件工程 - 2010 - 第二章 软件过程,增量模型,39,软件工程 - 2010 - 第二章 软件过程,增量模型,风险更大的增量模
19、型,40,软件工程 - 2010 - 第二章 软件过程,软件项目中的风险: 人员; 硬件设备; 项目的生存能力等。 通过使用原型或其他手段降低风险,是螺旋模型中蕴涵的基本思想; 可以把螺旋模型简单地理解为在每一个阶段之前都增加了风险分析的瀑布模型(或快速原型模型),如下图:,螺旋模型,41,软件工程 - 2010 - 第二章 软件过程,螺旋模型,42,软件工程 - 2010 - 第二章 软件过程,螺旋模型,43,软件工程 - 2010 - 第二章 软件过程,螺旋模型,螺旋模型沿着螺线旋转,在四个象限上分别表达四个任务区域,即: 制定计划确定软件目标,选定实施方案,弄清项目开发的限制; 风险分析
20、分析所选方案,考虑如何识别和消除风险; 实施工程实施软件开发; 客户评估评价开发工作,提出修正建议,并计划下一个阶段的任务;,44,软件工程 - 2010 - 第二章 软件过程,实质上相当于在瀑布模型的每个阶段开始前引入风险分析,并由客户对阶段性产品做出评审,这对保证软件产品质量十分有利; 由于引入风险分析等活动,测试活动的确定性增强了; 螺旋模型最外层代表维护,开发与维护采用同样方式,使维护得到与开发同样的重视。,螺旋模型的优点,45,软件工程 - 2010 - 第二章 软件过程,主要适合内部开发,否则风险分析必须在签订合同前完成,或者争取客户的最大理解; 只适合大型软件项目的开发,否则,每
21、个阶段的风险分析将占用很大一部分资源,增加成本; 对开发人员的风险分析能力是极大的考验,否则,模型将退化到瀑布模型,甚至更糟。,螺旋模型的缺点,46,软件工程 - 2010 - 第二章 软件过程,喷泉模型,喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于采用对象技术的软件开发项目。该模型认为软件开发过程自下而上周期的各阶段是相互迭代和无间隙的特性。软件的某个部分常常被重复工作多次,相关对象在每次迭代中随之加入渐进的软件成分。无间隙指在各项活动之间无明显边界,如分析和设计活动之间没有明显的界限,由于对象概念的引入,表达分析、设计、实现等活动只用对象类和关系,从而可以较为容易地实现活动
22、的迭代和无间隙,使其开发自然地包括复用。,47,软件工程 - 2010 - 第二章 软件过程,喷泉模型,喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。,48,软件工程 - 2010 - 第二章 软件过程,喷泉模型,进一步开发,
23、运行状态,集成和测试阶段,编码阶段,面向对象设计阶段,面向对象分析阶段,需求阶段,维护期,49,软件工程 - 2010 - 第二章 软件过程,注意事项 为避免使用喷泉模型开发软件时开发过程过于无序,应该把一个线形过程作为总目标 面向对象范型本身要求经常对开发活动进行迭代或求精,喷泉模型,50,软件工程 - 2010 - 第二章 软件过程,上述经典软件过程模型仅是实际中使用的模型的一部分; 应根据客户、用户、开发人员所处环境及解决问题的需要来定义和剪裁过程模型; 对于可能需要从多个角度来关注的开发过程,不能局限于一种过程模型。,关于经典软件过程模型,51,软件工程 - 2010 - 第二章 软件过程,在你曾经经历过的软件开发任务中,采用的是近似于上面哪一种软件过程模型?有哪些主要的开发活动?有何应对后期需求变化的措施? 你认为在研究机构中,比如大学,进行的软件项目,所采用的软件过程模型与专门从事软件开发的公司所采用的模型有什么不同吗?,课堂讨论,