软件过程是指软件生产的一组互相连贯的活动。软件过程一般包括四种基本活动:软件描述、软件设计和实现、软件有效性验证、软件进化。
软件过程模型是软件过程的简化表示。可分为通用过程模型、专用过程模型、统一开发过程3类模型。
通用过程模型
软件工程包含一些通用活动,如需求定义、软件设计、软件实现、部署等。通用过程模型就是包含了这些活动的模型。
通用过程的流程有四种:
线性过程流:依次从需求定义、软件设计到部署的流程;
迭代过程流:执行下一个活动前,重复执行之前的一个或多个活动;
演化过程流:采用循环的方式执行各个活动,每次循环都能不断完善软件版本;
根据过程流的不同,产生了如下几种模型:
(Model 1)瀑布模型
定义
瀑布模型(waterfall model),又称为经典生命周期模型,起源于1970s。是一种线性过程流模型,一个阶段活动完成后再开始下一个阶段活动。
模型
主要阶段:
需求分析和定义:
通过咨询系统用户建立系统的服务、约束与目标。
并对其详细定义形成系统描述。
软件设计:
识别和描述一些基本的软件系统抽象及其之间的关系。
软件编码与单元测试:
将软件设计实现为一组程序或程序单元。
单元测试就是检验每个单元是否符合其描述。
集成与系统测试:
集成单个的程序单元或一组程序,并对系统整体进行测试以确保其满足了软件的需求。
运行与维护:
系统实施部署和维护。
维护包括改正系统错误。
优点
容易管理:过程可见,项目经理能够根据项目计划监控项目过程。
缺点
客户通常难以清楚的描述所有的需求。
响应慢:
关于需求的责任和义务一定要在过程的早期阶段清晰界定,这意味着对用户的需求变更的相应较困难。
难以及时发现系统问题。
阻塞状态:
任务之间存在依赖性,开发团队的一些成员要等待另一些成员工作完成。
适用范围
对需求了解好;
系统开发过程中不太可能发生重大改变。
(Model 2)V模型
定义
V模型(V-model),瀑布模型的一个变体,强调在各个阶段进行测试和验证,以提升软件质量。
模型
左侧大体遵照瀑布模型,在编码完成后反弹,逐阶段测试。
优缺点
V模型是瀑布模型的一种加强,可以提升软件质量,但也更消耗人力和时间。
(Model 3)增量过程模型
定义
增量过程模型,先开发出一个初始的实现,给用户使用并听取用户的使用意见,通过不断修改直到产生一个充分的版本。
各活动不是分离而是交织在一起的。反应了我们解决问题的方法,我们很少能提前制定出完整的问题解决方案,而是摸着石头过河,逐步逼近结果。
模型
第一个增量(初始版本)往往是核心产品,满足基本的需求。
优点
降低适用需求变更的成本:
可以更经济、更容易、更快速的相应变更。
尽快得到问题反馈。
交付和部署更快。
用户可以更早的使用软件并创造价值。
缺点
过程不可见,不方便管理。
缺乏整体规划,导致功能堆砌。
越往后变更越困难,成本逐渐上升。
适用范围
小型系统或功能;
需要快速上线的电商等类型系统。
开发团队人力资源、时间不充足的情况。
(Model 4)原型开发模型
通过构造原型,即一个软件系统的最初版本,用于验证概念、适用设计选型、发现更多的问题和可能的解决方法。
原型是为定义需求服务的,在需求明确后,原型需要丢弃(至少部分丢弃)。
模型
原型开发模型开始于沟通,开发人员和用户沟通,了解软件整体目标,明确已知需求,大致勾画出以后进一步定义的东西。
然后迅速策划一个原型,进行建模;
快速开发一个原型;
对原型进行部署,由相关人员进行评价。
根据评价进一步细化软件的需求。不断调整已满足需求。
优点
有助于启发和验证系统需求。
缺点
原型开发会忽略掉非功能性要求 ,如性能、安全性、可靠性等;
开发过程的快速更改意味着没有文档,唯一的设计描述是原型的代码,这不利于长期的维护。
适用范围
需求模糊。
开发人员对算法效率、操作系统的兼容性,人机交互形式等情况不明确。
(Model 5)螺旋模型
螺旋模型最初由Barry W.Boehm(美国国家工程院院士)在1988年提出,是一种演进式模型。它结合了原型的迭代性质和瀑布模型的系统性和可控性特点。
定义
螺旋模型是一种风险驱动型的过程模型。采用循环的方式逐步加深系统定义和实现的深度,同时降低风险。
模型
将过程(项目阶段)用螺旋线表示,每个螺旋线构成一个回路,每个回路由不同的风险驱动,根据这些风险,在每个阶段规划可选的策略方案。
优点
实现风险管理,降低变更风险
确定一系列里程碑,确保利益相关者都能支持。
缺点
很难说服客户以合同形式合作。
依赖大量风险评估专家及风险评估工作。
适用范围
开发大型系统和软件。
预期存在较大风险的项目。
专用过程模型
专用过程模型使用面较窄而专一,只适用于某些特定的软件工程方法。
(Model 6)构件开发模型
定义
基于构建开发模型(component-based development model),是指采用预先打包的软件构件开发应用系统。
模型
优点
软件复用,减少开发费用,缩短开发周期。
缺点
需要需求妥协,不完全符合用户需求。
(Model 7)形式化方法模型
定义
形式化方法模型(formal methods model),生成计算机软件形式化的数学规划说明。开发人员可以应用符 来说明、开发、验证基于计算机的系统。
模型
优点
容易发现和改正歧义性、不完整、不一致问题。
缺点
开发耗时,成本很高。
极少数程序员具有应用形式化方法的背景
对于技术水平不高的客户,很难用这种模型进行沟通。
适用范围
高度关注安全性的系统,如飞行器、医疗设施领域。
出错将导致重大经济损失的软件。
(Model 8)净室模型
定义
净室模型(cleanroom model)[Harlan Mills,1987]是形式化方法模型的一个变种。
净室软件工程是一种应用数学与统计学理论以经济的方式生产高质量软件的工程技术,力图通过严格的工程化的软件过程达到开发中的零缺陷或接近零缺陷。净室方法不是先制作一个产品,再去消除缺陷,而是要求在规约和设计中消除错误,然后以“净”的方式制作,可以降低软件开发中的风险,以合理的成本开发出高质量的软件。
模型
通过在第一次正确地书写代码增量并在测试前验证它们的正确性来避免对成本很高的错误消除过程的依赖。它的过程模型是在代码增量积聚到系统的过程的同时进行代码增量的统计质量验证。提倡开发者不需要进行单元测试,而是进行正确性验证和统计质量控制。
(Model 9)喷泉模型
定义
喷泉模型(fountain model)是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。该模型认为软件开发过程自下而上周期的各阶段是相互迭代和无间隙的。
模型
软件的某个部分常常被重复工作多次,相关对象在每次迭代中随之加入渐进的软件成分。由于对象概念的引入,表达分析、设计、实现等活动只用对象类和关系,从而可以较为容易地实现活动的迭代和无间隙(无间隙指在各项活动之间无明显边界,如分析和设计活动之间没有明显的界限)。
优点
将功能需求、功能模块间的关系、数据流等描述清楚,提升需求、设计准确性,最终提升软件质量。
缺点
各个阶段有重叠,不利于项目的管理。
开发耗时
统一开发过程
(Model 10)统一过程模型
定义
统一过程(UP,unified process)模型是一种“用例驱动,以体系结构为核心,迭代及增量”的软件过程框架,由UML方法和工具支持。
它融合统一了瀑布模型、增量过程模型、演化过程模型、基于构建的开发、面向方面的软件开发这五种基本软件过程。
模型
统一过程是迭代和增量的过程,每次迭代分为四个阶段:初始、细化、构造和移交。
初始阶段(inception phase),包括用户沟通和计划活动两个方面,强调定义和细化用例,并将其作为主要模型。
细化阶段(elaborattion phase),根据主要的用例描述设计出详细的系统构架。
构架包括了用例模型、分析模型、设计模型、实现模型(包含一些构件)和实施模型的视图。
构造阶段(construction phase),将设计转化为实现,并进行集成和测试。
移交阶段(transition phase),将产品发布给用户进行测试评价,并收集用户的意见,之后再次进行迭代修改产品使之完善。
优点
统一过程模型做到全面兼顾阶段、风险、工作流、质量监控、项目管理等方面。
具备五种基本过程模型的优点,如基于构件开发的成本优势、基于增量开发的响应速度、基于面向对象开发的严谨。
缺点
耗时耗力。
适用范围
大型系统。
以上是十种基本的软件过程模型,通过扩展和调整还可以创建更多专门的软件工程过程。并且,软件过程模型可以根据需要搭配使用。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!