มาเริ่มทำ Mutation Testing กันนะ!!!

สวัสดีครับ เมื่อหลายวันที่ผ่านมามีพี่ๆ น้องๆ ใน Facebook โพสคำว่า Mutation Testing เลยเกิดคำถามว่ามันคือเทคนิคอะไรกัน?

“Unit Test ที่มียังไม่เพียงพอหรือ? TDD ละ? Code Coverage ก็ไม่พอเหรอ? อ้าวเฮ้ย!!!”

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

หลังจากนั้นผมก็ทำการสร้าง Unit Test ตามและลองรันดูผลลัพธ์ตามนี้นะครับ

ดูดีเลยทุกอย่างผ่านหมด ไหนเราลองมาดู Code Coverage กันหน่อยนะครับ

ก็ดูดีนะ!!! ทำรายงานส่งหัวหน้าได้แล้ว ทุกอย่าง 100% Unit Test, Code Coverage แต่………… มีใครสังเกตเห็นอะไรไหมครับ ผม….ผม……ผมลืม Assert ค่าใน Test หนึ่งอัน TestScoreToPass แล้วยังไงต่อละทีนี้

ลองมานั่งคิดเล่นๆ นะครับถ้าใครสักคนในทีม หรือแม้กระทั้งเรา เป็นผู้ทำให้เกิดเหตุการณ์เหล่านี้ Test case ที่มี Unit Test ที่มี Code Coverage ที่มี คงไม่ค่อยได้ผลดีสักเท่าไร อีกประเด็นที่น่าสนใจคือ แล้วสิ่งที่เราเขียนไปใน Unit Test นั้นมันครอบคลุมเคสหรือเหตุการณ์ที่จะเกิดขึ้นภายในโค๊ดนั้นเพียงพอแล้วหรือ?

ดังนั้น Mutation Testing เลยเข้ามามีบทบาทกับเราในการช่วยตรวจสอบ Test ที่มี ให้ Test ที่มีของเราสามารถทำงานได้ครอบคลุมเหตุการณ์ที่จะเกิดขึ้นกับ Code ของเรา อธิบายตามภาพดังนี้ครับ

http://image.slidesharecdn.com/mutationtesting-090904090122-phpapp01/95/mutation-testing-3-728.jpg?cb=1252054895

จารย์ไผ่ได้ให้นิยามไว้ดังนี้ครับ

ตอนนี้ผมจะทำการรัน Mutation ในเครื่องของผม เพื่อดูการทำงานของ Test ที่มีครับ

ลองมาสังเกตผลลัพธ์ที่เกิดขึ้นะครับ ถึงแม้ว่า Code Coverage ของผมจะ 100% แล้วมี Test เพื่อตรวจเช็คการทำงานของ Code แล้ว แต่สังเกตว่าค่าจาก Mutation Testing ของผมได้ % เพียงแค่ 57% เท่านั้น ดังนั้นผมจะทำการปรับชุด Test ของผมเพื่อให้ครอบคลุมสิ่งที่จะเกิดขึ้น และไม่ลืมที่จะ Assert ค่าครับ ดังนี้

ตอนนี้ Test ของผมถูกเพิ่มมาอีก 1 กรณี และยังคง Run ผ่าน จำนวน Code Coverage ยังเป็น 100% และที่เพิ่มเติมมาคือ Mutation Testing ผมทำการ Kill สิ่งที่จะเกิดขึ้น ตอนนี้ 100% แล้ว

ดังนั้นจะเห็นว่า Mutation Testing เข้ามามีบทบาทและช่วยให้เราสามารถตรวจสอบ Test ที่มีอยู่ให้รัดกุมมากขึ้น แต่สุดท้ายแล้วการคุยกันภายในทีมเป็นสิ่งที่สำคัญที่สุด เครื่องมือเป็นแค่เพียงส่วนที่ทีมจะเลือกนำมาใช้ อย่าลืมว่าคุณภาพของ Software ไม่ได้อยู่ที่ใครคนใดคนหนึ่ง แต่อยู่ที่ “Whole Team”

ปล