重写前人的Code? 天啊,这其中必有冤情阿!
一支历史悠久的报表,若干年后人事已非但是主管交代你改写,报表跑一次要四小时且中间就有可能会死掉,能帮你的只有源代码,你(你)要怎么办呢!?以下是我的血泪记录。
前阵子主管忽然跟我说有支年度报表的程序需要作些修改,因为跑出来大概要三四个小时,且有可能在中间就死掉了,
所以困扰那个部门很久了,希望我们可以看看问题出在哪里,所以这档事就变成我那阵子的梦靥....(泣)。
第一眼看到源代码,我就再想他怎会这样子写呢,但是又害怕其中有冤情,所以就进入了以下的轮回。
-
绝望
因为根本不知道从何下手,也因为年代久远人事已非没有人可以询问,也没有人敢确定那些逻辑是否还是正确,
且注解也写的很玄啊,所以一整个茫然啊(空)!。
-
从好懂的先整理
只好从一些比较简单的Method先去看懂其中的意义,改一下命名方式,或是一些你确定不会影响报表
产出的元素,改的时候还是很抖啊...!
-
再次绝望
改完上述敢改的之后,我也不知道还能在做什么了,所以又停滞了一阵子,做些其他项目来让自己不要这么空虚,
天啊,这玩意儿好难懂啊,我冏了。
-
开始有希望
或许是因为太久没改怕对不起主管以及那些User,不知道哪里来的勇气以及希望,所以我开始大幅度设计那边要更动,
也不再害怕哪边可能会大挂点,因为至少先有个样子再说嘛(先求有再求好嘛)。
-
快速结案
大量修改源代码,因为已经到这地步了,不赶快把它了结也不行啦,常言道:头都剪了,不洗不行了(= =a)。
-
大量Bug蜂涌而至
妈啊,怎么这么多虫虫啊,虽然前面已经有心理准备,但是常常改一个再跑三个出来,认命啦,修改吧!胖皮,
改完啰,现阶段好像都ok啰,也好一阵子没有什么User Call啰,看来是真的结案啰(大误)!
-
觉悟(另一说绝望)
又过了一阵子,又有问题跑出来了,且我发现源代码内真的是有隐情啊,才了解人家当初为什么这样写嘛....,
所以又修改之后,我希望不要又过一阵子后又要再重演了(虽然我知道这一定会的!),也希望若干年后有人重写我这段的话
他也可以了解我现在的痛,哈哈。
我想以后如果还有机会改写前辈的Code,我想我会更有经验的。^^
这是我观看 The 7 stages of refactoring 后的血泪记录。
原文:大专栏 重写前人的Code? 天啊,这其中必有冤情阿!
原文地址:https://www.cnblogs.com/chinatrump/p/11458438.html
- 将Spring Boot应用程序部署到Bluemix
- Opencv学习(一)——安装配置遇到的问题
- The .NET of Tomorrow
- 国内自动驾驶企业在美国首秀其最新L4级自动驾驶货运卡车
- Nginx源码安装及调优配置
- Greenplum 简单性能测试与分析
- CentOS6 安装couchdb2 集群
- 如何遍历维数和各维上限未定的多维数组
- 求长度的另一种方法(""+obj).Length
- ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现
- GreenPlum 简单性能测试与分析(续)
- 最终版 Reflector v1.0 (+简单的反流程混淆)
- 性能&分布式&NewLife.XCode对无限数据的支持
- ASP.NET MVC下的异步Action的定义和执行原理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- jupyter notebook修改默认路径和浏览器
- python selenium while 循环
- implicitly_wait()隐式等待
- [已解决]python FileNotFoundError: [WinError 3] for getsize(filepath)
- [已解决]ValueError: row index was 65536, not allowed by .xls format
- 记一次由Redis分布式锁造成的重大事故,避免以后踩坑!
- ES6部分源码重写 -1(ES5-构造函数解析)
- ES6部分源码重写 -2(ES6-构造函数初步解析)
- ES6部分源码重写 -3(ES6-ES5的方式来手写部分源码)
- ES6部分源码重写 -4(1-classES7中的扩展)
- ES6- Set-1之使用方法
- ES6- Set-2之去重—并集—交集—差集
- ES6- Map-1介绍及常用api
- ES6-简介
- ES6-babel工具的使用