抱歉,最近实在他忙了,刚刚更新了两篇。后面我会尽快写完这个系列。谢谢支持。算法
在第一弹中咱们介绍过,软件的测试包含单元测试、集成测试、系统测试和回归测试四个阶段。那么,这里咱们先来看下各个阶段都使用怎样的测试方法。编程
软件测试,从测试方法上来区分能够分为黑盒测试、白盒测试和灰盒测试。markdown
黑盒测试数据结构
黑盒测试,也称为功能测试。测试者不了解程序的内部状况,不需具有应用程序的代码、内部结构和编程语言的专门知识。只知道程序的输入、输出和系统的功能,这是从用户的角度针对软件界面、功能及外部结构进行测试,而不考虑程序内部逻辑结构。测试案例是依应用系统应该作的功能,照规范、规格或要求等设计。测试者选择有效输入和无效输入来验证是否正确的输出。 此测试方法可适合大部分的软件测试,如集成测试以及系统测试。框架
黑盒测试主要是为了发现如下几类错误:编程语言
是否有不正确或遗漏的功能?ide
在接口上,输入是否能正确的接受?可否输出正确的结果?工具
是否有数据结构错误或外部信息(例如数据文件)访问错误?性能
性能上是否可以知足要求?单元测试
是否有初始化或终止性错误?
白盒测试
白盒测试又称透明盒测试、结构测试等。测试应用程序的内部结构或运做,而不是测试应用程序的功能(即黑盒测试)。在白盒测试时,以编程语言的角度来设计测试案例。测试者输入数据验证数据流在程序中的流动路径,并肯定适当的输出,相似测试电路中的节点。测试者了解待测试程序的内部结构、算法等信息,这是从程序设计者的角度对程序进行的测试。 白盒测试能够应用于单元测试、集成测试和系统的软件测试流程。
白盒测试主要是想对程序模块进行以下检查:
对程序模块的全部独立的执行路径至少测试一遍。
对全部的逻辑断定,取“真”与取“假”的两种状况都能至少测一遍。
在循环的边界和运行的界限内执行循环体。
测试内部数据结构的有效性,等等。
灰盒测试
灰盒测试,是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不只关注输出、输入的正确性,同时也关注程序内部的状况。灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑,经常是经过一些表征性的现象、事件、标志来判断内部的运行状态。
上面介绍了软件测试中的黑盒、白盒和灰盒测试。白盒测试被普遍的使用在单元测试阶段。
这里咱们先来分析下,咱们要进行单元测试,须要作哪些事情?由于单元测试的主要手段是白盒测试,白盒测试的测试方法是:测试者输入数据验证数据流在程序中的流动路径,并肯定适当的输出。那么整个测试流程大概须要包含如下几个步骤:
public class Calculator{ public float divide(float divisor,float dividend){ return divisor/dividend; } }
咱们要在程序中验证上面这个方法的正确性,通常会写如下代码来测试他:
public class CalculatorTest{ public static void main(String [] args){ Calculator calculator = new Calculator(); float result = calculator. divide(10.0,2.0); if(result == 5.0){ System.out.println("divide test ok"); }else{ System.out.println("divide test failed"); } } }
这只是对该方法测试的第一个测试,若是我想测试这个方法在被除数是0的状况下会怎么样,那么我就要再写一个CalculatorTest2,而后重写写一个main方法,再从新定义一个Calculator对象,而后在调用divide方法的时候把第二个参数的值传为0。
其实上面的测试是存在很大问题的,由于在内存中并没有法精确的存储浮点数,当咱们把两个浮点数相除的时候结果并不必定能够精确的存储下来,而咱们的逾期结果倒是一个精确值,这样的比较可能会不相等的。可是这样的状况须要多个case才有可能被发现。
因此,咱们在测试一个类中的一个方法的时候,可能要定义大量的类,而后须要分别执行,而且经过看控制台的输出才能确认结果。
这里,请先记住这些问题,由于,接下来咱们要介绍的测试框架会帮咱们解决这些问题的。
一般,在没有特定框架支持下,咱们在对一个方法进行单元测试的时候,无外乎是使用分支判断、异常处理、流程控制等来控制代码的执行,经过程序输出来表示方法的执行成功和失败。这样存在的最大问题就是咱们每执行完一个单测以后,都要去控制台看输出才知道单元测试有没有成功,这明显是不合理的,由于单元测试是须要自动化执行的,程序没办法帮咱们检查输出是否正确的。
单元测试框架就解决了这个问题,一旦使用了框架,加入单元测试相对来讲会简单许多。一般,Java中经常使用的单元测试框架通常包含三个功能:测试工具、测试套件、测试运行器。
测试工具
测试套件
测试运行器
下一弹会重点介绍如何使用JUnit进行单元测试。关于JUnit的文章已经在个人博客中更新了,我会在这周内发到公众号中。
白盒测试
黑盒测试
【软件测试】 黑盒测试、白盒测试、灰盒测试
相关推荐单元测试第一弹——从软件开发生命周期谈单元测试无单测、不编码——写单元测试的重要性