计算机软件开发的数据库测试技术探讨
2019-02-12牛传明
牛传明
(六安职业技术学院,安徽 六安 237000)
D计算机软件开发是一项较为复杂且系统的工作,数据库测试是计算机软件开发中的重要环节之一,即依据相关规范,对计算机软件系统的数据库结构、数据库表以及数据调用关系进行测试[1]。所有的软件基本上都需要数据库作为支撑,如果计算机软件脱离数据库,那么其功能则无法实现。因此,在计算机软件开发中,必须对数据库进行测试。
1 计算机软件开发中的数据库测试分析
1.1 概念介绍
1.1.1 软件开发
软件开发是指按照用户的实际需求,对软件系统进行建立的过程,是一项包含需求分析、功能设计与实现以及测试的系统工程。程序设计语言是软件实现的关键,通常情况下,开发人员会使用相关的软件开发工具对计算机软件进行开发。可将软件细分为计算机系统软件和应用软件两大类,而能够在计算机中运行的程序均可称之为软件,与程序相关的文件,则是软件的组成部分。
1.1.2 数据库
数据库是一种存放在计算机系统的存储器当中,根据一定的格式编成的关联数据的集合。简而言之,数据库是存储电子文件的处所。用户通过数据库能够对文件中的数据进行查询、增减及删除。
1.1.3 数据库测试
所谓数据库测试,具体是指按照数据库设计规范,对软件系统的数据库结构、数据表及其之间的数据调用关系进行测试的过程。任何软件应用程序都离不开数据库的支撑,可以说数据库是计算机软件的核心,为数据库提供满足软件的应用需求。在软件开发时,需要对数据库进行测试。
1.2 数据库组成部分测试
这是数据库测试中较为重要的一项工作。按照阶段的不同,分析的内容也有所差别。在初始阶段,需要对整个数据库的实质性需要进行全面分析,即用户对数据信息的需求,具体的分析过程可以通过数据库逻辑模型进行直观呈现。进入第二阶段,则需要对业务的开发需求进行分析,在该阶段的测试主要是实体测试,包括视图测试、表结构测试、存储测试等等。数据库测试是一项看似简单、实则复杂的工作,些许的疏忽大意,都可能对测试结果造成影响。因此,要求测试人员应当有较高的专业技术水平和丰富的经验,能够细致地完成每一项测试任务。
1.3 数据库实体测试
数据库测试对于计算机软件开发而言,是一项非常重要的工作。通过对数据库实体进行测试,能够及时发现开发的软件的各种功能是否合理,以及这些功能在各种环境中的运行是否稳定、可靠,这对于软件的使用具有一定的影响。不仅如此,实体测试可以有效解决数据冗余问题,对软件的优化至关重要。当数据库测试完成后,测试人员可针对发现的问题及漏洞提出相应的处理建议,以便弥补软件数据库的缺陷和不足。
1.4 数据库的基本测试过程
1.4.1 创建查询
创建查询是数据库测试的第一步,主要目的是测试数据库的正确性和准确性[2]。要求测试人员应当对相关的数据库语言加以熟练掌握,如SQL、DML等,同时还要对数据库的结构有一个大体的了解,随后便可开始对数据库进行测试。
1.4.2 数据表查询
在进行测试过程中,测试人员可以通过对数据表的查询,来验证程序GUI的操作结果,当数据库的容量较大且其中存储的数据较多时,会使数据表的查询量随之增大,此时可以使用相应的工具来完成查询。
2 计算机软件开发的数据测试技术
对于计算机软件开发而言,数据库的测试尤为重要,直接关系到软件功能的发挥。因此,必须对数据库的测试予以高度重视,并在测试中,结合具体的测试内容,采取合理可行的方法和技术,提高测试效率,确保测试结果的准确性。
2.1 压力测试
在开发计算机应用软件的过程中,当数据库构建完毕之后,测试人员应当对数据库进行压力测试。任何一款应用软件要想发挥出自身所具备的各种功能,都必须保证软件本身的正确性,这也是评价软件开发质量的关键指标之一。而对数据库进行压力测试的主要目的在于评测软件的响应速度。软件的响应速度越快,表明其质量越高[3]。计算机软件开发时,软件的响应速度会受到诸多方面因素的影响,比较常见的因素(见图1)。
图1 影响计算机软件响应速度的关键因素
通过对数据库进行压力测试,能够对开发出来的软件程序的实际响应速度进行判定,从而为软件质量评价提供依据[4]。如果在某一段时间当中,突然出现大量用户并发访问,那么很可能对软件功能造成影响,为了避免这种情况影响软件的正常使用,则应在软件开发时,对数据库进行压力测试。如购物网站的流量压力测试,很多购物网站经常都会搞一些力度非常大的促销活动,在活动开始的这段时间内,登录和浏览购物网站的用户数量会激增,所以在系统软件开发时,必须对数据库进行压力测试,从而了解在大量数据占用数据库空间时,软件能否保持稳定运行。对数据库进行压力测试,能够帮助用户分析软件所能承受的最大压力,从而使用户可以按照系统的实际情况,对业务接口及开放时间进行调整。
目前,可用于数据库压力测试的技术方法相对较多,比较常用的有Web测试、数据库自动测试工具等。在对数据库进行压力测试后,若是无法满足实际的使用需求时,则需要对数据库的反应时间进行优化,具体的优化过程中,可以应用的工具包括:JMeter、.NET等。不同的优化工具适用于不同的项目,比如在基于Java的项目中,可以使用JMeter对数据库的反应时间进行优化调整,而.NET则可为相关的集成开发环境提供有效的测试方法。为进一步提升数据库的压力测试及优化效果,测试人员应当对各种测试工具的适用条件加以了解和掌握,并在不同的开发系统中进行合理选用。
2.2 容量测试
对于计算机软件而言,数据库的主要作用是对各类数据信息进行存储和管理,数据库的容量越大,能够存储的数据资源就越多,管理效率也就越高[5]。所以在软件开发的过程中,需要对数据库的容量进行测试,从而判断数据库是否能够满足软件的使用需求。在对数据库的容量进行实际测试时,记录的数据量为每个字段占用的字节数总和,而数据表的数据量则是记录数据量与记录数的乘积,各个数据表中数据量的总和就是数据库的实际容量。在计算机软件开发过程中,数据库作为整个软件功能得以实现的前提和基础,其容量大小至关重要,而数据库的容量除了与数据表的大小有关之外,计算机软件系统还有很多会占用数据库的容量,比如各类视图、数据信息的存储过程以及系统表等等,上述实体全部都会占用一定的数据库容量。在数据库中,表内的数据是基本数据,通常情况下,系统日志文件的容量约为预留文件容量的2倍左右。数据库容量测试常用的工具为DataFactory,这是一种能够快速生成测试数据且带有直觉用户界面的测试工具,通过该测试功能,可以在较短的时间内构建起复杂的数据关系[6]。从本质的角度上讲,DataFactory是数据产生器,软件开发人员可利用该工具产生正确的测试数据库,该工具支持多种类型的数据库,如Oracle数据库、SQL Server数据库等等,不仅如此,还支持ODBC连接,可将之作为数据库容量测的首选工具。
2.3 数据一致性测试
在计算机软件开发中,当数据库的实体测试完成之后,还要对数据表的一致性进行测试,以此来确保数据库中所有数据信息的一致性。对数据的一致性进行具体测试的过程中,也将有重点地进行测试。
2.3.1 表的主键
在数据库的表中,有一个列或列的组合,它的值能够唯一标识表中的每一行,这就是表的主键,其主要作用是强制表的实体完整性。通常情况下,一个表只能有一个primary key约束,并且约束中的每列不能接受空值。表的主键除了可以加快数据库的操作速度之外,还能使数据库自动完成新添加数据主键值的检查。所以在对表的一致性进行测试时,应当先对表的主键进行测试。在实际测试中,测试人员应当了解计算机软件的开发需求,并以此为依据,对表的主键进行测试。由于每个表的主键均有与之对应的数据记录要求,只有主键完全一致,才能使数据库满足软件的使用需要。若是表的主键测试结果显示出不是唯一的记录,则说明表的主键存在不一致的情况,此时必须对表的主键进行重设。
2.3.2 表间主外键关系
在数据库中,外键又被称之为外关键字,是一致性测试的重点环节之一,具体包括的测试内容为字段长度、字段类型、字段信息等,通过测试保证主外键关键字段的长度与数据表的一致性要求相符,若是存在不符的情况,则应当对主外键进行重新设置。在此需要着重阐明的一点是大部分计算机软件在开发时,常常会忽略主外键的测试,这样容易影响测试结果的准确性,可能会引起某些字段出现偏差的情况,从而对软件的功能造成影响。所以在数据库测试中,应当对表间主外键关系的测试予以重视,采取相应的方法确保测试结果的准确性。
3 计算机软件开发中数据库性能测试的评测方法
3.1 测试程序设计
为在计算机软件开发过程中,对数据库的整体性能进行评测,设计一款具有分布式特点和实时监控功能的测试程序。同时,要求设计的测试程序能够对数据库的正确执行能力进行测试,主要包括数据库的原子性、一致性、隔离性和持久性。结合联机事务处理过程,对数据库测试程序的基本结构进行设计(见图2)。
图2 数据库测试程序框架结构示意图
本次设计的测试程序中,控制器可对图形界面进行测试管理,整个测试器由两个模块组合而成,即性能测试模块和数据库执行能力验证模块;负载发生器采用的是多个PC系统,以分布式的方法进行部署,这样能够使测试程序的设计成本大幅度降低[7]。该测试程序能够对各种类型的数据库进行测试,具有良好的通用性。此外,为使各个模块之间的通信顺畅,选用TCP协议。
3.2 性能测试模块
在提出的数据库性能测试程序中,具体评测功能模块的设计情况(见图3)。在测试模块中,测试管理、系统监控、测试报告、截图均为监控器的功能。当测试人员启动测试程序后,可以通过测试管理功能,对实际的测试场景进行构建,据此发起数据库的性能测试[8]。
图3 测试模块功能示意图
在具体测试的过程中,测试程序能够对数据库的整体性能及负载曲线进行实时监控。测试程序中的负载发生器由以下模块组成:日志管理模块、负载管理模块和通信管理模块,不同的模块具有不同的功能,如日志管理能够对测试日志的输出程序进行控制,以此来平衡模块的性能[9]。通过对事务请求及相关运行参数的调用,可对测试结果进行统计,包括响应时间等内容。访问控制模块在被测目标的系统端运行,因不同的数据库具有不同的功能,为实现测试程序最大化兼容的目标,在设计时,采用C++语言对每个事务进行实现,从而满足不同类型数据库的性能测试需要。
3.3 构建性能测试指标
为满足数据库性能评测的要求,根据数据库测试目标,在测试程序设计中,确定了几个测试指标。
3.3.1 并发数
这是数据库性能测试中较为重要的一个指标,即数据库能够支持的最大并发用户连接数,该指标可用于数据库并行连接能力的评测。
3.3.2 响应时间
该指标是请求从发出到接收结果的时间,包括负载发生器与测试目标之间的通信时间。通过该指标可对数据库的处理速度进行评测。
3.3.3 资源利用率
这个测试指标能够对数据库的空载和满载运行时的资源使用情况进行统计,由此可对数据库的运行情况进行评价。
3.3.4 验证失败数
这是一个具有功能性的测试指标,当数据库测试中出现验证失败的情况后,测试程序会认定数据库不满足原子性、一致性、隔离性和持久性的要求。
3.3.5 恢复时间
数据库在使用过程中不可避免地会出现问题。当问题发生后,恢复时间的长短非常重要,该指标可对数据库恢复时间进行测试。
3.4 ACID验证
3.4.1 实现方法
数据库的ACID验证包括以下四项内容:原子性测试、一致性测试、隔离性测试以及持久性测试。规范给出数据库ACID验证中,每一项特性的测试,可以采用的事务与测试时执行会话的顺序。鉴于此,文章所设计的测试程序,参考规范中给出的方法,对数据库的ACID进行验证。其中原子性测试借助通信TradeOrder事务进行验证;一致性测试则是通过对各个数据表中对应列的值进行比较来达到验证的目的;而隔离性的测试是根据规范给出的顺序进行验证;持久性测试以引入故障的方法,对通信恢复时间进行测试。因规范并没有给出的获取相关参数的方法,所以在测试程序设计时,所有的参数均采用随机的方式生成,这样可以保证Egen的规律不会被破坏。
3.4.2 测试结果分析
选取数据库中较具典型性和代表性的Oracle和MySQL作为测试对象,数据库的配置情况如下:表Customer记录数均为5 000,数据库文件的大小分别为43.5 G和43.8 G。测试平台在Linux操作系统下运行,对每个数据库进行10次验证。经过测试得到如下结果:两个数据库的原子性、一致性和隔离性均未出现验证失败的情况。因持久性测试需要付出较高的代价,故此不进行恢复性测试。通过其余三项测试结果可以证明,此次设计的数据库测试程序合理可行。
4 结语
综上所述,在计算机软件开发中,应当对数据库测试予以重视,采取合理可行的方法和技术,对数据库进行压力测试、容量测试及一致性测试。同时,为提高数据库性能的测试效率,并确保测试结果的准确性,提出一种测试程序,其适用于绝大多数类型的数据库,可使测试结果重现,具有良好的推广使用价值。