สำหรับ developer ที่เขียน automated test ในระดับ unit test
บางคนอาจจะบอกว่า
ถ้าค่าของ Code Coverage มันต่ำ
แสดงว่า ควรที่จะเขียน test เพิ่มเติม
ซึ่งเป็นสิ่งที่ถูกต้องแล้ว แต่ยังไม่ครบ !!
ถ้าค่าของ Code Coverage สูงล่ะ มันบอกอะไรเราบ้าง ?
มันบอกว่า จำนวน test เพียงพอแล้วหรือ ?
มันบอกว่า test ที่เขียนไปนั้นถูกต้องแล้วหรือ ?
บอกได้เลยว่า มันไม่ได้บอกเราเลย
มันเป็นเพียงการ execute code จาก test เท่านั้นเอง
มันไม่ได้บ่งบอกถึง คุณภาพ
มันไม่ได้ทำการตรวจสอบว่า
เรากำลังทำในสิ่งที่ถูกต้องอยู่หรือไม่ !!
ดังนั้นสิ่งที่เราขาดไป ก็คือ สิ่งที่จะช่วยบอกเราว่า จุดไหนของ test ที่มันไม่ดี
โครงสร้างที่ดีของ test มีหลายแนวคิด เช่น แนวคิดของคุณ Gerard Meszaros
ประกอบไปด้วย 4 ขั้นตอน ดังนี้- การ setup
- การ execute code จาก test
- การตรวจสอบพฤติกรรม และ ผลการทำงาน
- ทำการคืนสถานะต่าง ๆ ของระบบกลับสู่สภาวะเดิมก่อนทำการทดสอบ
มาดูตัวอย่างการเขียน test แบบง่าย ๆ กันดีกว่า
[gist id="135c238e25c52735634d" file="MyOperationTest.java"] จากตัวอย่างการทดสอบ ถ้า method operation() มันมีค่าความซับซ้อนเท่ากับ 3 แล้ว จำนวน test 3 test case มันก็สมเหตุสมผล ซึ่งน่าจะเพียงพอสำหรับการทดสอบ และ เพิ่มความมั่นใจให้เรา ตลอดจน เรื่องของ Code Coverage แต่ถ้า method operation() มันทำงานร่วมกับระบบอื่น ๆ อีกล่ะ แน่นอนว่า การทดสอบเพียง 3 test case มันย่อมไม่เพียงพอ เนื่องจาก เราจะยังไม่ตรวจสอบพฤติกรรมการทำงาน เมื่อต้องทำงานกับระบบอื่น ๆ เลยนะ ว่ายังคงทำงานได้ถูกต้องตามที่คาดหวังหรือไม่สุดท้ายแล้วค่า Code Coverage หรือ Matrix ต่าง ๆ มันสำคัญนะ
แต่ว่ามันมีความสำคัญเท่ากับ ความเข้าใจต่อ Code Coverage ว่าอะไรคือสิ่งที่ต้องทำบ้าง ? ว่าอะไรคือสิ่งที่ไม่จำเป็นต้องทำบ้าง ? อย่าไปสนใจเพียงจำนวน Line of Code ที่ถูกทดสอบ แต่ให้คิดว่า- เราจะรู้ได้อย่างไร ว่าแต่ละงานมันเสร็จแล้วนะ
- การทดสอบมันเพียงพอแล้วหรือยัง ?
- ให้ทีมตัดสินใจร่วมกันว่า จำนวน coverage มันเพียงพอหรือยัง ?
- ให้คำนึงถึงเรื่องความเสี่ยงต่าง ๆ โดยเฉพาะความเสี่ยงของเหตุการณ์ที่อาจจะเกิดขึ้นกับลูกค้า
- ครอบคลุมการทำงานอย่างน้อยทุก ๆ feature แล้วหรือยัง ? (Minimal Feature Coverage)
มันหมายความว่า คุณในฐานะ developer ให้ความสนใจ ใส่ใจต่อสิ่งที่กำลังสร้างมาก หรือ น้อยเพียงใดปล. ผมเคยเขียนอธิบายเรื่อง Code Coveage หรือ Test Coverage ไว้ที่ blog เรื่อง Test Coverage สูงๆ มันดีจริงหรือไม่ Reference Websites http://martinfowler.com/bliki/TestCoverage.html https://dupdob.wordpress.com/2014/02/21/the-secret-for-100-test-coverage-remove-code/ http://www.renaissancesoftware.net/blog/archives/273 http://stackoverflow.com/questions/90002/what-is-a-reasonable-code-coverage-for-unit-tests-and-why