代码审查的艺术:Dropbox 的故事
Dropbox 的 iOS 应用中的每一行代码,都是开始于被添加到 Maniphest 中的一个 bug 或者功能任务,Maniphest 是我们的任务管理系统。当一位工程师在上面接受一个任务,那么在开始写代码前相应的责任就已经赋予他。Phabricator 这个平台包含了我们的代码审查工具,这个代码审查工具有很多很好的功能,但它在评估对象之间的相互协作上不是做的很好。为了弥补这点,我们的工程师在开始他们的工作之前需要知道审查他们的任务的人是谁[1]。对于被审查代码的工程师来说,这样能确保在他们的团队中有一个橡皮鸭,这个橡皮鸭知道项目中一些改动代码的背景和原因,并且对代码的设计决策上起到协助的作用。对于审查者来说,这有助于他们将一些变化考虑进他们的开发周期评估中,这样有助于开发周期评估的准确。如果不出意外的话,我们的经验会告诉我们提前做好计划可以有效地避免审查代码过程中的重复劳动。针对项目中的变化做计划可以像在白板前做交流一样简单,也可以像写一篇建设性文档一样深入。这都取决于我们自己的选择。
[1] 我的团队中每个人都要审查代码。新来的同事在可以独立审查较大的任务之前,会先被分配一些比较少的代码量。
随着任务的展开,工程师需要一直谨记我们的代码规范。这个规范是一个最佳实践和一致规范的大融合,它的存在使我们不用去猜测我们应该怎样编码,也使审查变得更容易[2]。因为这是一个大项目,开发团队中没有一个人能对整个项目有完美的映射或理解。所以我们的工程师需要依赖团队中其他工程师的帮助,将这些代码的功能表现拼成一个整体,这有助与我们在阅读代码时能理解其中的逻辑。
[2] 即使这样,每当一个新成员加入时,总还是不免要展开一次关于使用 property 还是 ivar 的辩论。
当这个任务的工作进行到某个阶段时,我们的工程师很可能会做出一些明显不合理的或者不受欢迎的决定。捕获这个心理的最佳时间就是发生这一刻 — 为将来向审查者做好解释的准备。去解释这些变化,说起来容易做起来难,我们的工程师被鼓励使用//TODO,//HAX,和 //FIXME 来在代码中写注释。//TODO 和 //FIXME 从字面上就可以理解它的意义,尽管后者会产生编译警告,所以必须在下一次发布之前要被解决。//HAX 这个注释比较有趣的地方。我们用它标注那些用来绕过 Apple 的 API 里的 bug 但又不容易一眼看明白的方法[3]。我们的注释会写上日期和写这个注释人的名字[4],在之后很多时候我们总会感激这些额外的上下文的[5]。
[3] 标注里通常是第三方来源或者 radar 的链接,还有特殊的重现步骤。
[4] 比如像 //HAX:(ashleynh) 2015-03-09
代码审查的艺术:Dropbox 的故事的更多相关文章
- 中国版dropbox“坚果云”和它背后的团队故事(大的优势就在于他为用户提供了设定多个文件夹的权利)
(速途网专栏 作者:娄昊川)坚果云是一款中文存储服务,前身是“坚果铺子”,提供免费的云空间,与dropbox类似,用户可以直接把档案同步到坚果云,供自己和伙伴用任何设备访问.自上线以来,几乎所有用户都 ...
- .NET单元测试的艺术-3.测试代码
开篇:上一篇我们学习单元测试和核心技术:存根.模拟对象和隔离框架,它们是我们进行高质量单元测试的技术基础.本篇会集中在管理和组织单元测试的技术,以及如何确保在真实项目中进行高质量的单元测试. 系列目录 ...
- 操作系统Unix、Windows、Mac OS、Linux的故事
电脑,计算机已经成为我们生活中必不可少的一部分.无论是大型的超级计算机,还是手机般小巧的终端设备,都跑着一个操作系统.正是这些操作系统,让那些硬件和芯片得意组合起来,让那些软件得以运行,让我们的世界在 ...
- Mac OS X 背后的故事
Mac OS X 背后的故事 作者: 王越 来源: <程序员> 发布时间: 2013-01-22 10:55 阅读: 25840 次 推荐: 49 原文链接 [收藏] ...
- 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索
第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...
- 管理故事——和尚挑水的故事
有时候企业.公司的各种混乱都是源于管理问题,例如人浮于事.资源错配.机构臃肿-----,暂且不说企业管理.项目的管理,光是个人工作的管理.一个处理不好,接踵而来的就是一堆问题,可怕的不是出现问题,而是 ...
- 综合支撑【恶灵附身 Psycho Break】的世界观的概念艺术
综合支撑[恶灵附身 Psycho Break]的世界观的概念艺术 三上真司监督提出的,是对着重表现讲述内心恐怖的哪个世界观的创作和统一做了很大贡献的概念艺术. 这里以他经手的艺术为例,来看看稀少的恐 ...
- 不要浪费人生的每一天 ——Dropbox创始人在麻省理工的演讲 z
Dropbox 创始人,CEO 德鲁·休斯顿(Drew Houston)近期在美国麻省理工学院的毕业典礼上发表演讲.他向大学生提出了 3 点人生建议:追逐自己感兴趣的事,找到最合适的圈子,以及不要浪费 ...
- DropBox与Box的区别,包括直接的投资人的评价(本地Sync可能还是挺重要的)
作者:曲凯链接:http://www.zhihu.com/question/22207220/answer/20642357来源:知乎著作权归作者所有,转载请联系作者获得授权. Box和Dropbox ...
随机推荐
- mongodb的安装、配置、常见问题
一.MongoDB下载 mongodb可以在官网找到下载链接,找到合适的版本进行下载.下载地址->https://www.mongodb.com/download-center?jmp=nav# ...
- UIPageControll 的属性和用法
UIPageControll 是继承于UIControl的一个IOS系统UI控件,可以提供给开发者设计分页效果的功能. 初始化方法 UIPageControl * page = [[UIPageCon ...
- 根据用户时区显示当地时间 javascript+php
在跨时区应用中会用到下面代码,这是以前写的一段代码. 服务器保存相关时间配置,保存形式为GMT时间,客户端需要根据客户所在时区做相应显示,以符合客户习惯. 1. [代码][JavaScript]代码 ...
- linux oracle命令行窗口命令上下翻阅
1.上传rlwrap-0.37.tar.gz到/stage cd /stage/ 解压tar xzvf rlwrap-0.37.tar.gz cd rlwrap-0.37 ./configure ...
- [Java] 读取文件
1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如 ...
- SQLite学习手册(开篇)
一.简介: SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB.MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征 ...
- Educational Codeforces Round 24 CF 818 A-G 补题
6月快要结束了 期末也过去大半了 马上就是大三狗了 取消了小学期后20周的学期真心长, 看着各种北方的学校都放假嗨皮了,我们这个在北回归线的学校,还在忍受酷暑. 过年的时候下定决心要拿块ACM的牌子, ...
- Keepalived + HAProxy 搭建【第二篇】Keepalived 的安装与配置
第一步:准备 1. 简介 本文搭建的是利用 Keepalived 实现 HAProxy 的热备方案,即两台主机上的 HAProxy 实例同时运行,其中全总较高的实例为 MASTER,MASTER出现异 ...
- .NETFramework:Cache
ylbtech-.NETFramework:Cache 1.返回顶部 1. #region 程序集 System.Web, Version=4.0.0.0, Culture=neutral, Publ ...
- 怎么在notepad里面,将字符串替换成换行
用Notepad++可以,利用查找和替换功能,选择正则表达式,查找目标框里输入你想要替换的字符串,替换为框里输入\r,点击替换即可.这是个 很强大的功能,利用还它可以批量替换任何字符串,比如你链接是& ...