1.黑盒测试和白盒测试我们在第一弹(《单元测试***弹——从软件开发生命周期谈单元测试》)介绍过,软件测试包括单元测试、集成测试,有四个阶段系统测试和回归测试。那么,这里我们先来看看每个阶段都采用了什么样的测试方法。软件测试按测试方法可分为黑盒测试、白盒测试和灰盒测试。1.黑盒测试黑盒测试,又称功能测试。测试人员不了解程序的内部情况,不需要对应用程序代码、内部结构和编程语言有专门的了解。只知道程序的输入、输出和系统函数。这是从用户的角度来测试软件的界面、功能和外部结构,而不考虑程序的内部逻辑结构。测试用例是根据应用系统应完成的功能,根据规范、规范或要求设计的。测试仪选择有效和无效输入来验证正确的输出。这种测试方法适用于大多数软件测试,如集成测试和系统测试。黑盒测试主要是发现以下几类错误:是否有功能不正确或缺失?在界面上,能否正确接受输入?能否输出正确的结果?是否存在数据结构错误或外部信息(如数据文件)访问错误?性能能否满足要求?是否有任何初始化或终止错误?2.白盒测试白盒测试也称为透明盒测试、结构测试等。测试应用程序的内部结构或工作原理,而不是测试应用程序的功能(即黑盒测试)。在白盒测试中,测试用例是从编程语言的角度来设计的。测试仪输入数据来验证程序中数据流的流动路径,并确定合适的输出,类似于测试电路中的节点。测试人员了解被测程序的内部结构、算法等信息,是站在程序设计者的角度对程序进行测试。白盒测试可应用于单元测试、集成测试和系统软件测试过程。白盒测试主要是想对程序模块进行如下检查:至少对程序模块的所有独立执行路径进行一次测试。对于所有的逻辑判断,取“真”和取“假”这两种情况至少可以测试一次。在循环边界和运行边界内执行循环体。测试内部数据结构的有效性等。3.灰盒测试灰盒测试是介于白盒测试和黑盒测试之间的测试。灰盒测试多用于集成测试阶段。它不仅关注输出和输入的正确性,还关注程序的正确性。健康)状况。灰盒测试不像白盒测试那样详细和完备,但比黑盒测试更注重程序的内部逻辑,往往通过一些具有代表性的现象、事件、标志来判断程序内部运行状态。4.对代码进行白盒测试上面介绍了软件测试中的黑盒、白盒和灰盒测试。白盒测试广泛应用于单元测试阶段。这里我们先分析一下我们需要做什么来进行单元测试?因为单元测试的主要方法是白盒测试,所以白盒测试的测试方法是:测试人员输入数据,验证数据流在程序中的流向,并确定合适的输出。那么整个测试过程大概需要包括以下几个步骤:初始化测试环境,准备测试数据。调用需要测试的单元。收集结果并与预期进行比较。测试数据清洗。以上四个步骤需要在每个单元测试时执行。比如我们有一个除法,我们要对它进行单元测试。publicclassCalculator{publicfloatdivide(floatdivisor,floatdividend){returndivisor/dividend;}}我们要在程序中验证上述方法的正确性,一般会写如下代码进行测试:publicclassCalculatorTest{publicstaticvoidmain(String[]args){Calculatorcalculator=newCalculator();floatresult=calculator.divide(10.0,2.0);if(result==5.0){System.out.println("dividetestok");}else{System.out.println("dividetestfailed");}}}这只是方法测试的第一个测试。如果我想测试当被除数为0时会发生什么,那么我必须再写一个CalculatorTest2,然后重写一个main方法,然后重新定义一个Calculator对象,然后在调用divide方法时将第二个参数的值传为0.其实上面的测试有一个很大的问题,因为浮点数在内存中是无法准确存储的。当我们将两个浮点数相除时,结果可能存储不准确,但我们的逾期结果是一个精确值,这样比较可能不相等。但这样的情况需要多起案件才能被发现。因此,我们在测试一个类中的方法时,可能要定义大量的类,然后需要分别执行,通过查看控制台的输出来确认结果。在这里,请先记住这些问题,因为我们接下来要介绍的测试框架会帮助我们解决这些问题。2、单元测试框架通常,在没有特定框架支持的情况下,我们对一个方法进行单元测试时,会使用分支判断、异常处理、流程控制等方式来控制代码的执行,并通过程序输出来表达方法执行成功与失败。这样做最大的问题是,每次单元测试执行完后,我们都得去控制台看输出,才能知道单元测试是否成功。这显然是不合理的,因为单元测试需要自动执行,而程序并没有办法帮我们检查输出是否正确。单元测试框架解决了这个问题。一旦使用了框架,添加单元测试就相对简单了。一般来说,Java中常用的单元测试框架一般包括三个功能:测试工具、测试套件和测试运行器。1.测试工具测试工具是一套用于基线测试的固定工具。测试框架的目的是确保测试可以在共享和固定的环境中运行,从而保证测试结果的可重复性。一般负责初始化测试环境,准备测试数据,清洗测试数据。2.测试套件测试套件是指捆绑多个测试用例并同时运行它们。3.测试运行器用于执行测试用例。一般负责调用需要测试的单元,收集结果,并与期望值进行比较。除了以上功能外,一般会针对不同的功能提供大量的API和语法支持。下一篇将重点介绍如何使用JUnit进行单元测试—《单元测试第三弹——使用JUnit进行单元测试》【本文为专栏作家Hollis原创文章,转载联系作者授权】点此阅读作者更多好文
