重构连载之在保险索上走钢丝

当我们开始系统重构的时候,不是着手去修改代码,而是首先建立测试机制。不论什么程序,只要是被我们修改了,理论上就可能引入BUG,因此我们就必须要进行测试。既然是测试就必须要有一个正确与否的评判标准。以往的测试,其评判的标准就是是否满足业务需求。因此,测试人员往往总是拿着需求文档测试系统。

与以往的代码修改不同,重构没有引入任何新的需求,系统原来什么功能,重构以后还是这些功能。因此,重构的测试标准就只有一个,就是与之前的功能完全保持一致,仅此而已。

然而在许多经典的重构书籍中,大师们总是建议我们首先建立自动化测试机制,这已经被我在无数次实践中证明是不现实的。要知道我们现在重构的是一个遗留系统,它往往设计混乱,接口不清晰,程序相互依赖。所有这些都使得最初的自动化测试变得非常困难而不切实际。

因此,从一开始就实现自动化测试是不切实际的,我们所能采用的还是手工测试。在重构之前首先将系统启动起来,执行相应的功能,得到各自相应的输出。然后开始重构,每次重构对代码的修改量不要太大,花费的时间不要太长。因为,修改量太大,花费时间太长,一旦测试不通过,很难定位错误的原因。在这种情况下,我们只能还原代码,将此次修改的工作完全作废。如果此次修改已经花费了你数天甚至数月的时间,这样的损失就实在太大了。

每做一次重构,修改一点儿代码,然后提交,对系统进行一次测试。如果系统依然保持与以往一样的功能,重构成功,继续进行下一次重构。如果不是,你不得不还原回来重新重构。频繁地测试着实让你挺烦的,但却有效减少了重构失败带给你的损失。一个折中的办法就是,平时频繁测试的时候,测试项目少一些,只测试主要项目,定期再进行全面地测试。录制QTP[1]脚本也是一个不错的方式,它虽然有诸多问题,但却可以在系统重构初期有效地建立自动化测试,系统级别的自动化测试。随着系统重构的不断深入,我们的程序开始在改善,耦合变得越来越松散,程序变得越来越内聚,接口变得越来越清晰。这时候,当自动化测试条件成熟时,我们才可以逐渐开始自动化测试,而这种自动化测试才是建立在代码级别的真正的自动化测试。

一旦某个修改测试不通过,则还原回来。这种一次一小步的修改模式,我们形象地称之为“小步快跑”。在测试集成工具的不断监督下一点一点地修改程序,是系统重构异于以往的另外一个特点。通过小步快跑可以使我们在重构的过程中,以最快的速度发现修改的问题,将因修改错误带来的损失减到最小,毕竟是人都不可能避免犯错。

[1] QTP,Quicktest Professional的简称,是一种自动测试工具。使用QTP的目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/project/

时间: 2024-10-25 16:26:03

重构连载之在保险索上走钢丝的相关文章

重构连载之软件修改的四种动机

软件,自从被我们开发出来并交付使用以后,如果它运行得好好的,我们是不会去修改它的.我们要修改软件,万变不离其宗,无非就是四种动机: 1.增加新功能: 2.原有功能有BUG: 3.改善原有程序的结构: 4.优化原有系统的性能[1]. 第一种和第二种动机,都是源于客户的功能需求,而第四种是源于客户的非功能需求. 软件的外部质量,其衡量的标准就是客户对软件功能需求与非功能需求的满意度.它涉及到一个企业.一个软件的信誉度与生命力,因此为所有软件企业所高度重视.但是,就在所有企业高管把软件外部质量放在高于

重构连载之一个真实的谎言

经过前面的一番讲解,相信你已经对系统重构有了一些初步的认识了.一切的一切仿佛在告诉我们,系统重构总是与需求变更无关.但此时,我不得不告诉你这是真实的谎言. 我们的软件系统总是处于一种变化之中,并且往往是一种由浅入深.由易到难的过程.但是,当系统复杂程度发生变化时,我们应当及时调整我们的设计,来适应新的变化.然而我们没有做到这一点,所以我们的系统维护变得越来越困难.要解决我们的问题必须通过系统重构去优化我们的程序,使之重新适应业务需求.毫无疑问,需求变更才是我们去重构的主要动因. 然而,系统重构要

重构连载之大布局与小步快跑

以往我们在重新设计一个系统时,总是喜欢大布局.全面地整理系统需求,全面地分析系统功能,再全面地设计系统.开发.测试.这样一个过程往往会持续数月,花费大量的工作量.但是,不到最后设计出来,谁都不知道会不会存在问题.这就是"大布局"的弊病. 正因为如此,软件大师在讲述系统重构时总是强调,系统重构应当避免大设计,而应当尽量采用一个一个连续不断的小设计.这就是我们所说的"小步快跑"的设计模式. 小步快跑体现出了敏捷软件开发的特点--简单与快速反馈.不要想得太多了,活在今天的

我读经典(5):读《大话重构》迷你书有感

        最近,我在一个QQ群里面看到有人在讨论一本书,叫做<大话重构>.在闲暇之余,我下载了该书的电子版,是一本迷你书,只包含了4 章内容.读完这本迷你书,结合自身的工作,我想说一下自己对于重构的看法.        重构,是一把双刃剑,开发人员不要轻易使用.举个例子来说,你现在正在从事某个行业的工作,但有人告诉你另外一个行业赚钱多而且快,于是你就很纠结,到底要不要改行呢?不改行吧,钱挣得少:改行吧,自己又是新手,对那个行业又不熟悉.这种心理状态其实就是开发人员对于重构的态度,可以用&

【机房重构】一步一步往上爬——企业管理器,好好利用

这么些天,一直在机房重构中.这么些天,从刚开始的迷茫,到已经完全理解七层间的调用,现在是敲代码敲得恶心了.因为自己好像什么都没有做,只是在一遍又一遍的敲重复的代码,有时候,真的不想干了.但不干是不行的,所以,还是想找些其他方法,在挥去一些厌烦情绪的同时,自己也学习些新的东西. 因为太多重复的代码,所以导致了自己不想敲下去,在经过了一些新的尝试后,总算是有种柳暗花明的感觉.那么,本篇博客就将介绍一下在机房收费系统中数据库中的企业管理器的应用,它的强大,以前只是听说或者看过,但自己还没有尝试过.这一

上海为冬淡蔬菜上保险防止菜贱伤农

人民网上海12月28日电 (叶胜舟.吕网大)上海将为"冬淡"蔬菜上保险,防止蔬菜集中上市可能产生的"菜贱伤农". 记者28日在上海市"冬淡"青菜成本价格保险会议上获悉,为充分发挥农产品价格保险服务农业生产的积极作用,继续探索并逐步完善上海蔬菜价格风险的保障机制,自明年1月1日起至2月底前,只要青菜种植面积在2亩以上.且上市期间符合保险规定期限的上海市郊蔬菜龙头企业.专业合作社.蔬菜园艺场和重点种植大户等,均可向安信农保公司投保"冬淡&q

什么是系统重构

前面我们提到了,面对软件工业时代的到来,我们的软件企业陷入了一种更深的迷茫之中,一种"后有追兵,前有悬崖,进退两难"的境地.后有追兵:面对维护了数十年之久的大型遗留系统,我们到底改还是不改?不改,面对越来越多的需求变更,我们维护的成本越来越高,变更变得越来越困难:面对不断涌现的新技术,使我们的系统显得越来越丑陋与落后:面对越来越多的竞争者,使我们面临着被市场淘汰的风险.前有悬崖:原本运行得好好的软件系统,凑合一下还可以运行几年.一不小心改出问题了,企业立马就歇菜儿了,面对大量的用户投诉

重构,不要积压!

本文讲的是重构,不要积压!, 最近有很多关于重构的讨论或问题出现在清单和会议上,这些讨论和问题围绕着是否要将重构的"故事"放入积压工作中.即使"技术债"变多,这还是一个毋庸置疑的坏主意.原因如下:  项目开始的时候,代码是空白的.工作的区域平坦干净,生活是美好的,这个世界是属于我的.一切看起来都那么美好.  我们可以轻松顺利地建立起功能,哪怕我们似乎总会遇到一些波折.除了有点匆忙,一切看起来都是那么完美.我们不会注意到任何弊漏而且会迅速地让新功能上线.  然而,我们

因为你没加密 所以网络保险不给你理赔

安全专家表示,安全事件频频登上报端引发了网络保险业的蓬勃发展,但这一市场目前十分复杂. 首席信息官(CIO)和首席信息安全官(CISO)面对的最悲苦的事,恐怕就是在重大网络安全事件后进行损害评估了.责难成山,却少有人能公平看待.而到向网络保险索赔的时候,概念混淆的存在,还会使这个责任推卸游戏变得更加复杂. 典型的企业网络保险争论通常是这样的:CEO或董事长把CISO叫到办公室,告诉他保险公司只愿意支付38%的索赔,因为"你没对受影响的应用实现加密". CISO说:"首先,我不