Ôõô×ö code review£¿±¾ÎÄ·ÖÏíÁË Shopify ·Ç³£ÊµÓÃµÄ 6 ¸ö code review ʵ¼ù¼¼ÇÉ¡£
Code reviews ÊÇ´òÔì¸ßЧÍŶӵÄÖØÒª·½Ã棬ÕâÒѾ³ÉΪ¹²Ê¶¡£¹ØÓÚÕâ¸öÖ÷Ì⣬ÓÐÐí¶àÎÄÕÂÔø¾ÌÖÂÛ¹ý£¬±ÈÈçÕâƪÂÛÎÄ¡ª¡ª¡¶An Empirical Study of the Impact of Modern Code Review Practices on Software Quality¡·¡£ÏÖʵÖУ¬Ðí¶àÆóÒµµÄÎÞÊýÍŶӶ¼½øÐйýijÖÖÐÎʽµÄ code reviews¡£
https://sail.cs.queensu.ca/Downloads/EMSE_AnEmpiricalStudyOfTheImpactOfModernCodeReviewPracticesOnSoftwareQuality.pdf
¶øʵ¼ÊÇé¿öÊÇ£¬code reviews ¸Õ¿ªÊ¼Ê±£¬ÈËÃǵļ¤Çé¸ßÕÇ£¬Ö®ºó£¬code reviews ÔòÁ÷ÓÚÐÎʽ£¬»òÕßҪô·´À¡²»ÇåÎú¡¢ÒªÃ´ÈÃÈËÄÑÒÔÖ´ÐС£³¤¾ÃÒÔÍù£¬ÕâÈÃÍŶӴíʧÁ˼ӿìѧϰ¡¢·ÖÏí֪ʶµÄ»ú»á£¬×îÖÕÄÑÒÔÌá¸ß´úÂëµÄÖÊÁ¿¡£
ÔÚ Shopify£¬ÎÒÃDz»½öÁ¢×㳤Զ£¬¶øÇÒÏ£Íû×·Çó·¢Õ¹¸ü¿ì¡£ÒÔÎÒÃǵľÑéÀ´¿´£¬ÓÅÐãµÄ code reviews ʵ¼ù¶Ô¹¤³ÌʦµÄ³É³¤ºÍÎÒÃÇËù´òÔìµÄ²úÆ·ÖÊÁ¿ÓÐמ޴óÓ°Ïì¡£
ÕâÑùÒ»¸ö³¡¾°ÏàÐźܶàÈ˶¼ºÜÊìϤ£º
Äã¸Õ¸Õ¼ÓÈëÒ»¸öÐÂÍŶӣ¬Áìµ¼ºÜ¿ì¸øÄã·ÖÅäÁËÒ»¸ö±àÂëÈÎÎñ¡£×÷ΪÐÂÈË£¬ÄãÌرðÏë±íÏÖ×Ô¼º£¬ÒòΪÄãÏëÐãÒ»ÏÂ×Ô¼ºµÄ±àÂëˮƽ¡£ÓÚÊÇ£¬Äã½ÓÏÂÀ´×öÁËÕâЩÊ£º
Äã¿ÉÄܾÀú¹ýÉÏÊöجÃΰãµÄ¾Àú£¬ÄÇÎÒÃÇ̸̸ÔõÑù¸Ä½øÕâ¸öÁ÷³Ì°É£¡
ÔÚ Shopify£¬ÎÒÃÇ¿´Öؽ»¸¶Ëٶȡ¢Ñ§Ï°ÒÔ¼°³¤ÆÚ·¢Õ¹¡£ÕâЩ¼ÛÖµ¹ÛËäÈ»ÓÐʱ»á²úÉú³åÍ»£¬µ«È´Òýµ¼ÎÒÃDz»¶Ï³¢ÊÔÐí¶àм¼Êõ£¬²¢Íƶ¯ÍŶӱä¸ï¡£
ÎÒÔÚ±¾ÎÄ×ܽáÁËһϵÁÐ Shopify ÄÚ²¿Ê¹ÓõÄʵÓü¼ÇÉ¡£½èÖúÕâЩ¼¼ÇÉ£¬ÎÒÃÇÄܽ»¸¶¾µÃÆðʱ¼ä¿¼ÑéµÄÓмÛÖµµÄ´úÂë¡£
ÊõÓï˵Ã÷£ºÎÒÃǽ« Pull Requests£¨PR£©¶¨ÒåΪºÏ²¢µ½»ù´¡·Ö֧ǰ½øÐÐ code reviews µÄÒ»¸ö¹¤×÷µ¥Ôª¡£Github ºÍ Bitbucket µÄÓû§¶ÔÕâ¸öÊõÓïºÜÊìϤ¡£
½« Pull Request ²ð·ÖΪ½ÏСµÄ´úÂë¶Î
Õâ¸ö·½·¨ºÜ¼òµ¥£¬¿ÉÒÔ³ÉΪÌá¸ß code reviews ¹¤×÷Á÷³Ì×îÓÐÓõļ¼Êõ¡£ËüÖ®ËùÒÔÓÐЧ£¬Ö÷ÒªÓÐÁ½¸öÔÒò£º
½« PR ²ð·ÖΪ¸üСµÄ´úÂë¶Î£¬ÈÃÄãÓиü¶à»ú»áÔÚ¸ü¶Ìʱ¼äÄڵõ½¸üÉîÈëµÄÆÀÉó¡£
Ä¿Ç°£¬ÎÒÃÇÎÞ·¨ÉèÖÃÒ»¸öÊÊÓÃÓÚËùÓбà³ÌÓïÑÔºÍËùÓÐÀàÐ͹¤×÷µÄͨÓñê×¼¡£¶ÔÓÚÄÚ²¿µÄÊý¾Ý¹¤³ÌÏîÄ¿£¬ÎÒÃÇÔÔòÉÏÊÇÒª½« PR ¿ØÖÆÔÚ 200-300 ÐдúÂë¡£Èç¹û³¬¹ýÕâ¸öãÐÖµ£¬ÎÒÃÇÒ»°ã»á½«Ëü²ð·Ö³É¸üСµÄ¿é¡£
µ±È»£¬ÎÒÃÇҲҪעÒâ²»Òª½« PR ²ð·ÖµÃ¹ýС£¬ÒòΪÕâÒâζ×ÅÆÀÉóÈË¿ÉÄÜÐèÒª¼ì²éºÃ¼¸¸ö PR ²ÅÄÜÀí½âÕûÌåÂß¼¡£
ʹÓà Draft PRs
ÄãÌý¹ýÔìÒ»Á¾Æû³µÓë»Ò»Á¾Æû³µµÄ±ÈÓ÷Âð£¿Õâ¸ö±ÈÓ÷ÊÇÕâô˵µÄ£º
ÏÔÈ»£¬ÕâÀïµÄÎÊÌâÔÚÓÚÄ¿±ê²»ÇåÎú£¬ÍŶÓûÓÐÊÕ¼¯µ½×ã¹»µÄ·´À¡¾ÍÖ±½Ó¹¹½¨½â¾ö·½°¸¡£Èç¹ûÔÚµÚÒ»²½ºó£¬ÎÒÃÇÏȻһ·ùÆû³µµÄ²Ýͼ£¬²¢½«Æäչʾ¸øÓû§£¬ËûÃÇ»áÎÊÏàͬµÄÎÊÌ⣬ÕâÑù¾Í¿ÉÒÔ½øÒ»²½Á˽â¿Í»§ÐèÇó¡£Èç´Ë£¬¾ÍΪÎÒÃǽÚÊ¡ÁË 6 ¸öԵŤ×÷Á¿¡£Èí¼þÒ²²»ÀýÍ⣬ÎÒÃÇ¿ÉÄܻ᷸ͬÑùµÄ´íÎó£¬ÔÚÓû§²»ÐèÒªµÄÌØÐÔ»òÄ£¿éÉÏͶÈë´óÁ¿¹¤×÷¡£
ÔÚ Shopify£¬Ò»°ãÓà Work In Progress (WIP) PRs À´»ñµÃÔçÆÚ·´À¡£¬ÆäÄ¿±êÊÇÑéÖ¤·½Ïò£¨Ëã·¨¡¢Éè¼Æ¡¢API µÈµÈÑ¡Ôñ£©¡£¾¡Ôç±ä¸ü¿ÉÒÔ±ÜÃâÔÚϸ½Ú¡¢ÐÞÊΡ¢ÎĵµµÈ·½ÃæÀ˷Ѿ«Á¦¡£
×÷ΪһÃûд´úÂëµÄÈË£¬ÕâÒâζ×ÅÄãÒª¶Ô±ä¸ü¹¤×÷·½Ïò³Ö¿ª·Å̬¶È¡£
ÔÚ Shopify£¬ÎÒÃÇÐÅ·îµÄÔÔòÊÇÔÊÐí´ó¼ÒÓÐ×Ô¼ºµÄÀí½â£¬µ«²»¹ÌÖ´¼º¼û¡£ÎÒÃÇÏ£Íû´ó¼ÒÄÜÔÚÓгä×ãÀíÓɵÄÇé¿öÏÂ×ÔÐŵØ×ö³ö¾ö¶¨£¬µ«Í¬Ê±Ò²ÄÜÀÖÓÚѧϰÆäËû¸üºÃµÄз½°¸¡£ÔÚʵ¼Ê¹¤×÷ÖУ¬ÎÒÃÇʹÓà Github µÄ Draft PRs£¬ËüÃÇÃ÷È·±íÃ÷ÕâÏ×÷ÈÔÔÚÁ÷³ÌÖÐÁ÷ת£¬Github ²»ÔÊÐíÄãºÏ²¢Ò»¸ö Draft PR¡£ÆäËû¹¤¾ß¿ÉÄÜÓÐÀàËƵŦÄÜ£¬ÖÁÉÙÄã´´½¨Õý³£ PR ʱ¿ÉÒÔ¼ÓÉÏÒ»¸ö WIP ±êÇ©£¬ÒÔÃ÷È·±íʾ¸Ã¹¤×÷»¹´¦ÓÚÇ°Æڽ׶Ρ£Õ⽫°ïÖúÄãµÄÆÀÉóÈËרעÓÚÊʵ±µÄÁìÓò£¬Ìá³öÊʵ±µÄ·´À¡¡£
https://engineering.shopify.com/blogs/engineering/scaling-mobile-development-by-treating-apps-as-services
One PR Per Concern
³ýÁËÐÐÊýÍ⣬ÐèÒª¿¼ÂǵÄÁíÒ»¸öά¶ÈÊÇÄãµÄ¹¤×÷µ¥ÔªÊÔͼ½â¾öµÄÎÊÌâÊýÁ¿¡£Ò»¸ö¹Ø×¢µã¿ÉÒÔÊÇÒ»¸öÌØÐÔ¡¢Ò»¸ö´íÎóÐÞ¸´¡¢Ò»¸öÒÀÀµÏîÉý¼¶¡¢Ò»¸ö API ±ä¸üµÈµÈ¡£ÄãÊÇ·ñÔÚÖع¹µÄͬʱÒýÈëÒ»¸öÐÂÌØÐÔ£¿Ò»´ÎÐÞ¸´ÁËÁ½¸ö´íÎó£¿Í¬Ê±ÒýÈëÁËÀà¿âÉý¼¶ºÍеķþÎñ£¿
°Ñ PR ·Ö½âΪһ¸ö¸öµ¥¶ÀµÄ¹Ø×¢µã£¬Ëü»á²úÉúÏÂÁÐÓ°Ïì:
Èç¹ûÄã×îÖÕÄõ½ÊÖµÄ PR °üº¬¶à¸ö¹Ø×¢µã£¬ÄÇôÄã¿ÉÒÔ½«Æä·Ö½âΪ¶à¸öµ¥¶ÀµÄ¿é¡£ÕâÑùÄÜÕë¶Ôÿһ¿é½øÐе¥¶ÀµÄÆÀÉó£¬Ã¿´ÎÆÀÉóµÄµü´úÖÜÆÚ¿ÉÒÔ¸ü¿ì£¬´Ó¶ø¼ÓËÙÕâ¸ö PR µÄ×ÜÌåÆÀÉóÖÜÆÚ¡£Í¨³£Çé¿öÏ£¬ÓÐÒ»²¿·Ö¹¤×÷ÄÜÏÈ¿ìËÙÍê³É£¬±ÜÃâ´úÂëÀõ½²»ÄÜÓÃÒÔ¼°ÒýÆðºÏ²¢³åÍ»¡£
½« PR ·Ö½â³Éµ¥¶ÀµÄ¹Ø×¢µã
ÉÏÀýµÄ PR °üº¬Èý¸ö²»Í¬µÄ¹Ø×¢µã£¬ÎÒÃǽ«Æä½øÐвð·Ö¡£¿ÉÒÔ¿´µ½£¬Ã¿¸öÆÀÉóÈËÐèÒª¼ì²éµÄÉÏÏÂÎÄÉÙÁËÐí¶à¡£×îÖØÒªµÄÊÇ£¬Ö»ÒªÆäÖÐÈκÎÒ»¸ö²¿·ÖµÄÆÀÉóÍê³É£¬´úÂë×÷Õß¾ÍÄÜÒ»±ßµÈ´ýÆäËûÆÀÉó·´À¡£¬Ò»±ß×ÅÊÖ´¦ÀíÒѾ·´À¡µÄÎÊÌâ¡£ÔÚ×¶ËµÄÇé¿öÏ£¬´úÂë×÷Õß»á½ÐøÊÕµ½¸÷¸ö²¿·ÖµÄÆÀÉó·´À¡£¬¼¸ºõ¿ÉÒÔ²»¼ä¶ÏµØ´¦ÀíÍêÕâһϵÁÐ PR£¬¶ø²»ÊÇÍê³É³õ¸åºó£¬µÈÉϼ¸Ì죨ÒѾȥæÆäËûµÄÊ£©£¬È»ºó×îºóÔÙ·µ»ØÍ·À´´¦Àí·´À¡Òâ¼û¡£
רע´úÂ룬¶ø²»ÊÇÈË
רעÓÚ´úÂ룬¶ø²»ÊÇÈË£¬ÕâÌõʵ¼ù̸µÄÊÇÈËÓëÈËÖ®¼äµÄ¹µÍ¨·½Ê½ºÍ¹Øϵ¡£´Ó¸ù±¾ÉϽ²£¬ÕâÊÇÌᳫÎÒÃdz¢ÊÔ°Ñ×¢ÒâÁ¦¼¯ÖÐÔÚÈçºÎ¸Ä½ø²úÆ·ÉÏ£¬±ÜÃâ×÷Õß½«ÆÀÉóÒâ¼ûµ±×÷¶ÔËû¸öÈ˵ÄÅúÆÀ¡£
ÒÔÏÂÊÇһЩÄã¿ÉÒÔ×ñѵļ¼ÇÉ£º
¹é¸ù½áµ×£¬code review ¸øÎÒÃÇÌṩÁË»¥½Ì»¥Ñ§µÄ»ú»á£¬ÎÒÃÇÓ¦¸Ã¶Ô´Ë³Ö¿ª·Å»¶ÓµÄ̬¶È¡£
ÌôÑ¡ºÏÊʵÄÆÀÉóÈË
¾ö¶¨ÓÉËÀ´ÆÀÉóÄãµÄ¹¤×÷ͨ³£ºÜÓÐÌôÕ½ÐÔ¡£ÒÔÏÂÎÊÌâ¿É×÷Ϊ²Î¿¼£º
ÎÞÂÛÄãµÄÍŶÓ×ñÑÄÄЩÔÔò£¬Çë¼Çס£¬×÷ΪһÃû´úÂëµÄ×÷Õߣ¬ÄãÓÐÔðÈÎÑ°Çó²¢½ÓÊÜÊʵ±µÄÈ˶ÔÄãµÄ´úÂë½øÐиßÖÊÁ¿µÄ code review¡£
¸øÆÀÉóÈËÌṩ¹Ø¼üµÄÉÏÏÂÎÄ
×îºóµ«Í¬Ñù·Ç³£ÖØÒªµÄÒ»µãÊÇ£¬ÄãµÄ PR ÃèÊöÖÁ¹ØÖØÒª¡£ÕâÈ¡¾öÓÚÄãÑ¡ÔñµÄÆÀÉóÈË£¬²»Í¬µÄÈË»áÓв»Í¬µÄÉÏÏÂÎÄ¡£´úÂëµÄ×÷ÕßÓÐÔðÈÎÌṩ¹Ø¼üÐÅÏ¢»ò¸ü¶àÉÏÏÂÎĵÄÁ´½Ó£¬°ïÖúÆÀÉóÈËÄܹ»·´À¡ÓмÛÖµµÄÒâ¼û¡£
Äã¿ÉÒÔ°ÑÒÔÏÂÎÊÌâ·Åµ½ÄãµÄ PR Ä£°åÖУº
ºÃµÄ´úÂë²»½öûÓдíÎ󣬻¹·Ç³£ÓÐÓá£×÷ΪһÃû´úÂëµÄ×÷Õߣ¬ÇëÈ·±£ÄãµÄ PR ÃèÊö½«´úÂëÓëÍŶÓÄ¿±êÁªÏµÆðÀ´£¬×îºÃÄÜÓë´ý°ìÊÂÏîÖеÄÌØÐÔ»òȱÏÝÃèÊöÁªÏµÆðÀ´¡£×÷ΪÆÀÉóÈË£¬»áÏÈÆÀÉó PR ÃèÊö£¬Èç¹ûËü²»¹»ÍêÕû£¬ÄãÊÇÎÞ·¨Õë¶Ô䶨ÒåµÄÄ¿±êÀ´ÅжϴúÂëÊÇ·ñÊʵ±µÄ£¬²»ÈçÔÚÆÀÉó´úÂëÇ°¾Í°ÑËü´ò»ØÈ¥¡£Çë¼Çס£¬ÓÐʱ´úÂëÉó²éµÄ×î¼Ñ½á¹ûÊÇÈÏʶµ½¸ù±¾²»ÐèÒªÕâЩ´úÂ룡
ͨ¹ý²ÉÓÃÉÏÃæµÄһЩ¼¼Êõ£¬Äã¿ÉÒÔÔںܴó³Ì¶ÈÉÏÓ°ÏìÈí¼þ¹¹½¨¹ý³ÌµÄËٶȺÍÖÊÁ¿¡£µ«³ý´ËÖ®Í⣬»¹ÓÐDZÔÚµÄÎÄ»¯Ó°Ï죺
ÈκÎÍŶӳÉÔ±¶¼Ó¦¸ÃÄܹ»ÐÝÉϼ¸Ìì¼Ù£¬Ëû¼¸Ìì²»¹¤×÷²»»áÈù«Ë¾ÃæÁÙ·çÏÕ£¬Ò²²»»áÒòΪµ£ÐÄÊÀ½çÄ©ÈÕ¶ø²»Í£µØÈ¥¿´µç×ÓÓʼþ¡£
Èç¹ûÄãÊÇÍŶÓÖ÷¹Ü£¬²»·Á¿ªÊ¼³¢ÊÔÕâЩ¼¼ÇÉ£¬ÕÒ³öÊʺÏÄãËù´øÍŶӵķ½·¨¡£
Èç¹ûÄãÊǶÀÁ¢¹±Ï×Õߣ¬¿ÉÒÔÓëÖ÷¹ÜÌÖÂÛÒ»ÏÂΪʲôÄãÈÏΪ´úÂëÉó²é¼¼ÊõºÜÖØÒª£¬ÒÔ¼°ËüÈçºÎÌá¸ßЧÂʺͰïÖúÍŶӡ£
ÔÚÏ´ÎÒ»¶ÔÒ»½»Á÷»òÍŶӻáÒéÉÏ£¬Ì½ÌÖÒ»ÏÂÕâ¸öÎÊÌâ¡£
ÁìȡרÊô 10ÔªÎÞÃż÷ȯ
˽Ïí×îР¼¼Êõ¸É»õ