Blogs

ความรู้พื้นฐานในด้าน Software Testing

Published Date : 2023-04-27

การทดสอบซอฟต์แวร์ (Software Testing)

Software Testing หรือการทดสอบซอฟต์แวร์นั้นก็คือ กระบวนการการประเมินและปรับปรุงคุณภาพซอฟต์แวร์ของบริษัท เพื่อค้นหาข้อผิดพลาดหรือข้อบกพร่องของซอฟต์แวร์ให้ปรากฎออกมาเพื่อหาแนวทางอุดช่องโหว่ของปัญหาที่เกิดขึ้นหรืออาจเกิดขึ้นให้ได้นั่นเอง

การทดสอบเบื้องต้น Software Testing Process มีดังนี้

  • การทดสอบความถูกต้องของลิงก์ : Shakedown Test
  • การทดสอบฟังก์ชั่นการทำงาน: Unit Testing
  • การทดสอบการเชื่อมต่อกับ Service อื่นๆ : SIT (System Integration Test)
  • การทดสอบเพื่อวัดผลตอบรับจากผู้ใช้งาน : UAT (User Acceptance Test)
  • การทดสอบประสิทธิภาพการทำงานของระบบ : NFT (Non Functional Test)

การทดสอบความถูกต้องของลิงก์ : Shakedown Test

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

การทดสอบฟังก์ชั่นการทำงาน: Unit Testing

การทดสอบการทำงานของซอฟต์แวร์ในแต่ละหน่วยโดยไม่สนใจ Service ตัวอื่น ซึ่งคำว่าหน่วย ก็คือ ฟังก์ชั่น (function) การทำงานที่เล็กที่สุดที่สามารถทดสอบได้ ในที่นี่อาจหมายถึง class ก็ได้ การทดสอบด้วย Unit testing ส่วนใหญ่โปรแกรมเมอร์จะเป็นผู้ทำการทดสอบในส่วนนี้ โดยตรวจสอบว่า Input / Output ตรงกับที่ออกแบบไว้หรือไม่ หากทำ Unit testing ที่ได้มาตรฐานจะช่วยลดข้อผิดพลาดที่เกิดจากการเขียนโค้ดได้ รวมถึงสามารถทำให้แน่ใจว่าการทำงานของแต่ละส่วนสามารถทำงานได้อย่างถูกต้อง

การทดสอบการเชื่อมต่อกับ Service อื่นๆ : SIT (System Integration Test)

การทดสอบเพื่อตรวจสอบว่าระบบต่างๆ สามารถทำงานร่วมกันได้อย่างถูกต้อง ตรงตามวัตถุประสงค์ ทั้ง Network Integration และ Product Integration ซึ่งจะรวมไปถึง Infrastructure ของระบบ โดยการนำ Service ทุกตัวมารันที่ Server จริง และตรวจสอบให้มั่นใจว่า Service ต่างๆ จะต้องทำงานได้ดี สามารถเชื่อมต่อกับ Network, Database, Service อื่นๆ รวมถึง Party ต่าง ๆ ที่ทีมพัฒนาขึ้นมาได้อย่างถูกต้อง

การทดสอบเพื่อวัดผลตอบรับจากผู้ใช้งาน : UAT (User Acceptance Test)

กระบวนการทดสอบระบบ – Software Testing Process นี้ ทีมจะให้เจ้าของโครงการจะทำการทดสอบบนเครื่อง UAT ก่อนการนำไปติดตั้งบนเครื่อง Production สำหรับการใช้งานจริง เพื่อตรวจสอบว่าตรงกับความต้องการของลูกค้า (Requirement) และตรงตาม Business Flow จริงๆ ของธุรกิจในระดับที่ยอมรับได้หรือไม่ ซึ่งได้ร่วมกันกำหนดขึ้นมาระหว่างธุรกิจ กับทีมที่พัฒนาระบบ รวมถึงส่วนงานอื่นๆ ที่เกี่ยวข้อง โดยจะทดสอบในสภาพแวดล้อม (Environment) ที่ใกล้เคียงกับการใช้งานจริง (Production) มากที่สุด สำหรับการทดสอบในขั้นตอนนี้ แตกต่างจากขั้นตอนอื่นๆ คือ ผู้ใช้งานระบบจริงจะต้องเข้ามามีส่วนร่วมในกระบวนการทดสอบซอฟต์แวร์โดยเริ่มตั้งแต่ กำหนดกรณีทดสอบ (Test Case / Scenario) จนถึงการประเมินและสรุปผลการทดสอบ (UAT Result and Evaluation) และตัดสินใจว่าระบบดังกล่าวจะสามารถนำไปใช้งานจริงได้หรือไม่ ถ้าได้ก็จะมีการลงนามอนุมัติจากเจ้าของโครงการเป็นลายลักษณ์อักษร (UAT Sign Off) เพื่ออนุญาตให้นำระบบไปใช้งานจริง แต่ถ้าใช้งานไม่ได้หรือไม่ตรงตามที่ตกลง ระบบจะถูกนำไปปรับปรุงแก้ไข แล้วจะกลับเข้าสู่กระบวนการ UAT ใหม่อีกครั้งจนกว่าจะผ่าน

การทดสอบประสิทธิภาพการทำงานของระบบ : NFT (Non Functional Test)

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

NFT สามารถแบ่งตาม scenario ของแต่ละระบบโดยจะยึดตามเกณฑ์อะไรสำคัญ เช่น

  • Load Testing คือ process สำหรับการวัด response time ในการทำงานของระบบที่อยู่ภาพใต้การใช้งานรูปแบบต่างๆ
  • Stress Testing คือ การทดสอบความอึด ความอดทน ความสามารถรับวิกฤตและความท้าทายในรูปแบบต่างๆ ที่อาจเกิดขึ้น
  • Spike Testing คือ การทดสอบปริมาณการใช้งานแบบเพิ่มขึ้นอย่างรวดเร็ว (Spike Traffic)
  • Soak Testing หรือ Endurance Testing คือ การทดสอบการใช้งานของระบบ ในกรณีที่ใช้งานเป็นเวลานานๆ ว่ามีการตอบสนอง (Response Times) ต่อปริมาณงานที่ประมวลผลได้ (Throughput) เหมือนกับตอนเริ่มต้นหรือไม่
  • Capacity Testing คือ การทดสอบความจุของระบบ ว่าสามารถรองรับผู้ใช้ได้มากสุดกี่คน โดยที่ระบบยังสามารถใช้งานได้อย่างปกติ
  • Recovery Testing คือ การทดสอบการตอบสนองของระบบกรณีเกิดข้อผิดพลาด การสูญหายของข้อมูล เพื่อให้เห็นว่าระบบสามารถกู้คืนได้อย่างถูกต้อง
  • Smoke Testing มักรู้จักกันในชื่อ "Build Verification Testing" ซึ่งเป็นการ Test ครอบคลุมเฉพาะ Function หลักๆ ไม่ได้ลงลึกอะไรมากมาย ผลของการ Test ขั้นนี้ จะใช้เพื่อตัดสินใจว่าจะดำเนินการ Test ในขั้นต่อไปหรือไม่เท่านั้นเอง เรียกง่ายๆ ว่าถ้า Smoke Tests ผ่าน ก็ไปสู่การ Test อื่นๆ ต่อไปได้เลย แต่ถ้าเจอปัญหาก็ต้องหยุด เพื่อหา Bug ให้เจอว่าสาเหตุเกิดจากอะไร เกิดที่จุดไหน และแก้ไขให้เรียบร้อยเสียก่อน
  • Volume Testing คือ การทดสอบปริมาณของข้อมูลที่มากที่สุด ที่ระบบสามารถจัดการได้้
  • Network Sensitivity Testing คือ การทดสอบการทำงานของเครือข่าย (network) เช็คเรื่องขีดจำกัดของการเชื่อมต่อ WAN และปัจจัยต่างๆ ที่ส่งผลกระทบต่อปริมาณการรับ-ส่งข้อมูลของอินเตอร์เน็ต (bandwidth) หรือไม่
  • Scalability Testing คือ การทดสอบเพื่อวัดความสามารถในการประยุกต์ใช้เมื่อนำไปใช้กับระบบที่ใหญ่ขึ้น หรือ ระบบอื่นๆ ที่จะทำไปใช้
ทำไมจะต้องเสียเวลาในการทำ Software Testing เยอะขนาดนี้ แล้วจะคุ้มหรือไม่?

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

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