遗留代码

关键词:遗留代码,代码修改,测试


概述

遗留代码

从其他人或者其他版本获得的代码。

特点

架构设计差

代码风格不一致

文档少和模糊

非常有价值,成功代码

修改遗留代码原因

新功能

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



你可能感兴趣的:(软件,测试)