Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

วิธีการแก้ไขข้อผิดพลาดจากการรวม Source code ของทีม

$
0
0

git-push

git-push เมื่อเช้านี้เห็นมีการ share บทความเรื่อง 4 Simple Tricks to Avoid Merge Conflicts ทำการอธิบายถึงการแก้ไขปัญหาต่าง ๆ ที่เกิดจากการรวม source code ของทีม ซึ่ง developer มักจะเรียกว่า Merge conflict จึงนำมาแปลกันนิดหน่อย น่าจะมีประโยชน์บ้างนะ มาดูกันว่ามีวิธีการอะไรบ้าง ?

คำถามที่มักได้รับเสมอจากการแบ่งปันเรื่อง Version Control System

ไม่ว่าจะเป็น Git, Mercurial HG และ SVN นั่นก็คือ ถ้า source code รวมกันแล้วเกิด Conflict หรือ ข้อขัดแย้ง จะต้องแก้ไขอย่างไรดี ?
ก่อนที่จะหาวิธีการแก้ไขปัญหา เราต้องรู้และเข้าใจก่อนว่า ที่ไปที่มาของปัญหามันคืออะไรกันแน่
ในการพัฒนา software ส่วนใหญ่ต้องทำงานเป็นทีม นั่นคือต้องมีคนทำงานร่วมกันมากกว่า 1 คน ต้องทำงานบน source code ชุดเดียวกัน ดังนั้นมีบ่อยครั้งที่ทำการแก้ไข source code เดียวกัน พร้อม ๆ กัน ส่งผลให้เกิดปัญหา คือ Merge conflict ซึ่งมันรบกวนจิตใจของนักพัฒนาอย่างมาก !! เนื่องจากต้องทำการแก้ไข conflict หรือ ข้อขัดแย้งเหล่านั้นเอง บางครั้งก็แก้ไขผิด ๆ ถูก ๆ บางครั้งทำให้ bug ที่แก้ไขไปแล้ว กลับมาอีก บางครั้งทำให้ feature ที่เคยทำงานได้ ทำงานไม่ได้ นั่นคือ ความบอบช้ำ และ เจ็บช้ำที่นักพัฒนาได้รับ แต่ก็ยังทำแบบนั้นซ้ำแล้วซ้ำอีก !! จึงเกิดคำถามขึ้นมาว่า จะแก้ไขปัญหาเหล่านี้อย่างไรดี บางคนอาจจะพยายามหาเครื่องมือที่ช่วยรวม หรือ merge source code แบบ GUI เพราะว่า มันง่ายดี แต่ผมคิดว่า เราน่าจะทำการแก้ไขปัญหาที่ต้นเหตุดีกว่า เพื่อหลีกเลี่ยงปัญหาที่จะเกิดขึ้น นั่นคือ ป้องกันไว้ดีกว่าแก้นะครับ (Prevent) ซึ่งจากบทความข้างต้นได้แนะนำไว้ 4 วิธีตามลำดับดังนี้

1. ทำการ Merge บ่อย ๆ สิ

ปัญหาใหญ่ ๆ ของ Merge conflict เกิดจากจำนวน source code ที่ชนหรือขัดแย้งกันมากเหลือเกิน คำถาม คุณทำการ merge source code กันบ่อยเพียงใด ? 2-3 วัน ? หนึ่งสัปดาห์ ? สองสัปดาห์ ? ครึ่งเดือน ? หนึ่งเดือน ?
สิ่งที่หนึ่งที่บอกได้เลยก็คือ ยิ่งใช้เวลานานเพียงใด ความเสี่ยงก็ยิ่งมากขึ้นเท่านั้น ยิ่งก็ให้เกิดข้อขัดแย้งขนาดใหญ่ และ มากมาย
ดังนั้น ถ้าคุณต้องการหลีกเลี่ยงปัญหาเหล่านี้ ให้ทำการ merge บ่อย ๆ ไปเลย นั่นคือ ทุกครั้งเมื่อคุณทำการเปลี่ยนแปลง หรือ commit source code นั่นเอง จะช่วยลดข้อขัดแย้งต่าง ๆ ลงไปอย่างมาก ถึงจะเกิดข้อขัดแย้ง ก็เป็นเพียงปัญหาเล็ก ๆ ซึ่งสามารถแก้ไขได้อย่างง่ายดาย
หัวใจคือ Fast feedback ครับ

2. เล็ก ๆ สิดี

ว่าด้วยเรื่องของ Single Responsibility Principle (SRP) เป็นหนึ่งในแนวทางการออกแบบระบบงานที่ดี คือ SOLID นั่นคือ ในหนึ่ง class ใน หนึ่ง method นั้น ควรจะมีหน้าที่การทำงานเพียงอย่างเดียวเท่านั้น หรือในแต่ละ class แต่ละ method ควรมีเหตุผลเดียวในการเปลี่ยนแปลงเท่านั้น ผลที่ได้ก็คือ นักพัฒนาจะไม่ทำงาน หรือ เปลี่ยนแปลง source code ที่เดียวกันอย่างแน่นอน ยกเว้นจะทำงานเดียวกัน หรือ ทำงานด้วยกัน ดังนั้น การออกแบบที่ดีมันช่วยให้ทีมทำงานร่วมกันได้อย่างดี ยิ่งแต่ละส่วนการทำงานเล็ก ๆ แล้ว ก็ยิ่งทำให้คุณภาพของการออกแบบระบบดี รวมทั้ง ลดความเสี่ยงจาก Merge conflict อีกด้วย
ลองกลับไปดู source code ของคุณดูสิว่า มีการแก้ไข source code อย่างไรกันบ้าง เช่น มี class ไหนที่ต้องแก้ไขบ่อยมาก ๆ จากทุก ๆ คน ทุก ๆ feature ?

3. การพูดคุย การสื่อสาร มันสำคัญอย่างมาก

Communication is a Key !!
แต่ละคนในทีมพูดคุยกันหรือไม่ ? แต่ละคนในทีมรู้หรือไม่ว่า เพื่อน ๆ แต่ละคนทำงานอะไร ? รู้หรือไม่ว่า แต่ละคนแก้ไข class อะไรกันอยู่ ? รู้หรือไม่ว่า สิ่งที่แก้ไขไปนั้นกระทบใครบ้าง ? ดังนั้น ถ้าคุณไม่รู้ ก็ควรพูดคุยกันซะเพื่อให้รู้ หรือบางครั้งต้องแก้ไข class เดียวกันอยู่ตลอดเวลา ทำไมไม่มานั่งทำงานด้วยกันไปเลยล่ะ !!
แก้ไขการ Merge conflict ได้ง่าย ๆ มากเลยนะ เพียงแค่เราคุยกันในเรื่องที่ควรจะคุยกันมากขึ้น

4. Mob programming

เป็นวิธีการที่ทรงประสิทธิภาพอย่างมาก และเชื่อได้เลยว่า แก้ไขปัญหา Merge conflict ได้ 100% เนื่องจากทุกคนมานั่งทำงานด้วยกัน ใช้เครื่องทำงานเดียวกัน ดังนั้น ไม่มีทางที่ source code จะขัดแย้งกัน แต่มันมีค่าใช้จ่ายที่สูงมาก ๆ ดังนั้นจึงเป็นวิธีการสุดท้ายที่จะทำนั่นเอง
วันนี้คุณทำการ merge source code กันบ่อย ๆ หรือไม่ ? ถ้าไม่ ก็เริ่มได้แล้ววันนี้ !!

Viewing all articles
Browse latest Browse all 1997

Trending Articles