关于代码评审的微博讨论汇集
编者按:
7月12日,weibo上 @自律自强 发表了一条微博:十几年来的软件项目经历告诉我,评审是最有效也是成本最低的质量保证和提升的手段,设计书和代码100%肉眼全覆盖绝对值得,而且还是迅速提高新人能力及其成果物的规范性的有效手段。
各路朋友纷纷参与讨论,各有观点,真知灼见也许就在其中,读来很有收益。所以汇总得本文。
@自律则强 十几年来的软件项目经历告诉我,评审是最有效也是成本最低的质量保证和提升的手段,设计书和代码100%肉眼全覆盖绝对值得,而且还是迅速提高新人能力及其成果物的规范性的有效手段。
BG4DUK:同感!但同样蕴含着巨大的风险即无产出。其背后原因是仅仅依赖人。好的办法是行程review的办法,步骤等等,同时不断汇总评估review的质量,才能真正做好
liangjz:目前实践看输出一般,对人依赖重
女皇碎碎:评审耗时多,规则的定义也比较难。。。没结果前,领导都不愿抽出多余的人力,时力做这
至简李云:对于评审的实施,发自内心地改变意识是关键,不然效果一定不好。
自律则强:意识不改变,在资源的投入上就会缩手缩脚;只有把评审做到位,才能体会到评审活动的高效,初级团队那种走马观花式的“评审”,是浪费时间,不是真正的评审。到位地完成评审后,会有那种对系统质量“踏实了”的感觉,之后辅以严密的变更管理,系统质量就不会出大问题
自律则强:归根到底,系统质量是要靠上游工程做出来的,依赖下游工程(种种测试)来把质量关,不仅低效而且昂贵。
高阿达:质量保证需要让上游可以时刻俯瞰下游的每一个细节。
jackywgw:确实如此,不过能坚持认真评审下来的公司和团队也确实不多
张克强-敏捷307:赞同。在多种评审形式中,双人同级互查是最经济的,性价比高,值得推荐
武剑锋:赞同。不过独立测试仍然有很高价值。再好的设计人员也有局限。
张克强-敏捷307:Yes,测试与评审不可互相替代。但最困难的是多数团队不相信100%覆盖的代码评审能够带来正收益,所以不尝试。前期各项质量保证手段往往通过测试阶段的缩短来获得项目中的收益。
火星人陈勇:我最相信肉眼,肉眼看过感觉不舒服的代码,即使看不到直接的bug,也要改。
张克强-敏捷307:回复@火星人陈勇:赞!为了提高效率,我同样推荐代码检查工具,工具可以把不符合既定义规则的地方找出来。但工具不能替代人。 推荐工具先查,然后肉眼再看
李智勇SZ:回复@项目管理郭致星:现在我这边限制取得更大成果的主因素是:代码的熟悉程度与项目的有效时间。一旦跨领域代码量又大,人员对代码的理解就直接限制评审的深度。一旦时间逼的紧,评审的优先级往往会被降低。而留给评审的时间似乎总不够。各位那里什么状况?
张克强-敏捷307:看到的最大障碍:进度紧张,工作量有限,没时间搞代码评审。
PMO之道---蔡德辉:IT行业缺少质量保证手段,也缺少质量专家来进行研究与推广。评审是其中最有效的手段之一。测试本来是验证手段,现在变成了找Bug手段,所以IT行业质量成本在40%以上,这是巨大的浪费,但我们好像没找到啥好办法。
拯救与逍遥:最大的障碍是从来就不知道代码评审的好处,自然也就排不出时间
火星人陈勇:正在评测resharper,先用工具弄到零错误,再肉眼。
火星人陈勇:回复@朱少民:我们现在很重视工具的警告,要仔细看明白才能处理,也因此不让工具自动运行,要人做出判断。 //@朱少民:所以吗,工具作用也不可忽视,没必要肉眼100%
PMO之道---蔡德辉:回复@质量市场学:是应该总结出来IT项目质量保证方法,从策划开始保证质量。测试作为最后的手段,现在的研究把测试前移到开发前,这还不够。至少目前应该大力推广评审,接下来应在策划和设计阶段推广潜在失效分析等。现在不是方法多,而是少,并且没被掌握。所以就无所谓按照实际情况调整了。
蝈蝈俊:前期要有技术评审,后期要有Code Review。
袁斌_AgileDo:Bug是代码注入的,如果在写代码之前和写代码过程中消除bug的风险,则会减轻评审的压力
自律则强:有经验数据显示,代码完成后,即使程序员经验丰富,每KLOC中也会注入12-16件Bug,有效地评审应该摘出大约2/3(7-10件),而且使程序有良好的结构
pkuxkxjason:相当赞同。不过我不赞同“评审”这个词,英文code review比较准确。这是一个大家一起来读代码,通过头脑风暴,早期检出问题的过程。不是评,更不是审。有很多code review搞成了参会人员指点江山,代码作者极力自卫。在我做code view的经历中,几乎每次都能检出重大问题,而且对形成优良代码结构有益。
Glen-Wang:评审是社会化活动 1. 威慑被评审者 2.评审者学习
张克强-敏捷307:宝信软件伍治平和我早在n年前写过一篇论文,强调高频次小增量全覆盖的代码评审是代码评审的好实践。
王忠杰rainy:代码评审和自动测试要配合起来。
Bluebell--半失业中:貌似国内喜欢搞成过堂,我们是每段代码提交前都必须code review,reviewer 可以由自己邀请对这块比较熟悉的其他开发人员,一个人通过就行,当然将来这段代码出问题了,reviewer 也要担责。
pkuxkxjason:不使用。code review主要流程由开发者先介绍需求和针对需求的设计与实现。其他人针对需求review代码。 //@守候_盛开:请问使用checklist么?
stephen_wang_7971:我还是坚持:度量千行代码bug率不仅没有正面意义,反而误导开发人员把质量做的更差。因为其公式定义决定了:要是没有办法减少bug那就增加代码行数。而增加行数会引入新的bug。度量密度是为了减少密度,结果却增加了密度。
lvxinke:有人会故意把代码写得裹脚布。我的观点,可以度量作为参考,但不能作为考量,影响程序猿的职业心智。
lvxinke:我想说的,工具、统计都不是问题,关键是这些数据用来干什么。 //@自律则强: 在有统计意义的样式空间中,有些发生几乎是从然的,这是科学不是巫术。
自律则强:我更喜欢做的是,通读所有代码,把其中的错误和认为不是好程序的地方指出来,如:变量和方法的命名是否准确,是否有注释的作用,对内存使用是否粗暴无礼,程序结构是否思路顺畅,自然美观等等。然后再比对数据,它就在那里,没有太多刻意。
Jack_孙长虹:看度量为谁所用,如果开发者用来自我评估和改进,还是很有价值的。
hackersoul:评审本身就要浪费大量时间和人力成本,有时候有问题也不一定是bug,效率或者冲突什么的更烦人
刘东流:认同,在项目初期有效审查代码保证了后期开发的规范。逐行审查代码很多人认为麻烦,但为后期打下夯实基础。开始累点,让开发人员形成习惯,后期就轻松,并且还有质量保证。
__渔舟唱晚__:“引入阶段”是确实存在的:例如有制造缺陷的汽车可以返修,而有设计缺陷的汽车则必须召回。对用户而言是制造的问题,对厂商而言则是设计的问题。“引入阶段”的分析正是“明确责任,以图改进”。
关于代码评审的微博讨论汇集相关推荐
- 【原创】项目管理杂谈(1):代码评审这点事,元芳你怎么看
为什么80%的码农都做不了架构师?>>> 申明:因学识有限,某些见解和观点或有不妥,如有冒犯还请见谅.如需与作者联系,见文章底部个人签名处,乐于交流.Q群:210285832, ...
- 云效Codeup代码评审中的代码协同
简介: 云效 Codeup 汇集了阿里巴巴最新的代码托管.代码协同技术,希望能够造福更多中国和世界的开发者. 大神说:"Show me the code",于是就有了代码评审. & ...
- 代码评审中的代码协同
简介: 代码评审中同样存在着"Talk is cheap. Show me the code",语言无力时,直接上代码吧.这就是我们今天要讨论的话题--代码评审中的代码协同. 作者 ...
- 对不起,我的代码评审毁了一个程序员!
技术使人膨胀?! 在过往的 coding 的生活中,你是否有过被技术前辈 diss 得找不着北的经历? 作者 | Philipp Ranzhin 译者 | 弯月 责编 | 屠敏 出品 | CSDN(I ...
- 远程开发 代码提示_VS Code 远程开发和代码评审实践
很多年前的一天,我在 TypeScript 仓库下创建了一个 issue:微软打算拿 Monaco 来干嘛?接着第二天微软就发布了 VS Code.这个巧合我吹了五年还孜孜不倦. 因为已经用上了 Ty ...
- 代码评审的不可能三角
Code Review 是保证代码质量的重要手段之一,但许多研发团队中它常常由于各种原因并未得到真正的落地.为什么会这样呢?本文希望用一个非常简单的观点来理解这个现象,并据此给出一点优化的想法. 观点 ...
- 评审恩仇录——我为什么愿意执行代码评审
简介:代码评审带来的好处不言自明, 但企业业务快速发展的诉求与代码评审推动落地两者之间, 往往存在矛盾.在如今快速发展的互联网时代,数字化.智能化已经是基础能力,单纯只靠人肉审查的时代已经过去了,基于 ...
- 云效DevOps实践-代码评审
简介:在行业激烈竞争业务快速运转的今天,如何在实现快速交付的同时保证代码质量一直以来都是技术团队反复探讨的话题之一.代码评审是结对编程相互切磋相互学习的方式,是敏捷开发模式中的一个重要环节,是保障代码 ...
- [转载]基于TFS实践敏捷-修复Bug和执行代码评审
本主题阐释了这些功能,以继续这一关注虚拟敏捷团队成员的一天的教程. Peter 忙于编写一些代码以完成积压工作 (backlog) 项任务.但是,他的同事发现了一个阻碍他们工作的 Bug,他想立即修复 ...
最新文章
- 六轴机器人 宝元系统_庆云大国重器上线六轴智能焊接机器人,锻造高质量发展硬核...
- sql server 存储过程 SET NOCOUNT ON?
- HTML连载18-id选择器与class区别class选择器使用思路后代选择器
- ack-grep 代码全文搜索
- 单例-单例设计模式代码实现
- UVA 10404 - Bachet's Game
- LIDAR in Google Earth
- java string中indexOf()常用用法
- npm + webpack +react
- lnmp 查看mysql版本_MySQL数据库之Lnmp环境中php-mysql版本问题
- visio中虚线粘贴到word中变实线的解决办法(转)
- linux订阅软件包,安装 Manjaro Linux 后必做的 6 件事 | Linux 中国
- 基于Flink CDC打通数据实时入湖
- (一)关于NLP的概念和处理过程
- 深度学习笔记(二)——VGG
- DLL load failed: %1 不是有效的 Win32 应用程序的解决办法
- 【数据结构与算法】之深入解析“1比特与2比特字符”的求解思路与算法示例
- 如何获取对方精确位置
- 减缓衰老,让T细胞染色体“变长”就行,还能提高免疫力|Nature子刊
- 2015年09月23日
热门文章
- 联想电脑的一键换机软件——乐换机
- Android清空Fragment缓存,清空Fragment来退栈中某个Fragment
- oracle根据分区移动,Oracle 12c 在线移动分区和部分分区read only
- 数据链路层、交换机内容整合
- python合法关键字是_python练习题-day18
- java调用子系统代码_深入理解JAVA虚拟机-Idea远程执行本地Java代码 - Java 技术驿站-Java 技术驿站...
- python流行的爬虫框架_Python爬虫相关框架
- apply_async进程不执行_c/c++面试精选题(八)简单回答,进程和线程关系及区别...
- stringbuilder寻找字符串位置可能存在多个 java_【面试题系列】——Java基础
- 安徽信息技术初中会考上机考试模拟_中学信息技术上机操作考试技巧