Performance Validation
การพัฒนา software ในปัจจุบัน ที่จะต้องรองรับการใช้งานของจำนวนคนจำนวนมาก ธุรกิจจำเป็นจะต้องมีการทดสอบระบบเพื่อให้ทราบว่าระบบที่เราพัฒนานั้น สามารถที่จะรองรับการใช้งานของผู้ใช้งานให้ได้มาก และมีประสิทธิภาพที่สุด โดยเกณฑ์ตัวชี้วัดหลากหลายแบบ ไม่ว่าจะเป็น
- Transaction Response Time
- Number of User Concurrent
- Transaction Pass per Hour
- System Resource Usage
- Maximum Bandwidth
โดยวัตถุประสงค์หลักในการทดสอบ คือการทดสอบประสิทธิภาพ และทำการประเมินวิธีเคราะห์หาสาเหตุปัญหาที่อาจเกิดขึ้น และ ทำการแก้ไขก่อนการใช้งานจริง Performance Validation จึงเป็นเครื่องมือที่ช่วยวิเคราะห์ตัวอย่างการทำงานของระบบต่างๆ เพื่อให้ระบบมีการทำงานที่ถูกต้อง แม่นยำ เชื่อถือได้ ตามวัตถุประสงค์ที่กำหนด
Performance Validation แบบต่างๆ
Performance Testing คือการตรวจสอบวิเคราะห์ปัญหาที่อาจจะเกิดขึ้นกับ Software, Application รวมไปถึง การออกแบบวางโครงสร้างระบบ (Hardware) ซึ่งการทำ Performance Testing จะช่วยทำให้คุณทราบถึง Root Cause, Bottle Neck ของปัญหาก่อนที่จะเกิดขึ้น ซึ่งจะทำให้ค่าใช้จ่ายในการแก้ปัญหาที่จะเกิดขึ้นลดลงหรือไม่เกิดขึ้นเลย
คือการทดสอบ Component แต่ละตัว โดยไม่มีการต่อเชื่อมกับ Component ตัวอื่นๆ หรือเป็นการทดสอบราย Module หรืออาจถือเป็นการ unit test เพื่อแก้ปัญหาเบื้องต้น
เป็นกระบวนการที่จำลองการใช้งานจริงของ User บน Application หรือเว็บไซต์ที่ถูกพัฒนาจนใกล้เสร็จสมบูรณ์แล้ว เพื่อตรวจสอบ Behavior ในสภาวะ Load ปกติหรือ Load ที่เพิ่มขึ้นในอนาคต
การทำ Load Support คือการทดสอบตามเงื่อนไขที่กำหนด โดยมีจุดที่ต้องตรวจวัดเป็นเกณ ผ่าน หรือไม่ผ่านรวมทั้งปัจจัยเงื่อนไขต่างๆ จะต้องเติมเต็มอย่างครบถ้วนโดยยึดโยงสถานะการปัจจุบันเป็นหลัก (หรือการใช้งานในปีแรก)
การทำ Load Support คือการทดสอบตามเงื่อนไขที่กำหนด โดยกำหนดเกณตรวจวัดและปัจจัยเงื่อนไขเป็นสถานการในอนาคต เพื่อตรวจสอบประสิทธิภาพของระบบและผลกระทบจากการใช้งานหรือข้อมูลที่เพิ่มขึ้น
การทดสอบ Scalability คือการทดสอบเพื่อยืนยันความยืดหยุ่นของประสิทธิภาพระบบโดยแบ่งเป็น 2 แบบหลักๆ
เป็นการทดสอบความยืดหยุ่นของประสิทธิภาพระบบโดยการเพิ่มหรือลด Hardware หรือ Software เพื่อหาผลกระทบ (Performance Impact) ไม่ว่าจะเป็นผลกระทบจากภายในที่อยู่ในขอบเขตความรับผิดชอบของระบบ หรือผลกระทบภายนอกที่ระบบไปเชื่อมต่อ พึ่งพิงอาศัย (Internal/External Impact) ซึ่งเพื่อนอกจากยืนยันผลแล้วเรายังสามารถใช้เตรียมการรับมือเมื่อปัญหานั้นเกิดขึ้น
Stress Test เป็นการทดสอบเพื่อยืนยัน Stability ของระบบ โดยเราจะสามารถยืนยันความยืดหยุ่นของระบบที่สามารถรองรับสถานะการที่ยากลำบากจากปัจจัย capacity ขาดแคลนที่อาจเกิดชึ้น อาทิเช่น Load balance ทำงานไม่ปกติ ไม่สามารถกระจาย load ได้ทำให้ capacity ลดลง ¼ โดยผู้ใช้งานยังเท่าเดิม เป็นต้น
เป็นการ Test เพื่อหาความผิดปกติของระบบโดยการ Push การทำงานของระบบให้มากกว่าปกติ
เป็นการทดสอบหาสัญญาณก่อนที่ระบบจะใช้งานไม่ได้ หรืออาจถึงระบบล่ม
Use Case
Case#1 ปัญหา Performance ที่เกิดจากผลกระทบภายนอก
Application นั้นเป็นส่วนหนึ่งของระบบ IT ที่มีความซับซ้อนซึ่งเชื่อมต่ออยู่กับ ระบบอื่นๆภายในองค์กร รวมไปถึงระบบ 3rd Party ที่เชื่อมกับ Application หรือ ระบบอื่นๆที่อยู่ภายนอก
เมื่อระบบอื่นๆที่อยู่ภายนอกทำงานจนถึงขีดจำกัด หรือ ล่ม Application ของเราซึ่งไม่ได้เตรียมรับผลกระทบที่มาจากภายนอกจึงได้รับผลกระทบไปด้วย เช่น ล่ม, เกิด error ขึ้นในการใช้งาน หรือ Application ทำงานได้ช้ามาก
Case#2 การวาง Capacity ที่ไม่ลงตัว
ปัญหานี้ใน % ที่สูง เกิดขึ้นได้จากการทำ Requirement ที่ผิดพลาด เนื่องจากไม่มีการประเมินขีดความสามารถ (Benchmark) ของ Hardware และ Software ทำให้การเขียน Requirement มีการจัดซื้อจัดจ้าง Hardware หรือ Software License ไม่มาก ก็น้อยเกินไป ซึ่งในกรณีที่มากเกินไปนั้นทำให้สิ้นเปลืองงบประมาณ หรือในกรณีที่น้อยเกินไปก็เสี่ยงที่จะทำให้เกิดปัญหา Capacity ไม่เพียงพอกับความต้องการ
ดังนั้นเราต้องเริ่มป้องกันปัญหาดังที่กล่าวมานั้นด้วยการทำ Benchmark ของ Hardware และ Software ที่จะนำมาใช้ในโครงการตั้งแต่การเริ่มทำ Assessment รวมไปถึงการนิยาม Worst Case Scenario อย่างถูกต้องเพื่อเราจะได้ทราบถึงปัญหาที่อาจเกิดขึ้นจริงเมื่อมีการ Implement ระบบไปแล้ว
Case#3 เมื่อมีการปรับ Performance Tuning ทำให้เกิดค่าใช้จ่ายขึ้นอย่างมหาศาล
บางครั้งการทำ Performance Tuning ใน Phase ของการทำ Performance Testing นั้นจำเป้นต้องแก้ไขใน Core ของ Application ซึ่งนำมาผลกระทบและการปรับปรุงแก้ไขในตัว Application อย่างมากมายเช่นปัญหาของความล่าช้า และอาจกระทบไปทำให้เกิด Change Request อีกด้วย
การแก้ปัญหานี้ ควรทำ performance test ตั้งแต่เนิ่นๆ เช่นตั้งแต่ใน phase development สามารถทำ performance unit test ได้ อ้างอิงหลักการ component testing
ปัญหาอื่นที่อาจเกิดขึ้นและสามารถชี้ชัดได้ด้วยการทำ Performance Test
Response Time ช้าเวลาที่ใช้งานจริง
Performance Degrade เมื่อตัวระบบถูกใช้งานอย่างยาวนาน ไม่มีการทำ Future Growth หรือทำแล้วคำนึงแต่ Usage Concurrent ไม่ครอบคลุมถึงปริมาณ Data ที่เกิดขึ้นหรือการที่มีการเรียกใช้งานจาก User ในต่างประเทศซึ่งมักจะเข้ามาใช้งานในช่วงเวลาที่แตกต่างกัน
เมื่อเพิ่ม Hardware หรือ Software capacity แล้ว Performance ก็ยังไม่ดีขึ้น ซึ่งอาจเกิดจากการทดสอบ scalable ไม่ครอบคลุม อ้างอิงจาก Performance impact หรือ Stress Test และในบางครั้งก็เกิดจากภาษาหรือประสบการณ์ในการเขียน Application ของ Programmer เอง
ไม่ทราบถึง Maximum Capacity ของระบบ ซึ่งจะทำให้ไม่ทราบถึงผลกระทบอื่นๆที่อาจตามมาเช่น ก่อนระบบจะล่ม จะมีอาการอย่างไรซึ่งการทำ Stress Test จะทำให้เราทราบถึงปัญหาก่อนที่มันจะเกิดขึ้น หรือทำ Reliability Testing ก็จะเป็นการทดสอบว่า ระบบจะต้องทำงานต่อเนื่องยาวนานแค่ไหนก่อนระบบจะล่ม รวมไปถึงการ Monitor ว่าเมื่อระบบใช้ capacity resource ไปแล้วนั้นเมื่อผ่านช่วงเวลาที่เหม่าะสม แล้วมีการคืนกลับมาหรือไม่