微信号:infoqchina

介绍:有内容的技术社区媒体

重构遗留程序的一次案例学习

2013-12-05 17:26 InfoQ

遗留代码经常是腐臭的,每个优秀的开发者都想把它重构。而进行重构的一个理想的先决条件是,它应该包含一组单元测试用例,以避免产生回归缺陷。但是为遗留代码编写单元测试可不是件容易的事,因为它经常是一团糟。要想为遗留代码编写有效的单元测试,你大概得先把它重构一下。但要重构它,你又需要单元测试来确保你没有破坏任何功能。这种状况相当于要回答是先有鸡还是先有蛋。这篇文章通过分享一个我曾参与过的真实案例,描述了一种可以安全地重构遗留代码的方法。


问题描述


在这篇文章中,我将用一个真实案例来描述测试与重构遗留系统的有效实践。这个例子的代码由Java编写,不过这个实践对其它语言也是适用的。我将原始场景稍做了些改动以免误伤无辜,并稍做简化以便让它更容易被理解。这篇文章所介绍的实践帮助我重构了近期我所参与的一个遗留系统。


这篇文章并不打算介绍单元测试与重构的基本技巧。你可以通过阅读相关书籍以学习该主题的更多内容,如Martin Fowler的《重构:改善既有代码的设计》及Joshua Kerievsky的《重构与模式》。相对而言,这篇文章的内容将描述一些真实场景中的复杂性,我也希望它能够为解决这些复杂性提供一些有用的实践。


在这个案例中我将描述一个虚构的资源管理系统,其中资源指的是可指派给其任务的某个人。可以为某个资源指派一个HR票据(ticket)或者IT票据,也可以为某个资源指派一个HR请求或IT请求。资源经理可以记录某个资源处理某项任务的预计时间,而资源本身可以记录他们在某个票据或请求上工作的实际时间。


更多精彩内容,请阅读原文。


***********************************

本文来自InfoQ微信公众账号:infoqchina

1、回复“今日新闻”,查看今天更新的新闻;

2、回复“今日英文”,查看今天英文站的更新;

3、回复“文章 +关键词”,搜索关键词相关内容;

4、回复“QCon”,了解QCon大会相关信息;

5、回复“活动”,了解最近InfoQ组织的线下沙龙;

6、回复“架构师”,获取《架构师》下载地址;

7、回复“投稿”,了解投稿和加入编辑团队的流程。

***********************************

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 马云亚布力论坛演讲:中国需要几十、几百个BAT 信息检索(一)- 入门篇 改变自己的9个细节 年满18的大孩子该如何过儿童节? R Tricks: 如何处理Gaps & Islands问题?