【发布时间】:2012-01-26 10:47:47
【问题描述】:
我有一个非常陈旧且编写不佳的 Rails 应用程序。大约有 9000 行代码和零测试。大部分代码都在控制器中,更糟糕的是,还有大量的外部 API 调用、对随机脚本的系统调用等。
也没有开发环境,一切都设置为针对生产数据库。嗯,不仅仅是一个数据库,大约有 10 个不同的数据库,因为该应用程序是一种大型网站的管理后端。
我的第一个想法是至少在我将要处理的部分上获得一些不错的测试覆盖率,但是除了在生产服务器上之外,我无法让该东西在其他任何地方工作。
还有大量旧宝石和已弃用的警告,但在进行测试之前,我什至无法考虑升级宝石。完全重写不是一种选择,我将不得不尽快添加/更改内容。
我不太确定如何测试这样的应用程序,因为有太多东西可能会出错。我真正想做的是编写一些集成测试然后开始重构,但我不能在生产环境中这样做。
使用一堆 stub 和 mock 编写单元测试似乎没有多大帮助,因为我要处理的代码基本上必须从头开始重写。
我可以采取哪些步骤来在我的开发机器上复制一个巨大的复杂生产环境,这样我就可以单独做一些事情了?
编辑:关于该应用的一些有趣的事实。当我第一次尝试运行它时,它一直冻结而没有任何错误消息......直到大约半小时后我发现,连接到数据库的超时(不可用)设置为90 分钟!
【问题讨论】:
-
找一个创造这个的人,把他的家人当作人质,让他帮助你(或者至少解释一下这个东西是如何工作的)。
-
您可以拍摄生产机器的快照并在实验室将其拆开。
标签: ruby-on-rails ruby testing refactoring legacy