找回密码
 FreeOZ用户注册
查看: 1763|回复: 14
打印 上一主题 下一主题

[软件技巧] 重构技术 Refactoring- Use PMD to start

[复制链接]
跳转到指定楼层
1#
发表于 6-6-2008 19:02:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
发一个以前在itpub发的旧帖子,公司里做重构的研究时候自己写的。

=====================================================================================================
最近在重构产品代码,下载了PMD,挺好用的,推荐给大家

重构的主要目的是,
1,消灭duplicated code,因为这是bug隐患之一,support team常常修掉了某处的bug,但是因为在另外的地方还有同样的复制代码。即使找到了复制代码,也增加了维护的cost。
2,premote loose coupling, program to interface。这些措施增强了系统的flexibility,降低来将来的维护cost。
3,refactor to patterns,应用恰当的模式并不一定是立竿见影的效果,但是还是增强了系统的可维护性。

PMD的作用就是分析出代码库的duplicated code,tight coupling,program to implementation等等不良的设计,帮助我们确定好重构的scope,否则,面对成千上万个包,重构将无从下手

http://pmd.sourceforge.net/

PMD scans Java source code and looks for potential problems like:

Possible bugs - empty try/catch/finally/switch statements
Dead code - unused local variables, parameters and private methods
Suboptimal code - wasteful String/StringBuffer usage
Overcomplicated expressions - unnecessary if statements, for loops that could be while loops
Duplicate code - copied/pasted code means copied/pasted bugs

当然,PMD做的很多事情,类似于Code CVS Commit前的validation,不良的代码风格等等。不过,最重要的还是
duplicate code和tight coupling,鉴于这是个opensource project,并且本身也采用了便于扩展的rule设计,你可以写自己的rule,比如不许定义变量为f**k :),然后配置到可定制的ruleset xml里去。已经由PMD实现的ruleset是
http://pmd.sourceforge.net/rules/index.html

要实现高质量的代码,不能单纯依赖developer的自觉,一个iterative的refactoring是必要的。始终让低稳定性的模块依赖于高稳定性的模块,最终实现高效灵活的产品。Nice architecture=Good production.

评分

参与人数 2威望 +40 收起 理由
key + 20 谢谢分享!这个工具的思想很好
flyspirit + 20 谢谢分享!

查看全部评分

回复  

使用道具 举报

2#
发表于 11-6-2008 15:43:24 | 只看该作者

回复 #1 hoopoos 的帖子

回复  

使用道具 举报

3#
发表于 21-6-2009 02:42:36 | 只看该作者
感觉PMD误报比较多,我比较烦它的报告。不过它检查copy/paste这个功能挺好。

大部分时候我用FindBug为主,简单好用,用PMD为辅助。

总体来说PMD比较powerful。
回复  

使用道具 举报

4#
发表于 21-6-2009 13:12:29 | 只看该作者
对于只写新代码,不改旧代码的理想开发方式

这个东西的用处没那么大
回复  

使用道具 举报

5#
发表于 21-6-2009 13:15:59 | 只看该作者
重构的关键是编写Unit Test。
回复  

使用道具 举报

6#
发表于 21-6-2009 15:53:00 | 只看该作者
其实大部分公司都不会做refactoring的,从管理层的角度看不到value。
回复  

使用道具 举报

7#
发表于 21-6-2009 16:13:05 | 只看该作者
重构是非常重要的,value很大
回复  

使用道具 举报

8#
发表于 21-6-2009 16:27:01 | 只看该作者
回复  

使用道具 举报

9#
发表于 21-6-2009 17:34:41 | 只看该作者
基本不做refactoring,
重构成本非常大。
首先要有unit testing 支持,unit testing 搭建环境,维护比较费时间。
然后写mock代码,
用CC进行check in build>
成本太高了。
必须要有牛人,才能支持。
而且对team member的要求也非常高。
回复  

使用道具 举报

10#
发表于 21-6-2009 18:48:08 | 只看该作者
我们是XP开发方式,经常重构,unit test 都是最初开发就写好的,很少为了重构再写unit test。
代码提交前要在本地运行一遍大部分的单元测试
提交后测试服务器隔几个小时自动进行一遍check in build,并运行全部的测试。
大家习惯了就好了,没感觉重构有多麻烦。
回复  

使用道具 举报

11#
发表于 21-6-2009 19:05:01 | 只看该作者
原帖由 清风不写字 于 21-6-2009 18:48 发表
我们是XP开发方式,经常重构


"Code refactoring is the process of changing a computer program's internal structure without modifying its external functional behavior or existing functionality, in order to improve internal non-functional properties of the software"

XP方式的开发,绝大多数情况下,对代码的改动并不属于refactoring的范畴
回复  

使用道具 举报

12#
发表于 21-6-2009 20:41:35 | 只看该作者

回复 #11 yuba 的帖子

可能我刚才没说清楚。
我说的重构就是在为了提高代码质量和重用性的非功能性改动。
有时候是在要对某部分添加新功能顺便先对需要重构的老代码进行重构,有时候就是纯粹为了提高某些老模块的代码质量而重构。
可能因为我们公司做的是自己的产品,重构从长远来说也是划算的吧。
回复  

使用道具 举报

13#
发表于 21-6-2009 21:07:17 | 只看该作者

回复 #12 清风不写字 的帖子

这样啊

可能是过于突出xp,造成了我的误解
回复  

使用道具 举报

14#
发表于 21-6-2009 21:53:39 | 只看该作者
原帖由 清风不写字 于 21-6-2009 20:41 发表
可能我刚才没说清楚。
我说的重构就是在为了提高代码质量和重用性的非功能性改动。
有时候是在要对某部分添加新功能顺便先对需要重构的老代码进行重构,有时候就是纯粹为了提高某些老模块的代码质量而重构。
可能因为我们公司做的是自己的产品,重构从长远来说也是划算的吧


产品的话,refactoring还是有一些value的。
项目的话,基本上没有老板会去做。项目维护到一定时间(五年 到 十年),就重做或被新的项目代替。
回复  

使用道具 举报

15#
发表于 22-6-2009 14:10:06 | 只看该作者
原帖由 felix100 于 21-6-2009 16:27 发表


I can only say you come from technical perspective.



no, from business view
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+10, 28-4-2024 01:39 , Processed in 0.050328 second(s), 31 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表