`
yuanjinxiu
  • 浏览: 656233 次
文章分类
社区版块
存档分类
最新评论

请修改这段程序,立刻!

 
阅读更多

你们正在开发一个新项目,你在一个地方看到一段有问题的代码。错误的处理方式是,“啊,别人写的,我最好别碰它”,“我没有时间去改它——我有自己的事要做”,“如果我修改它,肯定会改出问题”。

问题是——有问题的代码会越积越多。即使是很小的一段程序,经过一段时间的累计,你很快就能看到它成为一个“由一些菜鸟写的、没人愿意去维护的 巨大的历史遗留项目”。有人曾说,超过6个月的项目全是“历史遗留”项目,因为里面都会积累大量的有问题的代码,或用另外一个词——技术债务。

这就是为什么你要马上修改它们的原因。当你看到一些有问题的代码,或一些不是好的写法的东西——改掉它。立即。否则,当你再次注意到它时就已经 太晚了,因为其它的代码就开始依赖它,新的代码会模仿这种编写风格(也许是拷贝/粘贴而来),修改这些东西将会变成你的噩梦。让我们把上面错误的做法纠 正:

“啊,别人写的代码,我最好别动它”——什么?你的项目团队的一员,你有“权力”去修改它。如果有人把代码写的很糟糕,他可能并没有意识到自己的代码很烂——所以,他们不会改正它。不要认为改正这些代码会冒犯他们。他们也许会没面子,但不是因为你。

“我没有时间去修改它——我有自己的事要做”——这就是你的事。你可以在你的缺陷跟踪里添加上一条任务,写上“重构X”,写上花费的时间。你也可以把它推迟到下一个sprint(如果是敏捷开发)。管理层坚持认为开发新东西比修改旧程序重要吗?告诉他们去读读《重构》这本书或Spolsky的文章..或本文。(也许不管用,但不妨试一试)

“如果我修改它,肯定会改出问题”——也许。但是,等一下,你们有单元测试用例,不是吗?还有集成测试,确认测试。如果没有——先把这些补齐了。这样你就不用担心把程序改坏了。

代码审查是避免这样的代码很重要的方法。如果提交的代码都经过了代码审查,未被察觉的有问题的代码会大幅度的减少。仍然会有,但会少的多。

对于这样的做法唯一的问题是——如何确定一段代码是有问题、需要改进的?这就需要经验了,需要你熟悉好的开发方法和模式。对这个问题我不能给出一个秘诀。但你需要在团队里有一群能明辨是非的程序员。如果没有——读一读《代码大全(Code Complete)》(以及《Effective Java》,如果你们使用的语言是Java。)

所以——请马上修改。这会省下你的时间,免去你的头疼,让你对这个项目更有自豪感,而不是“这烂项目是一些菜鸟写的,我只是做了一些辅助的工作。”你不能这样说——如果项目很烂,你难辞其咎。

分享到:
评论

相关推荐

    任务计划管理程序V1

    这段时间研发了一个任务计划管理程序V1(绿色免安装),供各位新老客户下载使用. 软件语言:简体中文 软件类型:任务计划管理程序V1/绿色版 运行环境:Win2003, WinXP, Win2000, NT, WinME + .Net Frawork 2.0 软件...

    K算法加密程序,带加密和解密程序,解密程序有登陆设置!

    这个程序的加密原理很简单,就是先将一段文字用base64编码,然后再用凯撒编码,再输出。 压缩包内文件夹: zh-cn:中文的程序和源码 lib:程序类库和源码,关于怎么用这个库就看代码就行了 Wizard:没做完,是个...

    后台隐藏程序(1) 以后还会逐步的完善!!

    这个程序有一个BUG 大家打开任务管理观察进程 它几乎是在飞快的增加!我不知道这个能占用内存多少... 这个程序是我从网上看到的 我稍加修改了一下,在此谢过无名大侠! 注意: 要求电脑装有 formwork2.0 极其以上版本

    一段修改注册码的程序

    希望更多的高手来挑战这个程序,并教我如何破解!

    全新最火表情包小程序源码流量主无限裂变斗图小程序

    这是一套独立后台版的表情包小程序,这套源码现在非常的火,目前正版的价格在110左右,表情包黄色的版本,个人感觉设计挺漂亮的。 后端源码采用的是ThinkCMF6.0的框架,前端是微信原生的代码,后端服务器配置推荐:...

    【增强版短视频去水印源码】去水印微信小程序+去水印软件源码.zip

    注:接口是公益的,那么多人用解析慢是肯定的,前段和后端源码已经打包,上传服务器之后在配置文件修改数据库密码。然后输入自己的域名,进入后台,创建小程序,输入自己的小程序配置即可 安装说明: 上传源码,...

    matlab仿真程序,二阶MASs,事件触发机制 这段代码是一个带有领导者的二阶多智能体的领导跟随一致性仿真 以下是对代码的

    这段代码是一个带有领导者的二阶多智能体的领导跟随一致性仿真。以下是对代码的分析: 1. 代码初始化了系统参数,包括邻接矩阵A、拉普拉斯矩阵L、系统的领导跟随矩阵H等。 2. 代码定义了一个二阶系统的微分方程模型...

    汇编程序学生成绩管理系统

    这是一个学生成绩管理系统,其中 “i”表示插入, “l”表示浏览, “q”表示查询, “e”表示退出, “d”表示删除, “m”表示修改, “c”表示统计各分数段人数, “p”表示打印...

    c#局域网聊天程序(貌似QQ)_CPPK

    这是一个我自己做的c#局域网聊天程序,...上面的句句代码都是我一个人写的,本人感觉这个程序是优加加的好,有意者想要源码,请与我联系,一同学习C#。我的qq:137570086 请在添加好友中说明是“研究c#”!谢谢合作……

    多线程程序模拟(不在任何操作系统下运行).

    实现了单任务多线程的线程切换技术,其中包含了源代码,光盘镜像文件和演示说明。...上传这段代码主要目地:我建了一个汇编初级算法群,大家有兴趣欢迎加入!QQ群:112700973。初级汇编算法欢迎你的加入!

    ASP(ajax)计算机竞赛答题程序源码

    '转发时请保留此声明信息,这段声明不并会影响你的速度! '*************************计算机竞赛******************* ' '作者tww(qq:43637507)、lyl '网站:http:// '电子邮件:43637507@qq.com 'WEB开发群:4531488 'QQ...

    面向对象程序与设计作业 实验二实验报告.doc

    (1)这个程序在编译时会出现错误,请根据出错提示信息找出出错的原因。 (2)修改程序中的错误,使之能正确运行。 实验2.设有一个点类Point的定义如下: Point { public: Point() {x = 0; y = 0; } Point...

    世纪山东主机程序

    网站的基本结构还是用第一版程序编写,程序前台美工,和网站的后台功能都有较大的修改,前台的话大家可以看看我们的程序,在这里只简单的介绍一个后台的功能,后台包括。基本资料 [1] 公告管理 [2] 产品管理 [3] ...

    数字签名更改程序

    更改签名数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的...数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。

    ASP计算机竞赛答题程序(AJAX版,题型:选择题,判断题,录入题)

    '转发时请保留此声明信息,这段声明不并会影响你的速度! '********************************************计算机竞赛******************* ' '作者tww(qq:43637507)、lyl '网站:http:// '电子邮件:43637507@qq.com 'WEB...

    计算机程序设计比赛试卷[修改版].docx

    计算机程序设计比赛试卷[修改版] 第一篇:计算机程序设计比赛试卷 计算机程序设计比赛试卷 (考试时间120分钟,总分100分 ) 说明: 1、比赛使用语言:C、C++、VB 2、题目完成后,存放在D:\Test下以题号名单的...

    Java常见的面试程序题

    最常见的Java面试题大全的程序面试程序,很有影响力的哦!好好珍惜这个资料吧!有Java的常见面试题的冒泡,常见的算法,继承,多态 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与...

    ChatGPT3.5小程序开源vue

    首发ChatGPT3.5小程序开源vue!这一版本ui比较好看 回复速度也快了 小程序是java的 带后台 本来准备给你们带上接口的然后么后台是和接口连接的【未测试小程序源码,仅供参考学习】 我改什么内容你们前段都会显示...

    图形学基础部分程序段MFC

    //修改Cohen-Sutherland直线段裁剪为开窗 //从重心向外用画三角形逐渐填充整个三角形 //画一个菱形块 //填充一个由菱形块组成的“菱形块k*k棋盘格” //z缓冲区算法的一个简化的用于演示的程序 //检查点(xp,yp)在直线...

    国内山寨随机视频聊天程序

    2、申请到类似“ABQIAAAA54YSddnq2S4aS6WRs-jSNRRxJ3KsNDxbOF8X47Xxn0Jf1cNodRRMT-FmiX_vEKM1rEGDeGW2W7Cebw”这样的密匙之后用记事本打开Index.htm和Other/v.js查找这段密匙替换成你的即可。 3、打开Other/v.js...

Global site tag (gtag.js) - Google Analytics