`
realreal2000
  • 浏览: 77798 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

重构-我们在尝试

阅读更多
Refactory, 敏捷4个个人实践之一。

推荐一本书,重构-改善既有代码设计,非常好的一本介绍重构的书籍。

其实对于软件来说,我们面对两种情况,一种是我们新增加或者修改的代码,一种是系统遗留的代码。

参加过一个培训,这个培训说,以前的代码很烂,那是以前的人留下的,可是我们现在在做什么呢,我们现在也许在为以后留下烂代码。

所以我们需要重构,何时重构?

如果团队推广TDD的时候,那么每一个测试用例通过的时候,都需要在看看代码,是不是有坏味道,有的话,需要消除掉。

如果没有的话,那么我们需要时刻注意,当你准备复制粘贴的时候,那么你需要考虑下是不是需要重构了。

使用工具,FindBugs是个不错的选择。

那一次培训还接触到了一个新的东西,圈复杂度,至于怎么计算,网上有说,我们应该能够容忍我们的圈复杂度在10以下。

对于系统遗留的代码又如何呢?

三次原则,如果我们在老代码的三个地方看到同样的代码,那么我们就需要对其进行重构。因为三次看到一段代码,表明它在系统的活跃度很高,需要抽取。

至于如何写出好的代码,没有臭味道的代码,很难,很难,我们认为的好代码,其实就是我们看的最多,看的习惯的。

还有一本书也不错,简洁代码之道,这本书上重很多角度提出了我们应该怎么写出简洁的代码。

在组内,我们为每一个用户故事,都给出了4-8个小时的重构时间,让大家回归一下,我们的代码是不是有坏味道,足够的测试能够保证,我们在重构时候不会伤害软件的功能。
分享到:
评论
15 楼 huangyuanmu 2010-06-11  
daquan198163 写道


图不错,清晰明了,拿来借用咯
14 楼 huangyuanmu 2010-06-11  
楼主推荐的那本书,去年先看了电子书,后来又买了gigix翻译的实体书,不错。但是具体还没有太多机会去实践。findbugs也试用了下,效果不错。一直想敏捷,但是没能敏捷起来,还欠火候,还需学习和积累经验。
13 楼 shuiguozheng 2010-06-10  
  我正在下载这本书。。
12 楼 showr 2010-06-07  
<<重构 - 改善既有代码设计>> + << 设计模式 >> + <<Thinking in java>>

在看中 ...

都是经典之作 ...
11 楼 狂放不羁 2010-06-06  
gigix 写道
嗯,最近认真用了一下findbugs,确实很好
经常揪出的问题认真看看就发现一些设计和编程的经典坏习惯
消除告警不是目的,能牵引团队学到很多



哈哈,刚买了重构第二版。重温下。
10 楼 changkunyang 2010-06-04  
恩,很有启发性
9 楼 jiangduxi 2010-06-03  
重构的原理倒是不难,但是要运用的很好倒是难事,不过findbugs,PMD的原理倒是希望那位能够发帖讲解下,谢谢了。Hudson确实在持续发布有很大的帮助尤其是加上Sonar。
8 楼 double_f 2010-06-01  
       1
7 楼 rubys 2010-06-01  
抛出异常的爱 写道
gigix 写道
嗯,最近认真用了一下findbugs,确实很好
经常揪出的问题认真看看就发现一些设计和编程的经典坏习惯
消除告警不是目的,能牵引团队学到很多

我可以理解findbugs的原理
但对PMD的原理总是模模糊糊.

把原理给小弟们说一下吧 
6 楼 pipilu 2010-05-31  
楼上是想说hudson吧?
5 楼 realreal2000 2010-05-31  
mock1234 写道
realreal2000 写道
如果团队推广TDD的时候,那么每一个测试用例通过的时候,都需要在看看代码,是不是有坏味道,有的话,需要消除掉。
你们有多少TDD的小测试?等它真的多了,并且完全了,比如你不会故意忽略一些功能测试而只做十几二十几个小练习,也不会故意借口gui不好测试而不写TDD,那时再回想这个帖子吧。

TDD有个原则,你应该主动把没有TDD保护的代码删除掉(注释掉)。这时候,你会有各个方面、各个层次的几百个TDD测试程序,才可能形成一个小程序的保护网。先做好这个,再说什么重构。(原因是我觉得你说的“经验”容易变成作废的东西)


我们有接近17000个测试用例,使用代码覆盖率的机制,代码必须被覆盖,是我们的口号,当然作到这个很难。

但是现在也存在问题,我们代码要求必须没有测试失败,才能提交,全跑一次测试需要15-30分钟。。。

当然这些测试还是不够全面的,我们还有自动的多版本兼容测试,自动边界测试,多版本自动边界测试。

所以下一步就将往持续集成上走,用hudson(谢谢,呵呵),每次提交代码,自动运行,能够很大的提高工作效率
4 楼 fengfeng925 2010-05-31  
realreal2000 写道
Refactory, 敏捷4个个人实践之一。

推荐一本书,重构-改善既有代码设计,非常好的一本介绍重构的书籍。

其实对于软件来说,我们面对两种情况,一种是我们新增加或者修改的代码,一种是系统遗留的代码。

参加过一个培训,这个培训说,以前的代码很烂,那是以前的人留下的,可是我们现在在做什么呢,我们现在也许在为以后留下烂代码。

所以我们需要重构,何时重构?

如果团队推广TDD的时候,那么每一个测试用例通过的时候,都需要在看看代码,是不是有坏味道,有的话,需要消除掉。

如果没有的话,那么我们需要时刻注意,当你准备复制粘贴的时候,那么你需要考虑下是不是需要重构了。

使用工具,FindBugs是个不错的选择。

那一次培训还接触到了一个新的东西,圈复杂度,至于怎么计算,网上有说,我们应该能够容忍我们的圈复杂度在10以下。

对于系统遗留的代码又如何呢?

三次原则,如果我们在老代码的三个地方看到同样的代码,那么我们就需要对其进行重构。因为三次看到一段代码,表明它在系统的活跃度很高,需要抽取。

至于如何写出好的代码,没有臭味道的代码,很难,很难,我们认为的好代码,其实就是我们看的最多,看的习惯的。

还有一本书也不错,简洁代码之道,这本书上重很多角度提出了我们应该怎么写出简洁的代码。

在组内,我们为每一个用户故事,都给出了4-8个小时的重构时间,让大家回归一下,我们的代码是不是有坏味道,足够的测试能够保证,我们在重构时候不会伤害软件的功能。


最近也在边看重构这本书,边改老系统的bug。发现改别人系统bug的时候,重构确实是非常好的利器。但是难免还是会引入新的bug,按照书里写的重构配合单元测试,发现确实不错。
3 楼 抛出异常的爱 2010-05-31  
gigix 写道
嗯,最近认真用了一下findbugs,确实很好
经常揪出的问题认真看看就发现一些设计和编程的经典坏习惯
消除告警不是目的,能牵引团队学到很多

我可以理解findbugs的原理
但对PMD的原理总是模模糊糊.
1 楼 gigix 2010-05-28  
嗯,最近认真用了一下findbugs,确实很好
经常揪出的问题认真看看就发现一些设计和编程的经典坏习惯
消除告警不是目的,能牵引团队学到很多

相关推荐

    重构--改善代码结构

    - 如果某次重构尝试失败,应迅速回滚,避免引入新的问题。 - 在进行大规模重构之前,确保有足够的测试覆盖率,以验证重构的效果。 ### 结论 重构是一项既艺术又科学的活动,它需要开发者具备深厚的技术功底和敏锐...

    重构-改善既有代码的设计

    重构是指在不改变软件外部行为的前提下,对软件内部结构进行调整,以提高其可读性、可维护性和可扩展性。这种做法有助于开发者更好地理解和修改现有代码,从而提高软件产品的质量。 #### 2. 重构的必要性 随着项目...

    重构-改善既有代码的设计(简体中文)

    书中深入探讨了重构技术,旨在帮助开发者在不改变代码功能的前提下,优化和改进现有代码的设计与结构,从而提升代码的可读性、可维护性和可扩展性。以下是对书中提及的部分关键重构技巧的详细解读: ### 1. 添加...

    重构-改善既有代码的设计.pdf

    ### 重构——改善既有代码的设计 #### 知识点概览 重构是一种系统化的方法,旨在改进现有软件的内部结构而不改变...需要注意的是,重构并不是一次性的活动,而是一个持续的过程,需要在项目的整个生命周期中不断进行。

    《重构 改善既有代码的设计》之代码的坏味道

    - **解决方法**:可以尝试减少参数的数量,比如通过将参数组合成一个对象(Introduce Parameter Object),或者将某些参数替换为方法调用(Replace Parameter with Method)等方式。 6. **发散式变化 (Divergent ...

    Halcon实现的基于立体视觉的三维平面重构工程代码和素材

    在机器视觉领域,Halcon是一种广泛应用的图像处理软件,它提供了强大的算法库,支持各种复杂的图像分析任务,包括我们今天要讨论的三维平面重构。基于立体视觉的三维重构是计算机视觉中的一个重要课题,它涉及到从两...

    重构中的源码,可能对照重构的书籍进行阅读

    在实际学习过程中,我们可以打开这些文件,逐一分析其中的Java代码,尝试找出可以重构的地方,然后按照重构原则进行改造,以提高代码质量。 总的来说,通过结合理论学习和实际操作,开发者可以更深入地理解重构的...

    c#窗体重构 窗体重构教程

    在C#编程中,窗体重构是一个常见的任务,它涉及到改变窗体的外观和行为以满足特定需求。本文主要探讨如何实现自定义窗体的皮肤重构,...在实践中,不断尝试和优化,你将能够熟练掌握这一技术,为你的应用程序增添亮点。

    重构避坑指南2.txt

    在深入探讨具体的重构技巧之前,我们先来了解几个重构的基本原则: 1. **确保测试覆盖**:重构前确保有完整的单元测试覆盖是非常重要的。这样可以保证在重构过程中及时发现引入的新bug。 2. **小步快走**:每次只...

    Piranha过时代码自动重构工具 v0.3.24.zip

    首先,我们来理解一下什么是代码重构。代码重构是不改变代码外在行为的前提下,对代码结构进行改进的过程,旨在提高代码的可读性和可维护性。Piranha通过识别代码中的过时模式,如废弃的API调用、不再推荐的语法结构...

    Android开发教程之重构程序

    在本教程中,我们将尝试应用 MVC 模式来重构 Bmi.java 这个简单的 BMI 计算程序。原程序的 `onCreate` 方法包含了许多处理用户界面元素的代码,这使得方法过于臃肿,不利于后期的维护和扩展。下面我们将逐步分析并...

    看大师如何重构代码(java程序员必看)

    为了提高代码的可维护性,我们可以采取以下步骤进行重构: 1. **识别并提炼重复代码**:首先,识别出所有重复的代码片段,然后将其提炼成独立的方法或类。 2. **优化类结构**:检查每个类的职责是否过于繁重,如果...

    投影梯度法系数重构(GPSR)

    1. **回溯线性搜索**:这是一种用于确定步长的方法,它在每一步中都尝试缩小或扩大步长,直到满足某种条件为止。这种方法在Stephen Boyd的《Convex Optimization》一书中有所介绍。 - **目的**:确保每一步的移动...

    关于starccm+面网格技术-包面、表面重构、自动表面修复 硬件工程师电路分析物联网模电单片机嵌入式技术.doc

    修复机制分为重构和修复两步,前者尝试保持原始几何形状,后者可能需要删除部分表面并填充孔洞。系统还提供选项来自动删除小的、断开的零部件,以优化最终网格结构。自动修复的触发条件可以基于穿孔面、表面接近值和...

    31天 重构速成 pdf

    根据提供的信息,我们可以推断这份文档主要关注的是“重构速成”的相关内容。下面将围绕这一主题展开详细讨论,包括重构的基本概念、为何进行重构、重构的常见策略与技巧,以及如何在实践中快速提升重构能力。 ### ...

Global site tag (gtag.js) - Google Analytics