单元测试与JUNIT
2. 单元测试设计
2.1. 单元测试的一般过程
单元测试过程分为计划、设计、实现、执行、评估等几个步骤,各步骤的任务如下:
2.1.1. 计划
单元测试计划需明确如下目标:
(1)明确单元测试的测试对象,确定测试需求及测试通过的标准,明确活动的输出。
(2)明确测试方法和需要运行的工具需求。
(3)对工作量进行估计,确定测试所用资源(包括人力资源和设备资源),创建测试任务的时间表,必要时需将一个单元测试任务分解成更细化的子任务进行明确。
(4)对测试风险进行分析,制定相应的应急措施。
(5)明确测试优先级,制定测试取舍策略。
(6)输出单元测试计划文档。
2.1.2. 设计
单元测试的设计主要是完成方案和模型的确认,包括如下几方面内容:
(1)测试需求的进一步细化,必要时需追溯到详细设计文档中的单元设计目标。
(2)设计单元测试模型,包括与模型相关的工具的选用。
(3)制定测试方案,包括模型的设计和实现、定义测试规程和用例的实现和组织。
(4)输出单元测试方案文档。
2.1.3. 实现
单元测试实现主要是针对用例的实现,包括如下几个方面:
(1)参考测试模型和测试方案,制定具体的测试用例,创建可重用的测试脚本。
(2)输出单元用例文档。
2.1.4. 执行
根据单元测试的方案、用例对单元进行测试,验证测试的结果并记录测试过程中出现的缺陷,主要保留执行过程数据以备问题定位的回归对比。
2.1.5. 评估
对单元测试的结果进行评估,主要有如下几个方面:
(1)实际测试过程的记录,描述与计划的差异和原因,包括补充或裁剪的测试项目清单。
(2)对测试过程完备性以及被测单元质量的评价,包括用例执行情况清单和汇总分析。
(3)主要从需求覆盖和代码覆盖的角度进行测试完备性的评估。
(4)遗留问题记录和可能的分析。
(5)输出单元测试报告。
2.2. 单元测试用例设计方法
测试用例的设计在单元测试中占有非常重要的地位,测试用例设计的好坏直接影响到测试的效果。确定测试用例之所以很重要,原因有以下几方面:
(1)测试用例构成了设计和制定测试过程的基础。
(2)测试的“深度”与测试用例的数量成比例。由于每个测试用例反映不同的场景、条件或经由产品的事件流,因而,随着测试用例数量的增加,对产品质量和测试流程也就越有信心。判断测试是否完全的一个主要评测方法是基于需求的覆盖,而这又是以确定、实施和/或执行的测试用例的数量为依据的。
(3)测试工作量与测试用例的数量成比例。根据全面且细化的测试用例,可以更准确地估计测试周期各连续阶段的时间安排。
(4)测试设计和开发的类型以及所需的资源主要都受控于测试用例。测试用例通常根据它们所关联关系的测试类型或测试需求来分类,而且将随类型和需求进行相应地改变。
非常好的方案是为每个测试需求至少编制两个测试用例:
(1)一个测试用例用于证明该需求已经满足,通常称作正面测试用例。
(2)另一个测试用例反映某个无法接受、反常或意外的条件或数据,用于论证只有在所需条件下才能够满足该需求,这个测试用例称作负面测试用例。
单元测试既可以是白盒测试也可以是黑盒测试。白盒测试主要是检查程序的内部结构、逻辑、循环和路径。其常用测试用例设计方法有:逻辑覆盖和基本路径测试。根据覆盖测试的目标不同,逻辑覆盖又可分为:语句覆盖,判定覆盖,判定-条件覆盖,条件组合覆盖及路径覆盖等。白盒测试用例设计还可用到:状态转移测试、数据定义-使用测试、等价类划分、边界值分析等。黑盒测试注重对程序功能方面的要求,它只用到程序的规格说明,没有用到程序的内部结构。其常用测试用例方法有:规范(规格)导出、等价类划分、边界值分析法、错误推测法和因果图分析方法。下面将简要介绍各个方法,更详细的说明请读者自行参考相关的测试理论书籍。
2.2.1. 语句覆盖
语句覆盖就是设计若干个测试用例,运行所测程序,使得每一可执行语句至少执行一次。
2.2.2. 判定覆盖
判定覆盖就是设计若干个测试用例,运行所测程序,使得程序中每个判断的取TURE分支和取FALSE分支至少经历一次。
2.2.3. 条件覆盖
条件覆盖就是设计若干个测试用例,运行所测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。
2.2.4. 判定-条件覆盖
判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行一次。也就是说要求各个判断的所有可能的条件取值组合至少执行一次。
2.2.5. 条件组合覆盖
条件组合覆盖就是设计足够的测试用例,运行所测程序,使得每个判断得所有可能得条件取值组合至少执行一次。
2.2.6. 路径覆盖
路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。
2.2.7. 规范(规格)导出法
规范导出法是根据相关的规范描述来设计测试用例。每一个测试用例用来测试一个或多个规范陈述语句。一个比较实际的方法是根据陈述规范所用语句的顺序来相应地为被测单元设计测试用例。
2.2.8. 状态转移测试法
对于那些以状态机作为模型或设计为状态机的软件,状态转移测试是合适的测试方法。测试用例通过能导致状态迁移的事件来测试状态之间的转换。
2.2.9. 数据定义-使用测试法
数据定义是指数据项被赋值的地方,数据使用是指数据项被读或使用的地方。目的是设计测试用例以驱动执行通过数据定义于使用之间的路径。
2.1. 单元测试的一般过程
单元测试过程分为计划、设计、实现、执行、评估等几个步骤,各步骤的任务如下:
2.1.1. 计划
单元测试计划需明确如下目标:
(1)明确单元测试的测试对象,确定测试需求及测试通过的标准,明确活动的输出。
(2)明确测试方法和需要运行的工具需求。
(3)对工作量进行估计,确定测试所用资源(包括人力资源和设备资源),创建测试任务的时间表,必要时需将一个单元测试任务分解成更细化的子任务进行明确。
(4)对测试风险进行分析,制定相应的应急措施。
(5)明确测试优先级,制定测试取舍策略。
(6)输出单元测试计划文档。
2.1.2. 设计
单元测试的设计主要是完成方案和模型的确认,包括如下几方面内容:
(1)测试需求的进一步细化,必要时需追溯到详细设计文档中的单元设计目标。
(2)设计单元测试模型,包括与模型相关的工具的选用。
(3)制定测试方案,包括模型的设计和实现、定义测试规程和用例的实现和组织。
(4)输出单元测试方案文档。
2.1.3. 实现
单元测试实现主要是针对用例的实现,包括如下几个方面:
(1)参考测试模型和测试方案,制定具体的测试用例,创建可重用的测试脚本。
(2)输出单元用例文档。
2.1.4. 执行
根据单元测试的方案、用例对单元进行测试,验证测试的结果并记录测试过程中出现的缺陷,主要保留执行过程数据以备问题定位的回归对比。
2.1.5. 评估
对单元测试的结果进行评估,主要有如下几个方面:
(1)实际测试过程的记录,描述与计划的差异和原因,包括补充或裁剪的测试项目清单。
(2)对测试过程完备性以及被测单元质量的评价,包括用例执行情况清单和汇总分析。
(3)主要从需求覆盖和代码覆盖的角度进行测试完备性的评估。
(4)遗留问题记录和可能的分析。
(5)输出单元测试报告。
2.2. 单元测试用例设计方法
测试用例的设计在单元测试中占有非常重要的地位,测试用例设计的好坏直接影响到测试的效果。确定测试用例之所以很重要,原因有以下几方面:
(1)测试用例构成了设计和制定测试过程的基础。
(2)测试的“深度”与测试用例的数量成比例。由于每个测试用例反映不同的场景、条件或经由产品的事件流,因而,随着测试用例数量的增加,对产品质量和测试流程也就越有信心。判断测试是否完全的一个主要评测方法是基于需求的覆盖,而这又是以确定、实施和/或执行的测试用例的数量为依据的。
(3)测试工作量与测试用例的数量成比例。根据全面且细化的测试用例,可以更准确地估计测试周期各连续阶段的时间安排。
(4)测试设计和开发的类型以及所需的资源主要都受控于测试用例。测试用例通常根据它们所关联关系的测试类型或测试需求来分类,而且将随类型和需求进行相应地改变。
非常好的方案是为每个测试需求至少编制两个测试用例:
(1)一个测试用例用于证明该需求已经满足,通常称作正面测试用例。
(2)另一个测试用例反映某个无法接受、反常或意外的条件或数据,用于论证只有在所需条件下才能够满足该需求,这个测试用例称作负面测试用例。
单元测试既可以是白盒测试也可以是黑盒测试。白盒测试主要是检查程序的内部结构、逻辑、循环和路径。其常用测试用例设计方法有:逻辑覆盖和基本路径测试。根据覆盖测试的目标不同,逻辑覆盖又可分为:语句覆盖,判定覆盖,判定-条件覆盖,条件组合覆盖及路径覆盖等。白盒测试用例设计还可用到:状态转移测试、数据定义-使用测试、等价类划分、边界值分析等。黑盒测试注重对程序功能方面的要求,它只用到程序的规格说明,没有用到程序的内部结构。其常用测试用例方法有:规范(规格)导出、等价类划分、边界值分析法、错误推测法和因果图分析方法。下面将简要介绍各个方法,更详细的说明请读者自行参考相关的测试理论书籍。
2.2.1. 语句覆盖
语句覆盖就是设计若干个测试用例,运行所测程序,使得每一可执行语句至少执行一次。
2.2.2. 判定覆盖
判定覆盖就是设计若干个测试用例,运行所测程序,使得程序中每个判断的取TURE分支和取FALSE分支至少经历一次。
2.2.3. 条件覆盖
条件覆盖就是设计若干个测试用例,运行所测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。
2.2.4. 判定-条件覆盖
判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行一次。也就是说要求各个判断的所有可能的条件取值组合至少执行一次。
2.2.5. 条件组合覆盖
条件组合覆盖就是设计足够的测试用例,运行所测程序,使得每个判断得所有可能得条件取值组合至少执行一次。
2.2.6. 路径覆盖
路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。
2.2.7. 规范(规格)导出法
规范导出法是根据相关的规范描述来设计测试用例。每一个测试用例用来测试一个或多个规范陈述语句。一个比较实际的方法是根据陈述规范所用语句的顺序来相应地为被测单元设计测试用例。
2.2.8. 状态转移测试法
对于那些以状态机作为模型或设计为状态机的软件,状态转移测试是合适的测试方法。测试用例通过能导致状态迁移的事件来测试状态之间的转换。
2.2.9. 数据定义-使用测试法
数据定义是指数据项被赋值的地方,数据使用是指数据项被读或使用的地方。目的是设计测试用例以驱动执行通过数据定义于使用之间的路径。
0
相关文章