现在的软件开发是在遍地敏捷,人人讲唯快不破的时代,哪有人有时间思考代码质量,设计的质量? 哪个又不是从一堆代码中杀出血路来实现另一个功能?一个产品都存活不了几年,何必考虑什么可维护性?
我们追求进度的时候,总是要牺牲些东西,或是破坏了一些东西等着后面补。这就是技术债! 管理不好,债台高筑,即使不破产,也是要拆东墙,补西墙的玩平衡。现实是残酷的,但不影响我们抬头看看这个世界。
技术债务(Technical Debt)这个词,我最早是从InfoQ关于Uber的一个访谈中了解到的,正好也在思考持续重构的问题,发现它是推动持续重构的有效工具。所以花了点时间做些学习,在这里做个分享,主要来自这篇文章的学习,有时间的直接看原文就好了:
Technical Debt in Firefox and Chromium
关于技术债务,并不是新名词,就不考据它的历史了。其实很多团队都有类似的工具,比如:问题记录,优化点,TODO List等等。但是通常是比较松散,大杂烩式的,不系统。
我总结之前没有管理好有两点:
对策就不说了,这是一个管理问题,见仁见智。如果没有意识,或者正如开头说的,如果觉得没有必要的话,确实不需要做什么,因为大家都差不多。
如果想要做,我们如何定义和评估技术债务呢? 向领先者学习!FireFox和Chromium都算是比较大的开源项目了,分别是280万行和470万行的规模。看看他们的总结就是很好的学习了。核心是以量化的方式评价和管理代码,而且工具都开源了。(其实以发现&记录的方式也很好,这里只是作为参考的方式。)
主要来自How maintainable is the Firefox codebase?。要优化,就要先定义问题和评价的标准。
以下代码质量评价的维度:
代码静态分析工具
LOC, 圈复杂度,以及依赖关系这些都容易通过一个静态分析工具来获得。
比如两者的代码量变化:
两者的圈复杂度:
网络化处理 (Network Multiplication)
通过网络化处理,可以得出变更成本,一阶密度,核心代码大小的数据。
下图为Firefox&Chromium变更成本的比较:
下图则是Core size的对比:
更详细的内容,参考:Technical Debt in Firefox and Chromium
完整的工具在Github上:Tools
其大致的处理流程如下图:
技术债务的定义只是参考,更重要的还是意识和执行。有了基本概念和意愿,执行的工具就很灵活,完全一个技术管理的行为。
转载请注明出处: http://blog.csdn.net/horkychen
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/horkychen/article/details/46747951