การทดสอบเชิงลบคืออะไร? กรณีทดสอบพร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

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

  • ???? วัตถุประสงค์: ตรวจสอบให้แน่ใจว่าแอปพลิเคชันปฏิเสธข้อมูลที่ไม่ถูกต้องอย่างราบรื่น แทนที่จะเกิดข้อผิดพลาดหรือหยุดทำงาน
  • 🇧🇷 คมชัด: การทดสอบที่ให้ผลบวกพิสูจน์ให้เห็นถึงเส้นทางที่ราบรื่น การทดสอบที่ให้ผลลบตรวจสอบทุกสิ่งทุกอย่างที่อยู่นอกเหนือเส้นทางนั้น
  • 🛗 การเปรียบเทียบ: ลิฟต์ต้องทนทานต่อการรับน้ำหนักเกิน การเกิดไฟไหม้ และไฟฟ้าดับ ไม่ใช่แค่เพียงการใช้งานโดยสารตามปกติเท่านั้น
  • 🔒 การรักษาความปลอดภัย: การอัปโหลดที่ไม่ถูกต้องและการพยายามโจมตีด้วยคำสั่ง SQL injection เป็นสถานการณ์การทดสอบเชิงลบแบบคลาสสิก
  • 🧪 ได้รับการออกแบบ: ค่าขอบเขต ชั้นสมมูล การคาดเดาข้อผิดพลาด และการทดสอบแบบฟัซซิ่ง จะสร้างกรณีศึกษาต่างๆ ขึ้นมา
  • 📊 ความสำคัญ: จัดลำดับข้อมูลที่ไม่ถูกต้องตามผลกระทบ เนื่องจากเป็นการยากที่จะครอบคลุมผลกระทบเชิงลบทั้งหมดอย่างครบถ้วน
  • ⚠️ การแลกเปลี่ยน: การตรวจหาเชื้อแล้วได้ผลลบมากเกินไปนั้นสิ้นเปลืองงบประมาณ ซึ่งอาจนำไปใช้ในการตรวจหาเชื้อแล้วได้ผลบวกมากกว่า

การทดสอบเชิงลบในการทดสอบซอฟต์แวร์ด้วยตัวอย่างข้อมูลป้อนเข้าที่ไม่ถูกต้อง

การทดสอบเชิงลบ

การทดสอบเชิงลบ การทดสอบเชิงลบ (Negative Testing) คือการทดสอบซอฟต์แวร์ประเภทหนึ่งที่ใช้ตรวจสอบแอปพลิเคชันซอฟต์แวร์กับข้อมูลอินพุตและเงื่อนไขที่ไม่คาดคิด ข้อมูลหรือเงื่อนไขที่ไม่คาดคิดมีตั้งแต่ชนิดข้อมูลที่ไม่ถูกต้องในช่องกรอกข้อมูลแบบง่ายๆ ไปจนถึงการโจมตีโดยเจตนาจากแฮกเกอร์ จุดประสงค์ของการทดสอบเชิงลบคือเพื่อป้องกันไม่ให้แอปพลิเคชันล่มเมื่อป้อนข้อมูลที่ไม่ถูกต้อง และเพื่อปรับปรุงคุณภาพและความเสถียรของผลิตภัณฑ์

การทดสอบเชิงบวกเพียงอย่างเดียวพิสูจน์ได้เพียงว่าระบบทำงานได้ภายใต้สภาวะปกติ การทดสอบเชิงลบยืนยันว่าระบบเดียวกันนี้สามารถรับมือกับสภาวะผิดปกติได้ ซึ่งเป็นสิ่งที่ผลิตภัณฑ์ที่ทนต่อความผิดพลาดจำเป็นต้องมี

ตัวอย่างการทดสอบเชิงลบ

ลิฟต์เป็นตัวอย่างที่มักใช้ในการอธิบายการทดสอบเชิงลบ เนื่องจากพฤติกรรมปกติและพฤติกรรมเมื่อเกิดความผิดพลาดนั้นสามารถจินตนาการได้ง่าย

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

สถานการณ์เชิงลบที่อาจเกิดขึ้นจากมาตรการดังกล่าวมีดังต่อไปนี้ โดยเปรียบเทียบกับสมมติฐานที่ว่าการตรวจหาเชื้อในเชิงบวกจะทำให้มาตรการนั้นมีประสิทธิภาพมากขึ้น

การทดสอบเชิงลบ การทดสอบเชิงบวก
จะเกิดอะไรขึ้นหากจำนวนคน (น้ำหนัก) เกินขีดจำกัดที่กำหนด? สมมติว่าจะมีเพียงจำนวนคนที่ระบุไว้เท่านั้นที่จะขึ้นลิฟต์
จะเกิดอะไรขึ้นหากมีคนสูบบุหรี่หรือก่อไฟไหม้ภายในลิฟต์? สมมติว่าไม่มีควันหรือไฟไหม้ภายในลิฟต์
ถ้าไฟดับระหว่างการใช้งานจะเกิดอะไรขึ้น? สมมติว่าจะไม่มีไฟฟ้าดับขณะที่ลิฟต์กำลังทำงาน

กรณีทั้งหมดนี้อยู่ภายใต้ผลการตรวจที่เป็นลบ อย่างไรก็ตาม ไม่มีกรณีใดที่จะรับประกันได้ว่าจะไม่เกิดขึ้น ดังนั้นจึงต้องควบคุมสถานการณ์ในแต่ละกรณี

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

ซอฟต์แวร์ก็ทำงานในลักษณะเดียวกัน การทดสอบเชิงลบคือการจงใจเบี่ยงเบนจากขั้นตอนการทำงานปกติ ลองพิจารณาแบบฟอร์มลงทะเบียน

การทดสอบเชิงลบ การทดสอบเชิงบวก
กรอกอีเมลที่ไม่ถูกต้องลงในช่องอีเมล เฉพาะอีเมลที่ถูกต้องเท่านั้นที่จะถูกป้อนลงในช่องอีเมล
ป้อนหมายเลขโทรศัพท์ที่ไม่ถูกต้อง เช่น ตัวอักษร ในช่องหมายเลขโทรศัพท์ ช่องตัวเลขต้องป้อนเฉพาะตัวเลขเท่านั้น
อัปโหลดภาพที่มีขนาดเกินขอบเขตที่กำหนด เฉพาะภาพที่มีขนาดอยู่ในขอบเขตที่กำหนดเท่านั้นที่จะถูกอัปโหลด
อัปโหลดไฟล์ที่ไม่ถูกต้อง เช่น XML or SQL ไฟล์ในช่องอัปโหลดรูปภาพ อนุญาตให้อัปโหลดเฉพาะไฟล์ภาพที่มีรูปแบบถูกต้อง เช่น .jpg หรือ .png เท่านั้น

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

ทำไมต้องทำการทดสอบเชิงลบ?

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

มุมมององค์กร

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

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

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

มุมมองลูกค้า

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

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

วิธีการตรวจหาเชื้อแล้วผลเป็นลบ

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

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

กรณีทดสอบเชิงลบส่วนใหญ่มักเกิดจากเทคนิคการออกแบบที่เป็นที่ยอมรับกันอยู่แล้ว มากกว่าที่จะมาจากการด้นสด:

  • ค่าขอบเขต: ใช้ค่าที่อยู่นอกช่วงค่าที่ถูกต้องทันที เช่น 0 และ 101 สำหรับช่องข้อมูลที่ยอมรับค่าตั้งแต่ 1 ถึง 100
  • คลาสเทียบเท่าที่ไม่ถูกต้อง: เลือกตัวแทนหนึ่งรายจากแต่ละประเภทของข้อมูลที่ถูกปฏิเสธ เช่น ตัวอักษรในช่องตัวเลข
  • การคาดเดาข้อผิดพลาด: ใช้ประสบการณ์จากข้อบกพร่องในอดีตเพื่อกำหนดเป้าหมายอินพุตที่น่าจะทำให้ฟีเจอร์ประเภทนี้ทำงานผิดพลาดมากที่สุด
  • ข้อมูลที่ผิดรูปแบบและเป็นอันตราย: แท็กสคริปต์, ส่วนของคำสั่ง SQL และเพย์โหลดขนาดใหญ่เกินไปที่ตรวจสอบความถูกต้องและการจัดการด้านความปลอดภัย
  • การทดสอบฝอย: สร้างข้อมูลป้อนเข้าแบบสุ่มหรือแบบกลายพันธุ์จำนวนมากโดยอัตโนมัติ เพื่อค้นหาข้อผิดพลาดที่ไม่ได้รับการจัดการ
  • การไหลของข้อมูลถูกขัดจังหวะ: ยกเลิก รีเฟรช หมดเวลา หรือขาดการเชื่อมต่อระหว่างการทำธุรกรรม

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

ข้อดีและข้อเสียของการตรวจแล้วไม่พบเชื้อ

เช่นเดียวกับเทคนิคการทดสอบอื่นๆ การทดสอบเชิงลบก็มีข้อดีและข้อเสีย ซึ่งขึ้นอยู่กับสถานที่ เวลา และปริมาณที่นำไปใช้

ข้อดีของการทดสอบเชิงลบ

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

ข้อเสียของการทดสอบเชิงลบ

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

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

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

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

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

โดยปกติแล้ว ผู้ทดสอบและวิศวกร QA จะเป็นผู้เขียนข้อกำหนดเหล่านี้ โดยมักจะมีนักพัฒนาตรวจสอบเส้นทางการเกิดข้อผิดพลาด และนักวิเคราะห์ธุรกิจตรวจสอบว่าเงื่อนไขที่ไม่ถูกต้องใดบ้างที่ข้อกำหนดห้ามไว้จริง ๆ

เพียงพอที่จะครอบคลุมทุกคลาสอินพุตที่ถูกปฏิเสธ ทุกขอบเขต และทุกเส้นทางความล้มเหลวที่มีผลกระทบสูง หากเกินกว่านั้น กรณีเพิ่มเติมจะให้ประโยชน์เพียงเล็กน้อย ดังนั้นความเสี่ยงและผลกระทบจึงเป็นตัวกำหนดขีดจำกัดping จุด.

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

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

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

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