当前位置: 首页 > news >正文

数据库回归测试

为了安全地变更现有的软件,不论是重构它还是增加新的功能,你都需要验证在完成变更后没有造成什么破坏。换言之,你需要对系统执行一次全面的回归测 试。如果你发现造成了某种破坏,就必须进行修复,或图1.4测试先行的开发方式者回滚所做的变更。程序员在开发领域代码的同时开发一个完整的单元测试套 件,这种做法在开发社区中已经越来越普遍,实际上,敏捷开发者喜欢在编写“真正的”代码之前先编写测试代码。就像你测试应用的源代码一样,难道你不应该测 试你的数据库?重要的业务逻辑以存储过程、数据有效性规则、参照完整性(RI)规则等形式实现在你的数据库中,这些业务逻辑显然应该经过彻底的测试。

测试先行开发(TFD),也称为测试先行编程,是一种演进式的开发方式,你在编写新的功能代码之前必须编写一个会失败的测试。正如图1.4中的UML活动图所展示的,TFD包含以下步骤:

 

1. 快速增加一个测试,主要是要有足够多的代码,以使得这个测试会失败。

2. 运行测试以确保新的测试确实会失败。通常是运行完整的测试套件,但是由于速度的原因,你可能决定只运行完整测试套件的一个子集。

3. 更新你的功能代码,使它能通过新的测试。

4. 再次运行测试。如果测试失败,回到第3步。测试成功则开始下一轮工作。

TFD的主要好处在于,它迫使你在实现新的功能之前对其进行仔细的思考(你实际上是在做详细设计),它确保你有测试代码来验证你的工作,并且它给了 你演进系统的勇气,因为你知道无论什么时候,如果你的改动破坏了系统的某个部分,你都可以立即检测到。就像拥有应用源代码的完整回归测试套件使得代码重构 可以进行一样,拥有数据库的完整回归测试套件使得数据库重构可以进行(Meszaros 2006)。

测试驱动开发(TDD)(Astels 2003;Beck 2003)是TFD和重构的结合。你先是采用TFD的方式编写代码,在代码能工作后,你根据需要对它进行重构,以确保你的设计具有很高的质量。在进行重构 时,你必须重复运行回归测试,以检验是否破坏了系统的某个部分。

一个重要提示是,你可能需要几种单元测试工具,至少对你的数据库需要一种,对外部程序中使用到的每种编程语言各需要一种。幸运的是XUnit工具家 族(例如,针对Java的JUnit,针对Visual Basic的VBUnit,针对.NET的VUnit,以及针对Oracle的OUnit)是免费的,相互之间保持着很好的一致性。

相关文章:

  • SELinux深入理解
  • Android应用资源---绘制资源类型(Drawable)(五)
  • 查看 SELinux状态及关闭SELinux
  • Linux下Qt与mysql建立连接
  • poj 2192 Zipper
  • centos下查看tomcat的版本号
  • 浅谈UML中常用的几种图——用例图
  • [转]项目中Struts/Spring/Hibernate的基本流程
  • mac brew 安装 nginx fpm mysql 教程
  • 微软等公司数据结构+算法面试100题--链表
  • UIPickerView的使用
  • 目标板UBI工具交叉编译
  • 一个web项目web.xml的配置中context-param配置作用
  • Puppet安装dashboard
  • 非常有用的并发控制-循环栅栏CyclicBarrier
  • 时间复杂度分析经典问题——最大子序列和
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • [译]前端离线指南(上)
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • C++类中的特殊成员函数
  • ECMAScript6(0):ES6简明参考手册
  • gcc介绍及安装
  • HashMap ConcurrentHashMap
  • IDEA 插件开发入门教程
  • java8 Stream Pipelines 浅析
  • java多线程
  • js递归,无限分级树形折叠菜单
  • laravel 用artisan创建自己的模板
  • 搞机器学习要哪些技能
  • 工作手记之html2canvas使用概述
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 记一次删除Git记录中的大文件的过程
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 网络应用优化——时延与带宽
  • 物联网链路协议
  •  一套莫尔斯电报听写、翻译系统
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Git) gitignore基础使用
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (安卓)跳转应用市场APP详情页的方式
  • (二)斐波那契Fabonacci函数
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (转)母版页和相对路径
  • .Family_物联网