1.什么是敏捷开发和技术债务
敏捷开发是一种从20世纪90年代开始逐渐引起广泛关注的一些新型软件开发方法。在国内也是近10年来才被积极应用到生产环境中,目标是提高开发效率和响应能力,以应对快速变化的需求。在当今急速发展的互联网环境下有着极高的实用性。
但随着版本的快速迭代交付,也会出现一些常规软件开发过程中未完全暴露的问题——技术债务。
所谓技术债务是指对不适合做法的补救成本的总和。通俗的讲就是为了快速响应需求而引入的非最优或临时性的解决方案,在之后的开发过程中,不得不承担因此所产生的副作用。
2.技术债务的主要外在表现
技术债务的累积会有一些较明显的外在表现,主要体现在:
● 系统加载的时间越来越长;
● 某个模块缺陷率不断增加;
● 相同的问题在不同的模块或者组件中出现;
● 新的功能数量增加,引发新的 bug数量持续增加;
● 修复 bug的时间越来越长;
● 团队对某个模块或者组件抱怨很难理解或者很难测试;
● 某个模块的源代码频繁被修改。
结果经常会给产品组同学和其它管理人员一种很奇怪的感受——新功能开发完了而开发人员却更忙了,特别是在要求高执行力的团队中更容易出现,这段时间内听到最多的词就是“重构”、“统一”、“调整”、“优化”等等。
3.技术债务的几种类型
▲关于技术债务的类型和可能会导致的影响
其中,技术鸿沟(Gap)是指最初的技术方案可能在当时是正确的,但是随着时间、市场、技术等不断更进,这个技术决定已经出现了很多的问题。
代码异味包括:
● 长方法:一个非常长的方法、函数或者过程。
● 巨类:一个非常庞大的类
● 太多的参数:函数或者过程冗长的参数列表使得代码可读性和质量非常差
● 特性依恋:一个类过度的使用另一个类的方法
● 亲密关系: 一个类依赖另一个类的实现细节
● 拒绝继承:子类以一种“拒绝”的态度,覆盖基类中的方法,换句话说就是,子类不想继承父类中的方法。
● 冗余类 : 代码重复或功能相似,或者功能太少的类。
● 人为的复杂:在简单设计已经满足需求的时候,强迫使用极度复杂的设计模式。
● 超长标识符:未按统一命名规则命名导致歧义
● 超短标识符:变量或方法无法通过名称来理解其作用
架构债务是最值得注意的,其带来的最严重后果就是导致某个模块或整个系统无法正常支撑当前业务运行的需要,不得不推倒重做。当然,这种后果并非难以接受。
4.合理偿还技术债务的几种方式
关于合理偿还技术债务有一些常规方法:
(1) 把技术债务作为技术需求对待,在保证正常交付的情况下分批偿还。
(2) 平衡技术债务的影响和快速交付的要求
(3) 技术鸿沟和架构债务,越晚修复成本越高,在产品规划过程中应积极做好需求沟通,在特定情况下可考虑通过非功能性迭代完成。
(4) 代码复杂性、编码风格混乱等可以通过代码分析工具辅助解决。
(5) 相关联开发组成员应积极沟通,必要情况下以正式文件形式通知各成员。
其实,技术债务和人们生活中遇到的资金债务有些类似,很难避免,除非你的需求变化慢、资金利用率低。
合理、优雅地处理债务问题,甚至债务投资,也是提高生产力、凝聚团队向心力的一种途径。
作者简介:周鹏,英文名Ideson,校导网Android Team Leader,在嵌入式应用、服务端、移动应用开发领域有着丰富的开发和项目管理经验,曾任北京某创业公司技术总监。