`
realreal2000
  • 浏览: 74990 次
  • 性别: 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,确实很好
经常揪出的问题认真看看就发现一些设计和编程的经典坏习惯
消除告警不是目的,能牵引团队学到很多

相关推荐

    配电网重构_配电网_配电网重构_电网重构_非线性优化_配电网络重构_

    配电网重构是一个多目标、多时段、多组合、多约束的非线性优化问题。该问题的复杂性,决定了难以用单纯的数学方法得到满意的解。尝试用改进的遗传算法进行配电网络重构,建立评价函数,寻求该评价函数最优解

    vim-coffeescript-refactoring:在vim中为Coffeescript重构工具!

    vim-coffeescript-重构在vim中为Coffeescript重构工具! 同样的感觉有感谢你可以帮忙新想法,错误...请打开问题。 你有一些规范或例子,请 forkit 并将它们添加到测试中并提出拉取请求:) 您知道 vimscript 请提出一...

    fb_refactor:Fizz Buzz 重构 - 2015 年 3 月 7 日开始

    fizzbuzzrefactor 嗡嗡声重构当页面加载时,应该提示用户提供一个数字。 最简单的方法是使用 prompt&#40;&#41; 函数,但您也应该随意创建一个简单的文本输入,其中包含告诉用户输入数字的文本。 您需要编写一个命名...

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

    机器视觉算法与应用一书中的三维平面重构工程实例的代码及素材。

    refactor-test-suite:用于C ++重构工具的测试套件

    随着时间的推移,我尝试将运行时断言添加到代码中,以便在重构区域周围进行额外的测试。 尽管这些断言有助于验证工具应用的重构的有效性,但测试用例的通过与否取决于调用重构工具并检查差异的人员。 通常,在评估...

    软件开发-重构

    重构是对软件内部结构的一种调整,目的是在不改变软件之可察性前提下,提高其可理解性,降低其修改成本。关于重构的至理明言如下:任何一...  当你感觉需要撰写注释,请先尝试重构,试着让所有的注释变得多余;  当你

    Piranha过时代码自动重构工具-其他

    在属性文件中指定与标识相关的 API 列表之后,该工具会输入标识名称和预期处理行为,并根据这些来自动重构代码。 特性标识(feature flags)通常用于启用逐步推出或尝试新功能。在某些情况下,即使在达到标识目的...

    Eclipse中自动重构实现探索

    本文用eclipse的自动重构功能对一个程序实例进行重构,目的是探索Eclipse自动重构可以在多大程度上辅助重构这个过程。程序实例使用《Refactoring:Improving the Design of Existing Code》一书中的例子。 Eclipse的...

    AndroidMemo:尝试重构

    Android备忘录 尝试重构。 来源: :

    sudoku-kata:编码实践证明了一种非常冗长的方法。 尝试重构此方法

    尝试重构此方法。 整个练习包含一个功能(Program类中的静态方法Play)。 它具有大约1,000行代码,并按照以下步骤实现了整个Sudoku游戏: 构造一个完全解决的数独板-此步骤确保有解决方案从电路板上删除一定数量的...

    recorder-wav-mp3:重构 recorderjs 和 recordermp3js 的尝试

    重构以更好地分离关注点 返回 WAV 和 MP3 修复了通过以死空气结尾MP3 输出长度加倍的问题 在用户点击记录之前不再要求麦克风访问 显示保存到 Firebase 的示例 ##去做 录制时添加可视化工具 仅当 cfg.debug = ...

    图像重构matlab代码-pix2vertex:使用图像到图像的翻译进行无限制的面部几何重构

    :我们发布了此存储库的,并鼓励您尝试一下! 2018.07.20 :将后期postprocess分散到组成管道的不同步骤中,将模型更改为float以节省空间。 设置和用法 该项目已在具有Matlab R2015b的Ubuntu 14.04 LTS上进行了测试...

    code-refactoring:在车间使用的代码重构示例

    每次重构尝试都需要您编写测试。 在他前面! 每次重构都会导致应用程序工作方式中的意外更改。 适当计划的测试可以防止更改后的倒退或操作失败。练习题任务01任务02 修改PowiadomienieORozprawieServ

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

    在属性文件中指定与标识相关的 API 列表之后,该工具会输入标识名称和预期处理行为,并根据这些来自动重构代码。特性标识(feature flags)通常用于启用逐步推出或尝试新功能。在某些情况下,即使在达到标识目的之后...

    GUROBI9.0求解Nonconvex规划 配电网重构matlab源码+项目说明.zip

    于是尝试YALMIP跟Gurobi直接编程相结合。 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息...

    refactoring-guide-in-turkish:土耳其重构指南

    英语翻新指南 前言 该文档之所以出现在GitHub上,而... 为了理解重构的概念,首先,让我们尝试了解什么是纯净的简单代码,阻止纯净代码并导致其编写不良代码的原因是什么,换句话说,什么是技术债务,什么是技术债务

    RefactoringTest:重构测试Carlos Cantillo-BDC

    尝试使此练习保持在3小时以下。 如果您在3个小时后仍然有需要改善的地方,请写下来,我们会予以考虑。 局限性 LegacyApp.Consumer中的Program.cs类根本不会改变。 这包括using语句。 假定此代码库是更大系统的一...

    与帮助者重构视图阅读v-000

    使用助手重构视图 目标 了解如何以及何时使用辅助方法 为特定控制器创建辅助方法 创建应用程序范围内的助手 故事strftime 假设我们正在开发博客应用程序。 实际上,我们甚至不必想象,因为本课程中包含一个博客应用...

    RSClassic-202-Refactored-Client:尝试给出理智的名称并将理智的流程返回给RSClassic 202 deob

    RSClassic-202重构客户端 尝试给出理智的名称并将理智的流程返回给RSClassic 202 deob 基于我的工作,我和马克·戈尔一起开始了工作。 此时,IDK是谁对RSC-202进行了添加或更改的内容,所以不要问。 我将继续改进它...

Global site tag (gtag.js) - Google Analytics