计算机软件开发中的数据库测试技术研究

2022-04-11 22:23胡航语
中国新通信 2022年3期
关键词:软件开发计算机

【摘要】    数据库是指在按照一定的规则与数据结构,来组织、储存、管理数据的仓库,如今市面上常见的任何一款软件应用程序都离不开数据库的使用,而每一款软件都必须要经过数据库测试通过后,才能正式投入使用。基于此,本文主要是对计算机软件开发中,数据库测试的内容与测试方法进行简要探究。希望此文能够在开发测试上,带给软件工作者一点理论帮助。

【关键词】    计算机    数据库测试    软件开发

引言:

随着人们在多种生活情景中对应用软件的功能性需求越来越高,催生设计出了越来越多样化的软件应用程序。软件程序的复杂程度增加之后,就需要功能更加稳定、处理更加高效、安全系数更高的数据库来支持。像是数据处理、信息配置、图像管理这些功能若是完全放到程序中让程序自行管理,那么将会是一个非常巨大的计算量,那软件程序就不存在快速响应的优势了。而软件开发中,数据库测试正是其中一步关键的测试环节。

一、数据库的基础操作

如今市面上的数据库工具多种多样,举几个比较常见的例子,如MS SQL Server2008 r2、Oracle Financial、DB2、PostgreSQL等,在成本、功能性、安全性、稳定性上表现各有千秋。但不论是哪种数据库工具,普通用户在使用软件对应的数据库时都只有四种操作:

Creat-创建用户,建立一种与数据库的映射关系,取得相应的数据库管理权限、数据库用户也就是数据库的使用者,拥有在当前数据库中创建对象、调取数据、备份数据以及处理数据的权限。

Retrieve-检索,为数据调用设置一条逻辑规则,以特定的信息需求为目的,在信息库集合内所有的信息元素中,找出对应的内容并调用,通常情况下为视图检索。

Update-更新,数据表是数据库中最基本的数据存储单元,在旧的数据表结构搭建完成后,根据某种特殊功能用途,将新的数据表以插入的形式来“顶替”旧的信息表,实现对已有数据的修改。

Delete-删除,将已经不需要的数据从数据库的列表中清除,并且在原有的储存位置允许其他新数据进行覆写,此后在数据库内将不会再检索到此信息。

二、数据库测试的内容

Atocity-原子性,它是数据库能够正常运行的基础判定标准。在数据库执行某一事务时,它包含的所有数据操作,只有全部完成与全部未完成两个动作,在数据处理的中间环节将不会突然意外终止,即使事务意外报错未能完成,也会被自动恢复到事务未被执行的状态。数据库中,事务必须是进程的最小量级单位,而软件事务则是指由数据库的操作所成立的一个完整逻辑事件。以银行扣款为例,扣除款项后,还必须要有打款账户,而一扣一进完成两个数据库的对接,才能算作一个完整的逻辑事件,而这种逻辑事件就是软件数据库的事务[1]。

Consistency-一致性,当数据库需要执行某一事务时,期间与事务相关的数据完整性不能遭到破坏,在数据库中后写入的数据,必须在预设规则上与此前保持一致。这样才能确保数据库检索的数据是相对准确的,且由于数据执行同一种预设规则,所以数据库中具有相同特征的数据才会具有一定关联性关系。

Isolation-独立性,数据库在执行多种不同事务时,会同时对各自对应的数据进行调用与修改。而若是不能将它们完全独立开来,就会因为事务交叉执行导致同一组数据因前后不一出现逻辑错误。因此在数据库中需要将多种并行事务以四个不同的管理级别进行隔离:读未提交、读提交、串行化和复读。

Durability-永续性,软件库在执行事务时,数据处理必须是永久性质的改动。即使是数据删除,也应当是将信息调出后再进行清除的过程,而不是数据丢失。哪怕是系统出现了故障,改动后的数据也应当是被存储在数据库中的。数据库的稳定性问题,正是来源数据修改储存的永续性特点[2]。

三、数据库测试的基本流程

(一)创建查询

以SQL数据库工具为例,创建查询首先需要使用Transact-SQL语句创建信息库的标识,而后将Transact-SQL语句描述的数据库名称与标识设置为第一key值,再保存该数据库的信息作为第一value值,得到第一组KV数据记录。然后在该数据库中建立一个数据表,将数据表的名称与数据库的名称设置为第二key值,再保存建立的数据表名称作为第二value值,得到第二组KV数据记录。最后再在上一步建立的数据表中写入新的数据,将数据表与数据的名称设置为第三key值,保存这组写入数据的信息作为第三value值,得到第三组KV数据记录。可供SQL数据库工具使用的查询语句只有“Select”,在利用KV数据库创建查询时,还需要开发人员结合其他语句一同组成不同的查询功能指令[3]。

(二)数据表查询

查询数据表是数据库测试中最容易简单理解的过程,它是通过对SQL数据库的数据表形成来验证应用程序GUI操作的结果是否合理,其主要操作分为单表查询与多表查询两种:

单表查询的工作相对于多表查询来说工作量要少,但它需要开发人员足够的细致耐心。首先要对数据表的所有字段的所以方式进行查询,制定一个特定的字段条件后,查询被制定的记录。而后需要对带有“in”与“like”字符的所有关键字符的匹配关系,进行查询比对。接着需要查询数据表的條件描述,查看“and”与“or”的逻辑关系是否严密,除此之外还要对数据库的COUNT、SUM、MAX、MIN、AVG五类集合函数进行查询[4]。最后是对数据表中的空值进行查询,空值Null是一个不可用的,没有被分配且无法得到的值,它与0和空格有着本质上的区别,在数据表中空值可能会引起一些算法结构发生改变,会使这组算法的快速访问与索引功能失效。在完成单表的所有查询工作后,需要将查询结果全部分类排序后,使用LIMIT工具对查询结果的数量进行修改与限制。

而多表查询,则是在单表查询的基础上,展开对含有any、some、all、exists、in等关键字以及运算符的子查询。除此之外还要对多表连接的形式进行查询,以双表连接为例,一共分为:内连接查询、外连接查询与复合条件查询三种形式。但该过程需要软件开发人员投入大量的时间精力,对于数据容量庞大的数据库,想要完成所有数据表的查询工作也是非常困难的。

(三)开发人員查询

开发人员查询是测试数据库最容易操作的方法,利用GUI工具在数据库上运行任意CRUD操作与SQL查询后,在开发人员中获得它的验证结果。若是在开发人员中找到了语句描述错误,或是与用户需求不符的语句描述,就可以直接对不合适的语句进行修改了。

四、数据库测试的内容

(一)设计测试

为了使数据库能够更好地满足于应用程序的CRUD操作,对数据库中的数据表都是采用规范化设计的,常见的规范化范式有很多种,如第一范式到第五范式,和BCNF范式等。而常见类型的应用程序数据库的逻辑设计,都以第三范式的要求规范为参考,这是一种将单个的数据表拆分为多表连接结构的查询管理规则,尽管牺牲了一定程度的查询速度,但换来的却是容易维护的表结构。我们暂时将数据库理解为一个有形实体,它的内部主要是由表、视图与储存规则组成的,那么设计测试就是以数据库的表、视图、储存规则三个实体结构为对象,展开的测试,通过设计测试可以检验数据库的三个组成元件是否在设计上合理、充分,是否存在逻辑纰漏,以及每个元件是否具备极佳的拓展性。设计测试主要是为了检验应用软件在功能上存在的不足,以及删去影响软件响应效率的冗余数据,而设计测试的过程并不是测试技术人员独立完成的,一些存在着争议的问题,还需要通过与软件的设计人员的沟通了解来解决。

设计方面的测试通常情况下若无特殊需求,可以仅仅对数据一致性进行测试,其中主要包括了表主键测试、表与表主外键关系测试、删除一致性测试三种:

1.表主键测试。表主键的测试应当遵循下列原则:一是测试人员必须要能够对数据库的表结构拥有一定了解认识,并基于表结构的特性展开相应的测试,如过程性表结构与非过程性表结构的测试逻辑方法和语句描述均有不同;二是在对数据库内部表主键进行测试时,必须是基于数据库的实际运行基础上的,以满足测试结构的精准性要求;三是按照各个不同的表信息规定,对测试结果对应的显示记录进行同步记录,如果出现测试结果对应多种不同记录的情况,应当重新对表主键进行测试,而如果显示记录未出现,则说明在测试过程中,表主键始终保持一致性,无需进行下步优化。在实际测试时,为了减少测试工作量,可以考虑找出一个SQL脚本,如SELECT * FROM information_schema.tables`类型的循环代码,用于测试表内主键的存在。

2.表与表外主键之间的关系测试。测试表主外键的要点在于建立搜索语句的逻辑,表主外键同样是一种主键,应当以表主外键的语句字段长度与语句类别为突破口。这种通过检查表与表主外键关系,来确认数据库检索逻辑一致性的方法被称为Dbcc,它是通过两个方面来实现的:一是利用checkstorage、checktable或checkdb工具,以页级或行级为单位检查页链、行链以及指针的准确性,其中可供优化的部分是指针的空间占用问题;二是利用checkstorage工具来检查行或页的分配关系。关于表与表外主键关系的一致性测试,通常在下列情况必须要进行:一是备份数据库操作时,为了备份数据库的完整性,必须进行Dbcc测试;二是当软件系统出现报错信息时,必须要检查数据库是否受到损坏;三是对数据库运行有日常维护检查需求的软件,这种软件的数据库完整性完全取决于sa或dbo,需要定期运行Dbcc来进行测试;四是当出现单一某个表损坏时,提取该表的损坏信息,检查同主键关系性质的其他数据表是否同样存在损坏。

3.删除一致性测试。基于上文中的CRUD操作理论,出于保护隐私或者其它功能目的,数据删除本身就是用户经常使用的一个访问数据库功能。因此在对存在级联性质数据表的数据库进行测试时,必须要保证数据库数据删除的一致性。级联关系的数据表我们可以简单地理解为一种插入临时表的性质,如数据表1是对包括数据表2在内多种数据集合的描述,如果我们将数据表2全部删除,那么数据表1中与之相关的所有数据描述都理应被一同删除。但这种级联关系的数据表经常会使用的一种存在关系是依靠主键ID来记录的,当将下一级表信息删除后,因为数据库本身在一致性上的逻辑设计上存在不足,而留下被删除信息的主键ID。因此确保数据库删除的一致性,能够为软件用户在处理海量无用数据时,带来极大的便利。

(二)容量测试

鉴于数据库容量对于数据库功能实现的重要性,它的测试优先级甚至还要高于性能测试。我们都知道数据库所能存储的数据量并不是无限大的,为了使数据库能够适应不断激增的数据处理量,除了数据库本身逻辑合理之外,还要对数据库容量进行初步估算,为软件程序的用户提供可靠的参考。那么数据库的容量测试,可以利用以下公式来进行简单估算:数据库容量=Sum所有表数据量;表数据量=每条记录的单个数据量*总记录目数;记录数据量=Sum单个记录包含所有字段的占字节。其中需要注意的是,容量测试时需要分析单表单行的各种数据类型占字节情况,如char类型的字节是固定的;number类型字节可变长,但最多也只能占用22字节;而varchar类型的是按照2/3总长度进行折算的。熟悉各个类型数据的占字规律后,利用数据字典指令来查询每张表的占用空间似乎是一个不错的选择,具体代码为:SELECT*FROM USER_TAB_COLUMNS WHERE TABLE_NAME=”。查询数据字典的显示结果中,在DATA_LENGTH一项中,就记录了该数据表的最大占用字节。但数据表并不是数据库容量的全部,还要考虑系统表、视图表以及实体的存储过程中所占用的实际容量。如何界定一个数据库的容量是否合格,就是看它的容量是否拥有两倍数据库文件量的预留空间,来存放数据库日志文件。

(三)性能测试

确认过数据库的逻辑设计以及容量都能符合用户需求实际后,还需要对数据库的性能进行测试分析,软件程序的性能,很大程度是由数据库的性能来决定的。而应用软件的性能问题,就是用户最关注且最能直接反映程序应用体验的参数。数据库的性能测试由于计算量与操作量极大,无法完全由软件开发测试人员以人工的方式来完成,需要应用一种DATA Factory数据产生器来自动对数据库进行测试。在这个数据产生器中,可以以每秒上百万行的数据生成量,来实际模拟数据库投入使用后在长期运行的条件下对海量数据的存储处理情况。这样测试人员就能够在性能测试过程中,及时发现数据库的潜在问题,对数据库进行性能优化了。当然在性能测试中,需要开发人员注意使用数据产生器时,要注意环境变量条件始终与用户端保持一致,如操作系统、软件版本、硬件配置等。若从软件的长期运行视角来看,在进行性能测试时,必须要能够对实际使用状况进行有效模拟,用专业的测试技术与测试软件来进行性能测试。软件性能测试通常情况下,就是通过数据发生器,在正常的使用环境与系统条件下,通过重复性地物理验证操作,来验证软件是否满足了某些性能指标。

(四)压力测试

数据库的压力测试就是一种对数据库的访问上限、并行事务上限以及响应速度展开的一种物理测试。假如某一软件后台同时登录访问数据库的用户过多,那么数据库同一时间内单次访问操作的响应速率一定会慢于正常情况,一旦超过了软件数据库的压力阈值,甚至会使软件在访问数据库时出现卡顿甚至崩溃,而这是软件开发的客户所不愿意看到的。我们对软件进行压力测试的目的,就是假想一种理论上的该软件最大用户承载的情况,查看数据库的压力阈值是否能够满足一定比例的软件用户同时访问数据库操作的需求。该阶段与性能测试一样都无法由人工独立操作完成,需要借助自动化测试软件来对数据库的索引、触发器、实体存储过程以及数据锁进行承载性验证。通过自动化测试软件描述的测试结果,我们就可以间接地获知SQL语句与数据存储过程是否还存在继续优化的空间与必要了。进行压力测试的自动化测试软件的类型有很多,例如Jmeter适用于所有的JAVA基础的软件项目,而Net项目则在本身自有的开发环境中含有用于压力测试的工具与方案。

五、结束语

综上所述,数据库测试是软件开发中必不可少的重要环节,它是指对软件的数据库结构、与调用数据的方式和逻辑关系进行验证、分析的过程。只有完成数据库测试,找出逻辑设计与功能性上的缺陷并对其进行修改優化,才能使软件程序各项功能的正常使用,与程序本身的运行稳定性得到保障。

参  考  文  献

[1]王天云.软件开发中的数据库测试技术研究[J].无线互联科技,2013(2):69-69.

[2]周国裕.浅谈计算机软件开发的数据库测试技术[J].网络安全技术与应用,2021(05):62-63.

[3]郭俊杰.数据库测试技术在计算机软件开发中的应用[J].信息与电脑(理论版),2021,33(07):113-115.

[4]张赟.计算机软件开发的数据库测试技术[J].电子技术与软件工程,2020(17):150-151.

作者单位:胡航语    西北工业大学计算机学院

胡航语(2001.05-),男,汉族,陕西西安,本科,研究方向:数据库、软件。

猜你喜欢
软件开发计算机
《计算机与网络》期刊征订
中国计算机报202007、08合刊
中国计算机报2019年48、49期合刊
中国古代的“计算机”
信息安全环境下的计算机软件开发研究
核电厂定期试验管理软件开发
FPGA软件开发过程中编码规范的作用
一体式,趋便携雅兰仕AL-225
计算机:看我72变等3则