你将如何开始改进一个非常糟糕的系统?
在你推荐创建单元测试和重构之前,让我解释一下我的意思。我可以使用这些技术,但在这种情况下那将毫无意义。
实际上,这个系统是如此的破碎,它没有做它需要做的事情。
例如,系统应该计算它发送了多少条消息。它主要工作,但在某些情况下它“忘记”增加消息计数器的值。问题是,许多其他模块都有自己的变通方法建立在这个计数器上,如果我更正计数器,整个系统会变得比现在更糟。解决方案可能是修改所有模块并删除它们自己的更正,但有 150 多个模块需要如此多的协调,我负担不起。
更糟糕的是,有些问题的解决方法不在系统本身,而在人们的脑海中。例如,系统不能在一个消息组中表示超过四个相关消息。有些服务需要将五条消息组合在一起。会计部门知道这个限制,每次他们计算这些服务的消息时,他们都会计算消息组并将其乘以 5/4 以获得正确的消息数量。绝对没有关于这些偏差的文档,也没有人知道现在系统中有多少这样的东西。
那么你将如何着手改进这个系统呢?你会遵循什么策略?
一些额外的事情:我是一个单人军队,因此雇佣足够多的人并重新设计/重构系统是不可接受的答案。在几周或几个月后,我真的应该表现出一些明显的进步,所以在几年内自己进行重构也不是一个选择。
一些技术细节:该系统是用 Java 和 PHP 编写的,但我认为这并不重要。它背后有两个数据库,一个 Oracle 和一个 PostgreSQL。除了之前提到的代码本身的缺陷之外,它的编写和文档记录也很糟糕。
附加信息:
计数器问题不是同步问题。counter++ 语句被添加到某些模块中,而不是添加到其他一些模块中。一个快速而肮脏的解决方法是将它们添加到它们丢失的地方。长期的解决方案是让它成为需要它的模块的一个方面,这样以后就不可能忘记它。我在修复这样的事情上没有任何问题,但如果我做出这个改变,我会打破 10 多个其他模块。
更新:
我接受了 Greg D 的回答。即使我更喜欢亚当·贝莱尔的作品,也不知道什么是最理想的。谢谢大家的回答。