การทดสอบความถูกต้อง (Sanity Testing) กับการทดสอบเบื้องต้น (Smoke Testing): ข้อแตกต่างที่สำคัญ ตัวอย่าง และเวลาที่ควรใช้แต่ละแบบ
⚡ สรุปโดยย่อ
การทดสอบความสมเหตุสมผลเทียบกับการทดสอบควัน เป็นวิธีการทดสอบซอฟต์แวร์ที่สำคัญสองวิธีที่มุ่งเน้นการตรวจสอบความเสถียรและความสมเหตุสมผลของระบบหลังการสร้าง ทั้งสองวิธีมีเป้าหมายเพื่อป้องกันการเสียเวลาของฝ่ายควบคุมคุณภาพโดยการระบุเวอร์ชันที่ไม่เสถียรหรือมีข้อบกพร่องตั้งแต่เนิ่นๆ ในวงจรการทดสอบ

การทดสอบควันเทียบกับการทดสอบความสมเหตุสมผล: ตารางเปรียบเทียบ
| แง่มุม | การทดสอบควัน | การทดสอบสติ |
|---|---|---|
| เป้าหมายหลัก | ตรวจสอบความเสถียรของการสร้าง | ตรวจสอบการทำงานของการเปลี่ยนแปลง |
| ขอบเขต | กว้าง (ครอบคลุมทุกด้าน) | แคบ (เฉพาะโมดูล) |
| ความลึก | การทดสอบแบบตื้น | การทดสอบเชิงลึก (แบบเจาะจง) |
| แสดงโดย | นักพัฒนาหรือผู้ทดสอบ | สำหรับผู้ทดสอบเท่านั้น |
| สร้างสถานะ | เวอร์ชันเริ่มต้น/ยังไม่เสถียร | โครงสร้างที่ค่อนข้างเสถียร |
| เอกสาร | มีการเขียนสคริปต์และจัดทำเอกสาร | โดยปกติแล้วจะไม่มีการเตรียมบทล่วงหน้า |
| ชุดย่อยการทดสอบ | การทดสอบการยอมรับ | การทดสอบการถดถอย |
| อัตโนมัติ | ขอแนะนำ | สามารถควบคุมด้วยตนเองหรือโดยอัตโนมัติก็ได้ |

ซอฟต์แวร์บิลด์คืออะไร?
ถ้าคุณกำลังพัฒนา...ping สำหรับโปรแกรมคอมพิวเตอร์ง่ายๆ ที่ประกอบด้วยไฟล์ซอร์สโค้ดเพียงไฟล์เดียว คุณเพียงแค่ต้องคอมไพล์และเชื่อมโยงไฟล์นั้นเพื่อสร้างไฟล์ปฏิบัติการ กระบวนการนี้ตรงไปตรงมา แต่โดยปกติแล้วไม่ใช่เช่นนั้น โครงการซอฟต์แวร์ทั่วไปประกอบด้วยไฟล์ซอร์สโค้ดหลายร้อยหรือหลายพันไฟล์ การสร้างโปรแกรมปฏิบัติการจากไฟล์ซอร์สเหล่านี้เป็นงานที่ซับซ้อนและใช้เวลานาน คุณจำเป็นต้องใช้ซอฟต์แวร์ "สร้าง" เพื่อสร้างโปรแกรมปฏิบัติการ และกระบวนการนี้เรียกว่า "การสร้างซอฟต์แวร์"
การทดสอบควันคืออะไร?
การทดสอบแบบ Smoke Testing เป็นเทคนิคการทดสอบซอฟต์แวร์ที่ดำเนินการหลังจากการสร้างซอฟต์แวร์เสร็จสมบูรณ์ เพื่อตรวจสอบว่าฟังก์ชันการทำงานที่สำคัญของซอฟต์แวร์ทำงานได้ดี โดยจะดำเนินการก่อนการทดสอบฟังก์ชันการทำงานหรือการทดสอบการถดถอยอย่างละเอียด จุดประสงค์หลักของการทดสอบแบบ Smoke Testing คือการปฏิเสธแอปพลิเคชันซอฟต์แวร์ที่มีข้อบกพร่อง เพื่อไม่ให้ทีม QA เสียเวลาไปกับการทดสอบแอปพลิเคชันซอฟต์แวร์ที่ทำงานผิดพลาด
ในการทดสอบแบบ Smoke Testing นั้น กรณีทดสอบที่เลือกจะครอบคลุมเฉพาะฟังก์ชันการทำงานหรือส่วนประกอบที่สำคัญที่สุดของระบบเท่านั้น จุดประสงค์ไม่ใช่การทดสอบอย่างละเอียดถี่ถ้วน แต่เป็นการตรวจสอบให้แน่ใจว่าฟังก์ชันการทำงานหลักของแอปพลิเคชันซอฟต์แวร์ทำงานได้อย่างถูกต้อง ตัวอย่างเช่น การทดสอบแบบ Smoke Testing ทั่วไปจะตรวจสอบว่าแอปพลิเคชันเปิดใช้งานได้สำเร็จหรือไม่ ส่วนติดต่อผู้ใช้ (GUI) ตอบสนองได้ดีหรือไม่ เป็นต้น
การทดสอบสติคืออะไร?
การทดสอบความสมบูรณ์ (Sanity testing) คือการทดสอบซอฟต์แวร์ประเภทหนึ่งที่ดำเนินการหลังจากได้รับซอฟต์แวร์เวอร์ชันที่มีการเปลี่ยนแปลงเล็กน้อยในโค้ดหรือฟังก์ชันการทำงาน เพื่อตรวจสอบว่าข้อบกพร่องได้รับการแก้ไขแล้ว และไม่มีปัญหาเพิ่มเติมเกิดขึ้นจากการเปลี่ยนแปลงเหล่านี้ เป้าหมายคือการตรวจสอบว่าฟังก์ชันการทำงานที่เสนอทำงานได้ตามที่คาดหวังไว้ หากการทดสอบความสมบูรณ์ล้มเหลว เวอร์ชันนั้นจะถูกปฏิเสธเพื่อหลีกเลี่ยงการเสียเวลาและทรัพยากรในการทดสอบเชิงลึก
จุดประสงค์ไม่ใช่การตรวจสอบฟังก์ชันการทำงานอย่างละเอียดถี่ถ้วน แต่เป็นการตรวจสอบว่าผู้พัฒนาได้ใช้เหตุผล (ความสมเหตุสมผล) ในการสร้างซอฟต์แวร์หรือไม่ ตัวอย่างเช่น ถ้าเครื่องคิดเลขวิทยาศาสตร์ของคุณให้ผลลัพธ์เป็น 2 + 2 = 5! ก็ไม่มีประโยชน์ที่จะทดสอบฟังก์ชันขั้นสูงอย่างเช่น sin 30 + cos 50
ประวัติและที่มาของคำศัพท์
คำว่า “การทดสอบควัน” (smoke testing) มีที่มาจากอุตสาหกรรมฮาร์ดแวร์และอิเล็กทรอนิกส์ เมื่อวิศวกรเปิดใช้งานแผงวงจรใหม่เป็นครั้งแรก พวกเขาจะสังเกตดูว่ามีควันออกมาหรือไม่ ซึ่งเป็นสัญญาณบ่งชี้ถึงข้อบกพร่องพื้นฐานทันที หากไม่มีควันออกมา การทดสอบพื้นฐานก็สามารถดำเนินการต่อไปได้ แนวคิดนี้ถูกนำมาใช้โดยผู้ทดสอบซอฟต์แวร์ในช่วงทศวรรษ 1980 เพื่ออธิบายการตรวจสอบการสร้างเบื้องต้น
ในทางกลับกัน “การทดสอบความสมเหตุสมผล” หมายถึงการตรวจสอบ “ความสมเหตุสมผล” หรือความมีเหตุผลของการเปลี่ยนแปลงเฉพาะอย่าง คำนี้เน้นการตรวจสอบว่าซอฟต์แวร์ทำงานในลักษณะที่สมเหตุสมผลและมีตรรกะหลังจากการแก้ไข กล่าวคือ ถามว่า “สิ่งนี้สมเหตุสมผลหรือไม่”
การทดสอบควัน (Smoke Testing) เทียบกับ การทดสอบความถูกต้อง (Sanity Testing) เทียบกับ การทดสอบการถดถอย (Regression Testing)
การเข้าใจว่าการทดสอบทั้งสามประเภทนี้ทำงานร่วมกันอย่างไรเป็นสิ่งสำคัญอย่างยิ่งสำหรับกลยุทธ์การประกันคุณภาพที่มีประสิทธิภาพ:
- การทดสอบควัน ขั้นตอนแรกคือการตรวจสอบว่าเวอร์ชันที่สร้างขึ้นมีความเสถียรเพียงพอที่จะทำการทดสอบได้หรือไม่
- การทดสอบสติ ตามด้วย (เมื่อเหมาะสม) — เพื่อยืนยันว่าการเปลี่ยนแปลงหรือการแก้ไขเฉพาะนั้นใช้งานได้อย่างถูกต้อง
- การทดสอบการถดถอย เป็นวิธีการที่ครอบคลุมที่สุด เพราะช่วยให้มั่นใจได้ว่าการเปลี่ยนแปลงใหม่ๆ จะไม่ทำให้ฟังก์ชันการทำงานที่มีอยู่เดิมเสียหาย
ลองนึกภาพเหมือนกรวย: การทดสอบควัน (Smoke testing) คือช่องเปิดกว้างที่กรองเอาเวอร์ชันที่ไม่เสถียรออกไปได้อย่างรวดเร็ว การทดสอบความถูกต้อง (Sanity testing) จะจำกัดขอบเขตให้แคบลงไปยังการเปลี่ยนแปลงเฉพาะ และการทดสอบการถดถอย (Regression testing) จะให้ความครอบคลุมอย่างละเอียดถี่ถ้วนของระบบทั้งหมด
สถานการณ์จริง: แอปพลิเคชันอีคอมเมิร์ซ
ลองพิจารณาเว็บไซต์อีคอมเมิร์ซที่ได้รับการสร้างใหม่พร้อมกับหน้าร้านค้าping แก้ไขข้อผิดพลาดเกี่ยวกับตะกร้าสินค้า:
การทดสอบควัน: ขั้นตอนแรกของ QA คือการตรวจสอบให้แน่ใจว่าเว็บไซต์โหลดได้ ผู้ใช้สามารถล็อกอินได้ สินค้าแสดงผลถูกต้อง ระบบค้นหาใช้งานได้ และกระบวนการชำระเงินเริ่มต้นขึ้น ซึ่งใช้เวลาประมาณ 15-30 นาที
การทดสอบความสมเหตุสมผล: หลังจากผ่านการทดสอบเบื้องต้นแล้ว ผู้ทดสอบจะมุ่งเน้นไปที่ส่วนของร้านค้าโดยเฉพาะping ฟังก์ชันการทำงานของตะกร้าสินค้า—การเพิ่มสินค้า การอัปเดตจำนวน การลบสินค้า และการตรวจสอบการคำนวณ การทดสอบเฉพาะส่วนนี้ใช้เวลาประมาณ 30-60 นาที
หากผ่านการทดสอบทั้งสองส่วน ทีมงานจะดำเนินการทดสอบการถดถอยแบบเต็มรูปแบบ ซึ่งอาจใช้เวลาหลายชั่วโมงหรือหลายวัน ขึ้นอยู่กับความซับซ้อนของแอปพลิเคชัน
เมื่อใดควรใช้การทดสอบด้วยควัน เทียบกับการทดสอบด้วยสติสัมปชัญญะ
ควรใช้การทดสอบแบบ Smoke Testing เมื่อใด:
- มีการติดตั้งซอฟต์แวร์เวอร์ชันใหม่ลงในสภาพแวดล้อมการทดสอบ
- คุณจำเป็นต้องตรวจสอบฟังก์ชันการทำงานที่สำคัญอย่างรวดเร็ว เช่น การเข้าสู่ระบบ การนำทาง และการไหลของข้อมูล
- ตรวจสอบว่าเวอร์ชันที่สร้างขึ้นมีความเสถียรเพียงพอสำหรับการทดสอบโดยละเอียดต่อไปหรือไม่
- การผสานรวมเข้ากับไปป์ไลน์ CI/CD สำหรับการตรวจสอบการสร้างอัตโนมัติ
ควรใช้การทดสอบความถูกต้อง (Sanity Testing) เมื่อใด:
- มีการปรับปรุงโค้ดเล็กน้อย แก้ไขข้อผิดพลาด หรือเพิ่มประสิทธิภาพฟีเจอร์ใหม่ๆ
- ตรวจสอบว่าการเปลี่ยนแปลงเฉพาะนั้นได้ผลตามที่ตั้งใจไว้
- โครงสร้างนี้มีความเสถียรค่อนข้างดีอยู่แล้วจากการทดสอบเบื้องต้น
ข้อดีและข้อจำกัด
ข้อดี
- การระบุประเด็นสำคัญได้อย่างรวดเร็ว: ทั้งสองวิธีนี้ช่วยระบุปัญหาที่อาจทำให้การทดสอบหยุดชะงักได้อย่างรวดเร็ว
- ประสิทธิภาพของทรัพยากร: ทีมงานจะไม่เสียเวลาไปกับการทดสอบอย่างละเอียดของเวอร์ชันที่ใช้งานไม่ได้ตั้งแต่ต้น
- การตรวจจับข้อบกพร่องตั้งแต่เนิ่นๆ: การตรวจพบปัญหาตั้งแต่เนิ่นๆ ในช่วงเริ่มต้นของวงจรการทำงาน จะช่วยลดต้นทุนการซ่อมแซมโดยรวมลงได้
- รอบการวางจำหน่ายที่เร็วขึ้น: ยามเฝ้าประตูที่มีประสิทธิภาพping ช่วยให้การพัฒนาและปรับใช้เป็นไปอย่างรวดเร็วยิ่งขึ้น
ข้อ จำกัด
- ความคุ้มครองที่จำกัด: การทดสอบทั้งสองประเภทนี้ไม่ได้ครอบคลุมการใช้งานทั้งหมดอย่างครบถ้วน
- อาจมองข้ามบั๊กที่ซ่อนอยู่: ปัญหาด้านการบูรณาการหรือกรณีพิเศษอาจตรวจไม่พบ
- ไม่สามารถใช้ทดแทนการตรวจอย่างเต็มรูปแบบได้: เครื่องมือเหล่านี้ทำหน้าที่เป็นตัวกรองอย่างรวดเร็ว ไม่ใช่สิ่งที่จะมาทดแทนการทดสอบการถดถอย (regression testing)
แนวทางปฏิบัติที่ดีที่สุดสำหรับการดำเนินการ
สำหรับการทดสอบด้วยควัน:
- ทำการทดสอบแบบอัตโนมัติ (smoke test) และผสานรวมเข้ากับไปป์ไลน์ CI/CD สำหรับทุกบิลด์
- ควรจำกัดชุดทดสอบควันให้อยู่เฉพาะฟังก์ชันการทำงานที่สำคัญเท่านั้น อย่าปล่อยให้มันขยายใหญ่เกินไป
- อัปเดตการทดสอบควันทุกครั้งที่มีการเพิ่มหรือแก้ไขคุณสมบัติที่สำคัญ
สำหรับการทดสอบความถูกต้อง:
- ควรตรวจสอบเอกสารการเปลี่ยนแปลงก่อนสร้างสถานการณ์ทดสอบความถูกต้องเสมอ
- มุ่งเน้นการทดสอบไปที่บริเวณที่มีการเปลี่ยนแปลงและฟังก์ชันการทำงานที่อยู่ติดกันโดยตรง
- ใช้เทคนิคการทดสอบเชิงสำรวจเพื่อค้นหาปัญหาที่ไม่คาดคิด
ข้อผิดพลาดทั่วไปที่ควรหลีกเลี่ยง
- สับสนระหว่างการทดสอบทั้งสองประเภท: การทดสอบควันเป็นการทดสอบที่กว้างและตื้น ในขณะที่การทดสอบความถูกต้องเป็นการทดสอบที่แคบและลึก
- ข้ามไปping การทดสอบควันเพื่อประหยัดเวลา: สิ่งนี้มักนำไปสู่การเสียเวลาและความพยายามไปกับการสร้างที่ไม่เสถียร
- การทดสอบควันครอบคลุมมากเกินไป: วิธีนี้ทำให้จุดประสงค์ของการตรวจสอบอย่างรวดเร็วเสียไป
- ดำเนินการต่อหลังจากความล้มเหลว: หากการทดสอบประเภทใดประเภทหนึ่งล้มเหลว ให้หยุดและแก้ไขปัญหาเสียก่อนดำเนินการต่อ
เครื่องมือที่แนะนำสำหรับการทดสอบควันและการทดสอบความบริสุทธิ์
- Selenium เว็บไดร์เวอร์: มาตรฐานอุตสาหกรรมสำหรับการทดสอบแอปพลิเคชันเว็บแบบอัตโนมัติ
- TestNG/JUnit: เฟรมเวิร์กสำหรับการทดสอบเพื่อจัดระเบียบและดำเนินการทดสอบอัตโนมัติ
- Jenkins/GitHub Actions: เครื่องมือ CI/CD สำหรับการสร้างและทดสอบอัตโนมัติ
- Cypress: เฟรมเวิร์กการทดสอบแบบครบวงจรที่ทันสมัยและใช้งานง่ายสำหรับนักพัฒนา
- Postman/REST Assured: เครื่องมือทดสอบ API สำหรับการทดสอบเบื้องต้น (smoke test) ฝั่งแบ็กเอนด์
