所有定制的遗留软件都需要改变,或者说我们的用户。有时他们想要添加一两个功能,以及更改一些代码、添加控件或其他一些小的升级任务所必需的所有功能。有时他们想放弃他们容易出错的 VB5 桌面解决方案,并将整个事情重写为一个丰富的 Web 2.0 ASP.NET MVC 应用程序。然而,更常见的情况是,对遗留功能的更改范围介于这两个极端之间。
您使用什么经验法则来决定是升级现有应用程序还是从头开始?
所有定制的遗留软件都需要改变,或者说我们的用户。有时他们想要添加一两个功能,以及更改一些代码、添加控件或其他一些小的升级任务所必需的所有功能。有时他们想放弃他们容易出错的 VB5 桌面解决方案,并将整个事情重写为一个丰富的 Web 2.0 ASP.NET MVC 应用程序。然而,更常见的情况是,对遗留功能的更改范围介于这两个极端之间。
您使用什么经验法则来决定是升级现有应用程序还是从头开始?
这听起来很陈词滥调,但是,进行标准的成本/收益分析:
考虑重写的资源成本(实际成本 - 意味着将您的估计乘以 3-5 倍)。这包括可能需要就您选择的新架构/工具培训其他开发人员,以及重新培训用户的成本。
从预计在未来 N 个月内难以实施的变更中获取资源成本(根据您的经验)——仅计算边际成本(意思是,如果 VB5 应用程序的变更成本为 1 周,并且相同的成本在丰富的 Web 2.0 ASP.NET MVC 应用程序中实现的功能是 3 天,您算作节省了 2 天)。加上 Web 2.0 应用程序将为用户提供 VB5 应用程序根本无法提供的新功能的预期收益。
如果前者小于后者,请重新编写。
我没有方便的规则来决定这一点,但我建议阅读你不应该做的事情,第一部分,其中 Joel Spolsky 写了关于公司可能犯的最严重的战略错误。
也就是说,我们为客户完全重写了一个应用程序,这是正确的做法,因为它现在比以前更可靠、更快、具有更多功能并且更漂亮。从长远来看,扩展旧的应用程序(这些年来获得了许多功能,只是以某种方式入侵)会更加昂贵,因为它是一个活的应用程序,每年获得一两次额外的功能。
一般来说,我会说,如果添加该功能所需的资源(时间、金钱、开发人员等)超过了重新编写所需的资源,那么就重新编写。
您需要添加一些偏差,例如重新编写应用程序也可能会导致将来降低支持成本,因为许多错误将作为实现的一部分被删除,但是在编写新应用程序时也会出现问题(培训,进入成品的小错误,随机调试消息框或类似的垃圾)。
我不惜一切代价避免重写——有时它们是必要的,但它们总是比最初预期的要麻烦得多,而且它们往往会重新引入早已在旧版本中被压制的错误。
如果业务要求您添加当前平台不支持的功能,除了重写之外似乎没有其他选择,但请考虑您的其他选择——您可以通过其他方式添加功能吗?Intranet 上的报告或小型 Web 部件?自动电子邮件?某种与数据库背道而驰的 Web 服务?您可以通过多种方式添加功能,而无需完全放弃现有功能并接受所涉及的所有风险。
从业务的角度来看,这是成本与收益。如果您要添加单个功能,那就是开发时间与功能的好处。然而,如果他们想要一个需要重写的新功能,8 小时的功能突然变成了 800 小时的功能(当你估计重写的开发时间时要现实——“我会在下周做”不是' t 通常是现实的),并且业务可能不再能够证明开发时间的合理性。确保成本与收益相符。