怎么提高代码质量?-来自Google的研发经验总结

发表于:2019-03-14来源:稀土掘金作者:稀土掘金点击数: 标签:代码质量
你的团队有没有过这样的经历:开发效率低,招了很多人,天天加班,出活却不多,线上bug频发,领导发飙,中层束手无策,工程师抱怨不断,查找bug困难。其实这些都是代码质量差惹

你的团队有没有过这样的经历:开发效率低,招了很多人,天天加班,出活却不多,线上bug频发,领导发飙,中层束手无策,工程师抱怨不断,查找bug困难。其实这些都是代码质量差惹的祸。代码质量是研发质量管理的根本,它决定了整个开发团队的开发效率,项目质量,其他监控,告警,日志等手段都只能是事后补偿。本文就如何保证代码质量总结了一些经验和方法,供大家参考。
代码质量本身并没有一个特别明确的量化指标,而且根据公司发展的不同阶段,团队规模的大小不同,项目性质的不同等,对代码质量的要求也不尽相同.不过如果项目中出现以下情况时候,就说明代码质量要值得重视了.
添加或修改一个简单功能时,涉及要修改的地方特别多,而且很分散;
代码不可复用:相似的功能无法复用代码,要重新开发;
线上bug频发,排错困难,修复难度大,时间长;
有很多奇怪的代码,代码读不懂,新人无法很快了解代码;
代码中坑特别多,不敢大动,一不小心就踩坑;
以上这些问题,基本上都是代码质量不高导致的,包括代码无注释,无文档,命名差,项目层次结构差,调用关系混乱,到处hardcode,临时解决方案等等。怎么才能时刻保证代码的高质量,避免以上问题发生?当然团队的技术素质很重要,除此之外,还有一些方法可循的.
1. 吹毛求疵般地执行编码规范
严格执行代码编写规范,可以使一个项目乃至一个公司的代码具有完全统一的风格,就像同一个人编写的一样,而且命名良好的变量,函数,类和注释,也无疑可以提高代码的可读性.具体落实到执行层面,可以参照Google的编码规范或者java官方的编码规范,网上可以找到,关键是要严格遵守,并且在code review时,严格要求,没有按照规范的一定要指出并且要求修改.
实际情况往往是虽然大家都知道优秀的代码规范是怎样的,但在具体写代码的过程中,却执行的差强人意,很多情况是认识上不够重视,觉得一个变量或者函数的命名成哪样关系不大,所以不够推敲,注释很多也都不写,code review的时候大家也都事不关己心态,或者觉得没必要太抠细节,导致慢慢的整个code base变得越来越差.所以这里还是要强调一下,细节决定成败,提高团队对代码规范的认同及其严格的执行是关键.
2. 编写高质量的单元测试
单元测试是最容易执行,且对提高代码质量见效最快的方法之一还。但还是有很多公司对单元测试重视不够,包括一些大的互联网公司,不写或者随便写写。
有些工程师觉得有测试团队就够了,再写单元测试就是浪费时间。其实测试团队的测试和单元测试是在不同层面上的,测试团队的测试一般是黑盒测试,系统层面的集成测试,对于复杂系统来说,组合爆炸,测试团队无法穷举所有的测试用例。单元测试是代码层面的测试,一般是针对类的测试。既然无法从系统的整体上保证100%符合我们的预期,那单元测试起码能保证我们代码在细粒度上运行符合预期。
有些工程师认为开发任务重没时间写。这个还是没有足够重视单元测试,觉得是可有可无的部分,才会有这样的想法。写好单元测试,节省很多解决线上bug的时间,开发时间反而更充足了。
还有很多工程师虽然在写单元测试,但只对正常流程做测试。代码中的bug多数是写代码时异常情况没有考虑全面导致的,正常流程一般不会出问题。单元测试的作用就在于测试各种异常情况下代码的运行是否符合预期,所以只对正常流程测试无法发挥单元测试真正的作用。
一般情况下,单元测试代码量要比要测试的代码多,一般是1-2倍的样子,写单元测试本身没有太多的技术挑战,主要看工程师逻辑是否缜密,能够考虑各种异常情况,写起来比较枯燥,所以写高质量的单元测试的一方面要靠工程师的耐心执行,另一方面要靠团队的严格要求。当然这些都是建立在对单元测试重要性的认同之上。
3. 不流于形式的Code Review
如果说单元测试很多工程师不怎么重视,那code review就是不怎么接受.跟很多大型互联网公司的人聊过,对code review都不怎么认可,大部分反应都是,这玩意不可能很好的执行,浪费时间,是的,code review做的再流畅,也是要花时间的,关键在于我们是愿意花2天写代码花5天修bug,还是愿意花3天写代码花半天修bug.
其实,code review的好处不仅仅是能够大大提高代码质量,减少代码bug,你想想如果我们没有code review,平时写的代码“偷偷”就commit了,难免有人不自律,有了code review,直播代码,曝光dirty code,大家就会更认真些.其次来讲,code review也是一种有效技术传帮带的途径,每次code review都是一次案例的剖析,可以帮助初级的工程师培养编码规范,提高编码质量,设计能力甚至于架构能力,反过来,review别人写的好的代码,对自己也是一种学习和提高.

原文转自:https://juejin.im/post/5c88ac2b5188257dda56c87e