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

ค่าของ Code Coverage มันบอกอะไรเราบ้าง ?

$
0
0

code-coverage

code-coverage สำหรับ developer ที่เขียน automated test ในระดับ unit test บางคนอาจจะบอกว่า ถ้าค่าของ Code Coverage มันต่ำ แสดงว่า ควรที่จะเขียน test เพิ่มเติม ซึ่งเป็นสิ่งที่ถูกต้องแล้ว แต่ยังไม่ครบ !! ถ้าค่าของ Code Coverage สูงล่ะ มันบอกอะไรเราบ้าง ? มันบอกว่า จำนวน test เพียงพอแล้วหรือ ? มันบอกว่า test ที่เขียนไปนั้นถูกต้องแล้วหรือ ? บอกได้เลยว่า มันไม่ได้บอกเราเลย มันเป็นเพียงการ execute code จาก test เท่านั้นเอง มันไม่ได้บ่งบอกถึง คุณภาพ มันไม่ได้ทำการตรวจสอบว่า เรากำลังทำในสิ่งที่ถูกต้องอยู่หรือไม่ !!
ดังนั้นสิ่งที่เราขาดไป ก็คือ สิ่งที่จะช่วยบอกเราว่า จุดไหนของ test ที่มันไม่ดี

โครงสร้างที่ดีของ test มีหลายแนวคิด เช่น แนวคิดของคุณ Gerard Meszaros

ประกอบไปด้วย 4 ขั้นตอน ดังนี้
  1. การ setup
  2. การ execute code จาก test
  3. การตรวจสอบพฤติกรรม และ ผลการทำงาน
  4. ทำการคืนสถานะต่าง ๆ ของระบบกลับสู่สภาวะเดิมก่อนทำการทดสอบ
คำถาม เราสามารถเขียน test โดยให้มีค่า Code Coverage 100% แบบง่าย ๆ ได้อย่างไร ? คำตอบ ก็ทำการเขียน test โดยไม่ต้องทำขั้นตอนที่ 3 ไงล่ะ นั่นคือ ไม่ต้องทำการตรวจสอบพฤติกรรม และ ผลการทำงาน แต่เราก็ไม่รู้หรอกนะ ว่า ระบบทำงานถูกต้องหรือไม่ !! ถ้า developer คนไหนทำแบบนี้ ขอบอกเลยว่า ใจร้ายสุด ๆ น่าจะเน้นไปที่ KPI หรือ ค่า Code Coverage สูง ๆ เพียงอย่างเดียว

มาดูตัวอย่างการเขียน 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

Viewing all articles
Browse latest Browse all 1997

Trending Articles