`

同行代码审查实战分析

阅读更多

数百万年前,人类祖先人猿学会直立行走——解放双手——最终进化到人;而代码审查在开发过程中有着异曲同工之妙——区别出野蛮开发和先进开发。 


 


然而,在实际工作中,以下声音总不绝于耳: 

  • “代码审查在项目中简直就是浪费时间!”
  • “我根本没有时间去做复查。”
  • “由于我那个谨慎的拍档还没做好复查,进度只能延后了。”
  • “你确定,我的同事要求我修改代码吗?请向他们解释一下,任何轻微地改动都会让我的代码失去原有的优雅。”


那么问题来了,我们为什么需要做代码复查? 

作为专业的软件开发人员,持续提高代码质量是工作生涯不断追求的目标之一。无论我们有多么优秀,都离不开团队;而代码复查是个人与团队的润滑剂: 

  • 当局者迷,旁观者清。代码复查如同为我们安装了后视镜;
  • 使我们的代码多了至少一个知音人;
  • 能帮助新员工在这个过程中学习和领悟到前辈的代码精髓;
  • 有助开展知识共享,众“智”成城。


要做就要做到最好 

如果想要达成上述种种美好结果,是离不开时间和工作的科学安排的。仅仅做好代码缩进、变量命名规范等基本工作,还不能算得上完美。而如果曾经尝试过结对编程,或许你会发现其所花的时间往往都比代码复查要多。 

我的建议是用开长总时长的四分之一时间来进行代码复查。举例来说,如果开发总用时为两天,那么应该花上大约四个小时来进行复查。 

当然,如果能把事情做对,可不必拘泥于时间的多少。进一步说,我们必须能看明白将要复查的代码。这不仅代表要掌握基本的语言语法,更关键的是要掌握整个代码的架构,所用组件或库等细节。如果不能做到对每一行代码所做的事情都了然于胸,这样的复查工作是没有多少价值的。所以要做好这点是不能一味讲求速度的,必须花一番功夫来从头到尾对代码进行梳理分析。 

此外还有两件事是务必要做到的: 

  • 复查工作中包含所有必须的测试工作;
  • 做好设计文档的编写工作。


避免拖延症 

今天的工作今天完成是最完美的工作状态,否则一旦拖延症出现,再多再好的复查都只会成为开发过程中的绊脚石。好的复查需要紧密而持久的努力,不是搞搞突击就能做好的。 

因此,开发者应当尽力做到日清日结。把复查作为每天工作的开端是个不错的主意;理清旧的思路将有助于开展新的编码任务。也或许有的人喜欢在午休或下班前进行,无论在什么时候进行,以下几点是应该避免的: 

  • 让积压工作越积越多;
  • 由于复查没有做好而导致进度延后;
  • 由于代码更新频率快就放弃做复查;
  • 往往在最后一刻才去做复查。


编写出可复查的代码 

不应该把所有复查工作都推给复查员。如果我的同事花了一周时间添加了看起来比较乱的代码,这对复查工作无疑是重大打击,也很难让人摸清其思路和结构。 

所以我们在编程时,要有意识地把代码划分为可操作单元。我们使用的方法是scrum,它为我们的开发工作做了很明晰的指导,同时使得整个开发过程有迹可循,便于进行追溯和回顾。 

其次,在与复查员进行讨论前要搞好关系。这样将有助于双方对彼此有所了解,从而减少讨论时矛盾发生的机率。 

再者,项目结构应当在设计文档中描述得清楚具体。这对于项目新成员的成长是大有裨益的,同时能帮助复查员提高工作效率。 

最后也是最重要的一点是在自我复查过程中做好注释。换言之要先自行对代码过一遍,把需要做出说明的地方标示出来并解释清楚。有研究表明,开发者在对自己的进行复查和注释时,经常会找出不少瑕疵。 

大型代码重构 

有时候如果需要进行代码重构,这势必会影响到很多组件,特别是较大型的应用。在这种情况下,最好的解决方案是逐步推进重构工作。先对要做的变更进行划分,然后根据修改意图进行分段式重构。当这部分变更完成并做好复查后,再执行第二部分的重构,重复该步骤直至完成全部工作。这或许增加了重构用时,但会带来更高质量的代码同时可以减轻复查员的工作量。 

如果实际情况真的不允许进行逐步重构,可以试试结对编程。 

解决矛盾 

在一个技术团队中,各人有各自的观点,如何达成共识是成败的关键。作为开发者,应该保持开明的心态并虚心接受不同的意见。避免固步自封,避免对自我复查工作的不屑一顾。如果有人提议把我们一些重复的代码做成一个可复用函数,这并不代表我们之前的工作是毫无价值的。 

而作为复查员,要懂得人情世故。在给出修改意见前,先考虑清楚这真的会更好抑或仅仅是风格上的不同看法。提议说法可以是:“如果尝试另一种方法,或许会更好”或“有同事建议这样做”,而要避免的是:“就连我家宠物都能写出比这好的算法!” 

如果真的一时僵持不下,争议双方不妨请教第三个开发人员,从他的角度来再次审度各自的观点,直到形成共识,三人行,必有我师焉。 

 

from http://www.iteye.com/news/30155

分享到:
评论

相关推荐

    安全编码实战经验.zip

    9. **代码审查**:定期进行同行评审,检查可能的安全隐患。代码审查不仅可以发现错误,还可以提升团队成员的安全意识。 10. **使用静态代码分析工具**:这些工具可以在代码编写阶段就检测出潜在的安全问题,帮助...

    Go语言学习(五) 高质量编程与性能调优实战-青训营笔记

    - **代码审查**:通过同行评审,发现潜在问题,提高代码质量。 - **重构**:适时重构代码,以改善结构,提高可读性和可维护性。 8. **性能监控与调优实践** - **监控工具**:如Prometheus和Grafana,用于实时...

    accpy2 项目实战酒店管理系统

    10. **项目管理**:包括版本控制(如Git)、代码审查、进度管理等,确保项目的顺利进行。 通过这个项目,不仅可以学习到Python编程的实际应用,还能深入了解软件工程的整个生命周期,对提升项目管理能力和软件开发...

    代码大全(第二版)两届Software Jolt Award震撼大奖得主

    书中提供了进行有效代码审查的步骤和技巧,帮助团队提升整体水平。 模块化设计也是《代码大全》中的一个重要主题。书中阐述了如何将大型项目分解为小型、独立的模块,以便于管理和协作。模块间接口的设计和使用,...

    S1项目实战

    13. **代码审查**:通过同行评审,可以发现潜在问题,提升代码质量和团队成员之间的知识共享。 14. **反馈与改进**:作者希望得到意见,表明了对持续学习和改进的开放态度。接受和处理反馈是项目成长的关键。 综上...

    安全编码实战经验 (1).zip

    6. **代码审查**:定期进行同行审查,发现并修复潜在的安全问题,同时也能提高团队的安全意识。 7. **最小化暴露面**:尽量减少不必要的网络服务和端口开放,降低被攻击的可能性。 8. **安全设计模式**:遵循如...

    使用Githook实现团队CodingReview流程内含源码以及说明书可以自己运行复现.zip

    Coding Review(代码审查)是软件开发过程中的一个重要环节,通过同行评审代码,可以发现潜在的错误,提高代码质量,同时也有助于团队成员之间的知识共享。将Git钩子与代码审查结合,可以在代码被提交到仓库之前...

    白盒测试培训

    人工代码审查涉及同行评审,以确保代码符合特定的编程规范,如Google C++风格指南和华为编程规范。自动化工具如CPPLint、CPPCheck和PREfast可以帮助检测潜在错误、代码效率和安全性。此外,还介绍了代码质量度量工具...

    阿里巴巴java开发手册最终版

    11. **代码审查**:倡导代码审查文化,通过同行评审发现潜在问题,提高团队整体编码水平。 12. **性能优化**:避免过度优化,但在必要时,可以采用如StringBuilder替换String.concat(),使用Arrays.sort()而非...

    Codeship_Efficiency_in_Development_Workflows

    这部分内容强调了代码审查的重要性,并提供了一些实用建议,例如如何编写清晰的提交消息、如何进行有效的同行评审等。通过这些最佳实践,可以显著减少bug数量并提高代码质量。 - **部署流水线与零停机部署** 在...

    华为编程开发规范与案例

    6. **代码审查**:实施严格的代码审查制度,通过同行评审发现潜在问题,提升代码质量。 再者,华为的开发案例涵盖了实际项目中的多种场景,例如: 7. **多线程编程**:如何在并发环境下保证数据一致性,使用线程池...

    Python夜深人静写算法.docx

    7. **代码审查**:确保代码质量符合最佳实践。 8. **学习资源**:推荐在线课程、编程挑战等资源。 9. **社区参与**:加入Python社区进行交流学习。 10. **文档阅读**:官方文档及库文档的重要性。 #### 详细知识点...

    Code Craft: The Practice of Writing Excellent Code

    - **代码审查**: 强调同行评审的重要性,分享有效执行代码审查的策略。 ##### 5. 软件工程实践 - **版本控制**: 介绍常用的版本控制系统(如 Git),并讲解其基本操作。 - **持续集成/持续部署(CI/CD)**: 讨论 CI/...

    SSD3 Exercise6

    8. **代码审查**:这是一种质量保证手段,通过同行评审发现潜在的错误和改进点。学生可能会参与代码审查过程,学习如何给出和接受有效反馈。 9. **文档编写**:清晰的文档是软件开发中的重要部分。学生可能需要编写...

    C和C++安全编码(第2版).((美)Robert C. Seacord)

    - **代码审查**:强调同行评审的重要性,通过团队合作发现并修复代码中的安全隐患。 - **安全更新和补丁管理**:指导开发者如何及时应用安全更新,保持系统的安全性。 ### 4. 工具和技术 - **静态分析工具**:介绍...

    优雅的工作方式(一)——欢迎拍砖

    3. **代码审查**:通过同行评审,提升代码质量,同时也能增进团队间的交流和学习。 其次,"工具"是提高工作效率的关键。选择和运用合适的工具可以使工作更加高效: 1. **开发环境**:选择符合项目需求的IDE或编辑...

    c语言的风格 非常全面

    10. **代码审查**:通过同行评审,确保代码风格的一致性和质量。 11. **编译器警告**:重视编译器的警告信息,它们可能是潜在错误的信号。尽可能消除所有警告,以提高代码质量。 此外,"全面"一词提示我们,了解...

    upgraded-waffle:python语言评论

    Python社区有多种工具和实践来支持代码审查,例如Git进行版本控制,GitHub或GitLab进行协作,以及像Pylint、Flake8这样的静态代码分析工具来检查代码规范。 3. **练习与实战**:学习Python时,实践是提升技能的关键...

    成为编程高手的八大奥秘

    此外,参与代码审查,不仅可以帮助他人改进代码,也是自我提升的一个过程。 ### 第六奥秘:建立良好的学习网络 与同行建立良好的关系网,不仅能够获得技术支持,还能激发新的灵感。加入技术社区、参加研讨会或线上...

Global site tag (gtag.js) - Google Analytics