![last-line-effect]()
![last-line-effect]()
จากบทความเรื่อง
Last Line Effect
ทำการศึกษาผลกระทบที่มักเกิดกับการ
Copy-and-Paste code
ซึ่งแน่นอนว่า developer ส่วนใหญ่ชอบใช้งาน
แถมใช้งานกันบ่อย ๆ อีกด้วย
และบ่อยครั้งพบว่าการกระทำแบบนี้ก่อให้เกิดความผิดพลาดขึ้นมา
หนึ่งในข้อผิดพลาดนั้นก็คือ
code ใน block หรือบรรทัดท้าย ๆ นั่นเอง
มาดูผลการศึกษากัน
ผู้ทำการศึกษาได้สรุปและจัดเก็บ bug จากระบบงานต่าง ๆ
ไว้ในรูปแบบของตนเองทำให้ง่ายต่อการศึกษา
ซึ่งอยู่ที่
Detected errors database
โดย pattern หนึ่งที่ได้ทำการศึกษาคือ Last Line Effect
Last Line Effect มันคืออะไร ?
ในการเขียนโปรแกรมของ developer นั้น
บ่อยครั้งมักมี code คล้าย ๆ กันทำงานต่อเนื่องกัน
ดังนั้นถ้า developer จะพิมพ์สิ่งที่ซ้ำ ๆ กัน มันก็น่าเบื่อสุด ๆ
สิ่งที่ developer มักจะทำก็คือ
ทำการ Copy-and-Paste code ที่คล้าย ๆ กันซะ
จากนั้นจึงตามไปแก้ไขส่วนที่ต้องการ
สิ่งที่ตามมาคือ
ความผิดพลาด
เนื่องจากเมื่อทำการ copy เยอะ ๆ แล้ว
ทำให้ developer หลงลืมไปว่า
จะต้องแก้ไขตรงไหนอย่างไรบ้าง !!
มาดูตัวอย่าง code จากการศึกษาเรื่อง Last Line Effect กันบ้าง ?
ซึ่งมักจะเกิดในช่วง ๆ บรรทัดท้ายของโปรแกรม
หรือของแต่ละ method
หรือในแต่ละ block
[gist id="9dfda1eaea9d7fac4fe585e98a8afe6b" file="1.cpp"]
คำอธิบาย
เห็นบรรทัด z+= หรือไม่ ?
ไม่น่าจะเป็นการเพิ่มค่าจาก other.y นะ !!
หรือจากเงื่อนไขยาว ๆ ของการเปรียบเทียบ
[gist id="9dfda1eaea9d7fac4fe585e98a8afe6b" file="2.cpp"]
คำอธิบาย THREADS= มีความยาวเป็น 8 นะ !!
หรือว่า copy มาแบบนี้ !!
[gist id="9dfda1eaea9d7fac4fe585e98a8afe6b" file="3.cpp"]
หรือว่าแบบนี้ ดูผ่าน ๆ หาข้อผิดพลาดยากมาก ๆ !!
[gist id="9dfda1eaea9d7fac4fe585e98a8afe6b" file="4.cpp"]
หรือเป็นพวกย้ำคิดย้ำทำ !!
[gist id="9dfda1eaea9d7fac4fe585e98a8afe6b" file="5.cpp"]
ใครเคยทำแบบนี้บ้างยกมือขึ้น ?
วิธีการแก้ไขนั้นทำได้ไม่ยากเลยนะ
แต่ขอแนะนำให้คิดก่อนว่า การจะเป็น developer ที่ดีต้องทำอย่างไร ?
โดยมากแล้วมักจะสร้างข้อผิดพลาดเล็กน้อยขึ้นมาเสมอ
แต่สิ่งที่น่ากลัวกว่าคือ ไม่รู้ว่าตนเองทำผิดพลาด !!
เนื่องด้วยสาเหตุอะไรก็ตาม
หลัก ๆ มาจาก feedback loop ของการทดสอบมันนานมาก ๆ
ดังนั้นสิ่งที่ควรกระทำสำหรับ developer ที่ดีคือ
รู้ข้อผิดพลาดต่าง ๆ ให้รวดเร็วที่สุดเท่าที่จะเป็นไปได้
เพื่อป้องกันและแก้ไขข้อผิดพลาดเหล่านั้น
ก่อนที่จะกลายเป็นข้อผิดพลาดอันใหญ่หลวง !!
หนึ่งในแนวปฏิบัติคือ Test-Driven Development (TDD)
ทำซะ แล้วจะช่วยทำให้คุณรู้ว่า
จุดอ่อนและข้อผิดพลาดใน code อยู่ตรงไหน