当前各大互联网公司都宣传自己是敏捷开发,各种技术论坛上也讨论得非常多得议题也是敏捷,好像公司不敏捷都好不意思跟人打招呼。那么我们到底为什么需要敏捷呢?传统软件开发到底存在什么样的问题呢?作者从自己的视角来给各位分析一下。
软件及互联网的价值
首先我们从软件开发的成果软件的价值说起。软件到底能够为软件的客户及用户带来什么样的价值呢?
提高数据计算和存储效率
软件带来的价值就是提高工作效率。互联网盛行之前软件开发行业主要是为企业开发应用软件,它的价值是提升企业员工的工作效率,比如财务软件及各种管理类软件,主要是解决信息存储和检索问题,以及解决数据计算效率问题。
提高信息传递效率
随着互联网的普及和广泛应用,软件及互联网带来的价值是以更低的成本,更高的效率传递来传递信息。人们用互联网来查找信息;用互联网来随时随地的沟通;用互联网来连接消费者和零售商,让消费者足不出户实现全球购;
还有其它的一些价值。上述两类价值是软件及互联网带来的核心价值。
那么我们软件开发的目标就是通过一系列的过程和活动让软件的价值得以体现,脱离了实现价值的软件开发就是耍流氓。
另外我要强调的是价值它绝对不能等同于软件功能,开发软件功能只是第一步,只有用户去使用软件解决了问题之后软件的价值才得以实现,软件的总价值等于所有软件用户获得价值总和。
传统软件开发的问题
由于我在不同类型的软件公司工作过,参与过不同类型的软件项目,因此对于传统软件开发的问题也有比较全面的认识,我总结传统软件开发存在的最为关键的问题有下面这些。
不以交付价值为目标
传统软件开发最大和最根本的问题就是目标经常会不正确,这时导致传统软件开发一系列问题的根源。国内传统的软件开发往往是给大企业或者政府部门研发企业应用类软件为主,而软件公司作为施工的乙方,乙方的商业模式决定了乙方开发的功能越多,功能越复杂则软件的价格越高,因此软件开发者的目标是往往尽可能让软件项目能够获得更高的售价,能够尽可能让甲方的软件研发决策者满意为主,双方的合作是基于合同约定内容进行的。而甲方的决策者往往不是直接使用软件的管理者,管理者自上而下考虑问题的时候经常会考虑得非常全面,专业而复杂,可能会给基层员工带来巨大的软件使用成本,但是往往这些会被决策者忽视,软件在实施的过程中,管理者往往需要付出非常高的管理成本去督促和控制员工软件的使用情况,如果管理者一旦放松控制则会出现员工就不使用软件或者就敷衍管理者的管理。这就是为什么我们经常会听说企业购买的软件有80%是根本不用或者很少使用的,而企业还需要花费巨大的软件、硬件建设成本,另外还有员工的巨大使用成本,另外企业的业务也会经常变化,往往越专业越复杂的软件应对变化的能力越弱,导致企业之前购买的软件因为业务发生变化而无法继续使用。而真正给企业带来的价值却非常少,有点软件根本无法提高员工的工作效率,反而会浪费员工的时间去使用和维护软件,反而给员工带来巨大的累赘。
不以交付价值为目标的软件开发最终给客户交付的是低投入产出比的一堆软硬件产出物,也许短期内某些管理者对于这些能够体现政绩和业绩的表面交付物是满意的,但是长期来看越来越多理性的企业会更加注重价值的交付,而且随着越来越多国企改革,政府部门的改革都会让
糟糕的软件质量
尽管为了保证软件质量,我们有各种各样的软件质量标准用于控制软件流程和产出物,比如大名鼎鼎的CMMI模型,那详尽而严谨的各种标准让我们看起来觉得非常专业;我们还设置了各种岗位来检测软件质量,比如测试和SQA等等,种种这些都“然并卵”。传统软件开发方法开发出来的软件质量非常糟糕。
先说用户能够感知的外部质量的情况,我们开发的软件上线实施有一部分往往是根本不符合企业的实际业务情况,无法解决企业的问题,没法带来价值。有更多的软件是实施后,强制员工使用了一段时间后,员工用起来觉得更麻烦,用户体验机器糟糕,不能带来价值,反而相比原来的工作方式增加了很多额外的成本,时间一长管理者觉得确实没有价值,也就将这个软件丢弃了,这些都是需求层面的质量问题;还有一部分是软件代码的缺陷质量问题,软件工程师都是在被进度充分压榨的情况下编写代码,往往测试时间有限,因此隐含了大量的代码缺陷留着用户一个一个试出来,给软件使用者带来巨大的额外成本。
再说说用户无法感知的软件内部质量的情况,内部质量优先级低,往往在软件企业里也没有什么人关注,没有专人的去检查内部质量,因此代码的质量那是惨不忍睹。糟糕的内部质量其实也会反映在外部质量上,内部一团糟,就很有可能隐含了大量的缺陷,另外软件往往还要根据业务调整而维护,时间一长,由于糟糕的内部质量更是让软件被改得一塌糊涂,而且由于项目人员更替频繁,往往导致软件的代码没人敢打动,以至于软件代码彻底腐化。
为什么我们设置那么多软件质量标准和岗位,软件质量依旧还那么差呢?我觉得最重要的原因是企业定制化软件开发和维护成本极高,另外由于软件开发目标不正确还导致企业软件功能过于庞大更加增加了开发成本,另外在激烈的市场竞争下价格被拉到成本之下,而软件企业往往为了获得订单还需要付出一些灰色成本(你懂的),因此在高额的成本之下,软件企业不可能付出更加高额的成本去执行质量标准。所以我们经常看到的现象是大家开发的时候是在非常紧迫的时间里完成软件开发,中间的质量控制流程是能省就省,如果必须要达到某个标准,最后大家在统一去补充一大堆的文档应付了事儿。
开发者沦为低价值的体力劳动者
传统软件开发者往往是顶着脑力劳动者的帽子干着低价值体力劳动的活,因为虽然企业是定制开发软件,但是绝大多数功能特性都是相同或者相似的,这就导致软件开发者几乎开发每个项目要么是拷贝粘帖,要么每天用着相同的经验和技能将企业的需求简单转化为代码,这种工作对员工来说毫无挑战性,员工的技能也得不到提升,个人的价值得不到实现,员工满意度怎们可能高?久而久之员工自然就容易流失;这也是很多软件企业人才更替频繁的主要原因,尤其是一些专门做软件外部项目和人才外部的软件企业这种现象更加严重。员工的创新能力弱,软件企业就不可能形成自己的核心竞争力。从目前来看很多专门的外包公司已经倒闭或者被迫转型,这也是很重要的一部分原因吧。
现状及未来趋势
就中国软件行业的市场来看,最近几年的互联网企业的蓬勃发展,让软件开发者面临的市场和用户有了巨大的变化。
首先软件的使用者有了巨大的决定权。在自由竞争市场里,软件使用者有自由的选择权,软件价值不高,软件使用成本高,用户不喜欢用,都将成为软件被抛弃的原因,这与企业软件由管理者决定的情况大不相同,传统企业软件是一个相对封闭的垄断市场,软件使用者被迫接受,因为用户没有选择。
其次软件的开发者变成了甲方。软件开发者往往是互联网企业内容的开发者,所以软件开发者不但要交付软件功能,还必须要对软件的价值负责,还需要考虑软件的成本。
再次软件变成了一个长生命周期的产品,软件的可维护性变得更加重要。互联网公司内部的软件往往是需要长期维护的,它需要随着业务的发展持续改进和优化,因此软件的内部质量显得尤为重要。
另外,企业软件市场也必须改变。首先更多的国企私有化,政府也在继续深化改革,企业客户也越来越意识到软件获得价值比软件功能更加重要,另外由于软件行业人才越来越不愿意开发没有技术含量的定制化软件,因此未来企业软件市场也会标准化、产品化和互联网化,目前企业市场兴起的SaaS正是这个趋势的最好的印证。
为什么需要敏捷软件开发
正因为当前传统软件开发已经根不上时代发展的要求,传统软件开发出来的软件无法让客户满意,给客户带来的价值很低,而客户需要花费很高的研发和使用成本,性价比实在是太低,它已经老态龙钟了。而敏捷软件开发的出现正好是解决传统软件开发存在的问题,它更能符合当前市场及客户对于软件开发的需求。因此目前成功的互联网企业都在使用精益和敏捷软件开发方法,连很多传统的软件企业都在谈敏捷转型。那么敏捷软件开发到底解决了什么问题呢?
首先敏捷软件开发纠正了软件开发的目标为交付价值。根据我的理解和经验,敏捷软件开发的核心在于目的是交付价值给软件使用者,它强调可以工作的软件比详尽的文档重要,意思就是可以帮助用户提高工作效率,帮助用户解决问题的可用的软件是软件开发的最重要的目标。它还强调了客户的参与比合同更重要,因此让客户更多的参与可以开发出更加符合客户需求的软件。
其次敏捷软件开发强调一种内建的质量保障体系来全方案保障软件质量。它让软件开发的交付变为更加小而频繁的交付,这样就可以更快地交付给用户使用,让用户尽早对软件给予反馈,保障了软件需求的正确性。它强调构建软件的自动化测试体系,频繁的运行自动化测试,尽早发现问题和解决问题,保障了代码质量,还有结对编程、持续重构和代码审查等检查和反馈等技术活动来保障质量。
最后敏捷软件开发鼓励开发者创新和创造,持续集成、持续交付和自动化运维等很多敏捷工程实践都是一些将开发者从繁琐的重复的工作中解脱出来,鼓励开发者使用或者开发自动化的开发、部署、测试等工具来代替人的工作,另外敏捷开发也对人更加重视,它强调沟通和协作的重要性,开发者在敏捷软件开发项目中往往具有更高的员工满意度。通过我们的实践证明,敏捷项目中的团队成员的协作能力、目标性、积极性和团队凝聚力都远远高于普通项目团队。