《Code Complete》ch.21 协同构建
WHAT?
所有的协同构建技术都试图通过这样那样的途径,将展示工作的过程正式化,以便将错误暴露出来
WHY?
- 提高缺陷检出率,从而缩短开发周期,降低开发成本
- 发现不明显的错误信息,如不恰当的注释、硬编码的变量值、重复出现需要统一的代码模式——这些是测试所发现不了的
- 让人们知道他们的代码将要被复查,这样他们会小心谨慎检查自己的工作
- 提供技术交流平台,提升开发者水平
HOW?
结对编程
- 用编码规范来支撑编程
- 不要让结对编程变成旁观
- 不要强迫在简单的问题上使用结对编程
- 有规律地对结对人员和分配的工作任务进行轮换
- 鼓励双方跟上对方的步伐
- 确认两个人都能看得清显示器
- 不要强迫程序员与关系紧张的人结对
- 避免新手组合
- 指定一个组长
正式检查(详查)
独立的详查通常能捕捉到60%的缺陷——比除了原型和大规模beta测试之外的其他技术都要好
对设计和代码都进行详查的项目,详查通常会占到项目预算的10%~15%
详查中的角色
- 主持人:保证详查以特定的速度进行,使其既能保证效率,又能发现尽可能多的错误。主持人在技术上必须能够胜任,负责管理详查的其他方面,例如分派任务、分发核对表、预订会议室、报告详查结果、跟踪详查会议产生的决议
- 作者:代码编写人,负责让代码被清晰的理解(虽然这应该在编码时就应该尽力做到),解释那些看起来有错的地方为什么是对的
- 评论员:同设计和代码有直接关系,但又不是作者的人(注意分词,别想歪)。可以是程序员、测试人员、架构师,通常在详查会议做准备的时候就找出了若干缺陷,随着会议的进行与讨论,他们应该有更多的疑问提出
- 记录员:记录详查期间提出的错误,记录指派的任务。作者和主持人都不应当兼职记录员
- 经理:让他参加这样一个纯技术的会议并不是个好主意,因为他什么都不懂却什么都要插一腿。不过经理有权知道详查会议的结果——需要有一份详查报告
详查会议的结果不因该作为员工表现的评定标准——对员工表现的界定应该基于最终产品,而并非开发阶段的代码
详查的目的是找出缺陷,而不是探索替代方案,或者争论谁对谁错。详查会议不应该让作者觉得团队中的某一个人是白痴,或者产生另谋高就的想法
核对表用来记录曾经发现的问题,应该随着时间进行积累
详查的一般步骤
- 计划:作者将设计或代码提交给主持人,主持人决定哪些人复查这些材料,决定会议时间地点,将设计、代码、核对表分发给参与会议的各人
- 概述:作者向评论员描述设计或代码的技术背景——这些更多地需要在代码中通过自说明的形式来做,而不是现场解说
- 准备:每一个评论员独立地对设计或代码进行详查,找出其中的错误,评论员使用核对表来激励和指导他们的详查。最高效详查速度的变化范围可能很大,因此要保留所在组织的详查速度记录,以便确定所在环境的最高效详查速度
- 详查会议:主持人挑选出除作者外的某个人对设计和代码进行阐释,所有逻辑(每个分支)都要解释。所有的讨论应该在确认这是一个错误的时候停止(不应深入到解决方案层次)。系统级代码90行/h,应用程序代码500行/h,每小时150~200行非空注释的代码是个不错的开始。通常会议不会超过2h,一天进行一次以上的详查会议也是不合理的
- 详查报告:主持人撰写,列出每一个缺陷,包括它的类型和严重级别。应当对每次详查会议的时间与发现错误进行记录,客观数据更具有说服力
- 返工:主持人将缺陷交由某人修复——通常是作者
- 跟进:主持人负责监督缺陷的修复进度
- 第三个小时的会议:若有人对解决方案有兴趣,可以组织一个非正式的讨论会议
走查(walk-throughs)
走查通常涉及两个或更多的人,进行设计或代码的相关讨论,可以是白板前的一段随意探讨,也可以是在会议室中有着丰富ppt的讨论
走查通常持续30~60min
相较与详查,走查更为随意,效率也更低
代码阅读(code reading)
通常有两到三人参与,阅读人员独立阅读代码,然后与作者进行讨论,总结出设计/代码缺陷
应该至少有两个人阅读代码,用以鼓励评论员之间的竞争
阅读速度估计每天1000行代码
其实是简化的复查会议——90%的错误是在复查会议的准备阶段发现的,只有10%是在复查会议中被提出
公开展示(Dog-and-Pony Shows)
目的是向客户展示一切顺利(all is well)
《Code Complete》ch.21 协同构建的更多相关文章
- code complete part1
最近在看code complete,学习了一些东西,作为点滴,记录下来. 关于类: 类的接口抽象应该一致 类的接口要可编程,不要对类的使用者做过多的假设.不要出现类似于:A的输入量一定要大于多少小于多 ...
- 重读 code complete 说说代码质量
重读code complete 说说代码质量 2014年的第一篇文章本来计划写些过去一年的总结和新年展望,但是因为还有一些事情要过一阵才能完成,所以姑且不谈这个,说说最近重读code complete ...
- Code Complete 读后总结和新的扩展阅读计划
Code Complete 读后总结和新的扩展阅读计划 用了一年时间终于将代码大全读完了,在这里做一个简单的总结,并安排下一阶段的扩展阅读计划. 1.选择代码大全作为我程序员职业入门的第一本书,我认为 ...
- 《Code Complete》ch.24 重构
WHAT? 重构(refactoring),Martin Fowler将其定义为“在不改变软件外部行为的前提下,对其内部结构进行改变,使之更容易理解并便于修改”. WHY? 神话:一个管理很完善的软件 ...
- 《Code Complete》ch.23 调试
WHAT? 调试——发现错误的一种手段 WHY? 相对于不善于调试的程序员,善于调试的程序员只需要前者1/20的时间就可以找出问题所在 HOW? 科学的调试方法 把错误的发生稳定下来:假设-证实/证伪 ...
- 《Code Complete》ch.18 表驱动法
是什么 一种scheme,用表来做信息存取,代替逻辑语句(if/else) 为什么 简化逻辑语句,避免大量嵌套的 if/else 或者 switch/case 怎么用 三种访问表的方式 直接访问:将源 ...
- 《Code Complete》ch.16 控制循环
WHAT? 反复执行的代码片段(你是第一天学编程吗) WHY? 知道如何使用及何时使用每一种循环是创建高质量软件的一个决定性因素 HOW? 检测位于循环开始/循环结尾 带退出的循环 进入循环 只从一个 ...
- 《Code Complete》ch.15 使用条件语句
WHAT? 条件语句指if.else.case.switch,循环语句指for.while WHY? 不用条件语句你写得出代码吗? HOW? if-then 正常情况放在异常情况之前 执行频率高的情况 ...
- 《Code Complete》ch.14 组织直线型的代码
WHAT? 最简单的控制流:即按照先后顺序放置语句与语句块 WHY? 尽管组织直线型的代码是一个简单的任务,但代码结构上的一些微妙之处还是会对代码质量.正确性.可读性和可维护性带来影响 HOW? 必须 ...
随机推荐
- iText导出pdf、word、图片
一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或 ...
- 每日学习心得:Js获取Checkboxlist所选值、instanceof 和typeof区别、为Array添加contains方法
2013-11-24 前言: 上周在工作中遇到了一些跟JS以及前台交互的问题,虽然算不上多么高深,但是在解决时也走了一些弯路,所以就总结一下. 1. JS获取checkboxList所选的值 这 ...
- [转]session缓存机制和三种对象状态
摘自 http://blog.csdn.net/csh624366188/article/details/7612142 Hibernate 的Session就是其中的一个,它提供了基本的增,删,改, ...
- Python输入和输出
在很多时候,你会想要让你的程序与用户(可能是你自己)交互.你会从用户那里得到输入,然后打印一些结果.我们可以分别使用raw_input和print语句来完成这些功能.对于输出,你也可以使用多种多样的s ...
- SVN学习之svn命令行下的基本操作
http://huihai.iteye.com/blog/1985751 上一节已经把svn安装完成,下来就用命令行做一些简单的操作. 1.当svn安装完成后,svn管理人员会在svn的root根目录 ...
- LinkedHashMap的实现原理(复习)
1. LinkedHashMap概述: LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映 ...
- RMAN_Oracle RMAN的常用Command命令
2014-12-11 Created By BaoXinjian
- Codeforces Round #358 (Div. 2)B. Alyona and Mex
B. Alyona and Mex time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- 张恭庆编《泛函分析讲义》第二章第2节 $Riesz$ 定理及其应用习题解答
在本节中, $\scrH$ 均指 $Hilbert$ 空间. 1.在极大闭子空间的交的最佳逼近元 设 $f_1,f_2,\cdots,f_n$ 是 $\scrH$ 上的一组线性有界泛函, $$\bex ...
- SteamVR Unity工具包(VRTK)之激光和移动
简单激光指针(VRTK_ SimplePointer) 简单指针(Simple Pointer)脚本从控制器尾部发出一个有色光束来模拟激光束.这在场景中指向对象很有用,它能判断所指向的对象以及对象距控 ...