随着软件Software业迅猛发展我们开发也从以前单层结构进入了 3层架构甚至现在多层架构设计而数据库从以前个默默无闻后台仓库逐渐成为了数据库系统而数据库开发设计人员成为了炙手可热核心人员以前我们往往把数据库操作写在应用层从而提高各个模块独立性和易用性而现在越来越多数据库操作被作为存储过程直接放在数据库上进行执行来提高执行效率和提高安全性
数据库开发既然在软件Software开发比重逐步提高随的而来问题也突出我们以前往往重视对代码测试工作随着流程技术日益完善软件Software质量得到了大幅度提高但数据库方面测试仍然处于空白我们从来没有真正将数据库作为个独立系统进行测试而是通过对代码测试工作间接对数据库进行定测试随着数据库开发日益升温数据库测试也需要独立出来进行符合自身特点测试工作数据库开发和应用开发并没有实质上区别所以软件Software测试思路方法同样适用于数据库测试
从测试过程角度来说我们也可以把数据库测试分为
系统测试
传统软件Software系统测试测试重点是需求覆盖而对于我们数据库测试同样也需要对需求覆盖进行保证那么数据库在初期设计中也需要对这个进行分析,测试.例如存储过程视图触发器约束规则等我们都需要进行需求验证确保这些功能设计是符合需求.另方面我们需要确认数据库设计文档和最终数据库相同当设计文档变化时我们同样要验证改修改是否落实到数据库上
这个阶段我们测试主要通过数据库设计评审来实现
集成测试
集成测试是主要针对接口进行测试工作从数据库角度来说和普通测试稍微有些区别对于数据库测试来说需要考虑是
数据项修改操作
数据项增加操作
数据项删除操作
数据表增加满
数据表删除空
删除空表中记录
数据表并发操作
针对存储过程接口测试
结合业务逻辑做关联表接口测试
同样我们需要对这些接口考虑采用等价类、边界值、猜测等思路方法进行测试
单元测试
单元测试侧重于逻辑覆盖相对对于复杂代码来说数据库开发单元测试相对简单些可以通过语句覆盖和走读方式完成
系统测试相对来说比较困难这要求有很高数据库设计能力和丰富数据库测试经验而集成测试和单元测试就相对简单了
而我们也可以从测试关注点角度对数据库进行分类
功能测试
对数据库功能测试我们可以依赖和工具进行
DBunit
款开源数据库功能测试框架可以使用类似和Junit方式对数据库基本操作进行白盒单元测试对输入输出进行校验
QTP
大名鼎鼎自动测试工具通过对对象捕捉识别我们可以通过QTP来模拟用户操作流程通过其中校验思路方法或者结合数据库后台监控对整个数据库中数据进行测试个人觉得比较偏向灰盒
DataFactory
款优秀数据库数据自动生成工具通过它你可以轻松生成任意结构数据库对数据库进行填充帮助你生成所需要大量数据从而验证我们数据库中功能是否正确这是属于黑盒测试
数据库性能
虽然我们硬件最近几年进步很快但是我们需要处理数据以更快速度在增加几亿条记录表格在现在是司空见惯如此庞大数据量在大量并发连接操作时我们不能像以前样随意使用查询连接查询嵌套查询视图这些操作如果不当会给系统带来非常巨大压力严重影响系统性能
性能优化分4部分
1物理存储方面
2逻辑设计方面
3数据库参数调整
4SQL语句优化.
我们如何对性能方面进行测试呢业界也提供了很多工具
通过数据库系统SQL语句分析工具我们可以分析得到数据库语句执行瓶颈从而优化SQL语句
Loadrunner
这个不用多说我们可以通过对协议编程来对数据库做压力测试
Swingbench(这是个重量级别feature类似LR而且非常强大只不过专门针对oracle而已)
数据库厂商也意识到这点例如
oracle11g已经提供了real application test提供数据库性能测试分析系统应用瓶颈
还有很多第 3方公司开发了SQL语句优化工具来帮助你自动进行语句优化工作从而提高执行效率
安全测试
软件Software日益复杂而数据又成为了系统中重中的重核心从以往对系统破坏现在更倾向于对数据获取和破坏而数据库安全被提到了最前端
自从SQL 注入攻击被发现冒失万无失数据库下从后台变为了前台而旦数据库被攻破整个系统也会暴露在黑客手下通过数据库强大存储过程黑客可以轻松获得整个系统权限而SQL注入看似简单缺很难防范对于安全测试来说如何防范系统被注入是测试难点
业界也有相关数据库注入检测工具来帮助用户对自身系统进行安全检测
对于这点来说业界也有标准例如ISO IEC 21827也叫做SSE CMM 3.0是CMM和ISO集成产物专门针对系统安全领域
另外方面数据库健壮性容错性和恢复能力也是我们测试要点
我们也可以发现功能测试性能测试安全测试是个由简到繁过程也是数据库测试人员需要逐步掌握技能这也是以后公司对数据库测试人员要求
最新评论