การก้าวสู่นักพัฒนามืออาชีพ กับการทดสอบแบบหน่วยย่อย (Unit Testing) ด้วย PHP Unit 9.0.1 ในเชิงปฏิบัติ

กระบวนการทดสอบ เป็นกระบวนการที่อยู่ใน CMMI เกี่ยวข้องกับ Validation (VAL) และ Verification (VER)

CMMI คือ มาตรฐานกระบวนการในการพัฒนางาน ย่อมาจาก Capability Maturity Model Integration ผู้กำหนดมาตรฐานนี้ คือ สถาบันวิศวกรรมซอฟต์แวร์ มหาวิทยาลัยคาร์เนกี้เมลลอน สหรัฐอเมริกา (Software Engineering Institute, Carnegie Mellon University, USA)

CMMI เป็นมาตรฐานในการปรับปรุงคุณภาพซอฟต์แวร์ให้มีประสิทธิภาพ เป็นที่รู้จักและยอมรับของสากล หากองค์กรใดได้รับ CMMI (แล้วแต่ level) ถือว่าองค์กรนั้นมี product และกระบวนการพัฒนา product ที่มีประสิทธิภาพ เป็นที่น่าเชื่อถือของลูกค้า และเป็นตัวการันตีชิ้นงานที่ออกไป

ที่มา http://www.swpark.or.th/cmmiproject/index.php/general/73-what-cmmi/

การทดสอบในระดับเริ่มต้นที่ควรทำหลังจากที่ได้สร้างหน่วยของโปรแกรมขึ้นมาก็ คือ Unit Test บางคนรู้จัก V-Model เป็นอย่างดี อธิบายได้ว่า จะต้องมีการทำทดสอบแบบต่างๆ ไม่ว่าจะเป็น Unit Testing, Integration Testing, System Testing และ Acceptance Testing แต่ไม่เคยลงมือปฏิบัติเลย

บทความนี้ ต้องการนำเสนอในการนำเอา Unit Test มาประยุกต์ใช้เชิงปฏิบัติกับภาษา PHP ที่ซึ่งเป็นภาษายอดนิยมในการพัฒนาเว็บไซต์ เนื่องจากเป็นภาษาที่พัฒนาได้ง่าย มีแหล่งข้อมูลในการศึกษาตามเว็บไซต์ต่างๆ และหนังสือที่วางขายอยู่จำนวนมาก เหมาะสำหรับผู้เริ่มต้นที่จะพัฒนาเว็บไซต์

ที่มา https://www.researchgate.net/figure/V-Model-life-cycle-for-the-automotive-software-testing_fig1_314665883

“Unit testing มันมีความสำคัญมากถึงมากที่สุดเป็นสิ่งที่นักพัฒนา software ควรจะเรียนรู้ และ นำมาประยุกต์ใช้งานโดยมันใช้เป็นตัวชี้วัดด้วยว่าคุณคือนักพัฒนาที่ดี หรือ เป็นนักพัฒนามืออาชีพกันเลยนะ”

จากคำกล่าวของคุณ Somkiat Puisungnoen — http://www.somkiat.cc/books-of-unit-testing/

การทดสอบแบบหน่วยย่อย (Unit Test) คือ การทดสอบหน่วยการทำงานที่ย่อยที่สุด (Module, Class, Method, Function) เช่น ส่วนของฟังก์ชันหรือเมธอดภายในคลาส โดยการเขียนโปรแกรมในแต่ละส่วนและทำการทดสอบก่อนการนำไปใช้งาน โดยทั่วไปจะดำเนินการโดยโปรแกรมเมอร์ การทำ Unit Test จะช่วยเพิ่มคุณภาพของซอฟต์แวร์และลดความซับซ้อนของซอฟต์แวร์ (ด้วยการทำ Refactor หลังจากที่ชุดคำสั่งทำงานได้ตามที่กำหนดไว้) ทำให้การแก้ไขหรือบำรุงรักษาโปรแกรมได้ง่าย เนื่องจากทำให้ทราบถึงข้อผิดพลาดตั้งแต่ต้น ก่อนที่จะส่งออกเป็นโมเดลหรือไลบรารี่ แล้วนำไปรวมเป็นซอฟต์แวร์ที่ขนาดใหญ่ขึ้น

PHPUnit เป็นเฟรมเวิร์คที่ช่วยในการทดสอบหน่วยย่อย สำหรับภาษา PHP พัฒนาโดย เซบาสเตียน เบิร์กแมนน์ (Sebastian Bergmann) เปิดให้ใช้งานครั้งแรก เมื่อวันที่ 27 พฤศจิกายน พ.ศ. 2544 ปัจจุบัน ณ เดือนมีนาคม 2563 เป็นเวอร์ชันที่ 9 (PHPUnit 9.0.1) สำหรับภาษา PHP เวอร์ชัน 7.3 หรือ 7.4

ซอฟต์แวร์ที่จะต้องมีก่อนการทดสอบ

  1. PHP เวอร์ชัน 7.3 หรือ 7.4 ดาวน์โหลดที่ https://www.php.net/downloads หรือจะใช้ PHP ที่ติดตั้งจาก XAMPP ที่ https://www.apachefriends.org/download.html
  2. PHPUnit ดาวน์โหลดที่ https://phpunit.de/getting-started/phpunit-9.html
  3. Visual Studio Code หรือ เครื่องมืออื่นๆ ที่ใช้ในการเขียนชุดคำสั่ง ดาวนโหลดที่ https://code.visualstudio.com/

ขั้นตอนการติดตั้งสภาพแวดล้อม (Windows)

  1. ดาวน์โหลดและติดตั้งซอฟต์แวร์ที่ได้ระบุไว้
  2. กรณีที่ดาวน์โหลด php โดยใช้ XAMPP ให้นำไฟล์ phpunit-9.0.1.phar ไปไว้ใน C:\xampp\php และทำการเปลี่ยนชื่อ จาก phpunit-9.0.1.phar ให้เป็น phpunit.phar
  3. กำหนด PATH ของระบบ โดยเพิ่ม C:\xampp\php
  4. สร้างคอมมานด์ phpunit กดปุ่ม windows + R แล้วพิมพ์ cmd
  5. จากคอมมานด์พร็อม ให้พิมพ์ cd C:\xampp\php
  6. พิมพ์คำสั่ง echo @php “%~dp0phpunit.phar” %* > phpunit.cmd
  7. พิมพ์คำสั่ง exit
  8. กดปุ่ม windows + R แล้วพิมพ์ cmd
  9. พิมพ์คำสั่ง phpunit — version เพื่อตรวจสอบเวอร์ชันของ phpunit

หากใน C:\xampp\php มีไฟล์ phpunit.bat ให้ทำการลบหรือเปลี่ยนเป็นชื่ออื่น

ถ้าภาษา php เวอร์ชันเก่าจะมีข้อความแจ้งขึ้นมาดังรูป

หลังจากอัพเดทเวอร์ชันของ php

สร้างคลาส Calculator มี 3 method ไฟล์ Calculator.php

สร้างคลาส Test_calculator ที่มีการ extends TestCase ไฟล์ test_calculartor.php

จากคำสั่งด้านบนเขียนชุดคำสั่ง ทำการทดสอบเมธอด add ของคลาส Calculator มีการกำหนดผลลัพธ์ไว้ 3 แบบ โดยที่ เมธอด testAdd1 และ testAdd3 ใช้ assertEquals ทำการกำหนดค่า expected ไม่ตรงกับการทำงาน ผลลัพธ์จากการรันการทดสอบเป็นดังนี้ (โดยทั่วไปจะต้องกำหนดค่า Expected เป็นค่าที่ถูกต้อง)

การทดสอบใช้คำสั่งดังนี้

phpunit test_calculator.php

จะพบว่าเกิดความล้มเหลว (FAILURE) 2 รายการทดสอบ ในเมธอด testAdd1 กับ testAdd3

ส่วน การใช้งาน assert ต่างๆ สามารถศึกษาได้จาก https://phpunit.readthedocs.io/en/9.0/assertions.html

แก้ไขไฟล์ test_calculartor.php โดยให้มีการทดสอบการทำงานของเมธอด multiply , add และ subtract ของ คลาส Calculator กำหนดให้ผลลัพธ์ตรงกับค่า Expected ทั้ง 3 การทดสอบ

ถ้าหากกำหนดกำหนด ค่า expected ที่ตรงกับ การดำเนินงาน จะเป็นดังนี้

การทำ unit test ยังเป็นพื้นฐานในการทำ Continuous Integration และ Continuous Delivery (CI/CD) ต่อไปอีกด้วย หากต้องการนำ DevOps มาใช้ปรับปรุงในกระบวนการพัฒนาให้เป็นแบบอัตโนมัติ