软件研发模式演变

 

 

太阳底下无新鲜事,今天是历史的沿袭,沿袭之后的变革。

 

软件的发展经历了几个历史阶段:

 

第一个阶段:个人英雄主义

 

这是pc的时代,一个求伯君就可以完成wps,红透半边天,这个时代是技术强人的时代,是老虎的时代。这个时代的软件代码量小,开发成本也低,几个人拿上枪就能上山打游击。用户最迫切的需求是从纸质进入计算机。

 

 

第二个阶段:大鱼吃小鱼

 

这个阶段的特点是小项目都纷纷向产品积极演化,初期的项目简单针对某个功能实现,这个阶段推出功能更全的版本,试图通过更多的功能提供占领市场。此时研发团队也开始走向分工,需求/研发/测试等角色开始诞生。各类小公司被大点的公司整合或者自行灭亡。

 

 

第三个阶段A:大项目时代

 

烟囱式发展的众多项目问题非常明显,各个项目很多功能重复,比如用户管理,这个阶段开始将烟囱打破,重新整合,一个项目就做好一块功能。以我们公司的163项目为例,早期的163是由业务受理,系统管理,认证,计费,webservice后台等组成,后来就负责最核心的认证,计费剥离给了计费团队做,业务受理剥离给了CRM做。

 

此时的研发已经和以前的研发完全不同,团队人数众多,不是一个两个,也不是十个八个,各个项目融合为一个超大的团队,技术分类繁复,架构众多,代码规模也是百万行单位了。

 

绕回来说说软件危机,一个项目开工,随着代码越写越多和人员流动,不被人了解和控制的代码越来越多,产品的质量如何保证,困惑。

 

沿袭大工业时代的经验,精细分工,重视顶层设计,贯彻执行力度。

 

用什么来保证软件质量呢?过程改进。

什么是过程改进呢?将人员细分为九大类角色:项目经理/系统架构/开发/测试/集成/数据库管理员/需求/质量管控/配置管理,定义好每个人在项目的不同阶段做不同的事情,完成提前计划好的任务,并产出相应的工件,也就是产品,这里的工件主要是代码和文档。

 

大型软件的模型主要是迭代开发,每个迭代周期都一样的经历需求搜集与分析,目标制定,设计,开发,测试等过程,并对整个过程进行监控和度量,提出改进方案,否则老是犯同样的错误,那不就完蛋了。

 

CMMI最受人诟病的是狂多的文档,以测试为例,根据项目计划编写测试计划,根据需求编写方案,细化测试用例,需要写清楚输入数据(需要实际数据的例子),步骤和期望值,然后测试完成要有测试报告,对bug的数量,等级分布等进行统计,提供给质量管控分析。

 

为什么要这么做?一个人最多可以同时关注七件事,这里的一个人是指的那种编写vi的狂人,普通人最多可以同时关注四五件事,一个团队十个八个人的话,每个人跟你说一下他在做什么,因为你并不需要关心所有人在做什么,所以大致你听一遍之后会有印象,但是如果一个团队超过十个人以后,每个人都说一遍在做什么,直接和你相关的可能就会超过四五项了,团队成员的增长会导致沟通成本成指数级上升。如此众多成员的团队,为了尽可能的避免歧义,只能通过技术文档为主,邮件,面谈等方式为辅的沟通方式。可以说,项目的成败取决于沟通。

 

CMMI狂多的文档是为了解决几个问题:

一是团队的专业沟通,二是强化过程管控,三是为了度量。

 

如果经历过大项目时代,就会深深的觉得,地球离了谁都会转,我是祖国一块砖,哪里需要哪里搬,跟疯狂旋转的陀螺一样,不停忙碌却是在原地打转而已。因为过程是第一的,人只是一颗螺丝钉,大兵团作战,你能力再强也就只能做好你本职岗位的事情。

 

 

第三个阶段B:互联网时代

 

我个人觉得互联网时代和大项目时代是并存的,同处一个时代,但是大项目针对的是大客户,而互联网更多针对公众客户。

 

以前你可以想象到会在网上购物吗,以前你可以想象网上相亲吗,现在有电脑有网络就可以。

 

这个时代的研发体系,和大项目时代互相借鉴,大的规划,大的顶层设计。但是已经有了太多的不一样。互联网时代更多的是公众客户,而不是传统的大客户,对于用户体验更加重视,以前迭代计划确定后,一个月内如果没有重大变故,都会封闭开发完成再发版,而在互联网时代,这样的迭代密度是不能满足用户要求的。

 

在这里CMMI理论是否过时了?其实也不完全是,在这个阶段,剪裁了过程控制,对于文档工件的要求降低,对迭代频度要求增加,大体上还是自顶向下的设计,只不过效率更高,速度更快了。团队也拆的更小了,角色的划分,不能再那么细致,但是大体角色的职能还在,只是有剪裁,各个成员要求尽可能一专多能,每个团队都尽可能专注做好一件事。

 

 

第四个阶段:移动互联网时代

 

移动互联网的精髓是什么?我以为是个人价值的凸显,无论是用户还是研发。

 

需求来讲,以前是二八模式,80%的钱都是从20%的用户身上赚取的,而现在更加重视沉默的大多数的需求,用户群定位更加精确,而且不是模糊的一群人,是一个个具体的人的需求。小米为例,成功的最重要的因素是,最大限度的与用户零距离交互,重视每个人的想法和需求。众多的米粉是小米最坚定的后盾和同盟。

 

研发体系也发生了彻底的颠覆,敏捷开发几乎一夜就烂大街,虽然大家都未必清楚。但是有件事大家都知道,必须要尽快推出用户需要的产品,速度比质量更加重要。

 

移动互联网是草根生产力的解放,不再是上面说啥我就做啥,而是要彻底解放每个个体的生产力和创造力,要发出小喽啰自己的声音。

 

 

 

软件研发模式演变

上一篇:长尾理论


下一篇:敏捷开发的实现要素