Test Types: Smoke, Regression, Exploratory และเพื่อน ๆ
หลังจากรู้แล้วว่าทดสอบในระดับไหน ขั้นต่อมาคือเลือกว่าจะทดสอบด้วย "ประเภท" อะไร เพราะ smoke, sanity, regression, exploratory, performance หรือ security ไม่ได้มีไว้แทนกัน แต่ช่วยตอบความเสี่ยงคนละแบบ
จบบทนี้แล้วคุณจะ...
- แยก functional test กับ non-functional test ได้ชัดขึ้น
- เข้าใจบทบาทของ smoke, sanity, regression และ exploratory test
- รู้ว่าประเภทการทดสอบควรเลือกตาม risk ไม่ใช่ทำให้ครบทุกคำ
- มองได้ว่าฟีเจอร์หนึ่งอาจต้องใช้หลาย test types ร่วมกัน
- เริ่มคุยเรื่อง test strategy กับทีมได้แม่นขึ้น
มันคือ "มุมของคุณภาพ" ที่เรากำลังตรวจ ไม่ใช่ขนาดของระบบ
ถ้า test level ตอบว่าเราทดสอบระบบในระดับไหน test type จะตอบว่า:
"เรากำลังตรวจคุณภาพด้านไหนของระบบ"
ดังนั้นคุณอาจมี:
- regression ที่ system level
- performance ที่ system level
- functional test ที่ integration level
นั่นทำให้เห็นชัดว่า level กับ type เป็นคนละแกนกัน
| Functional | Non-functional |
|---|---|
| ตรวจว่าระบบทำสิ่งที่ควรทำไหม | ตรวจว่าระบบทำสิ่งนั้นได้ดีแค่ไหน |
| login ได้ไหม | login เร็วและเสถียรไหม |
| ใช้คูปองได้ไหม | ใช้คูปองพร้อมกันเยอะ ๆ แล้วยังไหวไหม |
| export report ได้ไหม | report ใช้งานง่ายและโหลดเร็วไหม |
สิ่งที่มักพลาด
หลายทีมทดสอบ functional เยอะมาก แต่ non-functional เบามาก
ผลคือ:
- ฟีเจอร์ครบ
- แต่ช้า
- ใช้ยาก
- ล่มง่าย
- และสุดท้ายผู้ใช้ก็ยังไม่พอใจ
Smoke Test
ใช้ตอบคำถามว่า:
"ระบบยังหายใจอยู่ไหม หลังจากมี build หรือ deploy ใหม่"
ลักษณะ:
- สั้น
- เร็ว
- โฟกัส flow หลัก
- ถ้าไม่ผ่าน ไม่ต้องทำอย่างอื่นต่อ
ตัวอย่าง:
- login ได้
- หน้า home โหลด
- search ใช้ได้
- checkout เปิดได้
Sanity Test
ใช้ตอบว่า:
"ของที่เพิ่งแก้หรือเพิ่งเปลี่ยน ยังใช้งานได้ไหม"
sanity มักแคบกว่า smoke และโฟกัสตรง change set
ตัวอย่าง:
- dev เพิ่งแก้ promo code
- QA จึง sanity เฉพาะ promo flow
Regression Test
ใช้ตอบว่า:
"ของเดิมที่เคยใช้ได้ ยังใช้ได้อยู่ไหม หลังมีการเปลี่ยนแปลง"
Regression สำคัญมากเพราะการแก้ code หนึ่งจุดอาจกระทบฟีเจอร์อื่นที่ดูไม่เกี่ยวกัน
ตัวอย่าง:
- แก้ checkout
- แต่ search หรือ cart พังตาม
Exploratory Test
ใช้ตอบว่า:
"ถ้าลองใช้ระบบอย่างตั้งใจเพื่อสำรวจ risk เราจะเจออะไรที่ script ไม่ได้เขียนไว้บ้าง"
exploratory ไม่ใช่การคลิกมั่ว แต่เป็นการสำรวจอย่างมี charter และมีเป้าหมาย
ตัวอย่าง charter:
- ลองใช้ flow นี้ในฐานะผู้ใช้ใหม่
- ลองทำผิดหลายแบบติดกัน
- ลองสลับ device หรือ state กลางทาง
| Type | คำถามหลัก | ใช้เมื่อ | ความเร็ว |
|---|---|---|---|
| Smoke | ระบบขึ้นและ flow หลักยังอยู่ไหม | หลัง deploy/build ใหม่ | เร็วมาก |
| Sanity | จุดที่เพิ่งแก้ยังโอเคไหม | หลังแก้เฉพาะจุด | เร็ว |
| Regression | ของเดิมยังไม่พังใช่ไหม | ก่อน release หรือหลังเปลี่ยนหลายจุด | กลางถึงช้า |
| Exploratory | มี risk หรือ bug แปลกอะไรซ่อนอยู่ไหม | เมื่ออยากใช้ judgment ของ QA | ยืดหยุ่น |
ความต่างที่คนสับสนบ่อย
- smoke ไม่ใช่ regression ชุดเล็กเฉย ๆ แต่มันมีเป้าหมายต่างกัน
- sanity ไม่ใช่ smoke เสมอไป เพราะ sanity เจาะจุดที่เปลี่ยน
- exploratory ไม่ได้แปลว่าไม่มีโครงสร้าง
ไม่ต้องเป็นผู้เชี่ยวชาญทุกตัว แต่ควรรู้ว่ามันตอบคำถามอะไร
| ประเภท | คำถามที่มันตอบ |
|---|---|
| Performance | ระบบเร็วพอไหม |
| Load | รับผู้ใช้พร้อมกันตามที่คาดได้ไหม |
| Stress | เกินขีดจำกัดแล้วระบบพังอย่างไร |
| Security | มีช่องโหว่หรือการป้องกันที่ขาดไหม |
| Usability | ผู้ใช้เข้าใจและใช้งานได้ง่ายไหม |
| Accessibility | ผู้ใช้ที่มีข้อจำกัดใช้งานได้ไหม |
ตัวอย่างการเลือกตามบริบท
ระบบธนาคาร:
- functional สำคัญ
- security สำคัญมาก
- performance สำคัญ
- accessibility ก็ควรมีน้ำหนัก
internal dashboard สำหรับทีมเล็ก:
- functional สำคัญ
- usability สำคัญ
- load/stress อาจเบากว่า
ไม่ใช่ทุกระบบต้องทำทุกอย่างเท่ากัน
ใช้คำถามนี้ช่วยตัดสิน:
- ถ้าพัง จุดไหนกระทบธุรกิจมากที่สุด?
- ผู้ใช้ใช้งาน flow ไหนบ่อยที่สุด?
- release นี้เปลี่ยนอะไรเยอะที่สุด?
- มีภัยคุกคามหรือความเสี่ยงเฉพาะด้านไหม?
ตัวอย่าง
ก่อน Black Friday
- load test
- stress test
- smoke
- regression ของ payment/cart
หลังแก้ bug ใน promo flow
- sanity ของ promo
- regression ของ checkout/cart
หลังเพิ่ง ship feature ใหม่ที่ดูใช้ยาก
- exploratory
- usability test
- ต้องทำทุก type ถึงเรียกว่าครบ
- regression คือรันทุกอย่างทุกครั้ง
- exploratory = testing แบบไม่มีวินัย
- smoke กับ sanity เหมือนกันหมด
ความจริงคือ test type มีไว้ช่วยคุณเลือกน้ำหนักการทดสอบให้เหมาะกับสถานการณ์
ลองเลือก test type ให้เหมาะกับสถานการณ์
เพิ่ง deploy build ใหม่ขึ้น staging และมีเวลา 15 นาทีก่อนทีมอื่นเริ่มใช้งาน
ดูคำตอบแนะนำ
ควรเริ่มด้วย <strong>smoke test</strong> เพื่อเช็กว่า flow หลักยังทำงานได้ ถ้า smoke ไม่ผ่าน งานอื่นควรหยุดก่อน
dev เพิ่งแก้ bug ใน coupon calculation และทีมกลัวว่าจะกระทบ checkout ส่วนอื่น
ดูคำตอบแนะนำ
ใช้ <strong>sanity</strong> กับ coupon flow ที่เพิ่งแก้ และตามด้วย <strong>regression</strong> สำหรับ checkout/cart ที่อาจได้รับผลกระทบ
ระบบจะเจอ traffic สูงมากช่วงแคมเปญใหญ่
ดูคำตอบแนะนำ
ต้องมี <strong>load</strong> และอาจมี <strong>stress testing</strong> เพื่อดูทั้งพฤติกรรมในโหลดปกติและจุดที่ระบบเริ่มรับไม่ไหว
ฟีเจอร์ใหม่ไม่มี bug ชัดเจน แต่ QA รู้สึกว่าผู้ใช้อาจสับสนในการใช้งาน
ดูคำตอบแนะนำ
ใช้ <strong>exploratory</strong> และถ้าเป็นไปได้เสริมด้วย <strong>usability testing</strong> เพราะปัญหาอาจไม่ใช่ functional defect แต่เป็นการใช้งานที่ไม่ลื่น
สิ่งที่ต้องเอาติดตัวไปจากบทนี้
- Test type คือมุมของคุณภาพที่เรากำลังตรวจ
- กลุ่มใหญ่คือ functional และ non-functional
- 4 types ที่ QA ใช้บ่อยมากคือ smoke, sanity, regression, exploratory
- เลือก type จาก risk และบริบท ไม่ใช่จากความรู้สึกว่าอยากทำให้ครบทุกคำ
- ฟีเจอร์เดียวกันอาจต้องใช้หลาย test types ร่วมกันเพื่อคุมความเสี่ยงให้พอ