การทดสอบความถูกต้อง (Sanity Testing) กับการทดสอบเบื้องต้น (Smoke Testing): ข้อแตกต่างที่สำคัญ ตัวอย่าง และเวลาที่ควรใช้แต่ละแบบ

⚡ สรุปโดยย่อ

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

  • Foundationแนวคิดหลัก: การทดสอบ Smoke Testing ยืนยันความเสถียรโดยรวมของซอฟต์แวร์โดยการตรวจสอบฟังก์ชันการทำงานที่สำคัญทันทีหลังจากคอมไพล์ซอฟต์แวร์เสร็จ
  • การตรวจสอบความถูกต้องของข้อมูล: การทดสอบความถูกต้อง (Sanity Testing) มุ่งเน้นการตรวจสอบความสมเหตุสมผลหลังจากการอัปเดตโค้ดหรือฟังก์ชันการทำงานเล็กน้อย
  • บทบาทในการดำเนินการ: การทดสอบ Smoke Test นั้นดำเนินการโดยนักพัฒนาหรือผู้ทดสอบ ส่วนการทดสอบ Sanity Test นั้นโดยปกติแล้วจะดำเนินการโดยผู้ทดสอบเพียงอย่างเดียว
  • ลำดับขั้นการทดสอบ: การทดสอบควัน (Smoke Testing) เป็นส่วนหนึ่งของการทดสอบการยอมรับ (Acceptance Testing) ส่วนการทดสอบความถูกต้อง (Sanity Testing) จัดอยู่ในกลุ่มการทดสอบการถดถอย (Regression Testing)
  • ขอบเขตความคุ้มครอง: การทดสอบ Smoke Testing ประเมินแอปพลิเคชันทั้งหมด ในขณะที่การทดสอบ Sanity Testing จำกัดขอบเขตเฉพาะโมดูลที่กำหนด
  • กลยุทธ์ประสิทธิภาพ: แนวทางปฏิบัติที่ดีที่สุดคือการทำการทดสอบเบื้องต้น (smoke test) ก่อนที่จะตรวจสอบความถูกต้อง (sanity verification)

การทดสอบความสมเหตุสมผลเทียบกับการทดสอบควัน

การทดสอบควันเทียบกับการทดสอบความสมเหตุสมผล: ตารางเปรียบเทียบ

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

ซอฟต์แวร์บิลด์คืออะไร?

ถ้าคุณกำลังพัฒนา...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) ฝั่งแบ็กเอนด์

คำถามที่พบบ่อย

การทดสอบความถูกต้อง (Sanity testing) ตรวจสอบว่าการเปลี่ยนแปลงโค้ดหรือการแก้ไขข้อผิดพลาดล่าสุดทำงานได้อย่างถูกต้องโดยไม่ก่อให้เกิดปัญหาใหม่ ตัวอย่างเช่น หลังจากอัปเดตโมดูลการเข้าสู่ระบบ ผู้ทดสอบจะยืนยันว่าการตรวจสอบสิทธิ์ผู้ใช้และการเปลี่ยนเส้นทางยังคงทำงานได้ตามที่คาดไว้

การทดสอบแบบ Smoke Test ตรวจสอบขั้นตอนการทำงานที่สำคัญของแอปพลิเคชันเพื่อให้มั่นใจถึงความเสถียรของเวอร์ชันที่สร้างขึ้น ตัวอย่างเช่น การตรวจสอบว่าเว็บไซต์อีคอมเมิร์ซโหลดได้ สินค้าแสดงผลได้อย่างถูกต้อง และขั้นตอนการชำระเงินเริ่มต้นขึ้น จะเป็นการยืนยันว่าเวอร์ชันนั้นพร้อมสำหรับการทดสอบเชิงลึกต่อไป

การทดสอบแบบ Smoke Testing นั้นกว้างและไม่ลึกมากนัก โดยมีเป้าหมายเพื่อยืนยันความพร้อมโดยรวมของระบบสำหรับการทดสอบ ในขณะที่การทดสอบแบบ Sanity Testing นั้นแคบและลึกกว่า โดยมีเป้าหมายเพื่อตรวจสอบการแก้ไขเฉพาะหรือฟังก์ชันการทำงานใหม่หลังจากอัปเดตเล็กน้อยในเวอร์ชันที่เสถียรแล้ว

การทดสอบความถูกต้อง (Sanity testing) จะดำเนินการหลังจากมีการเปลี่ยนแปลงโค้ดเล็กน้อย การแก้ไขข้อบกพร่อง หรือการแก้ไขข้อผิดพลาด เพื่อตรวจสอบความถูกต้องของฟังก์ชันการทำงานที่ต้องการ เป็นการรับประกันว่าการแก้ไขนั้นทำงานได้ตามที่ตั้งใจไว้ ก่อนที่จะลงทุนเวลาในการทดสอบการถดถอย (Regression testing) หรือการทดสอบการบูรณาการ (Integration testing)

ควรทำการทดสอบแบบ Smoke testing หลังจากการติดตั้งเวอร์ชันใหม่ทุกครั้ง เพื่อตรวจสอบว่าฟังก์ชันหลักทำงานได้ และแอปพลิเคชันมีความเสถียรเพียงพอที่จะดำเนินการทดสอบแบบอัตโนมัติหรือแบบแมนนวลอย่างละเอียดต่อไป

ใช่แล้ว เฟรมเวิร์กการทำงานอัตโนมัติและระบบ CI/CD สามารถทำงานควบคู่กันไปได้ การทดสอบ Smoke test จะตรวจสอบความเสถียรของบิลด์ ในขณะที่การทดสอบ Sanity test จะยืนยันความถูกต้องของฟังก์ชันการทำงาน ซึ่งจะช่วยเร่งความพร้อมในการปล่อยเวอร์ชันใหม่ในสภาพแวดล้อมแบบ Agile

หากการทดสอบควัน (smoke testing) ล้มเหลว บิลด์นั้นจะถูกปฏิเสธเพื่อทำการทดสอบเพิ่มเติมและส่งคืนให้ผู้พัฒนาแก้ไข หากการทดสอบความถูกต้อง (sanity testing) ล้มเหลว แสดงว่าการเปลี่ยนแปลงล่าสุดทำให้ฟังก์ชันการทำงานเสียหาย ซึ่งจะหยุดการทดสอบการถดถอย (regression regression) จนกว่าจะได้รับการแก้ไข

เฟรมเวิร์กการทดสอบอัตโนมัติสมัยใหม่ใช้การติดแท็กหรือชุดทดสอบแบบแยกส่วน การทดสอบแบบ Smoke test เป็นส่วนหนึ่งของไปป์ไลน์ CI/CD เพื่อการตรวจสอบความถูกต้องอย่างรวดเร็ว ในขณะที่การทดสอบแบบ Sanity test เป็นสคริปต์ที่เลือกไว้ซึ่งจะถูกเรียกใช้หลังจากมีการอัปเดตโค้ดเป้าหมาย

การทดสอบความถูกต้องของโค้ดมีประโยชน์มากขึ้น เนื่องจาก AI สามารถวิเคราะห์การเปลี่ยนแปลงโค้ดและข้อมูลข้อบกพร่องในอดีตเพื่อคาดการณ์ว่าฟังก์ชันใดบ้างที่อาจได้รับผลกระทบ ทำให้สามารถมุ่งเน้นความพยายามในการตรวจสอบได้อย่างชาญฉลาด

สรุปโพสต์นี้ด้วย: