การทดสอบแบบทำลายล้างในซอฟต์แวร์คืออะไร?

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

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

  • 💥 แนวคิดหลัก: แอปพลิเคชันนี้ถูกออกแบบมาให้ล้มเหลวโดยเจตนา เพื่อให้จุดที่ล้มเหลวปรากฏให้เห็นและวัดผลได้
  • 🔎 ไม่ต้องมีคุณสมบัติใดๆ: ความรู้เบื้องต้นเกี่ยวกับข้อกำหนดนั้นไม่จำเป็น แต่จะช่วยให้กลยุทธ์การทดสอบมีประสิทธิภาพมากขึ้น
  • 🇧🇷 คู่ตรงข้าม: การทดสอบแบบไม่ทำลายเป็นการเดินบนเส้นทางที่ราบรื่น ในขณะที่การทดสอบแบบทำลายโจมตีเส้นทางนั้นจากทุกมุมที่ผิดพลาด
  • 🧰 วิธีการ: การวิเคราะห์จุดล้มเหลว การตรวจสอบโดยผู้ทดสอบร่วม การตรวจสอบทางธุรกิจ และการทดลองใช้งานพร้อมเอกสารสรุปการทำงาน
  • 🧪 วิธีการนำกลับมาใช้ใหม่: การทดสอบการถดถอย การทดสอบอินเทอร์เฟซ การแบ่งส่วนความเท่าเทียมกัน การทดสอบลูป และการทดสอบการยอมรับ ล้วนมีเป้าหมายในการทำลายล้าง
  • 📉 ขีดจำกัดที่ซื่อสัตย์: การรับประกันความครอบคลุมทำได้ยาก ต้องใช้ความพยายามสูง และผลลัพธ์อาจทำซ้ำได้ยาก

การทดสอบแบบทำลายล้างในซอฟต์แวร์คืออะไร พร้อมด้วยวิธีการและเทคนิคต่างๆ

การทดสอบแบบทำลายล้างคืออะไร?

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

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

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

แนวคิดการทดสอบแบบทำลายล้าง: การใช้งานที่จงใจผลักดันจนถึงจุดที่เกิดความเสียหาย

เหตุใดจึงต้องทำการทดสอบแบบทำลายล้าง?

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

การทดสอบแบบทำลายเทียบกับการทดสอบแบบไม่ทำลาย

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

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

ในการทดสอบแบบทำลาย คุณตรวจสอบอะไรบ้าง?

การทดสอบแบบทำลายล้างจะพิจารณาทั้งสองด้านของขอบเขตพฤติกรรม:

  • พฤติกรรมซอฟต์แวร์ที่เหมาะสม
  • พฤติกรรมซอฟต์แวร์ที่ไม่เหมาะสม
  • การใช้งานที่ไม่เหมาะสม
  • ข้อมูลอินพุตไม่ถูกต้อง
  • ข้อมูลเอาต์พุตที่เหมาะสม

ตลอดการดำเนินการต้องมีเงื่อนไขสองประการดังนี้:

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

การทดสอบแบบทำลายล้างทำอย่างไร?

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

มีวิธีการใช้งานมากมาย ตัวอย่างบางส่วนมีดังต่อไปนี้

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

ตัวอย่างการทดสอบแบบทำลายล้าง

ลองพิจารณาหน้าจอเข้าสู่ระบบและโปรไฟล์ของแอปพลิเคชันธนาคาร รหัสผ่านทำลายล้างจะใช้งานได้กับกรณีต่างๆ เช่นนี้:

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

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

วิธีการทดสอบแบบทำลายล้าง

วิธีการต่อไปนี้ถูกนำมาใช้ในวิศวกรรมซอฟต์แวร์เพื่อบรรลุเป้าหมายของการทดสอบแบบทำลายล้าง:

เทคนิคการทดสอบแบบทำลายล้าง

เทคนิคด้านล่างนี้สามารถนำไปปรับใช้ได้ โดยอาจต้องปรับเปลี่ยนบ้าง:

เทคนิคเสริมที่น่าสนใจเมื่อเป้าหมายคือความทนทาน ได้แก่ การทดสอบเชิงลบ, ทดสอบความเครียด, การทดสอบการกู้คืน และ การทดสอบคลุมเครือ.

ข้อดีและข้อเสียของการทดสอบแบบทำลายล้าง

ควรชี้แจงข้อดีข้อเสียให้ชัดเจนก่อนที่จะนำเทคนิคนี้ไปวางแผนใช้ในเวอร์ชันที่จะวางจำหน่าย

ข้อดี

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

ข้อเสีย

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

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

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

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

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

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

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

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

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

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

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