什么是测试驱动开发 (TDD)?
测试驱动开发
测试驱动开发,简称TDD,是一种软件开发技术,其中定义测试用例来指定和证明代码可以做什么。也就是说,首先开发和测试每个功能的测试用例。如果测试失败,则编写新代码以成功执行测试,并使代码简单且无缺陷。
TDD的过程始于为软件的每个功能设计和创建测试用例。TDD框架可帮助开发人员在自动化测试失败的情况下编写新代码。这可以防止代码重复。
在TDD中,我们首先编写并纠正失败的测试用例,然后编写新代码,即在开发之前。这可以防止代码重复,因为一次编写少量代码以通过测试用例。请注意,通过测试用例,我们指的是需要进行测试以实现它们的需求条件。
TDD是在软件的实际开发开始之前开发和执行自动化测试的过程。因此,TDD也被称为测试优先开发。
如何进行TDD测试?
按照以下步骤执行TDD测试-
添加测试用例。
运行测试,并确定是否有任何测试失败。
编写一些新代码。
执行测试用例并重构代码。
重复以上步骤。
TDD既不是测试也不是设计。在TDD中,我们不写一些测试用例,然后构建一个通过测试用例的系统。在TDD中,我们不做很多测试。
TDD与传统测试
TDD是一种规范技术。TDD有助于确保在验证级别对软件的源代码进行彻底测试。
在传统测试中,成功执行的测试会发现一个或多个错误。在TDD中也是如此。当测试用例失败时,就会有一些进展或进展,因为我们知道必须解决问题。
TDD确保系统满足所有指定的要求。它有助于建立和增强对系统的信心。
TDD强调决定测试是否成功的产品代码。而传统的测试侧重于测试用例的设计,以及测试是否正确执行以满足规定的要求。
在TDD中,实现了测试的完整覆盖。与传统测试不同,在TDD中,我们测试每一行代码。
TDD和传统测试结合起来,解释了为什么系统测试如此重要。
在敏捷建模中,测试应该有特定的目的。我们应该知道为什么要测试ae以及测试的级别。
验收TDD和开发人员TDD
验收TDD-在验收TDD的情况下,我们编写一个验收测试。验收TDD满足规范的所有需求并满足系统的指定行为。我们编写生产或功能代码以满足验收测试。验收TDD强调系统的行为。它也被称为行为驱动的开发。
开发人员TDD-在开发人员TDD中,开发人员需要设计单个开发人员测试、单元测试,然后是生产代码来完成测试。单元测试强调系统的每个功能。开发人员TDD和验收TDD的主要目标是在即时(JIT)的基础上详细定义解决方案的可执行需求。在JIT中,我们考虑系统中需要的那些需求或要求,以提高效率。
扩展TDD与敏捷模型驱动开发
TDD强调规范和验证。但它并不关注更大的问题,比如设计、系统的使用、用户界面等。敏捷模型驱动开发(AMDD)专注于TDD不关注的敏捷扩展问题。因此,敏捷模型驱动开发用于更大的问题。
AMDD生命周期
在模型驱动开发中,模型是在编写源代码之前创建的,最终具有敏捷方法。
设想是TDD(TestDrivenProject)在项目的初步阶段预测要执行的测试的过程。构想的目标是定义系统的范围和架构。为了使构想成功,我们执行高级需求和架构建模。
在设想中,我们没有详细说明软件,而是探索定义项目总体策略的需求。
迭代0-设想
以下是构想的两个主要子激活-
初始需求设想-我们可能需要几天时间来指定高级需求并布置系统的范围。目的是探索模型、初始域模型和UI模型的用法。
初始架构设想-分析系统架构可能需要几天时间。它为软件提供技术指导。它强调技术图表、UI流程、领域模型和变更案例。
迭代建模
在这次迭代中,我们计划每次迭代要完成的工作。
通常,敏捷过程用于此类迭代。在每次迭代中,都会添加新工作及其优先级。
我们首先考虑优先级较高的工作。稍后添加的作品可能会随时重新排列优先级或删除。
我们讨论如何实现需求,为此我们使用建模。
为该迭代要实现的所有需求执行建模分析和设计
模型风暴
它也被称为即时建模。
由三分之二成员组成的团队完成,讨论在纸上或白板上进行。
一名成员要求另一名成员与他们在一起,每次建模通常需要5-10分钟。
团队探索问题,直到发现问题的主要原因。如果一个成员发现了他们希望解决的问题,那么他们就会寻求其他成员的帮助。
其他成员探索问题,然后大家就如往常一样继续。它也称为站立建模或客户质量保证(QA)会议。
测试驱动开发与敏捷驱动开发
TDD的优势
在早期阶段检测缺陷-在数据库世界中,代码测试涉及手动测试或一次性脚本。使用TDD,我们可以构建一套可以根据我们的意愿重新运行的自动化测试。
更好的设计,更干净-TDD帮助我们了解代码将如何使用,以及它如何与其他模块交互。它提供了更好的设计决策并提供了更易于维护的代码。TDD还允许编写具有单一职责的较小代码,这有助于我们轻松理解代码。它迫使我们只编写生产代码以根据要求通过测试用例。
重构-在重构代码时,存在代码中断的风险。但是,通过一组自动化测试,可以修复此类中断。TDD提供更快的结果、更可扩展的代码,产品中的缺陷更少,以后可以以最小的风险进行更新。
团队合作-当团队成员无法完成他的任务时,其他团队成员可以接手他们的工作。TDD有助于共享知识,提高团队的效率。
开发人员大部分时间都花在编写测试用例上,但是调试和添加新功能所需的时间要少得多。TDD帮助开发人员更好地分析需求并要求客户明确。TDD使开发人员的工作效率更高,并有助于开发更灵活、更易于维护的代码库。
TDD框架
csUnit和NUnit-这些开源框架用于.NET项目。
PyUnit和DocTest-这些是Python最常用的框架。
Junit-它是最广泛使用的JAVA框架之一。
TestNG-一种流行的JAVA测试框架,克服了Junit的限制。
Rspec-此测试框架用于Ruby项目。