关键词:遗留代码,代码修改,测试
概述
从其他人或者其他版本获得的代码。
特点
架构设计差
代码风格不一致
文档少和模糊
非常有价值,成功代码
修改遗留代码原因
新功能
Bug
重构
优化
修改
Risky change 修改风险
- What changes do we have to make? 哪些是必须修改的内容
- How will we know that we’ve done them correctly? 修改正确吗
- How will we know that we haven’t broken anything? 修改无副作用吗
加快理解代码实现
- Notes/Sketching 笔记和草图
- Listing markup 搜索所有关键字
- Scratch refactoring 重构
- Delete unused code 删除次要代码
如何防止破坏代码
- 隔离新代码
- 新生方法 (sprout method)
- 包裹方法(wrap method)
Sensing & separatin 感知和隔离
修改耗时的原因:
- 理解设计和代码
- 修改副作用检查
- 编译时间
- 无单元测试
- 测试反馈慢(feedback slow)
修改正确吗
- Hyperaware editing 小心翼翼修改
- Single-goal editing 修改高度内聚,一次只改一个功能
- Preserve signatures 签名修改
- Lean on the compiler 使用编译器检查修改
工具和流程
流程
- Mindset/Books 思想,书
- Code 一起编码
- TDD/BDD 单元测试
- Code Coverage 代码覆盖率
- CI 代码集成
- Static Analysis 代码静态分析
- Code Review 代码评审
工具
Lexical analysis
命名, 代码风格
Flow/path analysis
空指针,无用代码
C++ - Covtool, gcov
C++ - CppUTest. so mycoworkers don‘t break my codes. 防止同事误操作
Dependency analysis
架构
C++- (Sp)Lint
Verification
C++- Jenkins (Shell/Make)
单元测试,保持代码整洁
? test individual units 测试粒度
? isolate each part 隔离每个单元
? show that the individual parts are correct 正确性验证
? regression testing 回归测试
? sort of living documentation 动态文档
? executed within a framework 自动化框架
It‘s an hard work but (usually) not impossible !
参考
Working.Effectively.with.Legacy.Code