求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
 
单元测试和设计模式在重构中的应用
 

2010-07-28 作者:小陆 来源:小陆的blog

 

本文结合一个事例谈谈设计模式在重构中的应用。在重构过程中,单元测试发挥了很大的作用。这是一个报表系统,每天将公司分散在各处的数据收集产生各种报表。本文只拿出系统的数据访问层面做例子。

系统需要处理的数据源比较多,系统中建立了一个Connection Pool对这些数据源进行管理,外界使用一个数据源的名称,从Connection Pool中得到相应的数据库连接。按照系统最初的设计,所有的数据源都是Sql Server类型的。数据访问层的大体结构如下:

图中的DBConnection负责处理Sql Server的查询和更新等等操作。程序开发采用了单元测试的模式,对DBConnection建立了相应的测试程序。

随着开发的进行,调查客户的业务环境得到了新的信息,客户的报表不仅需要从Sql Server中取数,还有别的类型的数据源,目前知道的有Oracle数据库。可以很不幸的说,我们被残酷的现实“捉弄”了一次。但是我们被捉弄了一次,决不能再被捉弄第二次。

在添加新的数据访问模块之前,我们必须先重构现有的系统,使之适应多种数据源的访问。在这个过程中很容易就想到了Factory模式。

首先要做的是:解除ConnectionPool和DBConnection之间的直接联系,建立一个数据库连接的接口。于是另外建立了一个SqlDBConnection类,将DBConnection中的实现全部转移到了SqlDBConnection中,修改DBConnection将其定义为一个Interface。

然后,建立一个ConnectionFactory,ConnectionPool建立数据源连接时候从Factory中得到具体的连接类型。在这一系列过程中,单元测试一直在验证的系统的正确性。有必要修改和补充一些Test case.

现在系统的结构如下:

在重构的过程中,单元测试发挥了很大的作用。测试保证了每一步重构都是正确的。这只是一个简单的重构,如果情况稍有复杂,在没有单元测试的情况下进行重构简直是不可能的。

现在万事具备,我们可以将新的数据访问模块接在系统上了:

从这个系统中,我的体会是:系统的设计一开始不一定要是最完备的,不必在一开始就设计的过于复杂。但是一定要留下一定的灵活性,一旦情况需要,该重构就要重构,不能在开发过程中就象打补丁一样添加新的功能。同时,单元测试在重构的过程中非常重要,单元测试是对重构正确性的一种验证。



LoadRunner性能测试基础
软件测试结果分析和质量报告
面向对象软件测试技术研究
设计测试用例的四条原则
功能测试中故障模型的建立
性能测试综述
更多...   


性能测试方法与技术
测试过程与团队管理
LoadRunner进行性能测试
WEB应用的软件测试
手机软件测试
白盒测试方法与技术


某博彩行业 数据库自动化测试
IT服务商 Web安全测试
IT服务商 自动化测试框架
海航股份 单元测试、重构
测试需求分析与测试用例分析
互联网web测试方法与实践
基于Selenium的Web自动化测试
更多...