技术债务治理
场景
项目历经多次迭代,积累了大量技术债:Java/Kotlin 混编、多种网络库共存、架构不统一,严重影响开发效率。
方案
1. 债务盘点与分类
| 类型 | 示例 | 优先级 |
|---|---|---|
| 语言债务 | Java 代码未迁移 Kotlin | P2 |
| 架构债务 | 部分页面 MVC、部分 MVVM | P1 |
| 依赖债务 | 同时用 Volley + OkHttp | P1 |
| 构建债务 | 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 | 逐月递减 |
面试答题要点
- 技术债要分类分级,优先处理影响最大的
- 渐进式迁移,不要"大重写"
- Boy Scout Rule + 专项迭代结合
- 用量化指标衡量偿还进度