2011-08-17 66 views
4

我正在准备重写我们公司过去x年的软件,而不使用任何框架,惯例或常识。结果是一个非常庞大,功能强大的应用程序,它只是维护,添加和修复的一个噩梦。应用程序重写 - 使用哪种开发方法?

足以说,这是一种上应该是模块化,多功能漂亮的报告,非常方便地配置(包括界面和后端)等

只要有这方面的要求类固醇订货系统对于模块来说,其中大部分都与其他模块完全互连...

现在我的问题是 - 哪种方法最适合使用?

我倾向于创建宏伟计划,详细规范,设计数据库,为老客户编写迁移脚本的'保守'方法,然后如果一切顺利,坐下来开始按计划编写。

但是有人指出,要为整个应用程序(特别是如此复杂)创建一个详细和真实的计划是非常困难的,然后就这么做。有些人建议在我去的时候采用敏捷/迭代和增量方法,选择一个模块,为它设计数据库,编写测试,创建后端和前端,然后开始下一个模块...

这一切似乎要相当好,因为我们在编写时可能会有新的'想法',但不会因为将模块彼此集成而不是从头开始设计而更加痛苦?

如果任何人有任何类似的经验,请给我几个指示,指导我在一个正确的方向。

在此先感谢!

回答

2

这里有一些关于以前系统重写的指针,我已经介入了,但是我们需要更多关于您的技术选择,系统大小等方面的信息,以协助IMO的过程,设计和框架指导。

虽然旧的系统已经变形,但仍需要给予一定的尊重。它仍然有效(这很好 - 它给你时间来重建系统)。大多数情况下,我发现旧系统中的奇怪事情是由于某种原因而完成的。每当你遇到一些看似过分的东西时,你需要弄清楚这个理由(或基本原理)在完全抛弃之前是否仍然有效。

如果可能的话,避免大爆炸,尽量使用新系统 - 尝试分阶段策略,例如,看看你是否可以以并排模式进行生活,某些类别的产品是否会上线等等。另外,如果你可以在旧数据库中进行抢救/生活,你甚至可以拥有让驾驶员用户在任一系统上工作。

数据迁移至关重要。请记住,您的交付物不是迁移的数据库,它是一系列应该能够在任何时间点执行的脚本,并且如果您有大量数据,则需要优化脚本以尽可能快地运行,因为在从旧系统切换的过程中,业务将无法访问任一系统。为迁移数据制定一些测试计划,这些计划重复检查所有数据是否已迁移,金钱价值是否平衡等。

屏幕 - 根据您拥有多少用户,请记住,更改屏幕可能需要重新培训用户,这往往会促使你保持与应用程序类似的外观和感觉。

因为听起来应用程序是'内部'的,所以规范文档过于正式可能是矫枉过正的(你是否需要从任何人签名?),但是,记录旧系统的所有功能是一个好主意(因为旧系统上的任何文档都可能过时)。在新系统中,记录设计过程中决策的所有基本原理 - 将所有需求和设计文档,电子邮件和模型保存在源代码控制中,或者更好地保存在Sharepoint等文档管理系统中。

祝你好运!

+0

谢谢。一些非常好的指针。干杯! – RandomWhiteTrash 2011-08-18 09:50:28

2

敏捷是更好的方法。

使用面向对象的方法和设计模式来规划和实现你的模块。当你完成所有模块的所有任务时,优化整个系统结构将会更容易。

而且使用敏捷方法可以完成系统的优化,使用面向对象的方法和设计模式构建系统。

1

除非你已经做了几次这样的重构,如果你做的是正确的事情,那么计划会给你完成的中间点和重新考虑的点,迭代听起来好多了,好多了。即使你有,也有反对重头开始的有力论据。 Joel Spolsky有一个article on the idea of restarting from scratch。我认为我没有太多补充。

Martin Fowler在Refactoring上写了一本好书,非常值得关注这类工作。

+0

谢谢,有一些非常好的点。 – RandomWhiteTrash 2011-08-18 09:49:17

1

我同意拉斐尔奥西波夫。

使用面向对象的设计,因为它有助于保持一切都在自己的位置。

并使用敏捷方法,因为您会做小而快的实现。

而且还要求用户不断反馈。

1

敏捷对于小型和摆脱错误的早期增量,因为这是一个大型系统。

另外,别人说什么。我想指出一篇指导性文章here

相关问题