From d363ea8a4091fed72baf0cdc9328a9830155564f Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sun, 29 Jan 2023 14:09:57 +0800 Subject: [PATCH] RP @yzuowei https://linux.cn/article-15489-1.html --- ...ï¸ 10 universal steps for open source code review.md | 142 ++++++++++++++++++ ...ï¸ 10 universal steps for open source code review.md | 137 ----------------- 2 files changed, 142 insertions(+), 137 deletions(-) create mode 100644 published/20221031.1 â­ï¸â­ï¸â­ï¸ 10 universal steps for open source code review.md delete mode 100644 translated/tech/20221031.1 â­ï¸â­ï¸â­ï¸ 10 universal steps for open source code review.md diff --git a/published/20221031.1 â­ï¸â­ï¸â­ï¸ 10 universal steps for open source code review.md b/published/20221031.1 â­ï¸â­ï¸â­ï¸ 10 universal steps for open source code review.md new file mode 100644 index 0000000000..4fba5a0966 --- /dev/null +++ b/published/20221031.1 â­ï¸â­ï¸â­ï¸ 10 universal steps for open source code review.md @@ -0,0 +1,142 @@ +[#]: subject: "10 universal steps for open source code review" +[#]: via: "https://opensource.com/article/22/10/code-review" +[#]: author: "Martin Kopec https://opensource.com/users/martin-kopec" +[#]: collector: "lkxed" +[#]: translator: "yzuowei" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15489-1.html" + +å¼€æºä»£ç è¯„审的å个通用步骤 +====== + +![][0] + +> åªè¦ä½ éµå¾ªè¿™äº›é€šç”¨æµç¨‹ï¼Œä»£ç è¯„审并ä¸å¯æ€•ã€‚ + +你是å¦éœ€è¦åœ¨ä½ è¿˜æ²¡æœ‰å®Œå…¨ç†è§£æ•´ä¸ªé¡¹ç›®æ—¶å°±å¯¹ä»£ç è¿›è¡Œè¯„审?抑或你é¿å¼€äº†è¯„审,以å…让你看起æ¥ä¸çŸ¥é“如何进行。 + +本篇文章想è¦å‘Šè¯‰ä½ ä¸€ä¸ªæ›´å¥½çš„方法。代ç è¯„审code review 并ä¸éœ€è¦ä½ çŸ¥é“所有事情。实际上,就我个人ç»éªŒè€Œè¨€ï¼Œè¿™ç§æƒ…况éžå¸¸æ™®é。 + +我还记得作为实习生加入 红帽Red Hat 的时候,被è¦æ±‚å‚与代ç è¯„审。我们当时采å–的是 +1 或 -1 的投票系统,而我在一开始的时候常常踌躇于该如何评审。我å‘现我会问自己,如果我对于一处改动给予了 +1,而别人å´æŠ•äº† -1,我是ä¸æ˜¯çœ‹èµ·æ¥å¾ˆè ¢ï¼Ÿ + +如果你对一处改动投了 +1,而别人投了 -1,这åˆæ„味ç€ä»€ä¹ˆå‘¢ï¼Ÿç­”案是ä¸æ„味任何事ï¼ä½ å¯èƒ½åªæ˜¯æ¼æŽ‰äº†ä¸€å¤„别人注æ„到的细节。这ä¸æ„味ç€ä¸–界末日。这也是为什么我们会用投票系统。正如åŒæ‰€æœ‰å¼€æºé¡¹ç›®ä¸€æ ·ï¼Œä»£ç åˆå¹¶æ˜¯ä¸€é¡¹ååŒå·¥ä½œã€‚ + +最近,我接到了太多的代ç è¯„审工作,以至于我几乎åšä¸è¿‡æ¥ã€‚我åŒæ—¶ä¹Ÿæ³¨æ„到,å‚与评审的贡献者数é‡æ­£åœ¨ç¨³æ­¥å‡å°‘。 + +出于这个原因,我想è¦å†™ä¸€ç¯‡æ–‡ç« é˜è¿°æˆ‘对代ç è¯„审的个人观点。在这篇文章里,我会分享一些诀çªä¸ŽæŠ€å·§ã€‚我将会å‘你展示几个用æ¥é—®è‡ªå·±çš„问题,以åŠåœ¨è¯„审代ç æ—¶éœ€è¦æ³¨æ„的一些地方。 + +### 代ç è¯„审的目的是什么? + +你是å¦æ›¾å†™è¿‡ä¸€ä¸ªéžå¸¸ç®€å•çš„è¡¥ä¸ï¼Ÿä½ è®¤ä¸ºå®ƒæ˜¯å¦‚此微ä¸è¶³é“,ä¸éœ€è¦å®¡æŸ¥ã€‚或许你直接就åˆå¹¶äº†å®ƒã€‚直到晚些时候,你æ„识到你犯了个错误,一个明显的或是愚蠢的错误,比如错误的缩进,比如几行é‡å¤çš„代ç è€Œä¸æ˜¯è°ƒç”¨å‡½æ•°ï¼ˆæ˜¯çš„,这些都是ç»éªŒä¹‹è°ˆï¼ï¼‰ã€‚ + +如果有其他人æ¥å®¡æŸ¥ä»£ç ï¼Œå°±ä¼šå‘现这些东西。 + +代ç è¯„审的一个目的便是为你带æ¥ä¸€åŒæ–°çš„眼ç›ï¼Œä»Žæ–°çš„视角看待你è¦å°è¯•è§£å†³çš„问题。这ç§æ–°çš„背景也正是为什么代ç è¯„审至关é‡è¦ã€‚ + +ä½ å¯èƒ½è®¤ä¸ºä½ å¿…须是一个语言专家,æ‰èƒ½å®¡æŸ¥åˆ«äººçš„代ç ã€é¡¹ç›®ï¼Œæˆ–两者。让我æ¥å‘Šè¯‰ä½ ä¸€ä¸ªæ‰€æœ‰ä»£ç è¯„审者都想跟你说的秘密å§ï¼šå¤§é”™ç‰¹é”™ï¼ä½ å¹¶ä¸éœ€è¦å®Œå…¨ç†è§£è¯¥é¡¹ç›®æˆ–者编程语言,就å¯ä»¥ä¸ºä¸€ä¸ªæ”¹åŠ¨æ供全新的视角。下é¢ï¼Œæˆ‘å°†å‘你展示代ç è¯„审的通用æµç¨‹ã€‚ + +### 代ç è¯„审的通用æµç¨‹ + +这是我的代ç è¯„审æµç¨‹ï¼Œæ‹†åˆ†æˆäº†å‡ ä¸ªè¦ç‚¹ã€‚这个æµç¨‹åŒ…å«äº†æˆ‘会问自己的一些问题,以帮助我专注于代ç çš„å˜åŒ–以åŠå…¶åŽæžœã€‚ä½ ä¸éœ€è¦ä¸¥æ ¼ä¾ç…§è¿™ä¸ªé¡ºåºæ¥è¿›è¡Œè¯„审。如果有任何原因导致你无法执行其中的æŸä¸€æ­¥ï¼Œè·³è¿‡é‚£ä¸€æ­¥å°±å¥½ã€‚ + +#### 1ã€ç†è§£æ”¹åŠ¨ï¼Œå®ƒæƒ³è¦è§£å†³çš„问题,以åŠä¸ºä»€ä¹ˆè¦è¿™ä¹ˆåš + +为什么需è¦æ”¹åŠ¨çš„解释以åŠä»»ä½•ç›¸å…³èƒŒæ™¯éƒ½åº”该被放在 æ交commit ä¿¡æ¯é‡Œã€‚如果没有,请è¦æ±‚æ供,并请投 -1 直到相关信æ¯è¢«æ供。 + +改动想解决的问题需è¦è¢«è§£å†³å—?它是项目应当关注的问题,还是与项目完全无关? + +#### 2ã€ä½ ä¼šå¦‚何实现解决方案?它会ä¸ä¸€æ ·å—? + +在这个时候,你应该已ç»çŸ¥é“代ç æ”¹åŠ¨æ˜¯ä¸ºäº†ä»€ä¹ˆã€‚æ¢åšæ˜¯ä½ ä¼šæ€Žä¹ˆåšï¼Ÿåœ¨è¿›ä¸€æ­¥å¯¹æ”¹åŠ¨è¿›è¡Œç»†èŠ‚评审å‰ï¼Œå…ˆæ€è€ƒè¿™ä¸ªé—®é¢˜ã€‚如果你想出了一个ä¸ä¸€æ ·çš„解决方案,并且你认为你的方案更好,在评审中æ出æ¥ã€‚ä½ ä¸éœ€è¦æŠ• -1;去问问作者为什么没有往那个方å‘走,看看这次讨论会把你们带å‘何方。 + +#### 3ã€è¿è¡Œæœ‰æ”¹åŠ¨å’Œæ²¡æœ‰æ”¹åŠ¨çš„ä»£ç  + +我通常会在代ç ä¸­è®¾ç½®å‡ ä¸ªæ–­ç‚¹ï¼Œè¿è¡Œä»£ç å¹¶æ£€æŸ¥æ–°ä»£ç æ˜¯å¦‚何与其余部分互动的。 + +如果你无法è¿è¡Œæ•´ä¸ªä»£ç ï¼Œè¯•ç€å°†å¸¦æœ‰æ–°ä»£ç çš„函数å¤åˆ¶åˆ°ä¸€ä¸ªæ–°çš„本地文件,模拟输入数æ®ï¼Œç„¶åŽè¿è¡Œã€‚这在你ä¸çŸ¥é“怎么è¿è¡Œæ•´ä¸ªé¡¹ç›®ï¼Œæˆ–者无法接触到è¿è¡Œæ‰€éœ€çš„特殊环境时很有帮助。 + +#### 4ã€æ–°ä»£ç ä¼šç ´å任何东西å—? + +我是说,任何东西。想一想å¯èƒ½çš„åŽæžœã€‚ + +以一个新的命令行选项为例,它会总是被目标所接å—å—? + +是å¦å­˜åœ¨è¿™æ ·ä¸€ç§æƒ…况,使得新选项无法被接å—或是会与其他东西起冲çªï¼Ÿ + +或许新代ç æ˜¯å¯¼å…¥äº†æ–°çš„东西。那么这个新的库,以åŠå¯èƒ½çš„æ–°çš„ä¾èµ–关系,能够在è€ç‰ˆæœ¬æˆ–者项目的è¿è¡Œç³»ç»Ÿä¸­è¢«æ‰¾åˆ°å—? + +安全方é¢å‘¢ï¼Ÿæ–°çš„ä¾èµ–足够安全å—?你至少å¯ä»¥åœ¨ç½‘上快速地æœç´¢ä¸€ä¸‹ã€‚还有,注æ„一下控制å°æ—¥å¿—里的警告。有的时候在åŒä¸€ä¸ªåº“里也å¯ä»¥æ‰¾åˆ°æ›´å®‰å…¨çš„函数。 + +#### 5ã€æ–°ä»£ç æ˜¯å¦æœ‰æ•ˆï¼Ÿ + +你刚刚确认了被æ出的解决方案大概是正确的。现在该检查代ç æœ¬èº«äº†ã€‚你需è¦å…³æ³¨ä»£ç çš„有效性和必è¦æ€§ã€‚ + +检查新代ç çš„风格。它与项目的代ç é£Žæ ¼ç›¸åŒ¹é…å—?任何开æºé¡¹ç›®éƒ½ï¼ˆåº”该)有一份文档告知(新)贡献者项目所éµå¾ªçš„风格和优秀实践。 + +比如说,OpenStack 社区的所有项目都有一份 HACKING.rst 文件。你ç»å¸¸ä¹Ÿèƒ½æ‰¾åˆ°ä¸€ä»½[新贡献者指å—][1]包å«æ‰€æœ‰å¿…须知é“çš„ä¿¡æ¯ã€‚ + +#### 6ã€ç¡®è®¤æ‰€æœ‰æ–°å¢žçš„å˜é‡å’Œå¯¼å…¥éƒ½è¢«ä½¿ç”¨ + +你正在评审的代ç å¸¸å¸¸å·²ç»è¿‡å¤šæ¬¡è¿­ä»£ï¼Œæœ‰çš„时候代ç çš„最终版本与åˆå§‹ç‰ˆå·²è¿¥ç„¶ä¸åŒã€‚所以我们很容易忘记一些在历å²ç‰ˆæœ¬ä¸­åŠ å…¥çš„å˜é‡ä¸Žå¼•ç”¨ã€‚自动化检测通常会用到 lint 工具,类似 Python 中的 [flake8][12]。 + +(LCTT 译注:[lint][5] 指编程中用æ¥å‘现代ç æ½œåœ¨é”™è¯¯å’Œçº¦æŸä»£ç é£Žæ ¼çš„工具,起æºäºŽ C 语言编程中的é™æ€åˆ†æžå·¥å…· `lint`。“lint†本æ„为衣æœä¸Šç§¯ç´¯çš„绒毛与ç°å°˜ï¼Œâ€œlint†的å–å寓æ„则在于æ•æ‰ç¼–程时产生的“绒毛与ç°å°˜â€ï¼‰ + +(LCTT 校注:我建议,“Lint†工具å¯ä»¥ç¿»è¯‘为 “代ç æ¸…ç†â€ 或 “代ç æ¸…æ´â€ 工具。) + +ä½ å¯ä»¥åœ¨ä¸å£°æ˜Žæ–°å˜é‡çš„情况下é‡å†™ä»£ç å—?通常情况下你å¯ä»¥ï¼Œä½†é—®é¢˜æ˜¯è¿™æ ·æ˜¯å¦æ›´å¥½ã€‚这会带æ¥ä»€ä¹ˆç›Šå¤„å—?我们的目标ä¸æ˜¯è¦åˆ›é€ å°½å¯èƒ½å¤šçš„å•è¡Œä»£ç ï¼Œè€Œæ˜¯å†™å‡ºé«˜æ•ˆä¸”易读的代ç ã€‚ + +#### 7ã€æ–°çš„函数和方法是å¦å¿…è¦ï¼Ÿ + +项目里的别的地方是å¦å­˜åœ¨å¯ä»¥è¢«å¤ç”¨çš„功能类似的函数?确ä¿é¿å…é‡æ–°å‘明轮å­ä»¥åŠé‡æ–°å®žçŽ°å·²ç»è¢«å®šä¹‰çš„逻辑永远都是值得的。 + +#### 8ã€æœ‰å•å…ƒæµ‹è¯•å—? + +如果补ä¸å¢žåŠ äº†æ–°çš„函数或者在函数内添加了新的逻辑,它也应该附带对应的å•å…ƒæµ‹è¯•ã€‚新函数的作者总是比别人更适åˆå†™è¯¥å‡½æ•°çš„å•å…ƒæµ‹è¯•ã€‚ + +#### 9. 验è¯é‡æž„ + +如果这次æ交对现有代ç è¿›è¡Œäº†é‡æž„(它å¯èƒ½é‡å‘½å了æŸä¸ªå˜é‡ï¼Œæˆ–者是改å˜äº†çš„å˜é‡çš„作用域,或者是通过加å‡å‚æ•°æ¥æ”¹å˜å‡½æ•°çš„足迹,åˆæˆ–者是删去了æŸä¸ªä¸œè¥¿ï¼‰ï¼Œé—®ä¸€é—®ä½ è‡ªå·±ï¼š + +- 这个å¯ä»¥è¢«åˆ é™¤å—?它会影å“到稳定分支å—? +- 所有出现的地方都删掉了å—? + +ä½ å¯ä»¥åˆ©ç”¨ [grep 命令][3] æ¥æŸ¥æ‰¾ã€‚ä½ ä¸ä¼šç›¸ä¿¡æœ‰å¤šå°‘次我投 -1 就是因为这个。这是一个任何人都会犯的简å•é”™è¯¯ï¼Œä¹Ÿæ­£å› å¦‚此任何人都å¯ä»¥å‘现它。 + +æ交的所有者很容易忽略这些事情,这完全å¯ä»¥ç†è§£ã€‚我也犯过很多次这ç§é”™è¯¯ã€‚我最终å‘现问题的根æºåœ¨äºŽæˆ‘太急于æ出评审,以至于我忘记了对仓库进行整体检查。 + +除了对项目仓库的检查外,检查其他代ç ç”¨æˆ·ä¹Ÿå分必è¦ã€‚如果有别的项目导入了这个项目,它们å¯èƒ½ä¹Ÿéœ€è¦è¿›è¡Œé‡æž„。在 OpenStack 社区中,我们有对应的工具æ¥æŸ¥è¯¢åˆ«çš„社区项目。 + +#### 10ã€é¡¹ç›®æ–‡æ¡£æ˜¯å¦éœ€è¦åšå‡ºæ›´æ”¹ï¼Ÿ + +ä½ å¯ä»¥å†ä¸€æ¬¡ä½¿ç”¨ [grep 命令][4] æ¥æ£€æŸ¥åœ¨é¡¹ç›®æ–‡æ¡£ä¸­æ˜¯å¦æ到了相关的代ç æ”¹åŠ¨ã€‚用常识æ¥åˆ¤æ–­è¿™æ¬¡æ”¹åŠ¨æ˜¯å¦éœ€è¦è¢«æ”¶å…¥æ–‡æ¡£ä»¥å‘ŠçŸ¥æœ€ç»ˆç”¨æˆ·ï¼Œè¿˜æ˜¯åªæ˜¯ä¸€ä¸ªä¸ä¼šå½±å“用户体验的内部å˜åŒ–。 + +#### é¢å¤–æ示:考虑周到 + +当你在评审完新代ç åŽæ出建议或评论时,è¦è€ƒè™‘周到,å馈准确,æ述详尽。如果有你ä¸ç†è§£çš„地方就å‘出æ问。如果你认为代ç å­˜åœ¨é”™è¯¯ï¼Œè§£é‡Šä½ çš„ç†ç”±ã€‚è®°ä½ï¼Œå¦‚果作者ä¸çŸ¥é“什么地方出了问题,他们就无法修å¤å®ƒã€‚ + +### 最åŽå‡ å¥ + +唯一的å评审是没有评审。通过评审和投票,你æ供了你的观点并为此投票。没有人指望你æ¥åšå‡ºæœ€ç»ˆå†³å®šï¼ˆé™¤éžä½ æ˜¯æ ¸å¿ƒç»´æŠ¤è€…),但是投票系统å…许你æ供你的观点和æ„è§ã€‚相信我,补ä¸æ‰€æœ‰è€…会很高兴你这么åšäº†çš„。 + +你能想到别的è¦ç‚¹æ¥ç»™å‡ºå¥½çš„评审å—?你是å¦æœ‰æˆ‘ä¸çŸ¥é“的特殊技巧?在评论中分享它们å§ï¼ + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/22/10/code-review + +作者:[Martin Kopec][a] +选题:[lkxed][b] +译者:[yzuowei](https://github.com/yzuowei) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) è£èª‰æŽ¨å‡º + +[a]: https://opensource.com/users/martin-kopec +[b]: https://github.com/lkxed +[1]: https://docs.openstack.org/tempest/latest/contributor/contributing.html +[2]: https://opensource.com/article/19/5/python-flake8 +[3]: https://opensource.com/downloads/grep-cheat-sheet +[4]: https://www.redhat.com/sysadmin/how-to-use-grep +[5]: https://codedocs.org/what-is/lint-software +[0]: https://img.linux.net.cn/data/attachment/album/202301/29/140840wsbypukbubp69buv.jpg \ No newline at end of file diff --git a/translated/tech/20221031.1 â­ï¸â­ï¸â­ï¸ 10 universal steps for open source code review.md b/translated/tech/20221031.1 â­ï¸â­ï¸â­ï¸ 10 universal steps for open source code review.md deleted file mode 100644 index 26e1f558c7..0000000000 --- a/translated/tech/20221031.1 â­ï¸â­ï¸â­ï¸ 10 universal steps for open source code review.md +++ /dev/null @@ -1,137 +0,0 @@ -[#]: subject: "10 universal steps for open source code review" -[#]: via: "https://opensource.com/article/22/10/code-review" -[#]: author: "Martin Kopec https://opensource.com/users/martin-kopec" -[#]: collector: "lkxed" -[#]: translator: "yzuowei" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -å¼€æºä»£ç è¯„审的å个通用步骤 -====== - -åªè¦ä½ éµå¾ªè¿™äº›é€šç”¨æµç¨‹ï¼Œä»£ç è¯„审code review并ä¸å¯æ€•ã€‚ - -你是å¦æ›¾éœ€è¦å¯¹ä»£ç è¿›è¡Œè¯„审,但你还没有完全ç†è§£æ•´ä¸ªé¡¹ç›®ï¼Ÿæˆ–许你é¿å¼€åŽ»è¯„审从而é¿å…你看起æ¥åƒæ˜¯ä»€ä¹ˆéƒ½ä¸çŸ¥é“的洋相。 - -本篇文章想è¦å‘Šè¯‰ä½ ä¸€ä¸ªæ›´å¥½çš„方法。代ç è¯„审并ä¸éœ€è¦ä½ çŸ¥é“所有事情。实际上,就我个人ç»éªŒè€Œè¨€ï¼Œè¿™ç§æƒ…况éžå¸¸æ™®é。 - -我还记得在我刚加入红帽Red Hatåšå®žä¹ çš„时候,我被è¦æ±‚å‚与代ç è¯„审。我们当时采å–的是 +1 或 -1 的投票系统,而我在一开始的时候常常踌躇该如何评审。我å‘现我总是问自己对于一处改动是å¦åº”该给予 +1 当别人已ç»æŠ•äº† -1,我会看起æ¥å¾ˆè ¢å—? - -如果你对一处改动投了 +1, 但是别人åˆæŠ•äº† -1,这åˆæ„味ç€ä»€ä¹ˆå‘¢ï¼Ÿè¿™ä¸æ„味任何事ï¼ä½ å¯èƒ½åªæ˜¯æ¼æŽ‰äº†ä¸€å¤„细节而别人åˆæ°å¥½æ³¨æ„到了。这ä¸æ„味ç€ä¸–界末日。这也是为什么我们会用投票系统。正如åŒæ‰€æœ‰å¼€æºé¡¹ç›®ä¸€æ ·ï¼Œä»£ç åˆå¹¶æ˜¯ä¸€é¡¹ååŒå·¥ä½œã€‚ - -最近,我接到了太多的代ç è¯„审工作以至于我难以维æŒè¿›åº¦ã€‚我åŒæ—¶ä¹Ÿæ³¨æ„到了å‚与评审的贡献者数é‡æ­£åœ¨ç¨³æ­¥å‡å°‘。 - -基于这个原因,我想è¦å†™ä¸€ç¯‡æ–‡ç« é˜è¿°æˆ‘对代ç è¯„审的个人观点。在这篇文章里,我会分享一些诀çªä¸ŽæŠ€å·§ã€‚我会å‘你展示几个问题你å¯ä»¥ç”¨æ¥è‡ªé—®è‡ªç­”,我也会为在评审代ç æ—¶éœ€è¦æ³¨æ„什么æ供一些想法。 - -### 代ç è¯„审的目的是什么? - -你是å¦æ›¾å†™è¿‡ä¸€ä¸ªéžå¸¸ç®€å•çš„è¡¥ä¸ï¼Ÿè¡¥ä¸å¤ªè¿‡ç碎以至于你认为评审是多余的?或许你马上进行了åˆå¹¶ã€‚直到晚些时候,你æ„识到你犯了个错误,一个明显或是愚蠢的错误,或是错误缩进,或是几行é‡å¤çš„代ç åœ¨æœ¬å¯ä»¥è°ƒç”¨å‡½æ•°çš„地方(是的,这些都是ç»éªŒä¹‹è°ˆï¼ï¼‰ã€‚ - -一段代ç æœ¬å¯ä»¥äº¤äºˆä»–人评审并åŠæ—¶å‘现这些问题。 - -代ç è¯„审的一个目的便是为你在å°è¯•è§£å†³çš„问题带æ¥ä¸€åŒå…¨æ–°çš„视角。新开阔的视野也正是为什么代ç è¯„审至关é‡è¦ã€‚ - -ä½ å¯èƒ½ä¼šè®¤ä¸ºè¯„审别人的代ç éœ€è¦ä½ æ˜¯ä¸€å专家,或是编程语言专家,或是项目专家,或两者兼具。让我æ¥å‘Šè¯‰ä½ ä¸€ä¸ªæ‰€æœ‰ä»£ç è¯„审者都想跟你说的秘密å§ï¼šå¤§é”™ç‰¹é”™ï¼ä½ å¹¶ä¸éœ€è¦å®Œå…¨ç†è§£é¡¹ç›®æˆ–者编程语言æ¥ä¸ºæ”¹åŠ¨æ供全新视角。我将å‘你展示代ç è¯„审的通用æµç¨‹ã€‚ - -### 代ç è¯„审的通用æµç¨‹ - -这是我的代ç è¯„审æµç¨‹è¢«æ‹†åˆ†æˆå‡ ä¸ªè¦ç‚¹ã€‚这个æµç¨‹åŒ…å«äº†æˆ‘会问我自己的一些问题,以帮助我专注于代ç çš„å˜åŒ–以åŠå…¶åŽæžœã€‚ä½ ä¸éœ€è¦ä¸¥æ ¼ä¾ç…§é¡ºåºæ¥è¿›è¡Œè¯„审。如果有任何原因导致你无法执行其中的æŸä¸€æ­¥ï¼Œè·³è¿‡é‚£ä¸€æ­¥å°±å¥½ã€‚ - -### 1. ç†è§£æ”¹åŠ¨ï¼Œé—®æ”¹åŠ¨æƒ³è¦è§£å†³çš„问题,以åŠä¸ºä»€ä¹ˆè¦è§£å†³è¿™ä¸ªé—®é¢˜ - -为什么需è¦æ”¹åŠ¨çš„解释以åŠä»»ä½•ç›¸å…³èƒŒæ™¯éƒ½åº”该被放在æ交commitä¿¡æ¯é‡Œã€‚如果没有,è¦æ±‚相关信æ¯å¹¶è¯·éšæ„投 -1 直到相关信æ¯è¢«æ供。 - -改动想解决的问题需è¦è¢«è§£å†³å—?它是项目应当èšç„¦çš„问题,还是与项目完全无关? - -### 2. 你会如何实现解决方案?它会ä¸ä¸€æ ·å—? - -在这个时候,你应该已ç»çŸ¥é“代ç æ”¹åŠ¨æ˜¯ä¸ºäº†ä»€ä¹ˆã€‚æ¢åšæ˜¯ä½ ä¼šæ€Žä¹ˆåšï¼Ÿåœ¨è¿›ä¸€æ­¥å¯¹æ”¹åŠ¨è¿›è¡Œç»†èŠ‚评审å‰æ€è€ƒè¿™ä¸ªé—®é¢˜ã€‚如果你想出了一个ä¸ä¸€æ ·çš„解法,并且你认为你的解法更好,在评审中æ出æ¥ã€‚ä½ ä¸éœ€è¦æŠ• -1;去问问作者为什么没有往那个方å‘走,看看这次讨论会把你们带å‘何方。 - -### 3. è¿è¡Œæœ‰æ”¹å˜å’Œæ— æ”¹å˜çš„ä»£ç  - -我通常会在代ç ä¸­è®¾ç½®å‡ ä¸ªæ–­ç‚¹ï¼Œè¿è¡Œä»£ç å¹¶æ£€æŸ¥æ–°ä»£ç æ˜¯å¦‚何与其余部分互动的。 - -如果你无法è¿è¡Œæ•´ä¸ªä»£ç ï¼Œè¯•ç€å°†å¸¦æœ‰æ–°ä»£ç çš„函数å¤åˆ¶åˆ°ä¸€ä¸ªæ–°çš„本地文件,模拟输入数æ®ï¼Œç„¶åŽè¿è¡Œã€‚这在你ä¸çŸ¥é“怎么è¿è¡Œæ•´ä¸ªé¡¹ç›®æˆ–者无法接触到è¿è¡Œæ‰€éœ€çš„特殊环境时很有帮助。 - -### 4. 新代ç ä¼šç ´å任何东西å—? - -我是说,任何东西。想一想å¯èƒ½çš„åŽæžœã€‚ - -以一个新的命令行选项为例,它会总是被目标所接å—å—? - -是å¦å­˜åœ¨è¿™æ ·ä¸€ç§æƒ…况使得新选项无法被接å—或是会与其他东西起冲çªï¼Ÿ - -或许新代ç æ˜¯ä¸€ä¸ªæ–°çš„导入。那么这个新的库,很å¯èƒ½ä¹Ÿæ˜¯æ–°çš„ä¾èµ–,能够在è€ç‰ˆæœ¬æˆ–者项目的è¿è¡Œç³»ç»Ÿä¸­è¢«æ‰¾åˆ°å—? - -安全方é¢å‘¢ï¼Ÿæ–°çš„ä¾èµ–足够安全å—?你至少å¯ä»¥åœ¨ç½‘上快速地æœç´¢ä¸€ä¸‹ã€‚还有,注æ„一下控制å°æ—¥å¿—里的警告。有的时候在åŒæ ·çš„库里也å¯ä»¥æ‰¾åˆ°æ›´å®‰å…¨çš„方法。 - -### 5. 新代ç æ˜¯å¦æœ‰æ•ˆï¼Ÿ - -你刚刚确认了被æ出的解决方案大概是正确的。现在该检查代ç æœ¬èº«äº†ã€‚你需è¦å…³æ³¨ä»£ç çš„有效性和必è¦æ€§ã€‚ - -检查新代ç çš„风格。它与项目的代ç é£Žæ ¼ç›¸åŒ¹é…å—?任何开æºé¡¹ç›®éƒ½ï¼ˆåº”该)有一份文档告知(新)贡献者项目所éµå¾ªçš„风格和优秀实践。 - -比如说,OpenStack 社区的所有项目都有一份 HACKING.rst 文件。你ç»å¸¸ä¹Ÿèƒ½æ‰¾åˆ°ä¸€ä»½[新贡献者指å—][1]包å«æ‰€æœ‰å¿…须知é“çš„ä¿¡æ¯ã€‚ - -### 6. 确认所有新增的å˜é‡å’Œå¯¼å…¥éƒ½è¢«ä½¿ç”¨ - -你正在评审的代ç å¸¸å¸¸å·²ç»è¿‡å¤šæ¬¡è¿­ä»£ï¼Œæœ‰çš„时候代ç çš„最终版本与åˆå§‹ç‰ˆå·²è¿¥ç„¶ä¸åŒã€‚所以我们很容易忘记一些在历å²ç‰ˆæœ¬ä¸­åŠ å…¥çš„å˜é‡ä¸Žå¼•ç”¨ã€‚自动化检测通常会用到 lint 工具,类似 Python 中的 [flake8][12]。 - -(LCTT 译注:[lint][5] 指编程中用æ¥å‘现代ç æ½œåœ¨é”™è¯¯å’Œçº¦æŸä»£ç é£Žæ ¼çš„工具,起æºäºŽ C 语言编程中的é™æ€åˆ†æžå·¥å…· lint。lint 本æ„为衣æœä¸Šç§¯ç´¯çš„绒毛与ç°å°˜ï¼Œlint çš„å–å寓æ„则在于æ•æ‰ç¼–程时产生的“绒毛与ç°å°˜â€ï¼‰ - -ä½ å¯ä»¥åœ¨ä¸å£°æ˜Žæ–°å˜é‡çš„情况下é‡å†™ä»£ç å—?通常情况下你å¯ä»¥ï¼Œä½†é—®é¢˜æ˜¯è¿™æ ·æ˜¯å¦æ›´å¥½ã€‚这会带æ¥ä»€ä¹ˆç›Šå¤„å—?我们的目标ä¸æ˜¯å¤šå†™èŠ±å¼çš„一行代ç ï¼Œè€Œæ˜¯å†™å‡ºé«˜æ•ˆä¸”易读的代ç ã€‚ - -### 7. 新的函数和方法是å¦å¿…è¦ï¼Ÿ - -项目里的别的地方是å¦å­˜åœ¨å¯ä»¥è¢«å¤ç”¨çš„功能类似的函数?确ä¿é¿å…é‡æ–°å‘明轮å­ä»¥åŠé‡æ–°å®žçŽ°å·²ç»è¢«å®šä¹‰çš„逻辑永远都是值得的。 - -### 8. 有å•å…ƒæµ‹è¯•å—? - -如果补ä¸å¢žåŠ äº†æ–°çš„函数或者在函数内添加了新的逻辑,它也应该附带对应的å•å…ƒæµ‹è¯•ã€‚新函数的作者总是比别人更适åˆå†™è¯¥å‡½æ•°çš„å•å…ƒæµ‹è¯•ã€‚ - -### 9. 验è¯é‡æž„ - -如果这次æ交对现有代ç è¿›è¡Œäº†é‡æž„(它å¯èƒ½é‡å‘½å了æŸä¸ªå˜é‡ï¼Œæˆ–者是改å˜äº†çš„å˜é‡çš„作用域,或者是通过加å‡å‚æ•°æ¥æ”¹å˜å‡½æ•°çš„足迹,åˆæˆ–者是删去了æŸä¸ªä¸œè¥¿ï¼‰ï¼Œé—®ä¸€é—®ä½ è‡ªå·±ï¼š - -- 这个å¯ä»¥è¢«åˆ é™¤å—?它会影å“到稳定分支å—? -- 所有出现的地方都删掉了å—? - -ä½ å¯ä»¥åˆ©ç”¨ [grep 命令][3]æ¥æŸ¥æ‰¾ã€‚ä½ ä¸ä¼šç›¸ä¿¡æœ‰å¤šå°‘次我投 -1 就是因为这个。这是一个任何人都会犯的错误,也正因如此任何人都å¯ä»¥å‘现它。 - -æ交的所有者很容易忽略这些事情,这完全å¯ä»¥ç†è§£ã€‚我也犯过很多次这ç§é”™è¯¯ã€‚我最终å‘现问题的根æºåœ¨äºŽæˆ‘太急于æ出评审,以至于我忘记了对仓库进行整体检查。 - -除了对项目仓库的检查外,检查其他代ç ç”¨æˆ·ä¹Ÿå分必è¦ã€‚如果有别的项目导入了这个项目,它们å¯èƒ½ä¹Ÿéœ€è¦è¿›è¡Œé‡æž„。在 OpenStack 社区中,我们有对应的工具æ¥æŸ¥è¯¢åˆ«çš„社区项目。 - -### 10. 项目文档是å¦éœ€è¦åšå‡ºæ›´æ”¹ï¼Ÿ - -ä½ å¯ä»¥å†ä¸€æ¬¡ä½¿ç”¨ [grep 命令][4]æ¥æ£€æŸ¥åœ¨é¡¹ç›®æ–‡æ¡£ä¸­æ˜¯å¦æ到了相关的代ç æ”¹åŠ¨ã€‚用常识æ¥åˆ¤æ–­è¿™æ¬¡æ”¹åŠ¨æ˜¯å¦éœ€è¦è¢«æ”¶å…¥æ–‡æ¡£ä»¥å‘ŠçŸ¥æœ€ç»ˆç”¨æˆ·ï¼Œè¿˜æ˜¯åªæ˜¯ä¸€ä¸ªä¸ä¼šå½±å“用户体验的内部å˜åŒ–。 - -### é¢å¤–æ示:考虑周到 - -当你在评审完新代ç åŽæ出建议或评论时,è¦è€ƒè™‘周到,å馈准确,æ述详尽。如果有你ä¸ç†è§£çš„地方就å‘出æ问。如果你认为代ç å­˜åœ¨é”™è¯¯ï¼Œè§£é‡Šä½ çš„ç†ç”±ã€‚è®°ä½ï¼Œä½œè€…无法修å¤ä»–ä¸çŸ¥é“çš„æ¼æ´žã€‚ - -### 最åŽå‡ å¥ - -唯一的å评审是没有评审。通过评审和投票,你æ供了你的观点并为此å‘声。没有人指望你æ¥åšå‡ºæœ€ç»ˆå†³å®šï¼ˆé™¤éžä½ æ˜¯æ ¸å¿ƒç»´æŠ¤è€…),但是投票系统å…许你æ供你的观点和æ„è§ã€‚相信我,补ä¸æ‰€æœ‰è€…会很高兴你这么åšäº†çš„。 - -你能想到别的è¦ç‚¹æ¥ç»™å‡ºå¥½çš„评审å—?你是å¦æœ‰æˆ‘ä¸çŸ¥é“的特殊技巧?在评论中分享它们å§ï¼ - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/22/10/code-review - -作者:[Martin Kopec][a] -选题:[lkxed][b] -译者:[yzuowei](https://github.com/yzuowei) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) è£èª‰æŽ¨å‡º - -[a]: https://opensource.com/users/martin-kopec -[b]: https://github.com/lkxed -[1]: https://docs.openstack.org/tempest/latest/contributor/contributing.html -[2]: https://opensource.com/article/19/5/python-flake8 -[3]: https://opensource.com/downloads/grep-cheat-sheet -[4]: https://www.redhat.com/sysadmin/how-to-use-grep -[5]: https://codedocs.org/what-is/lint-software