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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28579.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TinyML-TVM如何驯服TinyML

TinyML-TVM如何驯服TinyML 低成本,以人工智能为动力的消费类设备的激增,导致机器学习研究人员和从业人员对“裸机”(低功耗,通常没有操作系统)设备产生了广泛的兴趣。尽管专家已经有可能在某些裸机设备上运行某些模型&…

《驯服烂代码》一书章节规划

敝人计划在2014年4月底之前完成《驯服烂代码》的写作,现在已完成第一章(试读链接:http://blog.csdn.net/wubinben28/article/details/17527505)。下面是本书的章节规划,恭请网友指点。联系我可查找我的新浪微博&#x…

GPS 驯服时钟原理

欢迎淘宝搜索 飞灵科技,我司相关新产品陆续上线 由于GPS信号受电离层延时误差,对流层延时误差,多径效应和接受机噪声等影响,GPS接收机恢复出来的pps信号存在一定的随机抖动误差,这个随机抖动误差服从正太分布。除此之外…

炫到爆炸!HuggingGPT在线演示惊艳亮相

大家好,这里是 NewBeeNLP。 最强组合HuggingFaceChatGPT「贾维斯」现在开放demo了。 前段时间,浙大&微软发布了一个大模型协作系统HuggingGPT直接爆火。 研究者提出了用ChatGPT作为控制器,连接HuggingFace社区中的各种AI模型,…

拓展python爬虫(爬取图片)

爬虫爬取图片的简单实例 这里以图片之家为例 首先分析网页 每一页与每一页之间只是list_176_后面的数字不同,所以我们可以根据不同的需求来进行翻页 图片的定位: 小编这里使用的是xpath来进行的定位,比较简单,适合新手 在谷歌…

爬虫实战 谷歌图片爬取 高清图片

目标 date:2020.5.25 author:pmy aim:爬取google图片,关键词cat,两百张高清图(非缩略图) 现阶段:能够实现目标。在之前爬取谷歌图片的基础上(缩略图),这次进行了改进&am…

爬取-搜狗图片

这里我们使用搜狗图片来进行爬取,首先打开搜狗图片网址: https://pic.sogou.com/ 接着在页面上右键–>审查,或者F12选择Network项 然后在页面搜索框输入自己感兴趣的关键字并执行搜索,这里我以中国建筑工人为例,可以…

网络爬虫(基于python的网络爬虫批量爬取图片)

1.模拟用户向指定网站发送请求 需要下载requests模块来模拟用户向网站发送请求,在终端输入如下指令: pip install requests 1> 了解网页结构 学习网页基础(一般由三部分构成,HTML(网页基本骨架)&#x…

Python爬虫抓取网页图片

本文通过python 来实现这样一个简单的爬虫功能,把我们想要的图片爬取到本地。 下面就看看如何使用python来实现这样一个功能。 # -*- coding: utf-8 -*- import urllib import re import time import os#显示下载进度 def schedule(a,b,c):a:已经下载的数据块b:数据…

Python爬取淘宝图片

爬取淘女郎模特图片与相关信息 (一) 解析淘女郎首页网站地址 打开淘女郎首页界面 https://www.taobao.com/markets/mm/mm2017,点击 查看更多,然后 F12 进入网页抓包工具,按 F5观察数据加载变化。审查元素发现&#xff…

【实例】Python爬取淘宝图片

文章目录 一、分析二、代码三、效果 一、分析 》》 第一页时 》》第二页时s48,第三页时s96(每页为48的倍数) 》》当q外套时(q为关键字) 》》用于每页图片的正则表达目标 二、代码 导入请求、报错模块&正则表达式类库 f…

Python3爬虫图片抓取

(1)实战背景 上图的网站的名字叫做Unsplash,免费高清壁纸分享网是一个坚持每天分享高清的摄影图片的站点,每天更新一张高质量的图片素材,全是生活中的景象作品,清新的生活气息图片可以作为桌面壁纸也可以应…

爬虫实战 爬取谷歌图片 Google images

目标 #date:2020.5.25 #author:pmy #aim:爬取google图片 本次爬取主要是为了练习selenium。 分析 爬取的目标如下图,爬取猫猫图片 将google图片顺利爬下来。 由于google图片界面是属于那种往下划会在本页面中加载出更多信息,但未刷新的机…

Python爬虫爬取Google图片

文章目录 urlliburllib.request.urlretrieve urllib3 in python3PoolManagerRequest BeautifulSoup安装 Installation一些函数 Some functionsget_textfind_all(name, attrs, recursive, string, limit, **kwargs)name - 通过标签名搜索kwargs - keyword arguments 关键字参数进…

Python——爬虫抓取图片

/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:李晓凯 * 完成日期:2019年 8 月 19 日 * 版 本 号:v1.0 * * 问题描述: * 输入描述: * 程…

python爬虫(爬取图片)

在家无聊写的爬虫程序,用来爬取图片,由于这个是好久之前写的,有点忘了,写的不详细,后面再写一份详细的 爬虫的基本原理就是: 发起请求->获取响应->解析内容->保存数据 第一步:发…

面试常见题(荷兰国旗问题

面试常见题&#xff0c;荷兰三色国旗问题 挺有意思的 #include<bits/stdc.h> using namespace std; int main(){vector<int>str{2, 3, 1, 9, 7, 6, 1, 4, 5,4};int nstr.size();int target4;int l-1,rn;int p0;//这里不能是l<r哦&#xff0c;p代表数组遍历指针…

快速排序之荷兰国旗问题

描述 荷兰国旗有三横条块构成&#xff0c;自上到下的三条块颜色依次为红、白、蓝。现有若干由红、白、蓝三种颜色的条块序列&#xff0c;要将它们重新排列使所有相同颜色的条块在一起。本问题要求将所有红色的条块放最左边、所有白色的条块放中间、所有蓝色的条块放最右边。 …

从糖尿病捆绑支付看荷兰整合医疗

来源:中国数字科技馆 所谓捆绑支付模式,是指对于患有特定疾病的患者,在涉及多个照护提供方的时候,通过单一途径即可支付所接受的所有服务。在荷兰,随着老年人口及慢性疾病患者的增加,整合医疗开始受到政策决策者和保健提供者的关注,并将整合医疗定位为有前瞻性的、多学…

荷兰旗问题(三色旗排序)

摘要&#xff1a; 荷兰旗问题是三色排序&#xff0c;即某一组数据&#xff0c;元素的值只能为a,b ,c。把这组数据按照a, b, c的顺序排序。 本文介绍了一种时间复杂度为O&#xff08;n&#xff09;&#xff0c;空间复杂度O&#xff08;1&#xff09;的算法。 1. 问题描述 某…