数据库测试概述
数据库测试的定义
- 数据库测试一般与其数据库系统测试同时进行。数据库测试方法和手段与计算机软件测试大体相同,只是测试范围和重点有些不同。
- 数据库测试可以简单地定义为:数据库测试是为了发现错误和缺陷而运行数据库的过程。实际上,为了保证数据库的质量,数据库测试贯穿数据库开发的全过程,即数据库需求分析、设计、实现等阶段的工作成果均需要测试。因此,数据库测试是根据数据库的需求规格说明书和源代码的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行数据库,以发现数据库错误和缺陷的过程。
- 数据库测试的目的在于发现错误和缺陷,而不是证明数据库没有错误和缺陷。一个成功的测试是发现至今没有发现的错误和缺陷的测试,一个好的测试用例是发现至今没有发现的错误和缺陷的测试用例。
- 数据库测试的主要内容是数据库模式测试、功能测试和性能测试。
- 数据库测试的任务是编制测试计划、运行测试用例、形成测试结论、撰写测试分析报告。数据库分析、设计和实现人员根据测试分析报告,分析引起错误和缺陷的原因、寻求排除错误和弥补缺陷的方法,最终排除错误和缺陷。
数据库测试的原则
- 数据库测试是一个测试——排错(排除错误和缺陷)——再测试——再排错、循环往复、数据库质量不断改进的过程。
- 尽早地和不断地进行数据库测试。数据库测试不只是在数据库实现后才进行测试,而在数据库需求分析、设计等阶段也需要测试。
- 测试用例应由测试输入数据和与之对应的预期输出结果两部分组成。预期输出结果用于与实际输出结果比较。
- 系统开发人员要避免测试自己所作的数据库需求分析文档、设计文档和实现代码。经验表明,别人测试使得测试工作更客观、更有效。自己测试的不利之处在于:一是心理问题,一般的人不愿否认自己的工作。二是思维惯性,自己在分析、设计和实现时的疏忽在测试时可能仍然不能发现。
- 在设计测试用例时,应当包含合理的输入数据和不合理的输入数据。合理的输入数据是能验证数据库正确的数据。不合理的输入数据是指数据库中不可能存储或处理的数据,用于测试数据库在输入异常(如用户在键盘上按错键)时能否正确处理。
- 充分注意测试中的错误群集现象。经验表明,测试排错后的文档或源代码中残存的错误数量与排错前的错误数量成正相关关系,形成错误群集现象。例如,某个存储过程被检出错误,该存储过程排错后增加了一个入口参数,因此所有调用该存储过程的程序均需修改。这就是一个错误引发一群错误。
- 严格执行测试计划,杜绝测试的随意性。测试计划包括测试目标、测试环境、测试准备、测试方法、测试人员及分工,逐个列出测试项目(包括项目名称、测试目的、测试内容、测试进度、测试步骤、测试结果评价标准、测试用例)。
- 对每一个测试结果做全面复查,避免疏漏和失误。
- 进行出错统计、撰写测试分析报告。测试分析报告包括实际测试环境、测试方法、测试人员、总体结论与评价,按项目逐个列出测试结果(包括实际输入与输出结果、发现的问题、说明是否通过测试、排错建议)。
数据库测试的方法与工具
-
数据库测试的方法
按照对数据库的内部结构和工作过程了解的程度,数据库测试的方法分为白盒测试和黑盒测试。
-
白盒测试
- 常用的白盒测试方法包括代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法。测试方法不同,测试用例的设计方法也存在差异。
- 白盒测试是已知数据库的内部结构和工作过程,通过测试来检验数据库是否按照需求规格说明书的要求正常运行。在测试时,把测试对象看作一个打开的盒子,它允许测试人员利用数据库的内部结构等信息,设计或选择测试用例,对数据结构、存储过程及触发器的逻辑路径等进行测试,确定实际的状态是否与预期的状态一致。
- 数据库测试人员使用白盒测试方法,除可以对数据结构进行测试外,还可以对存储过程和触发器的模块进行如下的检查:
- 对模块的所有独立的执行路径至少测试一次。
- 对所有的逻辑判断的取“真”与取“假”的两种情况都至少测试一次。
- 在循环的边界和运行的边界内执行循环体。
- 测试内部数据结构的有效性等。
-
黑盒测试
- 黑盒测试着眼于数据库的功能和性能,不考虑其内部逻辑结构进行测试,主要用于数据库确认测试。
- 常用的黑盒测试方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法、场景法。黑盒测试的关键是设计测试用例。
- 黑盒测试是在已知数据库所具有的功能的基础上,通过测试来检验每个功能是否都能正常运行并达到预期结果。在测试时,把数据库看作一个不能打开的黑盒子,在完全不考虑数据库内部结构和内部特性的情况下,测试人员根据经验,通过相应的数据库系统或数据库访问工具进行测试。这种测试主要是为了测试如下问题是否正确处理:
- 数据结构(例如,数据类型、宽度)是否正确定义?
- 输入能否正确地接受?能否输出正确的结果?
- 能否能够正确插入(增加)、更新、删除数据?
- 主码、外码是否正确定义?
- 数据库操作权限定义是否正确?
- 是否正确处理并发操作?
- 表级、列级完整性约束条件是否满足?
- 数据库的处理能力是否满足要求?
- 数据库的可靠性、可维护性是否满足要求?
-
数据库测试的工具
- 数据库测试的工具有两类。一类是所开发的数据库系统,把它作为测试工具来测试相应的数据库;另一类是专门的数据库测试工具,如DBMonster、BenchmarkSQL、LoadRunner。
数据库测试的步骤
-
单元测试
单元测试集中检查数据库设计的单个表、视图、索引、存储过程、触发器、数据库系统模块,通过测试发现其中分析、设计与编码的可能错误。
-
集成测试
集成测试是将数据库系统模块按照设计要求组装起来,在组装的同时进行测试。主要目的是发现与接口有关的问题。如数据通过接口可能丢失,一个模块与另一个模块可能有由于疏忽而造成有害影响,把子功能组合起来可能不产生预期的主功能等。
-
确认测试
确认测试的任务是验证数据库系统的功能和性能及其他特性是否与用户的要求一致。对数据库系统的功能和性能要求在需求规格说明书中已经明确规定。确认测试应交付的文档有:确认测试分析报告、最终的用户手册和操作手册、项目开发总结报告等。
-
系统测试
系统测试是将通过确认测试的数据库系统的软件、硬件、外设、某些支持软件和人员等其他系统元素结合在一起,在实际运行(使用)环境下,对数据库系统进行一系列的集成测试和确认测试。系统测试的目的在于通过与系统需求作比较,发现与系统需求不符合或矛盾的地方。
-
按照上述步骤对数据库进行测试并通过后,数据库应该满足需求规格说明书的要求。
数据库测试输出结果的展现
- 数据库测试的输出结果主要有三个去向:存储到数据库、存储到特殊格式的数据文件、输出到屏幕或打印机等外围设备。
- 如果测试输出结果存储到数据库,可以用数据库系统或专门的数据库访问工具查看它们。如Eclipse 的插件SQLExplorer(该工具可以访问所有与JDBC兼容的数据库管理系统,包括Microsoft SQL Server、MySQL、Oracle、Sybase、DB2、PostgreSQL)。当然,一些数据库管理系统还带有自己专门的访问工具,如Microsoft SQL Server 2012的SQL Server Management Studio(SQL Server 管理工具)、SQL Server Data Tools(SQL Server数据工具)。
- 如果测试输出结果存储到特殊格式的数据文件,数据库系统有查询这个数据文件内容的功能时就用被测试的数据库系统查看它们,否则只能用专门的工具查看。
- 如果测试输出结果输出到屏幕或打印机等外围设备,测试人员应该按测试计划检查测试输出结果是否与预期结果一致。