代码质量是我们程序开发中永远的一个痛,提高代码质量有不少种方式,强化管理是一种很常见的方式,这里我们就聊聊,所谓的管理,真的是提高代码质量最有效的方式吗?git
不少企业喜欢将系统的代码实现细节交由外包团队处理,声称只要产品设计的合理,只要架构合理,只要代码规范合理,代码的实现找谁实现都是同样的,因此干脆找外包团队来实现,这应该是不少非互联网公司,特别是传统企业的思路。可是,结果然的是这样吗?
经历过的人应该都是有很深的感触的,外包团队开发的代码和公司内部人员开发的代码,质量上是有很大的扯别的,且不论这是由于技术自己的差异,因人而异,因环境而异,因心态而异产生的代码就有很大的不一样。
软件是一个工程化的产品,那么工程化产品的特色是什么?程序员
你让一个没有融入感的人去作这些事情,会有一个好的结果吗?都说作菜要用心去作,其实编程也是须要用心去完成的工做,一个小的疏忽均可能会形成严重的后果,公司内部人都没法100%保证,外包团队能保证吗?
最后说明下,外包不会节省成本,从短时间来看,人员成本不会少,可能只是下降了必定的人员异动风险,长期来看,是一项很是不划算的投入。数据库
之前一直看到网上的段子,有的公司经过bug数量来判断一我的的绩效,例如:bug多的程序员,绩效评分低;测出bug多的测试工程师,绩效评分高。原本一直觉得是段子,后来接触的人多了,发现不少非IT专业的管理者都有这样的想法,虽然,在我我的和团队的强烈反对下没有执行,可是,这种思想对不少人来讲是根深蒂固。经过奖惩能有效提升代码的质量吗?
没有一个软件是完美的软件,全部的软件都是有BUG,“上次造人都有BUG,况且人制造软件呢?”大如微软这样几十年的老牌IT企业,仍是BAT这样的新兴互联网大厂,即便项目投入的人再多,再优秀,也是没法保证软件是没有BUG的。并且若有根据BUG来考评,有两个很是严重的问题:编程
这与鼓励创新、鼓励分享的IT技术显然是背道而驰的。微信
为了提升代码质量,团队都会定义代码审查的制度,如“工做经验不足**年的代码必须由主管审查”,“新入职员工的代码必须师傅审查”,“开发经理按期对核心代码进行审查”等,这些规定实际也是有必定的做用的,至少对统一新同事的代码规范,提高经验尚浅的开发人员能力是有做用的,可是由于更多的依赖于人工的审查,实施起来难度比较大,并且很难坚持。以前,咱们团队就坚持了一段时间这样的方式,SVN获取代码后对关注的人员的代码进行审查,可是单凭我的或者少数几我的的处理,时间一长,基本又回到原点。
其实我也一直有个疑问,真有结对编程的公司吗??开发工程师都是属于高强度工做,公司巴不得让程序员一我的写两我的的代码,怎么会两我的写一份代码。
也许咱们须要找到更加先进的方法来代替纯人工的方式。多线程
“一个优秀的程序员的效率,比100个差的程序员效率都要高。”相似的结论是IT界是很是流行的,虽然不一样的程序员在能力差100倍是有点夸张了,可是一个优秀的程序员,抵5个差的程序员这样的事情在咱们身边确定是常常发生的。
我一直都认为,程序开发是一个很是须要创造性的工做,即便是简单的增删改查,不一样的业务场景应该是不同的实现逻辑和技术手段,咱们在脑子里面思考问题所花费的经历真的比实现代码花费精力多得多。
优秀的程序员效率更高,效率的差距可能会出现好几倍的差距。并且,优秀的程序员,真的是BUG不多。一个简单的插入操做,优秀的程序员想到的是:如何确保事务的一致性、如何防止连续点击致使重复数据、多表的插入是否能够并行提高效率,而差的程序员只会考虑最理想的外部状况,其余的问题都是环境的问题或者操做人员的问题。难道这些,上线后出现问题了,最终就不是BUG了??最后仍是须要开发人员来解决。架构
接上一个话题,想获得优秀的程序员无非就两种方式,招聘或者培养。前文也有说过要创建良好的代码审查制度,虽然不是一个银弹,但仍是有必定做用的。其实,代码审查也能够看作是内部培养的一种方式。每一个公司除了业务上的不一样,咱们这里暂不讨论,每一个公司代码都有本身的一个风格,统一代码的风格,其实提高代码质量一个很好的方式,公司都会有本身的代码最佳实践,如业界常常流传的《阿里巴巴代码规范》《58同城数据库军规》等。因此,多花点时间让公司员工统一代码风格,能让总体代码质量有明显的提高。
同时,不少的BUG除了是技术上的问题,更可能是对于业务的不了解。有个长期稳定,而且能产生默契的团队,除了有更高的效率,也能减小BUG的数量。异步
前文屡次提到代码审查,代码审查这个方式显然是能提高代码质量的,可是涉及的审查覆盖率的问题,没法发挥所有做用,若是有个自动化的方式进行代码审查,那么应该就是一个相对比较完善的解决方案了。
如今的代码管理都是经过CVS工具进行管理的,基本都是git或者svn,经过代码管理工具进行自动化的代码审查就是一个很是好的方式。用户提交代码的时候,强制使用静态的代码审查工具(常见如findbug,checkstyled等)进行审查,没法经过审查的,代码是没法提交的。虽然代码审查工具现阶段还不是很是智能,可是基础的代码规范,空指针预测等检测仍是比较完善的,能很大程度上避免重复的人工审查工做。
move fast的审查方式是不少互联网公司如今执行的一种人工审查方式,代码的commit、push必须有两我的执行,push的操做者必须审查commit的代码,这样基本能保证人工审查的覆盖率,对提高代码的质量有很大帮助。
这里提到人工的方式,那么人工的方式咱们应该注意哪些呢?静态代码扫描工具能帮忙解决不少基础的代码问题,咱们更多应该关注哪些静态代码检查工具没法找到的问题:svn
这些问题都是进行测试时都很难发现的问题,可是在生产环境却很容易暴露的问题。工具
代码质量的提高是做为开发人员,特别是开发管理人员很是关注的问题,可是,要达到很是好的效果,倒是没有银弹的。
全部的管理制度、管理模式等,对于创造性的工做职位实际是不会有太大的帮助,“优秀的人”才是提高代码质量最好的武器,自动化的方式结合优秀的人,也许是你想要的最佳途径。
微信号:itmifen