代码中的定时炸弹

February 17, 2013 · One minute read

代码里会有很多定时炸弹。只要代码不改动,这些炸弹就很难被发现,而一般的测试也似乎没什么问题。可是只要代码需要改动,就要特别当心了,一不小心就会触动他们。也许最好的策略是不去动他们,可是天知道哪天运行的好好的,就会出现这样或那样奇怪的问题。重复代码和循环依赖是我经常可以看到的。

如果团队里来了新的成员,或者现有的开发人员本身经验不足,为了应对紧张的进度,他们往往会选择复制粘贴一些现有的代码来实现某些功能。这种短视的选择会产出相当多的重复代码。任何对该代码的改动,都会面临多重修复,而单元测试也无法预防这种能够情况。有些工具可以帮忙扫描重复代码,可是对于已经部分修改过的代码却无能为力。

循环依赖是重构者的大敌。比如说我想把一个Web应用的核心抽出来做分布式应用,来针对不同服务器角色进行优化。如果代码依赖是个有向无环图,那么总能够从最底层的节点进行抽取。可如果代码之间引用过于复杂,出现环的时候,就必须使用各种设计模式来打破这种循环,要是还没有很好地单元测试保护,那么重构的代价就大很多了。