8个驯服烂代码的原则:bjdp.org第13次编程道场回顾


* 时间:2014.02.23, 2:00-5:45pm

* 地点:北京直真科技技术股份有限公司

* 参加人数:24人

* 活动主题:驯服Trivia烂代码(Java版)

* Java版Trivia未驯服前源代码:https://github.com/wubin28/trivia/tree/master/java

* 伍斌第一次驯服Trivia的源代码:https://github.com/wubin28/TriviaJava

* 伍斌第二次驯服Trivia的版源代码:https://github.com/wubin28/TriviaJava-2nd


* 活动过程:

1. 伍斌介绍编程操练和驯服Trivia烂代码的一些体会

2. 在座匠友用绘图和代码做自我介绍

3. 伍斌现场编码演示驯服Trivia烂代码的一些步骤

4. 在场匠友结对编程驯服Trivia烂代码(每对7分钟)


* 整理出的8个驯服烂代码的原则:

1. 正在被客户端使用的服务端的公共接口不能改

2. 如果没有测试保护,则不能改相关代码

3. 让不能改的公共接口尽量地窄

4. 尽量早地消除重复代码

5. 尽量用整洁的代码替代注释

6. 对于无法修改且“词不达意”的公共接口,要添加what注释

7. 要编写粒度大些的验收级别的测试,比如验收特征测试(Acceptance Characterization Test),来覆盖尽可能大的范围,且与实现细节解偶,有利于方便地进行代码接口实现层面的重构,减少测试编写和维护的数量

8. 尽量多用SonarQube做代码内在质量的静态扫描


* 回顾要点:

- 在重构前,一定要先写测试代码,把要重构的代码先保护好,之后才能重构。

- 为获得最大限度的效果,在做驯服烂代码的结对操练前,各位匠友应该事先预习Trivia烂代码的逻辑。主持人在得知大部分与会者都未预习的情况下,在一开始应该增加一起阅读代码和添加注释的环节。

- 在重构代码时应该要考虑性能(伍斌的观点:在重构代码时,若能先把代码的可读性和可扩展性重构好,那么就能让提高性能的工作更加轻松。)

- 除了消除明显的重复代码,也要消除那些不大明显的重复代码

- 在消除魔法数的过程中,同时也想把魔法数转移到另一个新类中,感觉有些顾此失彼。建议一次只作一件事,即可以先在那个“身兼数职”的原有类中消除魔法数,再把魔法数转移到一个新类中。

- 在测试代码中,创建待测的类的实例这条语句,应该放到@Before里面,使得每个测试运行前,都能得到一个崭新的实例。而不要作为测试类的一个成员变量,以避免不同测试之间共享一个实例而造成相互干扰。


- 了解到SonarQube这个做静态代码内在质量扫描的工具

- 编程操练的形式很好

- 可以考虑以后再办一次驯服烂代码的道场

- 驾驶员和副驾驶介绍思路时声音太小

- 驾驶员敲代码和介绍思路时速度较快,使得副驾驶不了解驾驶员的思路

- 副驾驶刚刚换上时,应与驾驶员做相应的沟通

- 下次编程道场可以请大家自带电脑分头两两结对编程,而不是都轮流共用那台连接投影仪的电脑(伍斌的观点:这两种情况各有利弊,不过我个人觉得后者能让大家更专注,效果会更好)


* 疑问

- 驯服烂代码不知从哪里开始(伍斌的观点:先从区分哪些是不能修改的接口开始。)

- 结对编程的目的是什么?两人如何配合?如果两人想法不同该怎么办?(伍斌的观点:结对编程的目的就是“知识的相互传递”,对于个人能增长技能,对于公司能减少因专职负责某个模块的程序员生病、休假而造成的“单点故障”,让团队更健壮。结对编程中,两人的想法肯定会有所不同,这一点即使在日常不编程的工作中,也会时时碰到。我个人认为,解决方法也和日常碰到的情况一样,即需要掌握良好的沟通方法,比如要摆正沟通的位置:沟通不是为了说服对方,而是为了了解对方。您了解对方越多,您就越能和对方配合好。)


喜欢我今天的文章,不妨点击右上角按钮分享到朋友圈,以广结善缘。无论是否喜欢,都可回复本条微信,我必看必回。


您看到的上面我写的文章,首发于微信公众号bjdp_org。该公众号服务于我创办的bjdp.org公益编程操练社区。在这里,程序员们聚在一起,编程、学习、找乐子;和测试工程师一起结对编写验收测试代码;与产品需求专家一块探讨如何能让软件开发的成果不离谱。程序员、测试工程师和产品需求专家,是密不可分的“三兄弟”。


欢迎在微信上搜索bjdp_org关注北京设计模式学习组。


如果您想看本公众号以往的精彩内容,请回复m

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kent Beck、Martin Fowler、Michael C. Feathers、Robert C. Martin、Joshua Kerievsky、Gerard Meszaros等大师们的传世著作为如何提升编程技艺和代码质量提供了思想和原则上的指导,本书则为实践和融合这些思想、原则提供了过程和方法上指导。本书通过编程操练的方式讲述了如何用TDD(测试驱动开发)的方法来驯服代码,通过结对编程的对话形式展示了驯服代码的完整过程,将驯服代码所需要的思想、态度、习惯、方法和技艺完全融入编程操练实践中,是目前最具实践指导意义的驯服代码的著作。, 全书共20章,分为四个部分:第一部分(第1~10章)首先通过测试后行和测试先行两种方法完成了一个名为“码农酒店”(世界时钟)的编程操练题目,然后对这两种方法进行对比,引出了代码的概念,读者能非常直观看出哪一种方法更容易写出代码。第二部分(第11~15章)通过一个名为Trivia(答题闯关游戏)的经典编程操练题目详细讲述了驯服一段代码的过程,首先讲解了代码腐臭的识别和记录,然后讲解了如何通过一系列的重构来清除这些腐臭。第三部分(第16~18章)通过三个编程操练题目详述了编写真正的单元测试的过程,首先讲解了用提取接口的办法编写Stub来进行单元测试,以及用子类化并覆写方法的办法编写Mock来进行单元测试,然后讲解了如何将被测类与文件系统之间的这种不适用于单元测试的耦合,转化为被测类与字符串之间这种适合与单元测试的耦合。第四部分(第19~20章)总结了驯服代码的步骤及方法,首先讲解了TDD开发方法的一种实现:I-EPP-TR方法,该方法中的全面重构的概念对传统的重构概念进行了扩展,然后讨论了如何才能将前面所讨论的良好的编程方法形成习惯并固化下来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值