การทดสอบ E2E (End-to-End Testing) คือวิธีการทดสอบที่จำลองการกระทำของผู้ใช้เป็นจุดเริ่มต้น แล้วส่งผ่านระบบทั้งหมดผ่านทาง Browser หรือ API เพื่อตรวจสอบว่าได้ผลลัพธ์ตามที่คาดหวังหรือไม่
การทดสอบ E2E ขับเคลื่อนแอปพลิเคชันจาก "ภายนอก" โดยควบคุมเบราว์เซอร์อัตโนมัติเพื่อกรอกฟอร์ม คลิกปุ่ม และตรวจสอบการเปลี่ยนหน้าจอรวมถึงการคงอยู่ของข้อมูลอย่างครบวงจร เครื่องมืออย่าง Playwright และ Cypress ควบคุม headless browser และจำลองการกระทำของมนุษย์ผ่านสคริปต์
DB และ API server ที่ถูกแทนที่ด้วย mock ในการทดสอบ unit test และ functional test นั้น จะทำงานจริงในการทดสอบ E2E เนื่องจาก authentication flow, การตรวจสอบสิทธิ์, การเขียนและอ่านข้อมูลทั้งหมดผ่านโครงสร้างพื้นฐานจริง จึงสามารถตรวจจับข้อบกพร่องในส่วนที่เชื่อมต่อกันได้
ความเร็วในการรันอาจช้ากว่า unit test หลายร้อยเท่า เนื่องจากการเปิดเบราว์เซอร์ การ render หน้าเพจ และการสื่อสารผ่านเครือข่ายเกิดขึ้นพร้อมกัน นอกจากนี้ การเปลี่ยนแปลง UI เพียงเล็กน้อยก็ทำให้การทดสอบพังได้ง่าย (ปัญหา flaky) ดังนั้น แนวทางการดำเนินงานที่เป็นจริงคือจำกัด E2E test ไว้เฉพาะ user flow ที่สำคัญ และควบคุมจำนวนให้อยู่ในระดับหลักสิบถึงหลักร้อย
ตามแนวคิด test pyramid นั้น E2E test อยู่ที่ยอดสูงสุดและควรมีจำนวนน้อยที่สุด โครงสร้างที่มีเสถียรภาพคือการใช้ unit test เป็นฐานเพื่อครอบคลุม logic ส่วนใหญ่ ใช้ functional test ในชั้นกลางเพื่อดูแลส่วนที่รวมเข้าด้วยกัน และใช้ E2E test ปกป้องเฉพาะ critical path เท่านั้น


การทดสอบแบบ Unit Test คือวิธีการทดสอบที่ตรวจสอบหน่วยย่อยที่สุดของโปรแกรม เช่น ฟังก์ชันหรือเมธอด เป็นรายการ โดยแทนที่การพึ่งพาภายนอกด้วย Mock เพื่อให้สามารถตรวจสอบเฉพาะ Logic ที่ต้องการได้อย่างรวดเร็ว

การทดสอบเชิงฟังก์ชัน (Feature Test) คือวิธีการทดสอบที่ตรวจสอบพฤติกรรมของระบบในระดับฟังก์ชันหรือ Use Case ที่เฉพาะเจาะจง โดยครอบคลุมขอบเขตที่กว้างกว่าการทดสอบแบบ Unit Test และมุ่งยืนยันว่าโมดูลหลายตัวทำงานร่วมกันได้อย่างถูกต้อง

การทดสอบการยอมรับ (Acceptance Test) คือวิธีการทดสอบที่ใช้ตรวจสอบว่าฟีเจอร์ที่พัฒนาขึ้นนั้นตรงตามความต้องการทางธุรกิจและ User Story หรือไม่ โดยพิจารณาจากมุมมองของ Product Owner และ Stakeholder

คู่มือสอบใบรับรอง AWS: อธิบายครบทุกขั้นตอนตั้งแต่การสมัครจนถึงวันสอบ

ATDD (Acceptance Test-Driven Development) คือวิธีการพัฒนาซอฟต์แวร์ที่ทีมงานทั้งหมดร่วมกันกำหนดเกณฑ์การทดสอบการยอมรับ (Acceptance Test) ก่อนเริ่มการพัฒนา จากนั้นจึงทำการ Automate การทดสอบดังกล่าว แล้วจึงดำเนินการ Implement ต่อไป