Coding Gun

UAT vs System Test

ก่อนอื่นเราต้องทำความเข้าใจนิยามของคำว่า System Test กับ Acceptance Test กันก่อน

System Test คืออะไร?

System Test คือ การทดสอบทั้งระบบ ที่ทำงานเสร็จสมบูรณ์แล้ว เพื่อดูว่าทุกส่วนของระบบทำงานร่วมกันได้ถูกต้อง ตาม requirement ที่กำหนดไว้

ตัวอย่างการทำ System Test

สมมติเราสร้าง แอปสั่งอาหาร:

Features Test case
เลือกรายการอาหาร เลือกเมนูแล้ว ต้องแสดงในตะกร้า
กรอกที่อยู่จัดส่ง ระบบต้องบันทึกที่อยู่ถูกต้อง
ชำระเงินผ่าน QR Code ระบบต้องตัดเงินได้จริง
การแจ้งเตือนสถานะอาหาร ต้องแจ้ง “กำลังจัดส่ง” ได้

System Test จะรันตั้งแต่เลือกอาหาร → กดจ่ายเงิน → สั่งอาหารสำเร็จ → ร้านค้ารับออร์เดอร์ → คนขับมาส่งอาหาร เป็นการทดสอบครบทุก flow เหมือนผู้ใช้งานจริง

ขั้นตอนการทำ System Test

  1. ระบบพัฒนาเสร็จ (หลังจาก Unit Test, Integration Test)
  2. เตรียม Test Plan (วางแผนว่าจะทดสอบอะไรบ้าง)
  3. เขียน Test Case สำหรับทุกฟีเจอร์
  4. รันทดสอบจริง → เก็บผลลัพธ์
  5. ถ้ามี Bug → แจ้ง Dev
  6. Retest จนกว่าทุกอย่างจะ Pass

เป้าหมายสุดท้ายของ System Test

✅ ตรวจสอบความถูกต้อง ครบถ้วนของทั้งระบบ
✅ พร้อมส่งไปให้ลูกค้าทำ Acceptance Test ต่อได้เลย


Acceptance Test คืออะไร?

Acceptance Test คือ การทดสอบเพื่อให้ลูกค้า, ผู้ใช้งาน, หรือ Product Owner ตรวจสอบว่าระบบที่สร้างขึ้นตรงกับความต้องการ(Requirements) สามารถตอบโจทย์ทางธุรกิจได้รึเปล่า และตัดสินใจว่าจะ “ยอมรับ” หรือ “ไม่ยอมรับ” ระบบนั้น พูดง่ายๆ ก็คือ “ทดสอบเพื่อให้ลูกค้าตอบว่า ระบบสามารถนำไปใช้งานได้จริง”

Key หลักของ Acceptance Test

ตัวอย่าง Acceptance Test

สมมติเราทำ แอปจองโรงแรม แล้วส่งให้ลูกค้าทดสอบ

Test case Example
ระบบจองห้องได้จริงไหม กรอกวันที่เข้าพัก แล้วกดจอง ต้องได้ห้องตามต้องการ
การชำระเงินปลอดภัยไหม หลังกรอกบัตรเครดิต ต้องมีข้อความยืนยันที่ชัดเจน
มีอีเมลยืนยันการจองไหม หลังจองเสร็จ ต้องมีอีเมลเข้าใน 5 นาที

ลูกค้าจะไม่ได้สนใจว่าเราเขียน Code ยังไงแต่จะดูแค่ว่า “ของที่ได้ ตรงกับที่อยากได้หรือไม่”

ขั้นตอนปกติของการทำ Acceptance Test

  1. ทีมพัฒนา (Dev/QA) ส่งระบบเวอร์ชันพร้อมทดสอบให้ลูกค้า
  2. ลูกค้าเปิด Test Script หรือ Checklist ที่ทำไว้ล่วงหน้า
  3. ลูกค้าทำตามขั้นตอนที่กำหนด (Scenario) เช่น สมัครสมาชิก, สั่งซื้อสินค้า
  4. ลูกค้าให้ผลลัพธ์ (Accept/Reject) ตามแต่ละหัวข้อ
  5. ถ้าผ่านทุกข้อ → ระบบ “ผ่าน” และ “ส่งมอบ” ได้
  6. ถ้ามี Reject → ส่งกลับมาให้ทีมแก้ไข แล้วค่อย Retest ใหม่

ทำไม Acceptance Test ถึงสำคัญ?

เป้าหมายของ Acceptance Test

✅ ลูกค้าเซ็นว่า “ผ่าน”
✅ ระบบพร้อมเปิดใช้งานจริง (Production)


System Test vs Acceptance Test

System Test Acceptance Test
เป้าหมาย ตรวจสอบว่า ระบบทั้งระบบ ทำงานถูกต้องและครบถ้วนไหม (Functional และ Non-functional) ตรวจสอบว่า ระบบตอบโจทย์ความต้องการของลูกค้า ไหม และลูกค้ายอมรับได้หรือเปล่า
ข้อมูล ทดสอบด้วยข้อมูลที่ไม่ใช่ของจริง(Fake) ทดสอบด้วยข้อมูลจริง
ผู้ทดสอบ ทีม QA / Tester หรือ Developer ลูกค้า, ตัวแทนลูกค้า (Product Owner), หรือทีม UAT
มุมมอง มองในมุม “ระบบต้องทำงานได้ตาม requirement และสเปก” มองในมุม “ระบบตรงกับที่ลูกค้าคาดหวังไหม ใช้งานได้จริงไหม”
ขอบเขต - ทดสอบทุกฟีเจอร์และการทำงานร่วมกันของฟีเจอร์
- ทดสอบ End-to-End Flow
- ทดสอบ Performance, Load, Security (บางกรณี)
- ทดสอบเฉพาะสิ่งที่ระบุไว้ใน Acceptance Criteria ของแต่ละ User Story หรือ Contract
- เน้น Business Scenario จริง เช่น “กดซื้อสินค้าแล้วต้องได้รับอีเมลยืนยัน”
สิ่งที่ทดสอบ - ฟีเจอร์ครบ
- ไม่มี Bug
- ทดสอบผ่านทุก test case ที่เขียนไว้
- ลูกค้าพอใจ และ “Accept”
- ตรงตาม Acceptance Criteria ที่ตกลงกัน
ขั้นตอน หลัง Integration Testing แต่ก่อนส่งให้ลูกค้า หลัง System Test ผ่านแล้ว และก่อน Release จริง
เครื่องมือ Automation Test (Selenium, Robot Framework), Manual Testing, Performance Tools (เช่น JMeter) แบบฟอร์ม UAT, Checklists, Scripts ที่ลูกค้าเข้าใจง่าย

สรุป

ในการทดสอบ Software จะมีขั้นตอนการทดสอบหลักๆ ดังนี้

  1. Unit Test → Dev เขียนโค้ดเสร็จ ทดสอบโค้ดส่วนตัวเองก่อน
  2. Integration Test → เช็กว่าระบบย่อย ๆ เชื่อมกันทำงานได้
  3. System Test → QA ทดสอบระบบใหญ่แบบ End-to-End, มีทั้ง Manual + Automation
  4. Acceptance Test (UAT) → ลูกค้า หรือ Product Owner ทดสอบจากมุมมองผู้ใช้จริง ว่าตรงตามที่อยากได้ไหม

เราต้องทำ System test ก่อน UAT เสมอ

Acceptance Test ผ่านถึงจะสามารถ Deploy ขึ้นไปบน Production ได้

Phanupong Permpimol
Follow me