Spike Testing ในการทดสอบซอฟต์แวร์คืออะไร? เรียนรู้ด้วยตัวอย่าง

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

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

  • รูปแบบการรับน้ำหนัก: ปริมาณการจราจรเพิ่มสูงขึ้นอย่างรวดเร็วเกินกว่าระดับปกติ คงอยู่ชั่วครู่แล้วก็กลับสู่ระดับปกติ
  • 🎯 เป้าหมายหลัก: ตรวจสอบว่าระบบล้มเหลวหรือไม่ และล้มเหลวอย่างราบรื่นหรือไม่
  • 🔄 เรื่องการฟื้นฟู: การกลับมาตอบสนองได้ตามปกติหลังจากเกิดอาการผิดปกติมีความสำคัญพอๆ กับการเอาตัวรอดจากอาการนั้น
  • 📈 ตัวกระตุ้นที่สมจริง: การขายแบบจำกัดเวลา การจำหน่ายตั๋ว การสร้างกระแสไวรัล และการทำงานแบบกลุ่มตามกำหนดเวลา
  • 🛠️ เครื่องมือ: JMeter และ LoadRunner ต่างก็จำลองการเพิ่มขึ้นอย่างฉับพลัน แทนที่จะเป็นการเพิ่มขึ้นอย่างค่อยเป็นค่อยไป
  • 📊 ดูอะไรดี: อัตราข้อผิดพลาด ความลึกของคิว และเวลาที่ใช้ในการกลับสู่สภาวะปกติ

การทดสอบ Spike คืออะไร

Spike Test คืออะไร?

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

การทดสอบ Spike ดำเนินการเพื่อประเมินจุดอ่อนของแอปพลิเคชันซอฟต์แวร์

การทดสอบขัดขวาง
การทดสอบขัดขวาง

เป้าหมายของการทดสอบ Spike

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

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

วิธีทำการทดสอบ Spike

ขั้นตอนง่ายๆ ในการดำเนินการทดสอบ Spike:

ขั้นตอนที่ 1) กำหนดความสามารถในการรับน้ำหนัก

กำหนดความสามารถในการโหลดผู้ใช้สูงสุดของแอปพลิเคชันซอฟต์แวร์ของคุณ

ขั้นตอนที่ 2) เตรียมสภาพแวดล้อมการทดสอบ

เตรียมสภาพแวดล้อมการทดสอบและกำหนดค่าให้บันทึกพารามิเตอร์ประสิทธิภาพ

ขั้นตอนที่ 3) กำหนดโหลดที่คาดหวัง

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

ขั้นตอนที่ 4) เพิ่มภาระ

เพิ่มภาระให้กับระบบอย่างรวดเร็วตามระยะเวลาที่กำหนด

ขั้นตอนที่ 5) ตั้งค่าโหลดกลับเป็นปกติ

ค่อยๆ ลดภาระกลับสู่ระดับเดิม

ขั้นตอนที่ 6) วิเคราะห์ผลลัพธ์

วิเคราะห์กราฟประสิทธิภาพและตัวชี้วัด เช่น ความล้มเหลว เวลาที่ใช้ ผู้ใช้เสมือน ฯลฯ

ตัวอย่างสถานการณ์การทดสอบ Spike

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

สถานการณ์การกู้คืนบน Spike Loads

สถานการณ์การกู้คืนหลักสามสถานการณ์ที่สามารถกำหนดค่าเพื่อป้องกัน Spikes ได้แก่:

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

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

ด้านล่างนี้คือข้อดีและข้อเสียของ Spike Testing:

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

เครื่องมือทดสอบสไปค์

1) JMeter

การขอ Apache JMeter เป็นเครื่องมือทดสอบขัดขวางโอเพ่นซอร์สของ Java ออกแบบมาเป็นพิเศษเพื่อโหลดพฤติกรรมการทดสอบการทำงานและวัดประสิทธิภาพ เครื่องมือทดสอบประสิทธิภาพนี้สามารถใช้เพื่อวิเคราะห์และวัดประสิทธิภาพของเว็บแอปพลิเคชันหรือบริการที่หลากหลาย ปัจจุบันมีการใช้กันอย่างแพร่หลายสำหรับการทดสอบการทำงาน การทดสอบเซิร์ฟเวอร์ฐานข้อมูล

2) โหลดรันเนอร์

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

การทดสอบนี้เข้ากับกลุ่มการทดสอบประสิทธิภาพอย่างไร

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

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

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

ตัวชี้วัดสำคัญที่ต้องบันทึกระหว่างการทดสอบ

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

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

อ่านค่าเฉลี่ยและเปอร์เซ็นไทล์ควบคู่กันไป ค่าเฉลี่ย 800 มิลลิวินาที โดยมีค่าเปอร์เซ็นไทล์ที่ 95 อยู่ที่ 900 มิลลิวินาที แสดงถึงระบบที่มีความสม่ำเสมอ แต่หากค่าเฉลี่ยเดียวกันนี้มีค่าเปอร์เซ็นไทล์ที่ 95 อยู่ที่ 9 วินาที หมายความว่าผู้ใช้ 1 ใน 20 คนกำลังประสบปัญหา และค่าเฉลี่ยที่แสดงนั้นปกปิดปัญหานี้ไว้

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

การทดสอบ Spike: ข้อสรุปที่สำคัญ

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

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

การทดสอบความเค้น (Stress testing) จะค่อยๆ เพิ่มภาระจนกว่าระบบจะเสียหาย เพื่อหาขีดจำกัดสูงสุด ส่วนการทดสอบแรงกระชาก (Spike testing) จะใช้ภาระสูงสุดในทันที เพื่อดูว่าแรงกระแทกฉับพลันทำให้เกิดความเสียหายหรือไม่ ซึ่งการค่อยๆ เพิ่มภาระทีละน้อยจะไม่ทำให้เกิดความเสียหายเช่นนั้น

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

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

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

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

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