Screen Shot 2558-08-03 at 9.43.28 AM
บ่อยครั้งมีโอกาสทำการ review code ของระบบต่าง ๆ
โดยก่อนที่จะเริ่ม review นั้น มักจะถามก่อนว่า

  • เป้าหมายของการ review code คืออะไร ?
  • ผลลัพธ์ที่คาดหวังจากการ review code เป็นอย่างไร ?
  • ทำการตัดสินใจต่อไปอย่างไร หลังจากการ review ?

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

ตัวอย่างเช่น
ในการ review code แต่ละครั้ง ล้วนเกิดมาจากปัญหาทั้งสิ้น
เพราะว่า code เหล่านั้นทำให้ค่าใช้จ่าย และการ regression มันสูงขึ้นเรื่อย ๆ

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

การทำ code review นั้น
เราจะไม่ทำการ blame หรือไม่ตำหนิใครคนใดคนหนึ่ง
เราทำเพื่อปรับปรุงคุณภาพของคน
เราทำเพื่อให้ developer ได้เรียนรู้
เราทำเพื่อให้ developer ได้เติบโต

ดังนั้นเราต้องเปลี่ยนจากการเข้ามา audit
ไปเป็นการเข้ามาทำงานร่วมกับทีม
ด้วยการกำหนดก่อนว่า ปัญหาที่แท้จริงคืออะไรกันแน่ ?
เพื่อทำให้เราเข้าใจว่าสิ่งที่กำลังสร้างมันเป็นอย่างไร
เพื่อทำให้เข้าใจว่าระบบมันมีการเติบโตอย่างไร
เพื่อทำให้เข้าใจซึ่งกันและกัน
ก่อนที่จะทำงานด้วยกันแบบ win-win

การทำ code review นั้นเพื่อโอกาสในการปรับปรุง

อย่างที่บอกไปว่ามันไม่ใช่การเข้ามา audit code
แต่เป็นการเข้ามาเพื่อ พูดคุยกับทีมว่า
ผลลัพธ์ที่ได้จากการพัฒนามันเป็นอย่างไรบ้าง
แล้วเรามีแผนที่จะแก้ไข และ ปรับปรุงมันอย่างไร

การทำ code review ควรทำบ่อย และ ต่อเนื่อง
ลองคิดดูสิว่า
ถ้าคุณทำการ review code จำนวน 5,000 บรรทัดในครั้งเดียว
มันคงไม่ใช่เรื่องที่น่าสนุกเลยใช่ไหม ?

และการ review code มันทำให้เราเข้าใจปัญหา
ซึ่งนั่นทำให้เราแก้ไขได้ง่ายขึ้นนั่นเอง

แต่การทำ code review นั้น ไม่ง่ายนะ !!

เราตัดสินใจได้อย่างไรว่า code ไหนดี หรือ ไม่ดี ?
ใช้ประสบการณ์ ?
ใช้ความรู้สึกส่วนตัว ?
ก็อาจจะได้นะ หรือคุณคิดว่าอย่างไร ?

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

แต่ในบางเรื่องมันก็ไม่สามารถใช้เครื่องมือ หรือ ตัวเลขวัดได้ เช่น
code ชุดนี้มันอ่านง่ายนะ
code ชุดนี้มันดูแลรักษาง่ายนะ
code มัน clean นะ

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

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

เริ่มต้นอย่างไรดีล่ะ ?

สำหรับ code review นั้น มักจะเจอ code จำนวนมาก
ทั้งหลักร้อย หลักพัน หลักหมื่นบรรทัดขึ้นไป

ก่อนเริ่ม เราต้องพยายามดึงข้อมูลต่าง ๆ
ออกมาจาก code เหล่านั้นให้ได้มากที่สุดเท่าที่จะทำได้

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

จากนั้นทำการสุ่มเปิดไฟล์ต่าง ๆ ขึ้นมาดู
แล้วใช้ editor/IDE ช่วย หรือดูจาก code reference ต่อไป
แต่นี่เป็นเพียงการเริ่มต้น หรืออุ่นเครื่องเท่านั้น

เมื่อเราอุ่นเครื่องได้ที่ นั่นคือ เราเริ่มคุ้นชินกับ code ล่ะ
ต่อไปเราเริ่มลงในรายละเอียดเชิงลึก
ด้วยการนำเครื่องมือต่าง ๆ มาใช้งาน
เพื่อดูข้อมูลในมุมมองต่าง ๆ เช่น

  • เรื่องขนาดของ code
  • เรื่อง Complexity ของ code
  • เรื่องของ coupling และ cohesion

จากนั้นเริ่มค้นหา Smell code และ code ที่อาจจะทำให้เกิดความผิดพลาดได้
ซึ่งเราจะได้ข้อมูลออกมาเพียบ !!

ปัญหา คือ จะแก้ไขอะไรก่อนหลังดีล่ะ ?
แนวทางที่ขอแนะนำคือ ให้ทำการแก้ไขพวก critical bug/issue ก่อนเลย
ซึ่งมันไม่ควรเกิดขึ้นในระบบของเราเลยนะ

ส่วนเรื่องอื่น ๆ ที่ควรดูต่อมาคือ

  • Compiler warning ต่าง ๆ อย่าให้มี และห้าม ignore นะ
  • พวก TODO หรือสิ่งที่ IDE สร้างแบบอัตโนมัติมาให้ ก็ไม่ควรมี
  • การ cast type ที่เยอะเกินไป
  • การใช้ instanceOf ให้ลด ละ เลิก ซะ
  • การ ignore test จะทำไปทำไม ลบไปซะ
  • พวก JavaDoc comment ที่ไร้ค่า หรือ ไม่ถูกใช้งาน

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

ในการทำ code review กับทีม ควรกำหนดเวลาไปให้ชัดเจนเลย
เพื่อทำให้ทีมเห็นความสำคัญ และ เข้าใจตรงกัน
รวมทั้งให้เข้าใจปัญหาต่าง ๆ ร่วมกัน

โดยให้ทำการอธิบายขั้นตอนในการได้มาซึ่งข้อมูลด้วย
เพื่อให้ทีมมีความรู้ และ เข้าใจในเครื่องมือต่าง ๆ
ต่อไปทุกคนในทีมจะใช้งานได้
ซึ่งมันช่วยลดเวลาในการ review code ลงไป

สุดท้าย code review อาจจะไม่มี หรือ นาน ๆ ครั้งก็เป็นได้
เพราะว่า ทีมพัฒนาสามารถควบคุมเรื่องเหล่านี้เองได้แล้ว !! (Self-manages team)

สุดท้ายเราต้องทำรายงานให้ Manager และ Team Lead หรือ ลูกค้า

ว่าผลจากการทำ code review เป็นอย่างไรบ้างนั้นเอง

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

ผลที่ได้คือ เราจะได้รายงานที่มี bug/issue จริง ๆ
ซึ่งข้อมูลเหล่านี้จะช่วย และ สนับสนุนทีมพัฒนานั่นเอง

วันนี้คุณทำ code review กันอย่างไร ?