单元测试概述
现实的开发问题
单元测试(UnitTesting)是对软件中的最小可测试单元进行检查和验证。
单元测试内容
单元测试原则
单元测试质量
单元测试方法
静态测试:通过人工分析或程序正确性证明的方式来确认程序正确性。
动态测试:通过动态分析和程序测试等方法来检查和确认程序是否有问题。
黑盒测试(Black Box Testing):又称功能测试,它将测试对象看做一个黑盒子,完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。
白盒测试(White Box Testing):又称结构测试,它把测试对象看做一个透明的盒子,允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。
黑盒测试方法
测试用例设计的要求
黑盒测试是将测试对象看做一个黑盒子,完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。
等价类划分是将输入域划分成尽可能少的若干子域,在划分中要求每个子域两两互不相交,每个子域称为一个等价类。
有效等价类是对规格说明有意义、合理的输入数据构成的集合,能够检验程序是否实现了规格说明中预先规定的功能和性能
无效等价类是对规格说明无意义、不合理的输入数据构成的集合,以检查程序是否具有一定的容错性。
边界值分析是对输入或输出的边界值进行测试的一种方法,它通常作为等价类划分法的补充,这种情况下的测试用例来自等价类的边界。
•先确定边界:通常输入或输出等价类的边界就是应该着重测试的边界情况。
•选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值。
实践表明:大多数故障往往发生在输入定义域或输出值域的边界上,而不是内部。因此,针对各种边界情况设计测试用例,通常会取得很好的测试效果。
错误推测法是人们根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例的方法。
•软件缺陷具有空间聚集性,80%的缺陷常常存在于20%的代码中。因此,应当记住常常光临代码的高危多发“地段”,这样发现缺陷的可能性会大得多。
•列举程序中所有可能的错误和容易发生错误的特殊情况,根据可能出现的错误情况选择测试用例。
白盒测试方法
语句覆盖
程序中的每个可执行语句至少被执行一次。
语句覆盖是最弱的逻辑覆盖准则。
判定覆盖(分支覆盖)
程序中每个判断的取真和取假分支至少经历一次,即判断真假值均被满足。
判定覆盖具有比语句覆盖更强的测试能力,但仍是弱的逻辑覆盖。
条件覆盖
每个判断中每个条件的可能取值至少满足一次。
条件覆盖只能保证每个条件至少有一次为真,而没有考虑整个判定结果。
判定条件覆盖
判断中所有条件的可能取值至少执行一次,且所有判断的可能结果至少执行一次。
判定条件覆盖能够同时满足判定、条件两种覆盖标准。
没有考虑条件的各种组合情况。
条件组合覆盖
判断中每个条件的所有可能取值组合至少执行一次,并且每个判断本身的结果也至少执行一次。
条件组合覆盖准则满足判定覆盖、条件覆盖和判定条件覆盖准则。
覆盖了所有组合,但覆盖路径有限。
路径覆盖
覆盖程序中的所有可能的执行路径。
•覆盖率数据只能代表测试过哪些代码,不能代表是否测试好这些代码。
•较低的测试覆盖率能说明所做的测试还不够,但反之不成立。
•路径覆盖> 判定覆盖> 语句覆盖
•测试人员不能盲目追求代码覆盖率,而应该想办法设计更好的测试用例。
•测试覆盖率应达到多少需要考虑软件整体的覆盖率情况以及测试成本。