10.重构-重构、复用与现实(William Opdyke)

1. 重构

1.1 问题

  • 生产进度的压力:
    • 重写整个程序(理想情况);
    • 复制、修改现有系统;
  • 不知道如何重构;
  • 如果利益是长远的,为什么现在做呢?可能收获利益之时,就已经不在职位上了;
  • 代码重构是额外工作,老板看不到付出;
  • 重构可能破坏现有程序;

1.2 回答

  • 重构可以带来短期利益和长期利益。
  • 已有重构工具和技术,可快速,无痛苦完成;
  • 重构虽然花费精力和时间开销,当可在其他阶段减小相应开销;
  • 当重构成为软件开发规则的一部分时,人们就觉得它必不可少;

2. 做法

  • 了解如何重构、在哪儿重构;
  • 合理利用重构工具;
  • 遵守重构规则;
  • 团队保持共识;

3. 安全性

安全性是令人关系的议题,特别是大型系统。许多应用程序由于财政、法律和道德伦理的压力,需要不间断、可靠、不出错的提供服务。

3.1 如何进行安全重构

  • 选择:
    • 相信编码功力;
    • 相信编译器能捕捉错误;
    • 相信测试能测出错误;
    • 相信代码复审能捕捉错误;
  • 局限性:
    • 人人都可能犯错;
    • 一些微妙错误编译器无法捕捉;
    • 测试不可能覆盖所有情况,测出所有问题;
    • 代码复审很可能没有,或出错,或没找到错误;
  • 方案:
    • 定义并快速实现一个重构工具的原型,用以检查某项重构是否可以安全地施加于程序上。若可能,则重构。这避免了大量可能因为人为错误引入的 bug。

4. 复用

4.1 问题(类似于重构)

  • 不知道“该复用什么”或“如何复用”;
  • 对采用复用方法缺乏动力,除非有短期利益;
  • 开销、学习曲线和探索成本;
  • 项目压力;

4.2 回答(原则)

  • 对员工进行培训;
  • 尽量获取短期利益;
  • 减少开销;
  • 安全引入新技术;
    ps:这些不仅仅可用于重构和软件复用,还可用于技术传播。

参考

  • 《重构-改善既有代码的设计》(第13章)
坚持原创技术分享,您的支持将鼓励我继续创作!