来自 数据 2022-06-09 01:50 的文章

服务器防护_cc如何防御_方法

服务器防护_cc如何防御_方法

代码审查最佳实践PalantirfollowMar 5,2018·12分钟阅读

基于XKCD#1513,代码质量,根据CC BY-NC 2.5改编和复制。

互联网提供了大量关于代码审查的材料:关于代码审查对公司文化的影响,关于正式安全审查,更短的指南,更长的检查表,人性化审查,首先进行代码评审的原因,最佳实践,更多的最佳实践,关于代码评审捕获bug的有效性的统计数据,ddos防御系统部署,以及代码评审出错的例子。哦,当然还有书。长话短说,这篇博文展示了Palantir对代码审查的看法。对同行评议有着深厚文化底蕴的组织可能希望咨询Karl E。在尝试遵循本指南之前,Wiegers关于人性化同行评议的优秀文章。

本文摘自我们的Java代码质量工具链基线的最佳实践指南,涵盖以下主题:

为什么,什么,何时进行代码评审准备代码评审执行代码评审代码评审示例

动机

我们执行代码评审(CRs)是为了提高代码质量,并从对团队和公司文化的积极影响中获益。例如:

提交人的动机是由一组审查人来审查变更请求:提交人倾向于清理松散的结尾,整合TODO,并通常改进提交。通过同行认可编码专业知识是许多程序员的骄傲。分享知识在几个方面有助于开发团队:-CR明确地向团队成员传达添加/更改/删除的功能,团队成员随后可以在完成的工作的基础上进行建设。-提交者可以使用评审员可以学习的技术或算法从…起更一般地说,代码评审有助于提高整个组织的质量标准。-评审员可能掌握编程技术或代码库方面的知识,这些知识有助于改进或整合变更;例如,其他人可能正在同时开发类似的功能或修复程序。-积极的互动和沟通加强了团队成员之间的社会联系。代码库的一致性使代码更易于阅读和理解,有助于防止bug,代码片段的易读性对于作者来说是很难判断的,而对于没有完整背景的评审员来说则很容易判断。易读的代码更具可重用性、无错误性和前瞻性。对于具有外部视角的批判性评审人员来说,偶然错误(例如,打字错误)以及结构错误(例如,死代码、逻辑或算法错误、性能或架构问题)通常更容易发现。研究发现,即使是简短和非正式的代码评审也会对代码质量和bug频率产生重大影响。法规遵从性和监管环境通常需要评审。CRs是避免常见安全陷阱的好方法。如果您的功能或环境有重要的安全要求,它将受益于(并且可能需要)您当地的安全守护神的审查(OWASP的指南就是一个很好的例子)。

审查内容

这个问题没有永远正确的答案,每个开发团队都应该同意自己的方法。一些团队更喜欢审查合并到主分支中的每个变更,而其他团队则有一个"琐碎"阈值,在此阈值下不需要审查。权衡是在有效利用工程师(包括作者和审阅者)的时间和保持代码质量之间。在某些监管环境中,即使是微不足道的更改,也可能需要代码审查。

代码审查是无类别的:作为团队中最高级的人员并不意味着您的代码不需要审查。即使在极少数情况下,代码是完美的,评审也提供了一个指导和协作的机会,并在最低程度上使代码库中对代码的理解多样化。

何时评审

代码评审应在自动检查(测试、样式、其他CI)成功完成后进行,但是在代码合并到存储库的主线分支之前。我们通常不执行从上次发布以来的聚合损坏的正式代码审查。对于复杂的变更,应该合并成主线分支作为单个单元,ddos防御盾,但是太大,不能适合一个合理的CR,考虑堆叠的CR模型:创建主分支特征/大特征和多个次级分支(例如,feature/big feature api、feature/big feature testing等),每个都封装了功能的一个子集,并针对feature/big feature分支分别对代码进行了审查。一旦所有二级分支合并到功能/大功能中,创建一个CR,将后者合并到主分支中。

准备代码供审查

作者有责任提交易于审查的CR,以免浪费审查人员的时间和动机:

范围和大小。变更应该有一个狭窄的、定义良好的、自包含的范围,并且要覆盖所有内容。例如,更改可能实现新功能或修复错误。较短的变更优先于较长的变更。如果CR对超过5个文件进行实质性更改,防病毒软件无法防御ddos,或者花费超过1到2天的时间来编写,高防服务器再加cdn防护,或者花费超过20分钟的时间进行审查,则考虑将其拆分为多个独立的CRS。例如,开发人员可以提交一个更改,该更改在接口和文档方面定义了新功能的API,第二个更改添加了这些接口的实现。仅提交完整的、自我审查的(由diff)和自我测试的CRs。为了节省审阅者的时间,在分配审阅者之前,测试提交的更改(即运行测试套件),并确保它们通过所有构建以及所有测试和代码质量检查(本地和CI服务器上)。重构更改不应改变行为;相反,行为更改应该避免重构和代码格式更改。这有很多好的理由:-重构更改经常涉及到许多行和文件,因此会被较少关注地审查。非预期的行为更改可能会泄漏到代码库中,而没有人注意到。-大型重构更改打破了cherry picking、Rebased和其他源代码控制魔法。撤销作为存储库范围的重构提交的一部分引入的行为更改是非常繁重的。-昂贵的人工审查时间应该花在程序逻辑上,而不是样式、语法或格式争论上。我们更喜欢使用自动化工具(如Checkstyle、TSLint、Baseline、Prettier等)来解决这些问题。

提交消息

以下是遵循广泛引用标准的良好提交消息示例: