Cal*_*bHC 40 .net tdd asp.net-mvc
我是我(非常小)公司中唯一的开发人员,我即将开始为该公司开发一个中型ASP.NET Web应用程序.
我想弄清楚我是否应该学习测试驱动开发(TDD)并在此应用程序中实现它.
我需要很快开始开发我们的新应用程序,我担心测试.我已编程多年但从未进行任何单元测试.
我已经阅读了很多关于TDD的在线资源,但我不确定我是否会对它进行"足够好"的掌握以使其在应用程序中有效.
Kev*_*ang 40
这取决于你的优先事项所在.如果您有兴趣进一步发展自己,那么TDD绝对值得研究一下.它会帮助您重新思考代码的方式,并可能因此而成为更好的开发人员.
但是,TDD会妨碍您及时将产品推出的能力,这很容易被超过.您提到您是该公司唯一的开发人员,这意味着您需要承担压力才能完成项目.TDD无疑是一种很好的做法,但有时必须先考虑现实生活中的限制和实用性.
所以简而言之,如果你可以节省时间,那么使用TDD.它实际上没有那么多开销,你可以总是跳过测试.但如果你真的被时间束缚,并且不认为你能够在没有把你的产品和工作置于危险之中的情况下加入它,那么没有人会因为跳过它而误导你.纯粹主义者会不同意,但这不是一个黑白世界,有时必须妥协才能完成任务.
Ran*_*pho 25
记住这一点:唯一不好的测试是你不执行的测试.
现在,你需要直接潜入TDD吗?也许不吧.但你应该尽可能地开始单元测试.你不能很好地对GUI进行单元测试,这很好 - 除了那些UAT.
但是你可以在幕后执行任何逻辑?是的,你应该测试一下.
首先尝试测试单个方法.当你走的时候,你会开始痛苦,因为很可能你的代码不是为了测试而设计的.这可以; 重构你的代码!继续这样做,直到您可以测试您的代码.记住你必须做的事情,并在下次编写代码时第一次这样做.
经过几次迭代后,您将学习到您需要学习的内容(实际上,您只能通过实践来学习)并且痛苦将会消失.当发生这种情况时,我建议你可能已经准备好研究TDD了.
Ros*_*han 14
我不能充分强调基于TDD的开发方法的优点.当您采用TDD时,您的单元测试与您编写的代码一起成为一等公民,而不是为了进行单元测试而不是保持最新的代码.
在TDD中,您使用单元测试作为组件应该执行的操作的可执行规范.您可以通过考虑您希望组件执行的操作,然后编写测试来执行此功能.由于您的代码最初不具备任何此功能,因此您编写的所有新测试都将失败或变为红色.完成测试后,开始实现组件.渐渐地,当您添加所需的功能时,红色测试将变为绿色.好的一点是,在您实现了足够的功能以使所有测试通过之后,您就知道您已经完成了预期的规范并且确切地知道停止的位置.我经常看到开发人员已完成实现所需功能但不停止的情况,而是增强组件并添加额外的功能和眼睛,这些都不是所需规范的一部分,浪费了活跃的开发时间.
完成单元测试后,可以轻松地在持续集成环境中进行设置.此环境将检出存储库中的最新代码,构建它,然后运行单元测试.如果发生任何回归,如果有人检查任何破坏您的单元测试的代码,您就会知道它,而不是在它被部署到您的生产环境之后发现它.为了确保新代码不会引入回归,我们在我们的存储库中设置了登录挂钩,以确保所有提交的代码都运行了相应的测试并且它们通过了.当您有多个人在项目上工作时,这尤其有用,因为他们可以通过您可能使用的任何监控仪表板看到存储库是否可以在该时间点同步.也可以很容易地定位特定版本的存储库,它可以正常工作,让人们使用已知良好的版本,而其他人正在努力修复当前破坏构建的任何问题.这也可能意味着仪表板所指示的任何"绿色"构建都是一种构建,在推送到生产环境时很有可能不会遇到问题.
许多人认为采用TDD意味着额外的工作和麻烦,而且会更耗时.考虑一下,编写测试所花费的额外时间将阻止任何正在测试的功能中断,并且您将更快地找到这些中断,而不是更晚.
使用TDD的另一个优点是,您将为您的设计提供更多的关注,并且它将比非TDD方法更好地结构化和组件化.这种组件化对于能够具有快速执行且不易碎的单元测试套件非常重要.
GUI测试很困难,但并非不可能.考虑Web-UI测试技术,如Selenium,WebDriver和Watir,它们可以以编程方式运行Web-UI.通过仅使用它们执行昂贵的端到端测试,也很容易滥用这些工具.一种更好的方法是抽象UI层,以便可以独立于业务逻辑单独测试它.您不希望进行UI测试并对数据库执行操作.
要重新限制,您需要编写有效的单元测试,以使TDD成为一种愉快的体验,而不是负担.您的测试应该快速,单独测试组件,理想情况下应始终运行.
我在这里描述的是一个理想的案例.您不必采用所提到的每一个想法,但您可以选择任何可以使您的开发过程更有效的工作.
Tim*_*Tim 10
请注意,TDD不是关于测试; 这是一个发展过程.没有进行测试来替换测试功能 - 它是定义开发过程的.
听起来你在谈论单元测试和其他自动化测试.测试很好.自动化测试很好.不要害怕犯错误.如果您考虑您的代码以及如何尽可能自动化测试,那么您处于有利位置 - 但是收益递减会有所减少.100%自动化测试可能不具有成本效益 - 特别是对于您描述的组织.
如果你真的在谈论TDD(专家称之为TDD),那也可能是好的.有许多开发过程.值得记住的是,开发过程是框架和指南 - 而不是像追求一样遵循的宗教.没有一个过程是一刀切的.做有意义的事情并随着你的进步而改进.在开发组织中只有一个人,使得变更过程相当轻松.首先解决您的高风险问题,并在处理低价值问题之前为这些问题制定一些轻量级流程.