Performance Testing คือ ตัวชีวัดถึงประสิทธิภาพของซอฟต์แวร์เราได้ว่าซอฟตร์แวร์ที่เราพัฒนาขึ้นมานั้นมีการสอบสนองเร็วหรือช้าหรือหากมีจำนวนผู้ใช้งานเข้ามามากๆแล้วระบบเราจะยังสามารถทำงานได้หรือไม่ ซึ่งการทำ Performance Testing นั้นจะทำให้เราทราบถึงข้อจำกัดและข้อผิดพลาดเชิงประสิทธิภาพได้ก่อนที่ลูกค้าจะพบ ตัวอย่างหนึ่งที่เกิดขึ้นบ่อยคือ การประกาศผลหรือคะแนนสอบผ่านเว็บไซต์ ลักษณะของกิจกรรมที่เกิดขึ้นนั้นพบว่ามีผู้ใช้งานเป็นจำนวนมากเข้าใช้งานบนเว็บไซต์พร้อมๆกันทำให้ระบบล่ม ซึ่งหากเราได้ศึกษาเกี่ยวกับ Performance ของระบบแล้วเราอาจจะเข้าใจมากขึ้นว่าทำไมระบบถึงล่งและจะหาทางป้องกันได้อย่างไรซึ่งบทความนี้จะมีคำตอบให้อย่างแน่นอน
การทดสอบแบบ Performance Test นั้นเป็นการทดสอบอยู่ในกลุ่มของ Non-Functional testing ซึ่งมีวัตถุประสงค์เพื่อให้ซอฟต์แวร์สามารถใช้งานได้อย่างมีประสิทธิภาพ ง่ายต่อการบำรุงรักษา ลดความเสี่ยงต่างๆที่อาจจะเกิดขึ้น โดยในกลุ่มของ Non-Functional testing สามารถแบ่งประเภทที่จะทดสอบออกเป็นอีกหลายประเภทและ Performance testing ก็เป็นหนึ่งประเภทที่จะต้องสนใจในการทดสอบของ Non-Functional testing
ประเภทของ Non-Functional Testing
- Performance testing
- Scalability testing
- Usability testing
- Maintainability testing
- Compatibility testing
- Failover testing
- Security testing
- Portability testing
- Reliability testing
- Endurance testing
- Efficiency testing
- Localization testing
- Documentation testing
ทำ Performance Test เมื่อไหร่?
เราควรจะเริ่มทำ Performance test ก็ต่อเมื่อ
1. มี Requirement บอกให้ทำ เช่นมี Requirement บอกว่า "ระบบสามารถตอบสนองต่อผู้ใช้งานที่ 1-500 คนในระยะเวลาไม่เกิน 5 วินาที" ซึ่งเราก็ควรจะเริ่มหาวิธีว่าเราจะวัด Performance ของระบบเพื่อให้เป็นไปตาม Requirement
2. ทดสอบเป็นประจำทุกครั้งที่พัฒนาซอฟต์แวร์เสร็จสิ้น จากที่ได้กล่าวไปว่า Performance testing นั้นเป็น Non-Functional testing อย่างหนึ่ง ดังนั้นเราสามารถทำการทดสอบในช่วงของการพัฒนาซอฟต์แวร์ได้เลย แต่การทดสอบนั้นควรเกิดขึ้นหลักจากเสร็จสิ้นจากช่วง System Integration testing ถึงจะเริ่มทำ Performance Testing
Performance Test วัดอย่างไร?
ในการวัด Performance ของระบบนั้นจะเป็นการวัดว่าระบบมี Response Time ที่เท่าไหร่ในหนึ่งหน่วยเวลา เช่นในการกด Save ระบบใช้ระยะเวลาในการ Save 2 วินาที เป็นต้น ปัจจุบันมีการแบ่งประเภทของ Performance Testing ไว้หลายประเภทด้วยกัน ได้แก่
ในการทำ performance test นั้นถ้าเป็นไปได้ก็ควรทำทุกประเภท เพื่อสามารถทราบถึงความสามารถของระบบเราได้ว่ารองรับต่ำสุดสูงสุดได้เท่าไหร่หรือทำแบบผสมผสานกัน เช่น เริ่มต้น test ที่ผู้ใช้งานน้อยๆไปยังผู้ใช้งานมากๆ (Scalability testing) เมื่อถึงระยะเวลาหนึ่งก็ยิง load ให้มีปริมาณที่คงที่ (Load testing) เป็นระยะเวลา X ชั่วโมง (Endurance testing) ระหว่างนั้นเพิ่มจำนวนโหลดที่สูงผิดปกติเข้าไป (Spike testing) จากนั้น test ไปจนถึงเวลาที่กำหนดเพื่อตรวจสอบผล performance test
การวัดผลว่าซอฟต์แวร์มี performance ดีหรือไม่ ดูอะไรบ้าง
ในการทดสอบ performance test นั้นไม่ว่าจะเป็นประเภทไหนก็ตาม จะต้องมีการวัดผลว่าซอฟต์แวร์เรามีประสิทธิภาพที่ดีหรือไม่ โดยมีหลายตัวชีวัดด้วยกัน ซึ่งขึ้นอยู่กับ tool ที่ใช้งานด้วย แต่ตัวชี้วัดหลักที่ควรรู้นั้นได้แก่
ใช้ tool ตัวไหนทำ performance test ดี?
Tool ยอดนิยมและฟรีที่นิยมใช้ในปัจจุบันคือ JMeter นั้นเอง ซึ่งเป็น tool ที่ใช้สำหรับการทำ performance ได้โดยตรง สร้างโดยใช้ JAVA โดยผู้ใช้งานสามารออกแบบสร้าง script ขึ้นมาเองและปรับ script ตามความต้องการได้ ไม่ต้องเขียน code แต่ต้องมีความรู้ความเข้าในของตัว JMeter เพื่อสร้าง scirpt
Tag: Non-Functional Test, performance test, คือ
เราควรจะเริ่มทำ Performance test ก็ต่อเมื่อ
1. มี Requirement บอกให้ทำ เช่นมี Requirement บอกว่า "ระบบสามารถตอบสนองต่อผู้ใช้งานที่ 1-500 คนในระยะเวลาไม่เกิน 5 วินาที" ซึ่งเราก็ควรจะเริ่มหาวิธีว่าเราจะวัด Performance ของระบบเพื่อให้เป็นไปตาม Requirement
2. ทดสอบเป็นประจำทุกครั้งที่พัฒนาซอฟต์แวร์เสร็จสิ้น จากที่ได้กล่าวไปว่า Performance testing นั้นเป็น Non-Functional testing อย่างหนึ่ง ดังนั้นเราสามารถทำการทดสอบในช่วงของการพัฒนาซอฟต์แวร์ได้เลย แต่การทดสอบนั้นควรเกิดขึ้นหลักจากเสร็จสิ้นจากช่วง System Integration testing ถึงจะเริ่มทำ Performance Testing
Performance Test วัดอย่างไร?
ในการวัด Performance ของระบบนั้นจะเป็นการวัดว่าระบบมี Response Time ที่เท่าไหร่ในหนึ่งหน่วยเวลา เช่นในการกด Save ระบบใช้ระยะเวลาในการ Save 2 วินาที เป็นต้น ปัจจุบันมีการแบ่งประเภทของ Performance Testing ไว้หลายประเภทด้วยกัน ได้แก่
- Load testing เป็นการ load test ที่ปริมาณข้อมูลปกติที่ระบบเคยทำได้ หรือการคาดการณ์ไว้ว่าระบบจะทำงานได้เท่าไหร่ เช่น ระบบน่าจะมีผู้ใช้งานประมาณ 100 คน/นาที และอาจะเกิด transaction 1200 transaction/นาที จุดประสงค์ของการ load test นั้นจะทำให้เราทราบถึงการตอบสนองของระบบต่อหน่วยเวลา เพื่อเป็นข้อมูลว่า ณ ที่ load ปกตินั้นการตอบสนองของระบบทำงานได้เร็วหรือช้า
- Stress testing เป็นการทำสอบ load ของระบบที่ไม่ปกติ คือมากกว่าความเป็นจริงเท่าที่ระบบจะสามารถรองรับได้ หรือเข้าใจง่ายๆคือ test จนระบบพังนั้นเอง ซึ่งการทดสอบด้วยวิธีนี้จะทำให้เราทราบว่าระบบเราสามารถรองรับจำนวนปริมาณข้อมูลสูงสุดได้เท่าไหร่
- Endurance testing เป็นการทำ load test แต่จะทำ load ที่ใช้เวลานาน เพื่อให้มั่นใจว่าในระบบสามารถรับ load ถ้าช่วงระยะเวลานานๆ
- Spike testing เป็นการ load ที่สูงขึ้นแบบกระทันหันในช่วงเวลาใดเวลาหนึ่ง เช่น เว็บไซต์ E-commerce มีการจัดโปรโมชันพิเศษ 1 ชั่วโมงเท่านั้น ทำให้ลูกค้าแห่เข้าเว็บไซต์ในช่วงเวลาดังกล่าวเป็นจำนวนมาก
- Volume testing เป็นการทดสอบระบบในปริมาณข้อมูลที่มากกว่าปกติแต่ไม่ต้องการทำให้ระบบล้มเหลว(Stress testing) เพื่อทดสอบว่าหากมี load มากกว่าปกติแล้วระบบยังสามารถทำงานต่อไปได้ Volume testing นั้นจะคล้ายกับ load testing แต่จะมีปริมาณข้อมูลที่ใช้ทดสอบมากกว่า
- Scalability testing เป็นการทดสอบประสิทธิภาพของฮาร์ดแวร์และซอฟต์แวร์เพื่อให้มีความยืดหยุ่น เช่น เช่น เว็บไซต์ E-commerce มีการจัดโปรโมชั่นช่วง 11.11 ทำให้มีจำนวนลูกค้าเข้ามาเยอะมากในช่วงนั้น ซึ่งหากทดสอบด้วย Scalability test นั้นจะวัดว่า จำนวนลูกค้าที่เข้ามาเยอะนั้นย่อมมีการใช้ RAM CPU Network ฯลฯ เป็นจำนวนมาก ซึ่งฮาร์ดแวร์เองก็ควรจะมีการ Scale ทรัพยากรต่างๆของฮาร์ดแวร์เพิ่มขึ้นตามและทำงานร่วมกับซอฟต์แวร์ได้อย่างมีประสิทธิภาพ และหากจำนวนลูกค้าลดลงเป็นปกติแล้วทรัพยากรต่างๆก็ควรลดลงด้วย
ในการทำ performance test นั้นถ้าเป็นไปได้ก็ควรทำทุกประเภท เพื่อสามารถทราบถึงความสามารถของระบบเราได้ว่ารองรับต่ำสุดสูงสุดได้เท่าไหร่หรือทำแบบผสมผสานกัน เช่น เริ่มต้น test ที่ผู้ใช้งานน้อยๆไปยังผู้ใช้งานมากๆ (Scalability testing) เมื่อถึงระยะเวลาหนึ่งก็ยิง load ให้มีปริมาณที่คงที่ (Load testing) เป็นระยะเวลา X ชั่วโมง (Endurance testing) ระหว่างนั้นเพิ่มจำนวนโหลดที่สูงผิดปกติเข้าไป (Spike testing) จากนั้น test ไปจนถึงเวลาที่กำหนดเพื่อตรวจสอบผล performance test
การวัดผลว่าซอฟต์แวร์มี performance ดีหรือไม่ ดูอะไรบ้าง
ในการทดสอบ performance test นั้นไม่ว่าจะเป็นประเภทไหนก็ตาม จะต้องมีการวัดผลว่าซอฟต์แวร์เรามีประสิทธิภาพที่ดีหรือไม่ โดยมีหลายตัวชีวัดด้วยกัน ซึ่งขึ้นอยู่กับ tool ที่ใช้งานด้วย แต่ตัวชี้วัดหลักที่ควรรู้นั้นได้แก่
- Throughput คืองานที่ทำได้ในหนึ่งหน่วยเวลา เช่น งานที่ 1 ทำได้ 10 transaction/sec งานที่ 2 ทำได้ 5 transaction/sec งานใดมีประสิทธิภาพที่ดีกว่ากัน........ คำตอบคืองานที่ 1 เพราะใน 1 วินาทีทำได้ตั้ง transaction 10 ยิ่งทำ transaction ได้เยอะยิ่งมีประสิทธิภาพที่ดี
- Error % ปกติแล้วเมื่อเริ่มการ load test สิ่งที่อาจจะเกิดขึ้นได้คือ error เหนื่องจากการ load test หรือการ test ประเภทอื่นๆ มีการจำลอง user เข้ามาจำนวนมาก เมื่อมีจำนวน user ในระบบเยอะก็อาจจะเกิด error ได้ เช่น มีการเรียกใช้หน้าเดียวกันมากๆ ระบบรับไม่ไหว return error 504 เป็นต้น ซึ่งการเกิด error rate นั้นมีโอกาสเกิดได้เสมอแม้เครื่องจะแรงแค่ไหนก็ตาม แต่ต้องมีการตั้งค่า error rate ที่รับได้ไว้ด้วย โดยปกติแล้วค่า error rate นั้นควรจะน้อยกว่า 0% 1% 3% หรือ 5% ขึ้นอยู่กับลักษณะของซอฟต์แวร์ หากเป็นซอฟต์แวร์ที่เกี่ยวกับการเงินก็ไม่ควรมี error rate เลย หรือต้องมีน้อยมากๆ หากเป็นหน้าเว็บแสดงข้อมูลอย่างเดียวก็อาจจะรับค่า error rate ที่ 5% ได้
- Response time คือระยะเวลาการตอบสนองในหนึ่งหน่วยเวลา เช่น api การคลิ๊กปุ่มซื้อของของเว็บไซต์ E-commerce ใช้ response time ที่ 2,700ms เป็นต้น ซึ่งค่าของ response time นั้นยิ่งน้อยยิ่งดี
ใช้ tool ตัวไหนทำ performance test ดี?
Tool ยอดนิยมและฟรีที่นิยมใช้ในปัจจุบันคือ JMeter นั้นเอง ซึ่งเป็น tool ที่ใช้สำหรับการทำ performance ได้โดยตรง สร้างโดยใช้ JAVA โดยผู้ใช้งานสามารออกแบบสร้าง script ขึ้นมาเองและปรับ script ตามความต้องการได้ ไม่ต้องเขียน code แต่ต้องมีความรู้ความเข้าในของตัว JMeter เพื่อสร้าง scirpt
Tag: Non-Functional Test, performance test, คือ