การปฏิบัติที่ดีที่สุดสำหรับการมีซอร์สโค้ดที่ 'ตรวจสอบแล้ว' ในที่เก็บคอนโทรลแหล่งข้อมูลคืออะไร


12

อะไรจะเป็นวิธีที่ดีที่สุดในการจัดการซอร์สโค้ดที่ตรวจสอบแล้วในที่เก็บคอนโทรลแหล่งที่มา? รหัสแหล่งที่มาควรผ่านกระบวนการตรวจสอบก่อนที่จะได้รับการตรวจสอบหรือควรตรวจสอบรหัสที่เกิดขึ้นหลังจากที่รหัสมุ่งมั่น? หากการตรวจสอบเกิดขึ้นหลังจากรหัสถูกเช็กอินในที่เก็บดังนั้นควรติดตามอย่างไร?

คำตอบ:


4

Google มีแนวทางการตรวจสอบโค้ดที่ดีที่สุดในทุกที่ที่ฉันเคยเห็น ทุกคนที่ฉันพบมีข้อตกลงที่สมบูรณ์เกี่ยวกับวิธีการตรวจสอบโค้ด มนต์คือ "ตรวจสอบก่อนและมักจะ"

สมมติว่าคุณใช้กระบวนการที่ดูเหมือนสิ่งที่ Graham Lee แนะนำ (ซึ่งเป็นกระบวนการที่ก่อนหน้านี้ฉันเคยใช้ตัวเอง) ปัญหาคือผู้ตรวจสอบจะถูกขอให้ดูโค้ดขนาดใหญ่ นั่นคือความพยายามมากขึ้นและมันยากที่จะให้ผู้ตรวจสอบทำ และเมื่อพวกเขาทำมันก็ยากที่จะให้พวกเขาทำงานของมันอย่างละเอียด นอกจากนี้เมื่อพวกเขาสังเกตเห็นปัญหาการออกแบบมันเป็นเรื่องยากที่จะให้นักพัฒนาซอฟต์แวร์กลับไปทำซ้ำและทำซ้ำรหัสการทำงานทั้งหมดเพื่อให้ดีขึ้น คุณยังคงจับสิ่งต่าง ๆ และยังคงมีคุณค่า แต่คุณจะไม่สังเกตเห็นว่าคุณพลาดประโยชน์มากกว่า 90%

ในทางตรงกันข้าม Google มีการตรวจสอบรหัสในทุกการกระทำก่อนที่จะเข้าสู่การควบคุมแหล่งที่มา หลายคนไร้เดียงสาคิดว่านี่จะเป็นกระบวนการที่มีน้ำหนักมาก แต่มันก็ไม่ได้ผลในทางปฏิบัติ มันจะง่ายขึ้นอย่างมากในการตรวจสอบโค้ดขนาดเล็กในการแยก เมื่อพบปัญหามันเป็นเรื่องยากที่จะเปลี่ยนการออกแบบเพราะคุณยังไม่ได้เขียนโค้ดเกี่ยวกับการออกแบบนั้น ผลที่ได้คือมันง่ายกว่าในการตรวจสอบโค้ดอย่างละเอียดและแก้ไขปัญหาได้ง่ายขึ้น

หากคุณต้องการตรวจสอบโค้ดเช่นเดียวกับ Google (ซึ่งฉันขอแนะนำจริงๆ) มีซอฟต์แวร์ที่จะช่วยคุณได้ Google ได้ออกเครื่องมือของพวกเขาบูรณาการกับการโค่นล้มเป็นRietveld Go (the language) ได้รับการพัฒนาด้วยรุ่น Rietveld ซึ่งดัดแปลงเพื่อใช้กับ Mercurial มีการเขียนซ้ำสำหรับผู้ที่ใช้ git ชื่อGerrit ฉันยังได้เห็นสองเครื่องมือเชิงพาณิชย์ที่แนะนำสำหรับการนี้เบ้าหลอมและคณะกรรมการตรวจสอบ

สิ่งเดียวที่ฉันใช้คือ Rietveld เวอร์ชันภายในของ Google และฉันก็พอใจกับมันมาก


4

เทคนิคที่ฉันใช้กับหลาย ๆ ทีมคือ:

  • นักพัฒนาสามารถรวมแหล่งที่มากับสาขาของตนเองหรือซื้อคืนในพื้นที่
  • นักพัฒนาสามารถทำงานร่วมกับ trunk / master ได้โดยไม่ต้องตรวจสอบ
  • รหัสจะต้องได้รับการตรวจสอบและความคิดเห็นการตรวจสอบแก้ไขก่อนที่จะสามารถบูรณาการจากลำตัว / ต้นแบบลงบนสาขาผู้สมัครรุ่น

เป็นความรับผิดชอบของผู้เขียนรหัสในการขอตรวจสอบและความรับผิดชอบของผู้ดูแลสาขาที่ปล่อยเพื่อให้แน่ใจว่ามีการรวมรหัสที่ตรวจสอบแล้วเท่านั้น

มีเครื่องมือที่สนับสนุนการตรวจสอบโค้ด แต่ฉันไม่เคยใช้เลย การติดตามผู้ที่ทำการตรวจทานการรวมใด ๆ สามารถทำได้ภายใน repo ฉันใช้คุณสมบัติ svn และเชื่อมโยงกับงานที่มุ่งมั่นเพื่อแสดงว่าใครตรวจสอบอะไร


2
+1: ยกเว้น "เป็นความรับผิดชอบของผู้เขียนโค้ดที่จะต้องตรวจสอบ" หากฝ่ายบริหารไม่ต้องการการตรวจสอบเสร็จพวกเขาก็จะเลื่อนไปสู่เรื่องที่ไม่เกี่ยวข้อง จะต้องมีระบบการให้รางวัลบางอย่าง (ไม่เป็นทางการหรือไม่เป็นทางการ) ไม่เช่นนั้นจะไม่ได้ผล ผู้ดูแลสาขาตอบคำถามกับใครบางคนและมีรางวัลบางอย่างสำหรับการลงโทษทางวินัยในการตรวจสอบการตรวจสอบโค้ด จิ๊กซอว์ชิ้นนี้มีความสำคัญเช่นกัน คุณช่วยอธิบายได้ไหมว่าทำไมคนจะต้องมีวินัยในการทำเช่นนี้?
S.Lott

@ S.Lott กับทีมที่ฉันทำงานด้วยความภาคภูมิใจในวิชาชีพ นอกจากนี้หากคุณไม่ได้รับการตรวจทานรหัสของคุณจะไม่ถูกรวมเข้าด้วยกัน (ดังที่อธิบายไว้ด้านบน) ดังนั้นรหัสของคุณจะไม่เข้าสู่ผลิตภัณฑ์และคุณไม่ได้ทำงานในวัน / สัปดาห์ / การทำซ้ำ หากนักพัฒนาของคุณไม่ได้รับแรงจูงใจให้ทำงานของพวกเขาคุณมีปัญหาที่เลวร้ายยิ่งกว่าการจัดระเบียบแหล่งเก็บข้อมูลการควบคุมของคุณ

@ Graham Lee: "Professional Pride"? ฉันเย้ยหยัน (แต่ไม่ค่อยมีอะไรให้ทำมากนัก) "นักพัฒนาไม่ได้รับแรงบันดาลใจในการทำงาน" เป็นปัญหา ผู้จัดการหลายคนจะล้มล้างกระบวนการที่ดีโดยเรียกร้องการเปิดตัวก่อนกำหนดเวลาหรือต้องการคุณสมบัติเพิ่มเติมที่จะได้รับการเสริมแรงจูงใจปัจจัยใดที่มีอยู่เพื่อป้องกันการล้มล้างกระบวนการ อะไรจะหยุดผู้จัดการไม่ให้พูดว่า "เราต้องการสิ่งนี้ในวันพรุ่งนี้เราไม่มีเวลาในการตรวจสอบโค้ด"
S.Lott

@ S.Lott ฉันไม่รู้เกี่ยวกับคุณ แต่ฉันจะไม่ปล่อยรถถังขยะจำนวนมากไม่ว่าผู้จัดการจะคิดว่าเขารู้ดีกว่าเกี่ยวกับการทำงานของฉัน

@ Graham Lee: ฉันพยายามหลีกเลี่ยงการปล่อยรหัสบั๊กกี้ คำถามของฉันคือ "สิ่งที่กระตุ้นให้ทีมของคุณหลีกเลี่ยงการจัดการจากการล้มล้างกระบวนการของคุณ" เป็นกระบวนการที่ดีฉันต้องการทราบข้อมูลเพิ่มเติม
S.Lott

1

ฉันไม่เคยแยกโค้ดสำหรับการตรวจสอบตามเกณฑ์ที่ยอมรับ / ไม่ใช่ข้อผูกมัด - เกณฑ์เดียวที่ฉันพบคือการทดสอบหน่วยและการทดสอบการรวมเป็นสีเขียว

สำหรับการติดตามฉันขอแนะนำให้อัปเดตการไหลในตัวติดตามปัญหาที่คุณโปรดปราน สำหรับ exampe แทน:

  • เจ้าของผลิตภัณฑ์ -> นักวิเคราะห์ -> นักพัฒนา -> QA -> วิศวกรที่วางจำหน่าย

คุณอาจต้องการแนะนำอีกหนึ่งขั้นตอน (ตรวจสอบ):

  • เจ้าของผลิตภัณฑ์ -> นักวิเคราะห์ -> นักพัฒนา -> ผู้ตรวจทาน -> QA -> วิศวกรผู้วางจำหน่าย

ดังนั้นสำหรับตั๋วในทุกการดำเนินการของรัฐคุณสามารถกำหนดวิจารณ์และมีเพียงทานตั๋วจะเลื่อนไป QA


1

ฉันมีเพียงประสบการณ์เดียวในการตรวจสอบโค้ดดังนั้นฉันจึงไม่สามารถบอกได้ว่ามันดีแค่ไหน

ฉันทำงานกับโคเดอร์กลุ่มเล็ก (~ 10-15) และเราใช้ VS Team Foundation Studio เราได้รับการขอให้ส่งรหัสเกี่ยวกับวันละครั้งและก่อนที่จะมีการตรวจสอบรหัสการตรวจสอบโดยคนอื่นในกลุ่ม ระหว่างการคอมมิชชันชื่อของบุคคลนั้นจะถูกรวมในฟิลด์ด้วย


การกระทำเพียงครั้งเดียวต่อวันทำให้ฉันเป็นธงสีแดง ขอโทษ
btilly

อาจจะ. ตอนแรกฉันก็รู้สึกประหลาดใจเช่นกัน อย่างไรก็ตามมันไม่ใช่กฎที่ยากและรวดเร็วและคุณสามารถ "ระงับ" การเปลี่ยนแปลงในท้องถิ่นได้มากเท่าที่คุณต้องการ
apoorv020

0

ฉันทำงานกับทีมที่ใช้รหัสตรวจสอบทุกสิ่งที่ถูกเช็คอินโดยเปลี่ยนตามการเปลี่ยนแปลงในช่วงสองสามรีวิวต่อสัปดาห์ นี่หมายความว่าเราไม่ได้ตรวจสอบโค้ดอยู่เสมอ แต่มันก็บรรลุผลตามที่เราได้กำหนดไว้

ดังนั้นก่อนอื่นให้ถามสิ่งที่คุณต้องการบรรลุโดยตรวจสอบรหัส ในกรณีของเรามันไม่ได้จับนักพัฒนาที่งี่เง่า แต่ก็มีข้อสมมติฐานของความสามารถมากกว่าที่จะเป็นข้อสันนิษฐานของความไร้ความสามารถ มันทำให้ทีมได้ภาพรวมของส่วนอื่น ๆ ของระบบและอนุญาตให้แก้ไขการตัดสินใจที่น่าสงสัยได้ก่อนที่พวกเขาจะกลายเป็นหิน ด้วยความสงสัยฉันหมายความว่ามีมากกว่าหนึ่งวิธีในการสกินแมวและไม่ใช่ทุกคนที่รู้ว่ามีมีดที่น่าสนใจสำหรับแมวอยู่ในกล่องเครื่องมือแล้วดังนั้นเพื่อพูด


0

วิธีที่เราจัดการกับการตรวจสอบโค้ดคือทุกงานจากซอฟต์แวร์การติดตามโครงการของเราได้รับการตรวจสอบ ตอนที่เราใช้ตั๊กแตนตำข้าวและ SVN ความมุ่งมั่นของโครงการของเรานั้นเชื่อมโยงกับทั้งสองระบบ การกระทำทุกอย่างจะต้องเชื่อมโยงกับงานในตั๊กแตนตำข้าว เมื่องานเสร็จสมบูรณ์สถานะของ "พร้อมสำหรับการตรวจสอบ" ถูกกำหนดให้กับมัน

รายการ RFR นั้นถูกหยิบขึ้นมาโดยใครก็ตามที่มีเวลาว่างสำหรับการตรวจสอบหรือมอบหมายให้บุคคลที่เฉพาะเจาะจงเพื่อการตรวจสอบ ในวันศุกร์รายการ RFR ทั้งหมดจะต้องได้รับการตรวจสอบก่อนสิ้นวันเพื่อไม่ให้ถูกส่งไปยังสัปดาห์ต่อไปนี้

ปัญหาเดียวที่เราพบในกระบวนการนี้คือรายการใหญ่ที่มีไฟล์มากมาย ในการจัดการเรื่องนี้ผู้เข้ารหัสและผู้ตรวจสอบจะรวมตัวกันและตัวเข้ารหัสจะทำงานผ่านการเปลี่ยนแปลงจนกว่าผู้ตรวจทานจะเข้าใจพวกเขา พวกเขาจะทำการตรวจสอบโค้ดด้วยกัน

กระบวนการนี้พังทลายลงเมื่อผู้บริหารบอกว่าหากการเขียนโปรแกรมแบบเพื่อนเสร็จสิ้นการตรวจสอบโค้ดแยกต่างหากก็ไม่จำเป็น นักพัฒนาเริ่มเข้มงวดเกี่ยวกับกระบวนการและข้อบกพร่องเล็ก ๆ น้อย ๆ เริ่มได้รับการแนะนำ ในที่สุดเราก็กลับไปที่กระบวนการดั้งเดิมและสิ่งต่าง ๆ กลับมารวมกัน


0

ในทีมของฉันเราใช้ฝึกหัดมาตลอดปีที่ผ่านมาหรือดูเหมือนว่าจะทำงานได้ดีมาก

องค์กรของเราใช้ Perforce สำหรับการควบคุมเวอร์ชัน Perforce (ณ ปีที่ผ่านมา) มีคุณสมบัติที่เรียกว่า Shelving ด้วยการเก็บเข้าลิ้นชักฉันสามารถ "ระงับ" การเปลี่ยนแปลงของฉันสำหรับปัญหาเฉพาะ พวกเขาจะถูกเก็บไว้ในระบบควบคุมเวอร์ชัน แต่ไม่ได้เช็คอินจากนั้นฉันขอให้นักพัฒนาคนอื่นในทีมของฉันตรวจสอบรหัส

ผู้พัฒนารายอื่นสามารถดูการเปลี่ยนแปลงที่รอดำเนินการของฉันใน Perforce จากคอมพิวเตอร์ของเขาเองและเปรียบเทียบการเปลี่ยนแปลงกับการแก้ไขล่าสุด นอกจากนี้เขายังสามารถ "ไม่แยกแยะ" ต่อเครื่องของเขาหากเขาต้องการลองเปลี่ยนแปลงของฉัน เมื่อเขาตรวจสอบเสร็จเขาก็บอกให้ฉันรู้ ฉันจะตรวจสอบรหัสของฉันด้วย "วิจารณ์โดย Bob" ในตอนท้ายของความคิดเห็น

สิ่งนี้ได้ผลดีสำหรับเรา ก่อนอื่นบทวิจารณ์โค้ดโดยทั่วไปได้พิสูจน์แล้วว่ามีประโยชน์อย่างยิ่ง นอกจากนี้ฟีเจอร์การเก็บเข้าลิ้นชักของ Perforce ยังช่วยให้เราสามารถทำการตรวจสอบโดยไม่ต้องเช็คอินหรือปัญหาที่สำคัญใด ๆ แม้ว่าทีมงานของเราจะแพร่หลายในเชิงภูมิศาสตร์ซึ่งเป็นสิ่งสำคัญมาก และมันใช้งานได้ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.