Skip to main content

PHPUnit & Clean Code: สร้าง Backend คุณภาพด้วยการทดสอบและโค้ดที่สะอาด

เรียนรู้การเขียน Unit Test อย่างมืออาชีพด้วย PHPUnit ตั้งแต่พื้นฐานจนถึงเทคนิคขั้นสูง เช่น Mocking และ Data Providers เพื่อสร้างโค้ดที่เชื่อถือได้ นอกจากนี้ยังศึกษาหลักการ Clean Code เพื่อให้โค้ดของคุณอ่านง่าย บำรุงรักษาง่าย และมีประสิทธิภาพสูงขึ้น

เริ่มต้น 50 short articles

เนื้อหาภาษาไทย / Thai content

Lesson contents (Roadmap)

Follow the steps from top to bottom
3

Assertion คืออะไร: รู้จัก Assertions พื้นฐาน

บทความนี้อธิบายถึงความหมายและความสำคัญของ "Assertion" ใน Unit Testing ซึ่งเป็นคำสั่งที่ใช้ตรวจสอบว่าเงื่อนไขที่คาดหวังเป็นจริงหรือไม่ และเป็นตัวบ่งชี้ว่า Test C...

4

การรัน Test: รัน Test Case ด้วย PHPUnit

บทความนี้อธิบายวิธีการรัน Test Case ที่สร้างด้วย PHPUnit ผ่าน Command Line โดยใช้คำสั่ง `phpunit` ซึ่งสามารถรัน Test ทั้งหมด หรือระบุ Test Class หรือ Test Suite...

5

Test Driven Development (TDD) เบื้องต้น

บทความนี้แนะนำ Test Driven Development (TDD) ซึ่งเป็นกระบวนการพัฒนาซอฟต์แวร์ที่เน้นการเขียน Test ก่อนเขียน Code จริงตามวงจร Red-Green-Refactor โดย TDD มีประโยชน...

6

Mocking คืออะไร: การจำลอง Dependencies ใน Unit Testing

บทความนี้อธิบายถึงความจำเป็นของการใช้ Mocking ใน Unit Testing เพื่อจำลอง Dependencies ภายนอก เช่น ฐานข้อมูลหรือ API, ซึ่งช่วยให้การทดสอบเป็นอิสระและควบคุมได้มาก...

7

การใช้ Data Providers: ทดสอบด้วยชุดข้อมูลที่หลากหลาย

บทความนี้แนะนำ Data Providers ซึ่งเป็นเครื่องมือใน PHPUnit ที่ช่วยให้เราสามารถทดสอบฟังก์ชันด้วยชุดข้อมูลที่หลากหลาย โดยการกำหนดชุดข้อมูลใน Data Provider Method...

8

Code Coverage: วัดคุณภาพการทดสอบด้วย Code Coverage

ในบทที่แล้ว เราได้เรียนรู้เรื่อง Data Providers สำหรับการทดสอบ ในบทนี้ เราจะมาทำความรู้จักกับ Code Coverage ซึ่งเป็นเมตริกที่ใช้วัดว่า test case ของเราครอบคลุมโ...

9

Refactoring เบื้องต้น: ทำความสะอาด Code ง่ายๆ

บทความนี้แนะนำเกี่ยวกับการ Refactoring ซึ่งเป็นกระบวนการปรับปรุงโครงสร้างโค้ดโดยไม่เปลี่ยนผลลัพธ์ เพื่อให้โค้ดอ่านง่าย, แก้ไขง่าย และลดความซับซ้อน โดยนำเสนอเทคน...

10

Clean Code: หลักการตั้งชื่อที่ดี

บทความนี้เน้นย้ำถึงความสำคัญของการตั้งชื่อที่ดีในการเขียน Clean Code โดยอธิบายว่าชื่อที่ดีควรสื่อความหมาย, หลีกเลี่ยงคำย่อ, สอดคล้องกับ Domain, มีรูปแบบที่สอดคล...

11

Clean Code: ฟังก์ชันควรทำอะไร?

บทความนี้กล่าวถึงหลักการเขียนฟังก์ชันที่ดีตามแนวคิด Clean Code โดยเน้นที่ **Single Responsibility Principle (SRP)** ซึ่งหมายถึงฟังก์ชันควรมีหน้าที่เดียว, **ขนาด...

12

Clean Code: Comments ที่ดีและไม่ดี

บทความนี้กล่าวถึงการใช้ Comments ใน Clean Code โดยเน้นว่า Comments ที่ดีควรอธิบายเจตนา, เหตุผล, หรือแจ้งเตือนสิ่งที่ควรระวัง ในขณะที่ Comments ที่ซ้ำซ้อน, ล้าสม...

13

CI/CD คืออะไร: แนวคิดเบื้องต้น

บทความนี้แนะนำแนวคิดของ CI/CD (Continuous Integration/Continuous Delivery) ซึ่งเป็นแนวปฏิบัติที่ช่วยให้การพัฒนาซอฟต์แวร์เป็นไปอย่างอัตโนมัติและต่อเนื่อง ตั้งแต่...

14

เริ่มต้นกับ Jenkins: ติดตั้งและตั้งค่า Jenkins

บทความนี้กล่าวถึงการเริ่มต้นใช้งาน Jenkins ซึ่งเป็นเครื่องมือ CI/CD ยอดนิยม โดยอธิบายถึงความสามารถหลักของ Jenkins ในการทำ automation และเหตุผลที่ควรใช้ จากนั้นแ...

16

การรัน Test ใน Jenkins: เพิ่ม Test Step

ในบทที่แล้ว เราได้สร้าง Jenkins Job สำหรับ Build โปรเจกต์ PHP และติดตั้ง Dependencies ในบทนี้ เราได้เพิ่มขั้นตอนการรัน Unit Tests โดยใช้ "Execute Shell" step แล...

17

การแจ้งเตือน Build Status: Email Notifications

บทความนี้อธิบายวิธีการตั้งค่าให้ Jenkins ส่ง Email แจ้งเตือนเมื่อ Build สำเร็จหรือล้มเหลว โดยต้องติดตั้ง Email Extension Plugin และตั้งค่าทั้ง Global Email Conf...

18

การใช้ Git Hooks: Trigger Jenkins Build

บทความนี้อธิบายวิธีการใช้ Git Hooks ร่วมกับ Jenkins Webhook เพื่อสร้าง Continuous Integration Pipeline โดย Git Hooks จะ Trigger Jenkins Build อัตโนมัติเมื่อมีกา...

20

OPcache คืออะไร: เปิดใช้งาน OPcache

บทความนี้แนะนำ OPcache ซึ่งเป็นกลไก caching สำหรับ PHP ที่ช่วยลดเวลาในการ parse และ compile scripts โดยการเก็บ bytecode ไว้ในหน่วยความจำ ทำให้ Application ทำงาน...

22

Caching ด้วย Redis: Cache Data ใน PHP

บทความนี้แนะนำวิธีการใช้ Redis เพื่อ caching ข้อมูลใน PHP application โดยครอบคลุมตั้งแต่การเชื่อมต่อกับ Redis server, การ Set และ Get ข้อมูลด้วย TTL, รวมถึงตัวอ...

23

การวัด Performance: ใช้ Xdebug Profiler

บทความนี้แนะนำ Xdebug Profiler ซึ่งเป็นเครื่องมือสำคัญสำหรับการวัดประสิทธิภาพของโค้ด PHP เพื่อระบุจุดที่ทำให้แอปพลิเคชันทำงานช้า (bottleneck) และปรับปรุงแก้ไขให...

24

Refactoring: Replace Magic Number with Symbolic Constant

บทความนี้อธิบายถึงเทคนิค Refactoring ที่เรียกว่า "Replace Magic Number with Symbolic Constant" ซึ่งเป็นการแทนที่ตัวเลขที่ไม่มีความหมาย (Magic Number) ในโค้ดด้วย...

25

Refactoring: Introduce Parameter Object

บทความนี้แนะนำเทคนิค Refactoring ที่เรียกว่า "Introduce Parameter Object" เพื่อแก้ปัญหาฟังก์ชันที่มี Parameter จำนวนมาก ซึ่งทำให้โค้ดอ่านและบำรุงรักษายาก อีกทั้...

26

Refactoring: Decompose Conditional

บทความนี้อธิบายเทคนิค Refactoring ที่ชื่อว่า "Decompose Conditional" ซึ่งเป็นการแยก Conditional Statement ที่ซับซ้อนออกเป็น Function ย่อยๆ เพื่อให้โค้ดอ่านง่ายข...

27

การใช้ .env: จัดการ Environment Variables

บทความนี้แนะนำการใช้ไฟล์ `.env` ร่วมกับ package `vlucas/phpdotenv` ใน PHP เพื่อจัดการ Environment Variables อย่างมีประสิทธิภาพ ทำให้สามารถแยกค่าคอนฟิกูเรชันออกจ...

28

การ Deploy เบื้องต้น: Deploy ไปยัง Shared Hosting

บทความนี้อธิบายขั้นตอนการ Deploy โปรเจกต์ PHP ไปยัง Shared Hosting ซึ่งเป็นทางเลือกที่นิยมสำหรับผู้เริ่มต้นเนื่องจากราคาถูกและใช้งานง่าย โดยครอบคลุมตั้งแต่การเต...

29

การ Deploy ด้วย FTP: ใช้ FTP Client

บทความนี้อธิบายถึงวิธีการ Deploy โปรเจกต์ PHP ไปยัง Shared Hosting โดยใช้ FTP Client เช่น FileZilla ซึ่งครอบคลุมตั้งแต่การตั้งค่าโปรแกรม, การอัพโหลดไฟล์, การจัด...

30

การใช้ SSH: Command Line Access

จากบทความที่แล้ว เรา Deploy โปรเจกต์ PHP ด้วย FTP Client ซึ่งมีข้อจำกัดด้านความเร็วและความปลอดภัย ในบทนี้ เราจึงเรียนรู้วิธีการใช้ SSH (Secure Shell) เพื่อเข้าถ...

32

การใช้ Composer: ติดตั้ง Dependencies

บทความนี้อธิบายถึง Composer ซึ่งเป็นเครื่องมือจัดการ Dependencies สำหรับ PHP ที่ช่วยให้การติดตั้ง, อัปเดต, และจัดการ Library ภายนอกเป็นเรื่องง่าย โดยจะเน้นที่วิ...

33

การใช้ Version Control: Git เบื้องต้น

บทความนี้เป็นการแนะนำ Git เบื้องต้น ซึ่งเป็นระบบ Version Control ที่ช่วยในการติดตามการเปลี่ยนแปลงของ Source Code, ทำงานร่วมกับผู้อื่น, และย้อนกลับไปยังเวอร์ชันก...

34

การใช้ Branching: สร้าง Branch และ Merge

บทความนี้อธิบายถึงการใช้ Branching ใน Git ซึ่งเป็นเครื่องมือสำคัญสำหรับการพัฒนา Feature ใหม่, แก้ไข Bug หรือทดลองไอเดีย โดยไม่กระทบกับ Code หลักของโปรเจกต์ (mai...

35

การแก้ไข Bug: Debugging เบื้องต้น

บทความนี้กล่าวถึงความสำคัญของการ Debugging ในการพัฒนาโปรแกรม PHP เพื่อค้นหาและแก้ไขข้อผิดพลาด (Bug) อย่างมีประสิทธิภาพ โดยนำเสนอเครื่องมือพื้นฐาน 3 อย่าง ได้แก่...

36

การใช้ Logging: บันทึก Events ใน Application

บทความนี้กล่าวถึงความสำคัญของการ Logging ใน Application PHP เพื่อบันทึกเหตุการณ์ต่างๆ และช่วยในการวิเคราะห์ปัญหาเมื่อ Application ถูกใช้งานจริง โดยแนะนำให้ใช้ L...

37

การจัดการ Exceptions: Try-Catch Blocks

บทความนี้กล่าวถึงความสำคัญของการจัดการ Exceptions ใน PHP เพื่อรับมือกับข้อผิดพลาดที่อาจเกิดขึ้นใน Application โดยแนะนำการใช้ Try-Catch Blocks เพื่อดักจับและจัดก...

38

การใช้ Dependency Injection: ลด Coupling

บทความนี้แนะนำ Dependency Injection (DI) ซึ่งเป็นเทคนิคการออกแบบซอฟต์แวร์ที่ช่วยลด Coupling ระหว่างคลาส ทำให้โค้ดมีความยืดหยุ่นและทดสอบได้ง่ายขึ้น โดย DI ทำงานโ...

39

การใช้ Interfaces: เขียน Code ที่ยืดหยุ่น

บทความนี้อธิบายถึง Interfaces ใน PHP ว่าเป็นพิมพ์เขียวที่กำหนดสัญญาของเมธอดที่คลาสต้อง Implement เพื่อให้โค้ดมีความยืดหยุ่น ลดการพึ่งพากัน และรองรับ Polymorphis...

40

การใช้ Design Patterns: Singleton Pattern

บทความนี้แนะนำ Singleton Pattern ซึ่งเป็น Design Pattern ที่ใช้ควบคุมการสร้าง Object ให้มีเพียง Instance เดียวและสามารถเข้าถึงได้จากทุกส่วนของโปรแกรม โดยมีทั้งข...

41

การใช้ Design Patterns: Factory Pattern

บทความนี้แนะนำ Factory Pattern ซึ่งเป็น Design Pattern ที่ช่วยในการสร้าง Object โดยไม่ต้องระบุ Class ที่จะสร้างโดยตรง ทำให้โค้ดมีความยืดหยุ่นและง่ายต่อการเปลี่ย...

42

การใช้ Queues: Background Processing

บทความนี้กล่าวถึงการใช้ Queues เพื่อประมวลผลงานที่ใช้เวลานานใน Background ของเว็บแอปพลิเคชัน เพื่อหลีกเลี่ยงการทำให้ User Experience แย่ลง โดยแนะนำให้ใช้ Messag...

43

การใช้ Caching Strategies: Cache Invalidation

บทความนี้กล่าวถึงความสำคัญของ Cache Invalidation ใน Caching Strategies เพื่อให้มั่นใจว่าข้อมูลใน Cache เป็นปัจจุบันและถูกต้อง โดยอธิบายกลยุทธ์ต่างๆ เช่น TTL, Ca...

44

การใช้ Load Balancing: กระจาย Traffic

บทความนี้อธิบายถึง Load Balancing ซึ่งเป็นเทคนิคการกระจาย Traffic ไปยัง Server หลายเครื่องเพื่อเพิ่มประสิทธิภาพ, ความพร้อมใช้งาน, และความทนทานของระบบ โดย Load B...

45

การใช้ CDN: Content Delivery Network

บทความนี้แนะนำ CDN (Content Delivery Network) ซึ่งเป็นเครือข่ายเซิร์ฟเวอร์ที่กระจายอยู่ทั่วโลก ทำหน้าที่เก็บสำเนา Content ของเว็บไซต์ เพื่อให้ผู้ใช้งานสามารถเข้...

46

Security Best Practices: Input Validation

บทความนี้เน้นย้ำถึงความสำคัญของการตรวจสอบข้อมูลนำเข้า (Input Validation) ในการพัฒนาเว็บแอปพลิเคชัน เพื่อป้องกันช่องโหว่ด้านความปลอดภัยต่างๆ เช่น SQL Injection แ...

47

Security Best Practices: Preventing SQL Injection

บทความนี้เน้นถึงอันตรายของ SQL Injection ซึ่งเกิดจากการแทรกโค้ด SQL อันตรายลงในคำสั่ง SQL ของแอปพลิเคชัน โดยเฉพาะอย่างยิ่งเมื่อใช้ข้อมูลนำเข้าจากผู้ใช้โดยไม่ได้...

48

Security Best Practices: Preventing XSS

บทความนี้อธิบายถึง Cross-Site Scripting (XSS) ซึ่งเป็นช่องโหว่ที่อนุญาตให้ผู้โจมตีแทรกสคริปต์อันตรายเข้าไปในเว็บไซต์ เพื่อขโมยข้อมูลหรือเปลี่ยนเส้นทางการเข้าชม...

49

การ Monitoring Application: ใช้ Monitoring Tools

บทความนี้เน้นย้ำความสำคัญของการ Monitoring Application เพื่อตรวจจับปัญหา Performance, Errors และ Security Threats ได้อย่างรวดเร็ว โดยแนะนำการใช้ Monitoring Tool...