top of page

Software Automated Testing คืออะไร

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




ก่อนอื่นเลย เราต้องรู้ก่อนว่า Testing คืออะไร

การทดสอบ (Testing) เป็นกระบวนการตรวจสอบ และวิเคราะห์คุณภาพของซอฟต์แวร์ เพื่อค้นหาข้อผิดพลาดหรือ bug ในซอฟต์แวร์ หรือใน product ของเรา โดย Testing มีหลายประเภทเลยครับ เช่น Unit Testing, Integration Testing, System Testing, Functional Testing, Regression Testing และ User Acceptance Testing (UAT) เป็นต้น การทดสอบเป็นขั้นตอนสำคัญในการรักษาคุณภาพ และความเสถียรของซอฟต์แวร์ คงไม่มีใครหรอกครับที่อยากปล่อยให้แอพฯ หรือแพลตฟอร์มที่มี bug ออกไปให้ผู้ใช้งานจริงได้พบเจอ ซึ่งแน่นอนว่ามันจะส่งผลกระทบที่ทำให้ภาพลักษณ์ขององค์กรของเราดูแย่ ไม่มีคนใช้งานแอปฯหรือแพลตฟอร์มของเราเลยก็ได้ครับ

วัตถุประสงค์ของการทดสอบ (Testing)

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

2.1 ค้นหาข้อผิดพลาด (Bug) การทดสอบจะช่วยในการค้นหา และจัดการกับข้อผิดพลาด (Bug) ในซอฟต์แวร์ของเรา ทำให้สามารถแก้ไขปัญหาต่าง ๆ ที่พบเจอในระหว่างการพัฒนาได้เลย

2.2 การยืนยันความถูกต้อง (Validation) การทดสอบจะช่วยยืนยันว่า ระบบทำงานตามที่กำหนดไว้ใน requirement และตรงตามความคาดหวังของผู้ใช้

2.3 คุณภาพของซอฟต์แวร์ (Quality Assurance) การทดสอบเป็นส่วนสำคัญในกระบวนการปรับปรุงคุณภาพของซอฟต์แวร์ ทำให้มั่นใจว่าซอฟต์แวร์มีความเสถียร และมีประสิทธิภาพ

2.4 การรักษาความเสถียร (Stability) การทดสอบช่วยในการรักษาความเสถียรของซอฟต์แวร์ ให้มีการล้มเหลวหรือมีข้อผิดพลาดน้อยที่สุด

2.5 การตรวจสอบประสิทธิภาพ (Performance Checking) การทดสอบจะช่วยตรวจสอบประสิทธิภาพของซอฟต์แวร์ ว่าหากในกรณีที่มีผู้ใช้งานเข้ามาใช้งานพร้อมกันจำนวนมากในช่วงเวลาเดียวกัน ซอฟต์แวร์นั้นๆจะสามารถทำงานได้อย่างมีประสิทธิภาพหรือไม่


2.6 การทดสอบความปลอดภัย (Security Testing) การทดสอบจะช่วยตรวจสอบความปลอดภัยของระบบเพื่อป้องกันการเข้าถึงที่ไม่ได้รับอนุญาต หรือการแฮกจากผู้ไม่หวังดี

2.7 การยืนยันความสามารถ (Verification) การทดสอบจะช่วยยืนยันว่า ระบบของเราทำงานได้ตรงตามรายละเอียด ความต้องการ และการออกแบบที่ลูกค้าต้องการ

2.8 การทดสอบการทำงานร่วมกัน (Integration Testing) การทดสอบจะช่วยตรวจสอบว่าส่วนต่าง ๆ ของระบบสามารถทำงานร่วมกันได้อย่างไม่มีข้อผิดพลาด

ทำไมขั้นตอนการทดสอบ (Testing) ถึงสำคัญใน Software Development Life Cycle หรือ DevSecOps

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


ถ้าเราเจาะไปดูเฉพาะในขั้นตอนของการทดสอบใน Software Development Life Cycle ในขั้นตอนของการทดสอบก็มี cycle ของมันเองที่เรียกว่า Software Testing Life Cycle รองรับอยู่แล้ว


ก็จะมีอยู่คร่าวๆ 6 ขั้นตอน

1. Requirement Analysis: การวิเคราะห์ requirement ที่เราได้มา

2. Test Planning: วางแผนว่าเราจะต้องทดสอบอะไรบ้าง ขั้นตอนใดบ้าง และ วันเวลาใด

3. Test Case Development: ขั้นตอนของการเขียน test case ให้รองรับกับสิ่งที่จะต้องทดสอบ

4. Environment Setup: การเตรียม environment ให้พร้อมสำหรับการทดสอบ

5. Test Execution: เป็นขั้นตอนการลงมือทดสอบจริงตาม environment ที่กำหนดไว้

6. Test Cycle Closure: ขั้นตอนสุดท้ายจะต้องสรุปผลการทดสอบ

รูปแบบและวิธีในการทดสอบ

จะมีหลักๆ อยู่ 2 แบบ คือ Manual Testing และ Automated Testing

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

คุณลักษณะของ Manual Testing คือ

1. ความยืดหยุ่น: สามารถทดสอบทุกรายละเอียดได้ตามที่ต้องการ สมมติว่าเราต้องการทดสอบฟังก์ชันแบบละเอียดเลย เราก็สามารถเขียนเพื่อให้มันรองรับให้มันละเอียดได้

2. ความหลากหลาย: สามารถทดสอบทุกรายละเอียดตามกรณีการใช้งานที่แตกต่างกัน เช่น ใช้งานบน mobile หรือ web browser ต่างๆ

Automated Testing คือ กระบวนการที่ใช้เครื่องมือหรือสคริปต์เพื่อทำการทดสอบซอฟต์แวร์โดยอัตโนมัติ โดยไม่ต้องมีคนทำงานโดยตรง การทดสอบอัตโนมัติมักถูกใช้สำหรับการทดสอบที่ต้องทำซ้ำบ่อยๆ, การทดสอบที่ซ้ำซ้อน หรือการทดสอบที่ต้องการความรวดเร็ว

คุณลักษณะของ Automated Testing คือ

1. ความรวดเร็ว : สามารถทำการ Test ได้เร็วกว่า เมื่อเปรียบเทียบกับการทำ Manual Testing ด้วยความที่มันเป็นอัตโนมัติ และมีสคริปต์ที่เขียนเอาไว้แล้ว

2. ความถูกต้อง : สามารถลดความผิดพลาดที่เกิดจากคนได้

3. ความเป็นประจำ : สามารถนำมาใช้งานได้ดี ในกรณีที่ต้องทำการทดสอบซ้ำบ่อยๆในฟังก์ชันนั้นๆ


เรามาดูตัวอย่างที่เป็น Case Study กันนะครับ

ตัวอย่างแรกบริษัท A มีปัญหาในการ test mobile app ในทุกๆ version เพิ่มขึ้น มีความยุ่งเหยิง ซ้ำซ้อน และเสี่ยงที่จะมี bug หลุดออกไปให้ผู้ใช้งานจริงได้เจอมากขึ้นเรื่อยๆ เพราะว่าต้องคอย Regression Test ตัวฟังก์ชันที่เคยทำการ Test ไปแล้ว ว่าหลังจากที่ได้มีการแก้ไข Code หรือเพิ่ม Function หรือฟีเจอร์ใหม่ๆ จะไม่ส่งผลกระทบต่อการทำงานของ Function เดิมที่เคยมีอยู่แล้วที่สามารถทำงานได้อย่างปกติ แต่เมื่อทางบริษัทตัดสินใจเปลี่ยนมาใช้เครื่องมือที่เป็น Automated Testing ที่เป็นสร้างสคริปต์ทดสอบไว้อยู่แล้ว ทำให้ไม่ต้องกลับมาทำการทดสอบแบบ Manual ที่ทำให้เสียเวลาในการกลับมาทดสอบซ้ำๆ และส่งผลให้การทดสอบฟังก์ชันหรือฟีเจอร์ใหม่ๆ ไม่มีประสิทธิภาพเพราะว่าการทดสอบที่กระชั้นชิด ส่งผลทำให้การทดสอบไม่ครอบคลุม bug หรือปัจจัยเสี่ยงต่างๆ ที่อาจจะส่งผลต่อภาพลักษณ์ขององค์กรได้ การเปลี่ยนมาใช้เครื่องมือที่เป็น Automated Testing ก็จะช่วยลดความเสี่ยง ลดเวลา ส่งผลให้แอพหรือแพลตฟอร์มเรามีประสิทธิภาพ ภายใต้การทดสอบที่รวดเร็วได้

โดยสายที่เป็น Automated Testing ก็จะมีหลาย Automation Testing Tools ให้เราเลือกเพื่อที่จะไปปรับใช้ตามกับความต้องการของเรา โดยจะแบ่งตามประเภทตามวัตถุประสงค์ของการทดสอบ จะยกตัวอย่างมาคร่าวๆ 8 ประเภทครับ

1. UI Testing Tools: ใช้ในการทดสอบประสิทธิภาพและความถูกต้องของ User Interface (UI) ของ application หรือ website ที่เราเขียนขึ้นมา ตัวอย่างเครื่องมือ Selenium WebDriver, Appium, Puppeteer

2. API Testing Tools: ใช้ในการทดสอบการรับส่งข้อมูลผ่าน Application Programming Interface (API) ไม่ต้องเรียกใช้ UI ตัวอย่างเครื่องมือ Postman, RestAssured, SoapUI

3. Performance Testing Tools: ใช้ในการทดสอบประสิทธิภาพของระบบในช่วงเวลาที่มีเข้ามาใช้งานจำนวนมาก เช่น มีคนเข้ามากดบัตรคอนเสิร์ต เปิดกดบัตรเวลา 10 โมง เราก็สามารถทดสอบ performance test ได้ ตัวอย่างเครื่องมือ Apache JMeter, LoadRunner, Gatling

4. Database Testing Tools: ใช้ในการทดสอบความถูกต้อง และประสิทธิภาพของการทำงานของ Database ตัวอย่างเครื่องมือ DbUnit, SQLUnit, Data Factory

5. Security Testing Tools: ใช้ในการทดสอบความปลอดภัยของระบบโดยการทดสอบหาช่องโหว่ที่อาจทำให้เกิดการ Hack หรือมีการเข้าถึงส่วนต่างๆที่เราไม่อนุญาต ตัวอย่างเครื่องมือ OWASP ZAP, Burp Suite, Nessus

6. Mobile Testing Tools ใช้ในการทดสอบแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ เช่น สมาร์ทโฟน และแท็บเล็ต ตัวอย่างเครื่องมือ Appium, Espresso, XCUITest

7. Integration Testing Tools ใช้ในการทดสอบการทำงานร่วมกันของส่วนต่าง ๆ ในระบบ ตัวอย่างเครื่องมือ Apache Camel, MuleSoft, IBM Integration Bus

8. Cross-Browser Testing Tools ใช้ในการทดสอบแอปพลิเคชันหรือเว็บไซต์ในหลายๆ browser ว่าทำงานได้ปกติเหมือนกันทุก browser หรือเปล่า ตัวอย่างเครื่องมือ BrowserStack, CrossBrowserTesting, Sauce Labs

สรุป

Automated Testing เป็นส่วนสำคัญที่ช่วยปรับปรุงคุณภาพ และประสิทธิภาพของซอฟต์แวร์ โดยลดเวลาและความผิดพลาดที่อาจเกิดขึ้นในกระบวนการทดสอบด้วยมือ ด้วยความสามารถในการทดสอบทั้ง GUI, API, และระบบแบบอื่น ๆ และ Automated Testing เป็นเทคนิคที่ทำให้การทดสอบซอฟต์แวร์เป็นไปอย่างรวดเร็วและ มีประสิทธิภาพ ด้วยการใช้ Automation Testing Tools

ยกตัวอย่างเช่น Tricentis Tosca, Tricentis NeoLoad และ Tricentis qTest ที่ทีมพัฒนาสามารถทดสอบทั้ง UI, API, Performance และระบบทั้งหมดได้อัตโนมัติที่จะคอยจัดการ test case ต่างๆ สร้างความมั่นใจในคุณภาพของซอฟต์แวร์ และช่วยลดระยะเวลาในการพัฒนาลงครับ

หวังว่าผู้อ่านทุกท่านคงจะได้รู้จักคำว่า Software Testing ที่เป็น Automated Testing เพิ่มมากขึ้นไม่มากก็น้อย แล้วพบกันใหม่ในบทความถัดไปครับผม

bottom of page