วิธีการตรวจสอบโค้ดที่ดีขึ้นเมื่อดึงคำขอมีขนาดใหญ่


12

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

ปัญหา

ฉันรู้สึกว่าบทวิจารณ์โค้ดของฉันสามารถทำได้ในวิธีที่ดีกว่า ฉันกำลังพูดถึงความคิดเห็นเกี่ยวกับโค้ดขนาดใหญ่ที่มีการเปลี่ยนแปลงมากมายในไฟล์มากกว่า 20 ไฟล์

มันค่อนข้างง่ายที่จะจับปัญหารหัสท้องถิ่นที่ชัดเจน การเข้าใจว่ารหัสตรงตามเกณฑ์ทางธุรกิจเป็นเรื่องที่ต่างออกไป

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

วิธีแก้ปัญหาที่เป็นไปได้และทำไมมันถึงไม่เหมาะกับฉัน

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

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

นอกจากนี้คุณยังสามารถละเว้นลักษณะเชิงตรรกะของรหัสโดยรวม แต่ดูเหมือนเสี่ยงมากโดยเฉพาะเมื่อรหัสนั้นมาจากโปรแกรมเมอร์ที่ไม่มีประสบการณ์

การใช้เครื่องมือที่ดีกว่าอาจมีประโยชน์ แต่ฉันไม่พบสิ่งใดเลย

คำถาม

  • คุณมีปัญหาที่คล้ายกันกับรีวิวรหัสของคุณ? คุณเผชิญกับพวกเขาได้อย่างไร
  • บางทีคุณอาจมีเครื่องมือที่ดีกว่า

3
ทำไมรหัสเหล่านี้ถึงมีขนาดใหญ่มาก? ตัวอย่างเช่นหากพวกเขาเป็นผลมาจากการ refactoring อัตโนมัติแล้วแทนที่จะตรวจสอบการกระทำที่คุณตรวจสอบว่าการทำซ้ำ refactoring ในการกระทำที่เก่ากว่าสร้างสำเนาที่เหมือนกันของการกระทำใหม่แล้วตัดสินใจว่าคุณเชื่อถือเครื่องมือหรือไม่ ดังนั้นการตรวจสอบ 1,000- บรรทัดแตกต่างทั้งหมดทันทีกลายเป็นตรวจสอบคำสั่ง 1 บรรทัดใน IDE และการตัดสินใจว่าจะไว้วางใจผู้ขาย IDE
Jörg W Mittag

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

คำตอบ:


8

เรามีปัญหาเหล่านี้และการถามคำถามด้านล่างนี้ทำงานได้ดีสำหรับเรา:

PR ทำสิ่งหนึ่งสิ่งที่สามารถผสานและสามารถทดสอบได้อย่างอิสระหรือไม่?

เราพยายามทำลาย PRs ด้วยความรับผิดชอบเดี่ยว (SR) หลังจากคนกลุ่มแรกที่กลับมารู้สึกประหลาดใจที่พบว่าแม้แต่สิ่งเดียวที่มีขนาดเล็กแม้ว่าจะมีขนาดใหญ่ก็ตาม

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

สิ่งนี้ยังช่วยให้ refactors ที่เพิ่มขึ้นเมื่อมีการเพิ่มมากขึ้นและเวลาตอบสนอง PR ลดลงอย่างมาก!

ฉันขอแนะนำให้เลิกโดย SR หากเป็นไปได้และดูว่ามันเหมาะกับคุณหรือไม่ ทำแบบฝึกหัดเพื่อทำเช่นนั้น


11

บางครั้งคุณไม่สามารถหลีกเลี่ยงคำขอดึงขนาดใหญ่ แต่คุณสามารถแยกแยะว่าใครมีความรับผิดชอบอะไรบ้าง

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

เช่นเดียวกับข้อโต้แย้งใด ๆ ก็ควรมีความคิดที่ชัดเจนเดียว มันทั้ง:

  • refactor
  • การเพิ่มประสิทธิภาพ
  • หรือฟังก์ชั่นใหม่

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

จะยังคงมีคำขอดึงขนาดใหญ่ แต่ด้วยการโต้แย้งที่ชัดเจนมันง่ายมากที่จะเห็นสิ่งที่ไม่เหมาะ

ส่วนเครื่องมือขึ้นอยู่กับองค์กรและกระบวนการของคุณ BitBucket เป็นเครื่องมือที่ดีไม่ว่าจะดีหรือไม่นั้นขึ้นอยู่กับทุกอย่างตั้งแต่งบประมาณฮาร์ดแวร์ข้อกำหนดจนถึงกระบวนการที่มีอยู่ก่อนกฎธุรกิจและการดัดแปลงซอฟต์แวร์ต่าง ๆ ที่คุณทำเพื่อรองรับ BitBucket ฉันจะเริ่มต้นด้วยการดูเอกสารประกอบเพื่อดูว่าสามารถกำหนดค่าพฤติกรรมได้หรือไม่อาจส่งไปยังชุมชนปลั๊กอิน (หรือเข้าร่วมด้วยการสร้างปลั๊กอินเพื่อทำสิ่งนั้น)


8

อย่าตรวจสอบคำขอดึงสมบูรณ์ แต่ทุกการกระทำ คุณจะได้รับความเข้าใจที่ดีขึ้นเกี่ยวกับคำขอดึงโดยทำแบบนี้ this

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

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

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

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

“ บ่อยครั้ง” นั้นคลุมเครือ แต่ถ้าคุณพบว่าตัวเองใช้เวลาในการตรวจสอบรหัสมากเกินไปซึ่งไม่พบวิธีแก้ไขคำขอดึงครั้งสุดท้ายคุณอาจใช้สองเทคนิค:

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

  • มีมุมมองแบบเคียงข้างกันของไฟล์เวอร์ชันล่าสุด (แม้ว่าจะมีหลายกรณีสำหรับคอมมิทขนาดใหญ่ (1) ไฟล์นั้นอาจแตกต่างกันอย่างรุนแรงและ (2) ไฟล์อาจถูกเปลี่ยนชื่อหรือบล็อกอาจมีรหัสขนาดใหญ่ ย้ายไปที่อื่นทำให้ยากต่อการค้นหาไฟล์ที่ตรงกัน)

  • อาจขอให้ผู้กระทำการสควอชกระทำเมื่อมันสมเหตุสมผลหรือมีข้อตกลงการส่งข้อความที่เฉพาะเจาะจงโดยที่คนหนึ่งกระทำการเลิกทำส่วนหนึ่งของอีกคนหนึ่ง


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


1
@ JörgWMittag: ขอบคุณสำหรับความคิดเห็นของคุณ OP อ้างว่าเขาไม่ต้องการแสดงความเห็นต่อการกระทำเพราะเขาจะเห็นการเปลี่ยนแปลงที่ล้าสมัยซึ่งเป็นความจริง แต่ไม่ควรมีปัญหาเหมือนมีปัญหาทั้งหมดที่เกี่ยวข้องกับการตรวจสอบต่อไฟล์ เนื่องจากคำตอบของฉันไม่ชัดเจนฉันจึงเพิ่มหัวข้อเพื่อระบุประเด็นนี้โดยเฉพาะ
Arseni Mourzenko

2

คิดออกสิ่งที่คุณพยายามจะบรรลุด้วยการตรวจสอบคำขอดึงและดูว่ามีทางเลือกอื่นหรือไม่

ตัวอย่างเช่นคุณอาจต้องการ

  • ตรวจสอบให้แน่ใจว่ามีการปฏิบัติตามมาตรฐาน
  • ตรวจสอบการทำงานว่าถูกต้องหรือไม่
  • ตรวจสอบให้แน่ใจว่ามีมากกว่าหนึ่งคนเข้าใจรหัส
  • ฝึกจูเนียร์

ฯลฯ

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

ตัวอย่างเช่นถ้าฉันกำลังตรวจสอบทุกบรรทัดเพื่อให้ฉันสามารถแนะนำและเปลี่ยนการฝึกอบรมแล้วฉันสามารถข้ามสิ่งนั้นใน PR ขนาดใหญ่ที่ทำโดยผู้อาวุโส

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

คุณไม่จำเป็นต้องตรวจสอบทุกสิ่งในการประชาสัมพันธ์ทุกครั้งตราบใดที่คุณมีวิธีการแบบ QA

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