การทำ Code Review ช่วยเราได้อย่างไร ?
Code Review คือการทำอะไร ?
การทำ Code Review เป็นกระบวนการหนึ่งในการพัฒนาซอฟต์แวร์ โดยจะเป็นการนำโค้ดมาตรวจดูว่ามีส่วนไหนไม่ถูกต้องหรือไม่ตรงตาม Requirement หรือไม่ รวมถึงโค้ดถูกต้องตามมาตรฐาน Computer Language หรือไม่ และรวมถึงการเสนอแนวทางการปรับปรุงให้ดีขึ้นกว่าเดิม
โดยในการพัฒนาซอฟต์แวร์แต่ละครั้งนั้นจะต้องนำโค้ดมารวมเข้ากับโค้ดของคนอื่น ๆในโปรเจกต์ ก็จะต้องผ่านการทำ Code Review ก่อนเสมอ หากมีการให้แก้ไขก็ต้องทำการแก้ไขให้เสร็จก่อนจึงจะนำโค้ดที่ได้มารวมกัน
ใครบ้างที่สามารถทำ Code Review ?
Credit: Group of people using laptop
คำตอบนั้นคือทุกคนในทีมที่มีส่วนร่วมในการเขียนโค้ดควรจะทำเพราะทุกคนในทีมล้วนเป็นเจ้าของโค้ด (Ownership) โดยปกติจะมีเงื่อนไขว่า Pull Request นั้นจะต้องได้รับการ Approve จาก Developer ในทีม ผู้เชี่ยวชาญที่เกี่ยวข้องหรือ Senior Developer อย่างน้อย 1 คนขึ้นไป จึงจะสามารถนำโค้ดไป Merge รวมกัน นอกจากสมาชิกภายในทีมที่ต้อง Review Code แล้ว คนที่ควรจะทำการ Review เป็นคนแรกนั้นก็คือผู้เขียนโค้ดนั้นเอง เพราะในบางครั้งหรือด้วยความรีบมักจะมีหลุดทำการ Comment โค้ด พิมพ์ผิด หรือลืมเติม s หรือ es หรืออาจจะเป็นใส่ print หรือ console.log() ไว้ โดยหากลองตรวจด้วยตัวเองอีกครั้งก็จะทำให้โค้ดของเรามีคุณภาพมากยิ่งขึ้น และลดเวลาในการ Review Code ได้อีกด้วย
ข้อดีและข้อเสียของการทำ Code Review
ข้อดีของการทำ Code Review
-
Share Ownership หรือก็คือโค้ดเหล่านั้นเป็นของทุกคน ไม่ใช่เป็นของใครคนใดคนหนึ่ง
-
Review Requirement เป็นการทบทวนถึงโค้ดที่เขียนมานั้นตรงตาม Requirement ไหม หรือทบทวนว่าทำถึงไหนแล้ว และยังเป็นการทบทวนตนเองด้วยว่าสิ่งที่ทีมทำมานั้นเราเข้าใจ Requirement ตรงกันหรือไม่
-
Share Knowledge เป็นการแชร์ความรู้กัน โดยเมื่อมีการพัฒนาโค้ดแต่ละครั้ง ภายในทีมก็จะสามารถเรียนรู้เทคนิค หรือวิธีการแก้ไขปัญหาจากโค้ดที่เกิดจากการพัฒนา
-
Improve Code Quality การทำ Code Review นั้นจะเป็นวิธีที่จะช่วยทำให้โค้ดนั้นมีประสิทธิภาพ และมีคุณภาพตามมาตรฐานที่กำหนดไว้
-
Improve Learning การทำ Code Review เป็นสิ่งที่ได้ทั้ง 2 ฝ่ายเลย ทั้งคนเขียนและคนรีวิว คนเขียนได้แก้ไขปรับปรุงให้โค้ดอ่านง่าย เป็นมาตรฐาน และง่ายต่อการทำความเข้าใจ คนรีวิวได้ฝึกฝนการตรวจ การแก้ปัญหา และการให้คำแนะนำ
ข้อเสียของการทำ Code Review
-
Fear of Review มักเป็นข้อเสียที่เกิดขึ้นได้ทุกที่ ยิ่งเป็นคนที่มาร่วมทีมใหม่ ๆ หรือประสบการณ์ยังน้อย มักจะไม่ค่อยกล้าที่จะ Review ซึ่งมักจะเกิดได้จากหลายสาเหตุ ได้แก่
-
ประสบการณ์หรือความชำนาญยังไม่มากพอก็อาจจะทำให้ไม่กล้าที่จะเข้าไปรีวิว
-
กลัวเมื่อรีวิวไปแล้วอาจจะโดนตำหนิ
-
Long time to ship โดยการ Review Code ในแต่ละครั้งนั้นก็อาจจะใช้เวลาในการตรวจดูต่างกัน ซึ่งก็ขึ้นอยู่กับขนาดของ Pull Request ความยากของโค้ด หรือแม้กระทั้งความละเอียดในการตรวจ ซึ่งในบางครั้งอาจจะต้อง Pull Code ของ Pull Request มาใช้งานที่เครื่องตัวเองเพื่อดูว่าทำงานตรงตามสเปคหรือไม่
-
Large reviews mean longer review times การมีคนมารีวิวโค้ดเยอะ ๆ นั้นก็อาจจะไม่ได้ดีไปซะทั้งหมด เนื่องจากการที่มีผู้มารีวิวเยอะก็จะทำให้ใช้เวลาในการพูดคุยหรือโต้แย้งนานขึ้น ยิ่งเป็น Pull Request ที่มีขนาดใหญ่แล้วด้วยก็อาจจะทำให้ใช้เวลามากขึ้นไปอีก
แล้วถ้าไม่เคยทำ Code Review เลยจะต้องเริ่มยังไงดี ?
ยกตัวอย่างเช่นใช้เครื่องมือในการเก็บโค้ดเป็น Github ปกติถ้าไม่ทำ Code Review ก็อาจจะแตก Branch แล้วทำการพัฒนาโค้ดเสร็จก็จะนำโค้ดที่จะทำการ Merge ไปยัง Master หรือ Main โดยก่อนจะทำการ Merge นั้นแหละ ให้ทีมมาตรวจโค้ดกัน หากทีมไม่มีข้อเสนอแนะก็จะทำการ Approve เราก็จะสามารถ Merge ได้เลย
Credit: https://flic.kr/p/gLKune
อีกแนวทางก็คือการทำ Pair Programming วิธีการนี้คือจะทำเป็นกันเป็นคู่ โดยสลับกันคือคนนึงจะเป็นคนเขียนโค้ดส่วนนึงอีกคนก็จะคอยรีวิวความถูกต้องหรือแนะนำแนวทาง
ข้อดีของวิธีนี้คือ
-
เป็นการแลกเปลี่ยนความรู้ซึ่งกันและกัน
-
แก้ปัญหาได้รวดเร็วเมื่อผู้ที่โค้ดอยู่ติดปัญหา
-
เหมาะกับการไกด์ให้แก่ผู้ที่ประการณ์น้อย
ข้อเสียก็มีเหมือนกัน เช่น
-
ใช้เวลาในการพัฒนานขึ้น
สิ่งที่ควรทำสำหรับ Code Review
Small Pull Request จะดีกว่ามั้ย ถ้าหากนำโค้ดที่มีความยาวไม่มาก อาจจะไม่เกิน 100-300 บรรทัด เพราะยิ่ง Pull Request นั้นมีขนาดเล็กได้ก็จะง่ายและเร็วขึ้นกับผู้ตรวจ
Team should be review การทำ Code Review นั้น ทีมก็ควรช่วยทำเพราะอย่างที่กล่าวไป ทีมเป็นผู้รู้ข้อมูล Requirement และโค้ดก็เป็นของทีม การทำแบบนี้ยังช่วยให้ทีมยังคงทำตามมาตรฐานที่วางไว้ และการที่ทีมสามารถรีวิวโค้ดได้นั้นจะทำให้ไม่มีคำว่าคนหลักในการตรวจโค้ด
Ask questions and provide helpful context เมื่อได้รีวิวโค้ด หากสงสัยก็สามารถตั้งคำถามได้ หรือหากมีส่วนไหนที่สามารถปรับปรุงได้ก็ควรจะแนะนำและอธิบายถึงเหตุผลในการปรับปรุงเพิ่ม
References: