使用人工 or 自动化的方式,来验证系统在各种应用场景下的功能是否符合设计要求,发现软件实际运行结果和预期结果之间的偏差。
黑盒测试:
黑盒测试也称功能测试 or 数据驱动测试,在测试时,把程序看作一个不能打开的黑盒子,着眼于程序外部结构,完全不考虑程序内部逻辑结构,针对软件界面和软件功能进行测试。在进行黑盒测试时需要注意不仅要测试所有合法的输入,而且还要对那些不合法的输入进行测试。
白盒测试:
白盒测试也称结构测试 ot 逻辑驱动测试,是针对被测单元内部逻辑结构是否正确工作的测试。白盒测试会根据程序的内部逻辑结构设计测试用例,对所有的逻辑路径进行测试。在进行白盒测试时需要注意,白盒测试只能验证代码的逻辑是否正确,无法验证出代码是否实现了需求功能。
单元测试:
单元测试是指,在与程序其他部分相隔离的情况下,对软件中最小可测试单元进行检查和验证的工作,这里的最小可测试单元通常时指函数 or 类。单元测试属于白盒测试。
单元测试的作用:
如何做好单元测试:
Mock 代码和桩代码的本质区别
-Mock 代码和桩代码的本质区别在于测试期待结果的验证 Assert and Expectiation。对于 Mock 代码来说,我们的关注点是 Mock 方法有没有被调用,以什么样的参数被调用,被调用的次数,以及多个 Mock 函数的先后调用顺序。所以,在使用 Mock 代码的测试中,对于结果的验证(也就是 assert),通常出现在 Mock 函数中。
-对于桩代码来说,我们的关注点是利用 Stub 来控制被测函数的执行路径,不会去关注 Stub 是否被调用以及怎么样被调用。所以,你在使用 Stub 的测试中,对于结果的验证(也就是 assert),通常出现在驱动代码中。
实际项目中如何开展单元测试:
实际单元测试中的困难
集成测试:
集成测试,也叫组装测试或联合测试,是单元测试的逻辑扩展。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试,重点是测试测试模块之间的接口。一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。一些局部反映不出来的问题,在全局上很可能暴露出来。在集成测试之前,单元测试应该已经完成,集成测试中所使用的对象应该是已经经过单元测试的软件单元。这一点很重要,因为如果不经过单元测试,那么集成测试的效果将会受到很大影响,并且会大幅增加软件单元代码纠错的代价。
系统测试:
是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。系统测试的对象不仅仅包括需要测试的产品系统的软件,还要包含软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等。因此,必须将系统中的软件与各种依赖的资源结合起来,在系统实际运行环境下来进行测试。
回归测试:
回归测试是指在发生修改之后重新测试先前的测试用例以保证修改的正确性。理论上,软件产生新版本,都需要进行回归测试,验证以前发现和修复的错误是否在新软件版本上再次出现。根据修复好了的缺陷再重新进行测试。回归测试的目的在于验证以前出现过但已经修复好的缺陷不再重新出现。一般指对某已知修正的缺陷再次围绕它原来出现时的步骤重新测试。
验收测试:
验收测试是指系统开发生命周期方法论的一个阶段,这时相关的用户或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。验收测试包括 Alpha 测试和 Beta 测试。
Alpha 测试:是由用户在开发者的场所来进行的,在一个受控的环境中进行。
Beta 测试:由软件的最终用户在一个或多个用户场所来进行的,开发者通常不在现场,用户记录测试中遇到的问题并报告给开发者,开发者对系统进行最后的修改,并开始准备发布最终的软件。
好的测试用例一定是一个完备的集合,它能够覆盖所有等价类以及各种边界值,而跟能否发现缺陷无关。一个好的测试用例,必须具备以下三个特征:
- 整体完备性: “好的” 测试用例一定是一个完备的整体,是有效测试用例组成的集合,能够完全覆盖测试需求。
- 等价类划分的准确性: 指的是对于每个等价类都能保证只要其中一个输入测试通过,其他输入也一定测试通过。
- 等价类集合的完备性: 需要保证所有可能的边界值和边界条件都已经正确识别。
等价类划分法:是将所有可能的输入数据划分成若干个子集,在每个子集中,如果任意一个输入数据对于揭露程序中潜在错误都具有同等效果,那么这样的子集就构成了一个等价类。
边界值分析法:是选取输入、输出的边界值进行测试,是对等价类划分的补充。从工程实践经验中可以发现,大量的错误发生在输入输出的边界值上,所以需要对边界值进行重点测试,通常选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据。
错误推测法:是指基于对被测试软件系统设计的理解、过往经验以及个人直觉,推测出软件可能存在的缺陷,从而有针对性地设计测试用例的方法。这个方法强调的是对被测试软件的需求理解以及设计实现的细节把握,当然还有个人的能力。这个方法的缺点是难以系统化,并且过度依赖个人能力。
在真实的工程实践中,不同的软件项目在研发生命周期的各个阶段都会有不同的测试类型。对于每一种不同的测试类型,设计出 “好的” 测试用例的关注点和方法论可能会有很大的差异。在具体的用例设计时,首先需要搞清楚每一个业务需求所对应的多个软件功能需求点,然后分析出每个软件功能需求点对应的多个测试需求点,最后再针对每个测试需求点设计测试用例。
测试用例是为了发现软件中存在的问题而编写的一组包含测试输入,执行条件,预期结果的文档,用于合适软件产品是否满足需求。
** 测试用例需要包含的要素:**
测试用例的唯一编号
被测试模块
测试功能点
测试用例的优先级
测试的前提条件
测试步骤
期望的测试结果