谁能推荐一些最佳实践,以解决如何开始对现有的大型CodeBase进行UnitTest的问题?
我目前面临的问题包括:
庞大的代码库
零现有单元测试
类之间的高耦合
复杂的OM(在这里我无能为力-这是一个复杂的业务领域)
缺乏编写UnitTests / TDD的经验
数据库依赖
外部源依赖性(Web服务,WCF服务,NetBIOS等)
显然,我知道我应该从重构代码开始,以减少耦合,并提高可测试性。但是,如果没有UnitTests(Chicken和Egg,有人吗?),进行这样的重构是有风险的。
附带说明一下,您是否建议对Domain类或层类(日志记录,实用程序等)启动重构和编写测试?
最佳答案
首先,我第二次推荐了Jeffrey Frederick提出的“有效地使用旧版代码”建议。
如您在问题中所述,您无法更改代码,因为当前没有可用于检测回归的单元测试,并且您无法添加单元测试,因为您的代码库不可用于单元测试。在这种情况下,您可以创建characterization tests:端到端自动测试,以帮助您检测软件外部行为的变化。一旦安装到位,您就可以开始缓慢地修改代码。
但是,测试巨大的代码库是一项巨大的工作,风险很大,并且您可能会精疲力竭,因为这样做他们将不得不付出巨大的努力,而在测试覆盖率方面的回报却很低。对整个代码库进行测试是不懈的努力。
而是在代码库之外开发新功能,以免妨碍您。新代码经过全面测试后,将其集成到代码库中。
此外,每次解决代码库中的问题时,也请尝试创建单元测试。第一次很难,但是一旦准备好要设置一些单元测试环境,它将变得更加容易。