摘要:
读大学时,我们曾经学习过不少软件生命周期模型,当时还不是很懂软件开发,你可能会觉得这些东西很新奇。在实际工作中,你会发现这些模型其实很难应用,与此同时你会接触到RUP、MSF等权威软件公司的生命周期模型。本文将向你介绍各种常见的软件生命周期模型及它们的优缺点,文章最后还会介绍吸取了各种模型优点的实用生命周期模型。

大纲:
1.瀑布型
2.增量型
3.进化型
4.原型
5.螺旋型
6.RUP的软件生命周期模型
7.MSF的软件生命周期模型
8.实用软件生命周期模型

本系列文章将为分四次为你分享,每次分享两种模型。

MSF的软件生命周期模型

MSF,全称是Microsoft Solution Framework,微软解决方案框架,是微软进行研发活动的方法论。
关于MSF,大家可以参考此文《解开MSF团队管理的秘密》

《项目团队模型》一文中,我们介绍了MSF的团队模型,这里介绍MSF的软件生命周期模型。

MSF的软件生命周期模型与螺旋型很相似,同样也是多版本螺旋前进,只是每次螺旋(每个版本)阶段划分不太一样,而且每次螺旋都会有至少5个大里程碑,如下图:

本图来自互联网

本图来由MSF官方资料整理出来

第一个图反应了MSF生命周期模型的概貌,多版本的连续开发,每个版本实现部分功能,最后实现全部的功能。

第二个图详细说明了每一个版本(即每一次螺旋)的阶段划分及里程碑:
阶段:远景(Envisioning)
里程碑:远景/范围被批准(Vision/Scope Approved)
阶段:计划(Planning)
里程碑:计划被批准(Project Plans Approved)
阶段:开发(Developiing)
里程碑:范围完成(Scope Complete)
阶段:稳定(Stabilizing)
里程碑:发布被批准(Release Readiness Approved)
阶段:部署(Deploying)
里程碑:部署完成(Deployment Complete)

如果某软件开发时间的工作比较类似,我们往往可以将该时期定为某某阶段,阶段是某个时间段上的概念。而里程碑不是时间段上的概念,而是指某个时间点上发生的标志性事件。MSF的每个阶段都以相应的里程碑标记,阶段必须达致里程碑才算结束。如第一个阶段远景,必须有书面的经过审批的远景相关文档才算结束。

MSF的生命周期模型是螺旋型模型的进一步优化,既保持了软件开发的灵活性,同时在每一次螺旋中均有里程碑的要求,增强了软件开发的严谨性。

实用软件生命周期模型

我个人觉得MSF和RUP的软件生命周期模型和我们实际工作比较贴切,不过当然不是100%都可以执行了,但以下几个重要思想是可以贯彻的:
1.整个项目应该通过多版本推进。我们公司项目不算很大,每个版本周期在一个月内,甚至只有两到三周。
2.各类文档和代码应该持续更新。这些文档包括:需求、设计、测试、实施方面的文档,也包括计划方面的文档。
3.需求、计划、设计、测试等重要文档均需通过评审,并用通过评审的文档来指导工作。
4.通过评审后的文档应该因应变化而及时调整,不要走两个极端:任何修改都需要重型的变更审查;文档写了就算不根据实际情况作任何调整。

但MSF、RUP等软件生命周期模型,都没有考虑到中国项目的一些重要的特点:
1.签订了需求不明确的合同。
2.合同的价钱是死的。
3.合同要求的项目完成时间是死的。

这些特点决定了我们无法完全采用以上任何软件生命周期模型,我们的软件开发难以“敏捷”,我们很多IT从业员天天在为项目而“煎熬”。我们需要提出一种能适应中国特色的、能针对性解决实际问题的实用软件生命周期模型。

我觉得这种实用软件生命周期模型应该有这样的特点:
1.需求应当在项目初期至少明确80%以上。
2.采用多版本方式逐步满足需求,让已确定需求尽快稳定,并尽快搞清楚未确定的需求。
3.需求、设计、编码、测试、实施等工作应一步一脚印做好,文档应及时评审并要及时更新。

我定义了一种软件生命周期模型:多线程多版本式软件生命周期模型,如下图:

此图与RUP的图很类似,主要区别有:

1.横向以多版本来划分。实际项目中每个版本的周期一般也只有1-2个月,而我们公司往往少于1个月,故每个版本我就不再划分阶段。

2.工作分类不太一样,我以中国人更容易理解的角度来划分,并且补充了RUP没有的活动。

商务:指跟客户商定合同、谈判、验收、收款等与钱直接相关的工作。

工作环境:为保障项目组顺利运作而准备的软硬件环境,保障项目组的工作、沟通能顺利进行。


技能管理:完成项目需要满足一定的技能要求,在整个项目过程中要针对性地安排培训、自学、研究等工作,保证项目组整体具备完成工作所需的技能。

3.计划、需求、设计、编码、测试、实施这些红色字的活动,尽管在整个项目周期中是持续进行的,但需要及时安排工作产品评审,并要及时更新文档。

以计划为例,往往我们在项目初期只能定出近期的详细计划以及远期的大致计划,随着项目开展应随时更新近期计划和明确远期计划,计划应不断细化。同样道理。需求、设计、测试、实施等文档也是需要不断细化的。

其实软件开发情况千变万化,没有一种模型能应对全部情况。下面我列举几种典型的项目情况,每种情况的软件生命周期模型都不尽相同。

1.从新开始做一个项目。

2.在一期的基础上开发二期项目。

3.在产品的基础上做项目。

4.公司独立自主研发产品。

5.互联网开发。

6.维护型项目。

以上每种情况都不尽相同,每种情况都可以有自己独特的软件生命周期。

实用软件生命周期模型并不存在固定的模式,我们需要理解上述各种模型的特点,在实际工作中不断体会项目管理的奥妙,灵活应用上述模型。

有人常常问我:你们公司的项目是怎样的生命周期模型?
我往往不知道怎样回答,招无定式,我们的模型往往是“混合型”的!

全文完,谢谢!

作者:张传波

创新工场创业课堂讲师

软件研发管理资深顾问

《火球——UML大战需求分析》作者

www.umlonline.org 创办人

形形色色的软件生命周期模型(4)——MSF、实用型的更多相关文章

  1. Mono产品生命周期

    软件生命周期 同任何事物一样,一个软件产品或软件系统也要经历孕育.诞生.成长.成熟.衰亡等阶段,一般称为软件生命周期(软件生存周期) .软件生命周期模型是指人们为开发更好的软件而归纳总结的软件生命周期 ...

  2. 软件测试的分类&软件测试生命周期

    软件测试的分类: 按测试执行阶段:单元测试.集成测试.系统测试.验收测试.(正式验收测试,Alpha 测试-内侧,Beta 测试-公测) 按测试技术分类:黑盒测试.白盒测试.灰盒测试 按测试对象是否运 ...

  3. 熟悉软件的生命周期AND测试工程师的工作流程

    1.软件的生命周期 *软件生命周期(SDLC)是软件开始研制到最终被废弃不用所经历的各个阶段.在不同阶段里,由不同的组织.个人和资源进行着明确的任务. 2.生命周期的模型 *常见的生命周期模型有:瀑布 ...

  4. [转]软件开发过程(CMMI/RUP/XP/MSF)是与非?

    经常看到和听到大家在争论敏捷过程.RUP和CMM 哪个软件开发过程更好或者哪个过程不好,各自都有理由.争论得不亦乐乎......实际上,没有十全十美的过程,也不存在更好的过程.关键是什么样的过程适合自 ...

  5. Activity生命周期的学习以及Logcat的使用

    http://android.blog.51cto.com/268543/322518/  Activities是由Activity stack管理的.当一个新的Activity被启动,它就会处于st ...

  6. 数据库设计 Step by Step (2)——数据库生命周期

    引言:数据库设计 Step by Step (1)得到这么多朋友的关注着实出乎了我的意外.这也坚定了我把这一系列的博文写好的决心.近来工作上的事务比较繁重,加之我期望这个系列的文章能尽可能的系统.完整 ...

  7. 软件测试的生命周期&测试流程

    一.软件的生命周期 二.软件生命周期的阶段 三.软件模型 四.软件测试的基本流程 五.软件开发流程.测试流程梳理 六.C/S与B/S架构 七.对软件测试行业的理解 八.常见笔试面试题 一.软件的生命周 ...

  8. [转]: 两分钟彻底让你明白Android Activity生命周期(图文)!

    转自:http://blog.csdn.net/android_tutor/article/details/5772285 大家好,今天给大家详解一下Android中Activity的生命周期,我在前 ...

  9. Maven生命周期详解

    来源:http://juvenshun.iteye.com/blog/213959 Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),这个生命周期可以从两方面来理解 ...

随机推荐

  1. 理解 B*tree index内部结构

    转载请注明出处:http://write.blog.csdn.net/postedit/40589651 Oracle数据库里的B树索引就好象一棵倒长的树.它包括两种类型的数据块:一种是索引分支块,还 ...

  2. session过期后自动跳转到登陆页

    项目需要做一个自动登出的功能,查询了网上的资料,一开始准备用session监听做,按照下面方式配置监听器 1.在项目的web.xml文件中添加如下代码: <!--添加Session监听器--&g ...

  3. RadioGroup单选按钮排版

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...

  4. zookeeper管理solr的配置文件

    zookeeper可以管理solr和其他软件的配置文件.配置文件还是保存在linux服务器的磁盘上,但是不是改变solr读取solr/home配置的配置文件的位置. 现在solr/home配置文件的位 ...

  5. Phonegap 版本minSdkVersion为8的时候的自动更新与升级

    清单文件中: <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8"/> ...

  6. ASP.NET数据绑定控件简介

    •数据绑定分为数据源和数据绑定控件两部分(①数据绑定控件通过数据源获取和修改数据②数据绑定控件通过数据源隔离数据提供者和数据使用者)数据绑定控件→数据源→数据库•数据源:SqlDataSource(连 ...

  7. SQL 语句修改列名 属性 默认值

    --修改字段名exec sp_rename '表名.列名','新列名' --修改字段属性alter table 表名 alter column 列名 nvarchar(100) null; --修改默 ...

  8. android:http下载文件并保存到本地或SD卡

    想把文件保存到SD卡中,一定要知道SD卡的路径,获取SD卡路径: Environment.getExternalStorageDirectory() 另外,在保存之前要判断SD卡是否已经安装好,并且可 ...

  9. C++ for 循环

    C++的另一种for循环写法,和C#的foreach语法很类似,不需要知道数组的类型: C++:for(auto& item:items) C#:foreach(var item in ite ...

  10. C#网络编程之WebClient

    1.什么是WebClient? 源自MSDN:提供用于将数据发送到由 URI 标识的资源及从这样的资源接收数据的常用方法. 2.OpenRead()  为从具有String指定的URI的资源下载的数据 ...