在我10多年的软件开发中,经历过超过200人的软件开发团队,也有过两三个人开发的小团队,但无论团队的大小,都是采用一个很简单的软件开发方法:就是把项目切分成模块,然后每个人开发一块,最后集合起来,调试完成,再经过测试,交给客户使用,就算项目完成了。
在这期间,团队成员之间没有什么交集,相互的代码也没有查看或者了解一下。因此,当某一个成员离职或者病休时,就会带来很大的问题。因为其它人员都对他的工作不了解,不能接手他的工作,导致再开发下一个项目时,就会带来高涨的成本,项目大大地增加延长开发的时间。
另外,由于成员相互之间没有了解代码,每个人的编写代码的风格也差异比较大,导致代码比较难重用。这种团队开发在目前看来,还在很多公司是存在的。那么怎么样才可以改变这种现状?也就是说怎么样才叫真正的软件团队开发呢?
由于软件开发从个人开发变成团队开发方式,在中国来说,也近来10多年的事情。在90年代都是个人开发就可以成功了,比如像金山软件的求伯君,就可单兵一个,就可以完成DOS下面的WPS开发。
放在今天这样的环境里,软件的规模已经非常大,一个人完成的软件,只有在手机领域还有市场,在其它领域已经不太可能了。
因此,必须建立团队开发为目标。
为了建立团队的开发,就需要制定各种标准。比如编码规范,有了这个标准之后,就可以让所有团队成员编写出同一样规范的代码,可以减少相互交流的成本,同时也提高了代码的质量。同时也可以让成员看不出来谁写的代码,减少心理上抗拒。但是,是否制定了标准之后,就可以万事大吉了呢?其实不然,由于每个开发人员都是人,是人就有着出错,有着自己个性表现,以及个人的习惯。因而有了标准之后,就需要想着怎么样实践了,以及让标准成为行为准则。
在以往的团队,或者说一般的团队里,都是制订标准之后,就发送给大家,就认为完事了。但在我看来,制订标准只是软件团队开发的第一步,要落实标准还需要很多的工作需要做。
那么在软件开发团队里怎么样把这些标准落地,接上地气呢?关键的一环是代码评审。从我经历过的团队,无论大小都没有去实践这个环节,但从国外的软件开发团队来看,没有这个环节的,基本不存在。为什么这个代码评审这么重要呢?
首先代码编写出来之后,需要团队查看之后,才可以认定这种代码是否符合标准,不是让开发人员认为符合了,就是符合了。
其次,代码评审是团队开发的体现。如果每个人开发完成的代码,就认为完成了,其实这份代码,还是个人之作,不是团队共同开发的,所以代码的质量可能是低下的,出错是难避免的,设计的方法是一般的。如果一个团队把个人开发的代码进行评审之后,并作出修改,那么才可以说这份代码是团队开发的软件。
再次,代码评审是经验总结和相互学习提高团队成员的关键。如果这份代码是老员工开发出来的,意味着代码是优秀的,那么新来的成员就可以学习了,从这种例子里学习到最好的代码形式。如果这份代码是新来员工开发的,那么出错,或者不符合规范的情况,就会发生,这时经过团队成员里优秀开发人员的指出,让新员工可以认识到错误,就可以快速地改正,从而快速地向高水平的开发人员看齐。
最后,代码评审是提高软件质量,降低开发成本的方法。因为通过一个团队的众多眼睛和多个大脑来看查看代码之后,代码质量都会显著地提高,同时把自己开发没有发现的错误,都会在其它人的眼睛里一眼就看出来了。这有点像考试时,自己怎么样检查都不会发现有错误,在另外一个人里一查看就看出来了。降低开发成本是关键,由于不断地通过代码评审,意味着这份代码不再属于开发人员一个人了,而属于整个团队了,大家都对代码了解,从而都可以对代码进行开发,避免开发人员离职,或者病假带来的时间和金钱上损失。另外,在今天这种快速迭代开发的环境之下,保持软件稳定发布,只能通过不断评审代码来确认软件不出大BUG了。
总之,一个真正的软件团队的开发需要是这样:团队评审需求、团队制订标准、分别编写代码、团队评审代码。如果缺少最后这个评审代码,这样的开发不叫做团队开发,还是跟个人开发是一样的。