quality

อ่านไปเจอบทความเกี่ยวกับเครื่องมือที่จะช่วยเพิ่มประสิทธิภาพของ software
ที่พัฒนาด้วยภาษา PHP จากที่นี่  8 Must Have PHP Quality Assurance Tools จาก SitePoint.com
เห็นว่าน่าจะมีประโยชน์ เลยหยิบมาแปล
รวมทั้งใส่ข้อแนะนำอื่นๆ เข้าไปเองด้วย
และเป็นเรื่องหนึ่งที่มีการพูดคุยในงาน Thailand PHP User Group กันด้วย

ความเป็นมา

ผมไม่อยากใช้ QA = Quality Assurance แต่อยากใช้คำว่า Quality Assistance จะเหมาะสมกว่า
เนื่องจากผมมองว่า การเป็นผู้ช่วยที่ทำให้คุณภาพของ software ดีขึ้น

ในการพัฒนา software ด้วยภาษา PHP นั้นเรื่องคุณภาพน่าจะเป็นเรื่องรอง
หรืออาจจะถูกหยิบมาพูดถึงในอันดับท้ายๆ
หรืออาจจะหยิบมาพูดและถกเถียงกันมาก เมื่อ software มีปัญหาขึ้นมา

ยิ่งในปัจจุบันมีการแข่งขันกันสูง
ดังนั้นยิ่งใช้เวลาพัฒนา software หรือ feature ใหม่ๆ สั้นเท่าไรแล้ว
จะยิ่งดี ส่วนเรื่องอื่นๆ เอาไว้ทีหลัง !!!

ซึ่งจากสาเหตุข้างต้น ทำให้เกิดปัญหาต่างๆ ในเรื่องของคุณภาพ software อย่างมากมาย
ส่วนการจะแก้ไขนั่นหรอ ก็เป็นเรื่องที่ยากน่าดู แต่ทำได้นะ
บางที่อาจจะรื้อและเขียนใหม่กันไปเลย …

เมื่อมาดูในไทย ผมเชื่อว่าภาษา PHP ยังเป็นภาษาหลักในการพัฒนา software
ยิ่งเป็นระบบที่ทำงานผ่าน Internet ด้วยนะ PHP กินเรียบ
ตัวภาษา PHP นั้นง่าย แต่ก็สามารถทำให้ code ที่ได้พังง่ายเช่นกัน !!!

ลองมาเปลี่ยนมุมมองกันก่อนไหม ก่อนที่จะนำเครื่องมือมาใช้ ?

ลองนำเอาเรื่องคุณภาพไปใส่ในกระบวนการพัฒนาเลยดีไหม
เนื่องจากในมุมมองของผม เรื่อง คุณภาพเป็นเรื่องที่ต่อรองไม่ได้เลย
คุณภาพมันต้องอยู่ในทุกๆ ส่วนของการพัฒนา software อยู่แล้ว

อย่านำเอาเรื่องการตรวจสอบคุณภาพของ software ไปไว้ในขั้นตอนท้ายๆ
ของการพัฒนานะครับ มันต้องอยู่ตั้งแต่เริ่มต้นจนถึงสิ้นสุด ในทุกระดับ

ในโลกของภาษา PHP มีเครื่องมืออะไรให้ใช้บ้าง

คุณ  Sebastian Bergmann ได้ทำการสรุปเครื่องมือเกี่ยวกับคุณภาพของ software
ไว้ที่ PHP QA Tools  โดยแต่ละตัวน่าจะคุ้นๆ กันทั้งนั้น
ซึ่งพี่แกนั่นแหละเป็นผู้พัฒนามันขึ้นมา และหลายๆ ตัวก็ได้รับความนิยมเป็นอย่างมาก

แต่ถ้าใครไม่รู้จักก็ไม่เป็นไร จะอธิบายแต่ละตัวที่น่าสนใจ ดังต่อไปนี้

1. PHPUnit

น่าจะพูดได้ว่าเป็นเครื่องมือพื้นฐานสำหรับการทดสอบระบบด้วยภาษา PHP กันเลย
นั่นหมายถึงถ้าพูดเรื่องการทำ test, unit test หรืออะไรที่เกี่ยวกับการทดสอบ
ของภาษา PHP แล้วจะต้องมี PHPUnit อยู่ด้วยเสมอ

ดังนั้น ถ้ายังไม่รู็จัก แนะนำว่าเริ่มศึกษาเถอะนะ
สามารถทำการติดตั้งผ่าน composer ด้วยคำสั่งดังนี้

$composer global require "phpunit/phpunit=4.1.*”

สามารถหาข้อมูลเพิ่มติมใน Sitepoint ได้นะ

*** พื้นที่ขายของ ใครอยากเรียนรู้เพิ่มเติม สามารถมาเรียน course PHP TDD ได้จากทีมงาน SPRINT3R นะ ***

2.  BeHat

เป็น framework ที่สร้างขึ้นตามแนวคิดการพัฒนาแบบ Behavior Driven Development (BDD)
ได้แรงบันดาลใจจาก Cucumber ในภาษา Ruby

เน้นในเรื่องการเขียน test เพื่อให้อ่านง่าย เข้าใจง่าย
ใครก็ตามสามารถอ่านแล้วรู้เรื่อง ยิ่งเป็นคนที่ไม่มีความรู้ทางโปรแกรมเลย ก็สามารถเข้าใจได้
โดยรูปแบบของการเขียนจะมีรูปแบบตาม Gherkin
คือ Given, When Then ดังตัวอย่าง

Screen Shot 2557-07-10 at 1.37.45 PM

คำถาม
เมื่อพูดถึง BDD แล้ว จะไม่พูดถึง TDD เลยคงไม่ได้
ซึ่งมักจะมีข้อถกเถียงกันมาเสมอว่า BDD ต่างจาก TDD อย่างไร

คำตอบ
BDD คือสิ่งที่บอกให้รู้ว่า TDD ที่ทำมานั้นมันถูกต้อง
เนื่องจาก TDD การทดสอบในระดับ unit test
ดังนั้นเราจะรู้ได้อย่างไรว่า feature หนึ่งๆ ที่สร้างมันทำงานได้อย่างถูกต้อง
ดังนั้นจึงใช้ BDD เข้ามาช่วย รวมทั้งตัวมันยังสามารถอ่านและทำความเข้าใจได้ง่าย
ถามว่า TDD ทำแบบ BDD ได้ไหม ก็ตอบว่าได้ แต่มันอ่านและทำความเข้าใจได้ยาก

BDD มันไม่มี test coverage นะ เพราะว่า มันใช้สำหรับการทดสอบ
ตามพฤติกรรมการใช้งานของผู้ใช้งาน ไม่จำเป็นต้องมาดูว่ามันครอบคลุม code ทุกๆ ส่วนหรือไม่
แค่ทำให้ครบตามพฤติกรรมการใช้งานของผู้ใช้งานก็เพียงพอ

ในการพัฒนา software แนะนำให้เขียนทั้ง BDD และ TDD
และบางครั้งก็อาจจะมี ATDD( Acceptance Test Driven Development ) เข้ามาด้วยอีก

สามารถทำการติดตั้งผ่าน composer ด้วยคำสั่งดังนี้

$composer global require behat/behat='~3.0.

3. vfsStream

เป็นเครื่องมือที่เข้ามาช่วยให้การทดสอบง่ายขึ้น เช่นการทำ unit test ที่ต้องทำงานร่วมกับระบบไฟล์
แน่นอนว่าการควบคุม environment ต่างๆ จะยากมา
ดังนั้นจึงสร้างตัวนี้ขึ้นมาเพื่อสร้าง virtual file system ขึ้นมา
ทำให้เราสามารถจำลองระบบไฟล์ขึ้นมา สำหรับการทำ unit test ได้ง่ายๆ
ซึ่งเป็นรูปแบบการ Mock อย่างหนึ่ง

ตัวนี้ผมก็ไม่เคยใช้งานจริงๆ สักที แต่เท่าที่ศึกษามานั้นมันเข้ามาช่วยเรื่องการจัดการไฟล์ต่างๆ ได้ดีเลย

4. PHPLOC

LOC  ย่อมาจาก Line of Code หรือจำนวนบรรทัดทั้งหมดของ code

ดังนั้น PHPLOC จึงเป็นเครื่องมือสำหรับการวัดขนาดของ software ที่เราพัฒนานั่นเอง
ประกอบไปด้วย

  • จำนวนไฟล์
  • จำนวน class
  • จำนวน function
  • จำนวนบรรทัดของแต่ละส่วน

สามารถสรุปออกมาเป็นรายงานได้เลย ตัวอย่างดังรูป

phploc

สามารถทำการติดตั้งผ่าน composer ด้วยคำสั่งดังนี้

$composer global require 'phploc/phploc=*’

5. PHP Mess Detector (PHPMD)

ชื่อมันก็บอกว่า เป็นเครื่องมือช่วยวิเคราะห์ความวุ่นวายและยุ่งเหยิงของ code

เนื่องจาก code เหล่านี้ มักจะก่อให้เกิด

  • สิ่งเล็กๆ ที่เรียกว่า BUG
  • ระบบมีความซับซ้อนขึ้นเรื่อย
  • มี code หลายๆ ส่วน ที่อาจจะไม่เคยถูกเรียกใช้งานเลย แต่เราก็ไม่กล้าลบออก
  • และอื่นๆ อีกมากมาย

แน่นอนว่า มันก่อให้เกิดปัญหาตามมา อย่างมากมายมหาศาล
ผมเชื่อว่าหลายๆ คนตกอยู่ในหลุมของ code เหล่านี้ หรือกำลังสร้างมันขึ้นมาก็เป็นไปได้
ดังนั้น ลองใช้ PHPMD ดูครับ น่าจะพอช่วยเหลือได้บ้างไม่มากก็น้อย แต่ดีกว่าเดิมแน่นอน

ปล. เมื่อนำไปใช้แล้ว อย่าเพียงแค่ดูนะครับ ต้องแก้ไขด้วย

สามารถทำการติดตั้งผ่าน composer ด้วยคำสั่งดังนี้

$composer global require 'phpmd/phpmd=*'

6. PHP CodeSniffer (PHPCS)

ทำงานเหมือนกับ PHPMD แต่ว่าสามารถตรวจสอบไปถึง CSS และ JavaScript กันเลย

สามารถทำการติดตั้งผ่าน composer ด้วยคำสั่งดังนี้

$composer global require 'squizlabs/php_codesniffer=*'

7. PHP Dead Code Detector และ PHP Copy Paste Detector

PHP DCD ใช้สำหรับการตรวจสอบ code ที่ไม่เคยถูกใช้งานหรืออ้างอิงภายใน software เลย
PHP CPD ใช้สำหรับการตรวจสอบความซ้ำซ้อนของ code ซึ่งมักเกิดจากการ copy code มาใช้งานซ้ำๆ

โดยเครื่องมือสองตัวนี้ เป็นสิ่งที่ขาดไม่ได้เลยสำหรับการพัฒนา software
ซึ่งจะช่วยทำให้ code ที่ได้ มีคุณบัติดังนี้

  • DRY ( Don’t Repeat Yourself ) คือไม่ทำของซ้ำๆ ขึ้นมาใช้งานใหม่
  • Code ที่ได้จะสะอาด และไม่มีขยะ ( code ขยะน้อยลง ) ตามแนวคิดของ Lean

สามารถทำการติดตั้งผ่าน composer ด้วยคำสั่งดังนี้

 $composer global require 'sebastian/phpcpd=*'
 $composer global require 'sebastian/phpdcd=*'

8. SonarQube

สำหรับใครที่เบื่อกับการติดตั้งอะไรที่เยอะ จากข้างบน ผมแนะนำ SonarQube
เป็น software ที่ใช้วิเคราะห์ code ของเราตั้งแต่ข้อ 2 ถึงข้อ 8 ให้เลย
แถมมี User Interface สวยๆ ให้ใช้งานอีก
และสามารถใช้วิเคราะห์ code ที่พัฒนาด้วยภาษาอื่นๆ ที่ไม่ใช่ PHP อีกด้วย
ตัวอย่างเช่น

Screen Shot 2557-07-10 at 2.14.26 PM

โดยสรุป

ลองเปลี่ยนแนวคิดเรื่องของ QA และลองนำเครื่องมือต่างๆ เหล่านี้ไปใช้งาน
สำหรับการพัฒนา software ด้วยภาษา PHP ดูว่า สามารถเพิ่มเรื่องของคุณภาพขึ้นหรือไม่
แต่ผมมั่นใจว่า ถ้านำไปใช้งานจริงๆ มันต้องช่วยเราได้อย่างแน่นอนครับ