跳到主要内容

技术债务治理

场景

项目历经多次迭代,积累了大量技术债:Java/Kotlin 混编、多种网络库共存、架构不统一,严重影响开发效率。

方案

1. 债务盘点与分类

类型示例优先级
语言债务Java 代码未迁移 KotlinP2
架构债务部分页面 MVC、部分 MVVMP1
依赖债务同时用 Volley + OkHttpP1
构建债务kapt 未迁 KSP、Gradle 版本旧P2
测试债务核心模块无单元测试P0

2. 渐进式迁移策略

// 不要一次性重写,而是"新代码用新规范,旧代码逐步迁移"

// 1. 架构统一:新页面强制 MVVM,旧页面在修 bug 时顺带迁移
// 2. 语言统一:新文件必须 Kotlin,修改旧 Java 文件时转 Kotlin
// 3. 依赖统一:封装统一的 NetworkClient,内部桥接到 OkHttp
// 旧代码调 NetworkClient,逐步替换 Volley 调用

interface NetworkClient {
suspend fun <T> get(url: String, type: Type): T
suspend fun <T> post(url: String, body: Any, type: Type): T
}

// 底层统一走 OkHttp + Retrofit
class OkHttpNetworkClient : NetworkClient { /* ... */ }

3. 偿还策略

策略说明
Boy Scout Rule每次修改文件时顺手改进一点
专项迭代每个 Sprint 拿 20% 时间偿还技术债
新功能带迁移新需求涉及旧模块时一起重构
自动化检测CI 中用 Lint 规则检测旧模式

4. 衡量指标

指标工具目标
Kotlin 占比Cloc / SonarQube> 90%
测试覆盖率Jacoco核心模块 > 60%
编译时间--scan增量编译 < 30s
Lint Warning 数lintDebug逐月递减

面试答题要点

  1. 技术债要分类分级,优先处理影响最大的
  2. 渐进式迁移,不要"大重写"
  3. Boy Scout Rule + 专项迭代结合
  4. 用量化指标衡量偿还进度

相关链接