Asp.net 重构现有系统的可测试性

Asp.net 重构现有系统的可测试性,asp.net,refactoring,automated-tests,Asp.net,Refactoring,Automated Tests,我加入了一个开发产品的团队。此产品已存在约5年,并使用ASP.NET WebForms。随着时间的推移,它最初的架构已经褪色,在整个解决方案中,事情变得相对杂乱无章。这一点也不可怕,但肯定需要一些工作;你们都知道我的意思 自从6个月前加入项目团队以来,我一直在进行一些重构。其中一些重构是简单的,提取方法,向上拉方法,等等。一些重构更具结构性。后面的更改让我感到紧张,因为没有一套完整的单元测试来伴随每个组件 整个团队都支持通过重构进行结构更改的需求,但我们的项目经理表示,我们没有足够的测试来进行重

我加入了一个开发产品的团队。此产品已存在约5年,并使用ASP.NET WebForms。随着时间的推移,它最初的架构已经褪色,在整个解决方案中,事情变得相对杂乱无章。这一点也不可怕,但肯定需要一些工作;你们都知道我的意思

自从6个月前加入项目团队以来,我一直在进行一些重构。其中一些重构是简单的,提取方法,向上拉方法,等等。一些重构更具结构性。后面的更改让我感到紧张,因为没有一套完整的单元测试来伴随每个组件

整个团队都支持通过重构进行结构更改的需求,但我们的项目经理表示,我们没有足够的测试来进行重构,因为我们没有信心在系统中引入回归错误。他希望我们先编写更多的测试(针对现有架构),然后执行重构。我的观点是,系统的类结构耦合太紧密,无法编写足够的测试,在执行重构时使用更为测试驱动的方法可能更好。我的意思不是针对现有组件编写测试,而是针对特定功能需求编写测试,然后重构现有代码以满足这些需求。这将允许我们编写在系统中可能具有更长寿命的测试,而不是编写一堆“一次性”测试


有没有人有过最佳行动方案的经验?我有自己的想法,但想听听社区的意见。

你能同时考虑一下吗?我的意思是使用TDD重新编写要重构的部分,但保留现有的代码库。然后,当您的新测试满足PM的需求时,逐步淘汰现有代码?

PM的问题是有效的-确保在进行任何重大重构之前对您的系统进行测试

我强烈建议你买一本MichaelFeather的书(所谓“遗留代码”,Feather指的是任何没有被单元测试充分覆盖的系统)。这篇文章中充满了关于如何以一种安全的方式分解您提到的耦合和依赖关系的好主意,而不会冒引入回归bug的风险


祝重构计划好运;根据我的经验,这是一个令人愉快的宣泄过程,从中你可以学到很多东西。

仅仅是抛开第二条有效使用遗留代码的建议,这本优秀的书让我真正认识到,几乎任何旧的/蹩脚的/不稳定的代码都可以被争论

我还想建议访问马丁·福勒的网站。他确实写了这本书

至于在等式中引入单元测试,我发现最好的方法是找到顶级组件,确定它对具体对象的所有外部依赖,并用接口替换它们。一旦完成了这项工作,就可以更轻松地针对代码库编写单元测试,并且可以一次编写一个组件。更好的是,您不必放弃任何单元测试


ASP.Net的单元测试可能很棘手,但是有很多框架可以让它更容易实现,举几个例子。

完全同意你的答案。此外,我将开始进行一些“高级”测试(功能或组件测试),以从用户的角度保留行为。这一点可能是你的首相最关心的问题