Terminology¶
关键术语(Terminology):
1. Unit testing
2. Regression testing
3. Integration testing
4. System testing
5. Test-driven development
6. Mock object
7. Test case
8. Test suite
回归测试:
在对程序进行更改后运行一组测试,以检查程序的行为是否与更改之前的行为相同(当然,除了行为的任何有意更改)
单元测试作为回归测试很重要,但回归测试不仅涉及单元测试,还可能测试可能不属于正常规范的行为(例如bug-for-bug兼容性)
系统测试:
根据其规范,测试完整系统的行为
具体而言,系统测试不应该要求了解有关实现的任何细节
它通常涉及测试系统行为的许多不同方面,除了基本功能,例如性能,可用性和可靠性
测试驱动(TDD)的开发:
一种程序开发技术,您可以在实现应该通过这些测试的代码之前连续编写测试。
这可以帮助您专注于解决正确的问题,而不是通过让单元测试确定程序何时“完成”来实现比必要更复杂的实现:
如果它满足其规范,则无需继续添加功能。
模拟对象:
有时,测试一些单元A(例如,一个函数)需要它与某些其他单元B以某种方式协作(可能作为参数或通过引用传递)
- 但是B尚未实现。
- 一个“模拟对象”,为了测试A的目的,看起来和行为就像一个真正的B
- 可能会被用来代替。 (当然,如果实现真实B比创建模拟对象要多得多,那么这当然有用。)
测试用例:
一个明确定义的单一测试,可以通过某种方式进行唯一识别。
执行时,测试用例通过或失败;测试报告应准确确定哪些测试用例失败。
测试套件(Unit testing):
一组测试用例,通常具有特定的,共同的测试目标,例如单个函数,模块或子系统。
测试套件也可以由较小的测试套件递归组成。
行为驱动开发(BDD) [1]
行为驱动开发(Behavior-Driven Development)(简写BDD),在软件工程中,BDD是一种敏捷软件开发的技术。
行为驱动开发(BDD)是测试驱动开发的延伸,开发使用简单的,特定于领域的脚本语言。
这些DSL将结构化自然语言语句转换为可执行测试。结果是与给定功能的验收标准以及用于验证该功能的测试之间的关系更密切。
因此,它一般是测试驱动开发(TDD)测试的自然延伸。
行为驱动开发的根基是一种“通用语言”。这种通用语言同时被客户和开发者用来定义系统的行为。由于客户和开发者使用同一种“语言”来描述同一个系统,可以最大程度避免表达不一致带来的问题。表达不一致是软件开发中最常见的问题,由此造成的结果就是开发人员最终做出来的东西就不是客户期望的。使用通用语言,客户和开发者可以一起定义出系统的行为,从而做出符合客户需求的设计。但如果光有设计,而没有验证的手段,就无法检验我们的实现是不是符合设计。所以 BDD还是要和测试结合在一起,用系统行为的定义来验证实现代码。
虽然行为驱动开发是测试驱动开发的进化,但关注的核心是设计。行为驱动开发中,定义系统的行为是主要工作,而对系统行为的描述则变成了测试标准。在行为驱动开发中,我们需要使用通用语言来定义系统行为。而通用语言,实际上是一个最小化的词汇表。我们使用这些词汇来书写故事。选入词汇表的词汇必须具有准确无误的表达能力和一致的含义。例如“系统”这个词就不符合要求,因为在不同的语境(又称为上下文 Context)中,“系统”一词具有不同的含义。而“自动提款机”则明确标识了一个没有歧义的事物。
BDD的做法包括:
确立不同利益相关者要实现的远景目标
使用特性注入方法绘制出达到这些目标所需要的特性
通过由外及内的软件开发方法,把涉及到的利益相关者融入到实现的过程中
使用例子来描述应用程序的行为或代码的每个单元
通过自动运行这些例子,提供快速反馈,进行回归测试
使用“应当(should)”来描述软件的行为,以帮助阐明代码的职责,以及回答对该软件的功能性的质疑
使用“确保(ensure)”来描述软件的职责,以把代码本身的效用与其他单元(element)代码带来的边际效用中区分出来。
使用mock作为还未编写的相关代码模块的替身