Unit testing เป็นวิธีการทดสอบการทำงานของซอฟแวร์ในแต่ละหน่วย ซึ่งคำว่าหน่วยคือส่วนของการทำงานที่เล็กที่สุดที่สามารถทดสอบได้ ดำเนินการโดยใช้วิธีการทดสอบแบบ White Box Testing ถ้าเขียนซอฟแวร์ในรูปแบบเชิงวัตถุ หน่วยที่ทดสอบอาจจะเป็น method function หรือ module ก็ได้ โดยทั่วไปการทำงานของหน่วยที่นำมาทดสอบจะมีการรับค่าเข้าไปเพื่อประมวลผลแล้วส่งผลลัพท์ออกมา การทดสอบด้วย Unit testing จะตรวจสอบกระบวนการดังกล่าวว่าเป็นไปตามที่ออกแบบไว้หรือไม่
Unit testing ควรทำตอนไหน
Unit testing ควรทำเป็นลำดับแรกของการทดสอบและจะดำเนินการก่อนที่จะไปขั้นตอน Integration testing
Unit testing ใครเป็นคนทำ
โดยปกตินักพัฒนาซอฟแวร์ (Developer) หรือทีมจะเป็นผู้ดำเนินการ แต่บางครั้งก็อาจจะมอบหมายให้ Software Tester
ประโยชน์ของ Unit testing
- ช่วยค้นหาและลด Bug ที่จะก่อให้เกิดปัญหาลง
- เพิ่มความมั่นใจปรับหรือแก้ไขโค้ด หากทำ Unit testing ไว้ดีข้อผิดพลาดที่เกิดจากการแก้ไขโค้ดจะถูกดักจับได้ทันที
- พัฒนาซอฟแวร์ได้เร็วขึ้น บางคนอาจจะมองว่าการทำ Unit testing ต้องใช้เวลามากขึ้น แต่ถ้าคิดในระยะยาวที่ต้องมีการทดสอบซ้ำๆ ระหว่างมี กับ ไม่มี Unit testing อย่างไหนจะใช้เวลาทดสอบมากกว่ากัน
- เป็นคู่มือทำให้ทราบการทำงานของแต่ละส่วน ต้องใส่ข้อมูลอะไรเข้าไปและจะออกมาเป็นอะไร
- เพิ่มความน่าเชื่อถือให้กับซอฟแวร์
Unit testing ที่ดีต้องมีอะไรบ้าง
- ครอบคลุมการทำงานที่สำคัญในทุกหน่วย
- ควรจะทำงานแบบอัตโนมัติและทำซ้ำได้
- ทำงานได้เร็ว
- ใช้งานง่าย ทุกคนควรจะสามารถใช้งานมันได้
- มีความน่าเชื่อถือ
เทคนิคการทำ Unit testing
- หาเครื่องมือ หรือ Framework สำหรับภาษาที่พัฒนา
- ไม่จำเป็นต้องสร้าง Unit testing ทุกหน่วย แต่มุ่งเน้นส่วนที่มีผลกระทบต่อระบบ
- ใช้ข้อมูลทดสอบที่มีความใกล้เคียงกับการใช้งานจริง
- ครอบคลุมทุกเส้นทางการทำงานส่วนที่เป็นเงื่อนไขและวนลูป
- ดำเนินการอย่างต่อเนื่องและสม่ำเสมอ
PHP Framework
- PHPUnit https://phpunit.de/index.html
- SimpleTest http://simpletest.org/index.html
- Lime (Symfony) http://trac.symfony-project.org/wiki/Li ... gFramework
ตัวอย่างการทำ Unit Testing (แบบ Basic ไม่ใช้ Framework)
โค้ด: เลือกทั้งหมด
<?php
$value = 'Hello Mindphp ';
echo (isset($value)) ? 'Pass' : 'Fail' ;
echo '<br />';
unset($value);
echo (isset($value)) ? 'Pass' : 'Fail' ;
?>
โค้ด: เลือกทั้งหมด
Pass
Fail