Coding Gun

Performance Testing คืออะไร?

Performance Testing คือการทดสอบประสิทธิภาพของระบบ เป็นการทดสอบคุณภาพของระบบ(Non-functional) รูปแบบหนึ่ง ซึ่งจุดประสงค์ของการทดสอบคือการทดสอบว่าระบบนั้นมีความมั่นคง(Stability), ความเร็ว(Speed หรือ Responsiveness), มีความสามารถในการขยายตัว(Scalability) ที่เพียงพอต่อความต้องการของ Users หรือไม่

เราจะทำ Performance Testing เมื่อไหร่?

สิ่งที่เราต้องพิจารณาในการทำ Performance Testing คือการคำนวนต้นทุน(Cost)ที่จะต้องใช้ในการทดสอบ กับโอกาสที่จะเกิดปัญหา(Probability) รวมทั้งผลกระทบที่ตามมาหลังจากเกิดปัญหานั้นๆ(Impact) ซึ่งส่วนใหญ่เราจึงเลือกทำ Performance Testing เมื่อพบปัญหาเหล่านี้

  1. พบว่ามี Traffic ที่พุ่งขึ่้นมาในบางช่วง(Spike)
  2. พบว่าบาง Traffic มี Response Time ที่สูงเกินไป(ช้าเกินไป)
  3. มีการปรับเปลี่ยน Hardware ใหม่
  4. พบปัญหาใน Source Code หรือ SQL Statements

นอกจากนี้ยังมีปัญหาที่มีผลกระทบต่อ Performance อื่นๆอีกมาก ทั้งเรื่องของ Latency ใน Network หรือมีการนำ Security Tools เข้ามาแทรกระหว่างการทำงาน ดังนั้นเมื่อสิ่งที่เราทำมีผลกระทบต่อ Performance ของระบบ และผลกระทบนั้นทำให้เกิดผลเสียต่อธุรกิจ เราต้องทำ Performance Test ในส่วนนั้นทันที

เป้าหมายของการทำ Performance Testing

การทำ Performance Test เราจะต้องวัดค่าเหล่านี้ออกมา

  1. ความเร็วในการประมวลผล(Processing speed)
  2. ความเร็วของการรับส่งข้อมูล (Data transfer velocity)
  3. ปริมาณการใช้งาน Network (Network bandwidth)
  4. จำนวนสูงสุดของผู้ใช้งานที่เข้ามาทำงานได้พร้อมกัน(Maximum concurrent users)
  5. ปริมาณหน่วยความจำที่ใช้งาน (Memory utilization)
  6. ความเร็วของระบบ (Response times)

อย่าลืมว่าการทำ Performance Testing เราไม่ได้อยากรู้แค่ระบบสามารถรองรับ Load ได้หรือไม่เพียงอย่างเดียว แต่เราต้องการรู้ว่าปัญหาคอขวด(Bottlenecks) หรือปัญหาที่ทำให้ระบบช้าลงอยู่ตรงไหน เพื่อที่จะได้นำกลับไปทำ Performance Tuning ให้ประสิทธิภาพของระบบดีขึ้น การทำ Performance Testing ขะแบ่งออกเป็นหลายประเภทขึ้นอยู่กับ Workload ที่ส่งเข้าไป

Workload คือ Input ที่ส่งเข้าไปเพื่อทดสอบ Performance ของระบบ

Performance Testing Types

เราสามารถแบ่งการทำ Performance Testing ออกเป็นประเภทต่างๆตามจุดประสงค์ของการทดสอบได้ดังนี้

  1. Load Test คือการทดสอบว่าระบบสามารถรองรับการใช้งานจริงได้หรือไม่ โดยที่เราต้องจำลองขนาดของ Workload ให้เหมือนหรือใกล้เคียงกับการใช้งานของ User มากที่สุด

  2. Stress Test คือการทดสอบที่ยิง Workload เข้าไปในปริมาณมากๆ จะคล้ายกับ Load test แต่จะต้องเพิ่มปริมาณ Workload ขึ้นไปเรื่อยๆจนกว่าระบบจะ down เพื่อทดสอบว่าระบบรองรับ Load ได้สูงสุดเท่าไหร่

  3. Endurance Test คือการทดสอบที่จะส่ง Workload เข้าไปในระบบ(เหมือนกับ load test) แต่จะ run script ค้างไว้นานๆ เพื่อทดสอบความทนทาน(endurace) ของระบบ

  4. Spike Testing คือการทดสอบโดยใช้ WorkLoad ที่มีขนาดใหญ่ ส่งเข้าไปทำงานในช่วงเวลาสั้นๆ ส่วนใหญ่จะมีการทดสอบแบบนี้ไว้เพื่อป้องกันปัญหา Distributed Denial of Service(DDoS)

  5. Scalability Testing คือการทดสอบการขยายตัว(Scale) ของระบบ เมื่อเรามีการออกแบบให้ระบบมีการ Scale-In หรือ Scale-Out โดยอัตโนมัติ เราต้องมีการทดสอบเพื่อให้แน่ใจว่าระบบจะ Scale ตามที่เราต้องการเมื่อมี Workload เข้ามา และการ Scale นั้นยังต้องใช้เวลาที่เหมาะสมเพื่อให้สามารถ Scale ขึ้นมาทำงานได้ทันเวลา

ขั้นตอนการทำ Performance Testing

ในการทำ Performance Testing เราจะต้องมีขั้นตอนในการทดสอบดังนี้

  1. เลือกเครื่องมือที่จะนำมาใช้ทำ Performance Test และ Environment สำหรับการทดสอบ
  2. กำหนด Acceptable performance criteria(ประสิทธิภาพที่เรารับได้)
  3. วางแผนและออกแบบ Test case
  4. ทำการทดสอบ Performance ด้วยเครื่องมือที่เลือกไว้ในขั้นตอนแรก
  5. แก้ปัญหา ปรับปรุงระบบให้มีประสิทธิภาพที่ดีขึ้น
  6. ทดสอบซ้ำอีกรอบ(Retests)

Tips สำหรับการทำ Performance Testing

  1. ไม่ควรทำ Performance Testing บน Production ควรใช้ UAT Environment
  2. เลือกเครื่องมือที่ตอบโจทย์ตาม Test Plan มากที่สุด ดังนั้นเราต้องเรียนรู้การใช้เครื่องมือไว้หลายๆตัว
  3. พยายามทดสอบหลายๆครั้งในหลายๆช่วงเวลา ก่อนที่จะ Accept หรือ Unaccept
  4. ไม่ควรมีการเปลี่ยนแปลงในระหว่างการทดสอบไม่ว่าจะเป็น Hardware หรือ Software ก็ตาม
Phanupong Permpimol
Follow me