Software testing มีกี่ประเภท และวิธีการเลือกใช้ให้เหมาะสม
หากคุณมีส่วนร่วมในโครงการพัฒนาซอฟต์แวร์ คุณจะรู้ว่าการทดสอบมีความสำคัญเพียงใด การทดสอบที่เหมาะสมช่วยให้มั่นใจว่าแอปพลิเคชันของคุณทำงานได้อย่างถูกต้อง เสถียร ปลอดภัย และตรงตามความต้องการของลูกค้า มีการทดสอบซอฟต์แวร์หลายประเภทที่คุณต้องพิจารณาเพื่อให้ได้ประสิทธิภาพสูงสุด ในคู่มือนี้เราจะสำรวจประเภทต่าง ๆ เหล่านี้ และอธิบายถึงความสำคัญในการรักษาซอฟต์แวร์ที่มีคุณภาพทั้ง Manual Testing และ Automated Testing
-
Manual Testing vs Automated Testing
Manual Testing เป็นกระบวนการทดสอบซอฟต์แวร์โดยใช้มือและความคิดของผู้ทดสอบเพื่อตรวจสอบความถูกต้องและความสมบูรณ์ของซอฟต์แวร์ โดยไม่ได้ใช้เครื่องมืออัตโนมัติ (Automated Tool) หรือสคริปต์ (Script) โดยผู้ทดสอบจะ Run Test ตาม Test Plan, Test Case หรือ Test Scenarios ด้วยมือของผู้ทดสอบเองนั่นเอง
ข้อดีของ Manual Testing
-
คุ้มค่าในระยะสั้น มีประสิทธิภาพการทำงานสูงคาดการณ์วางแผนได้
-
ประหยัด Cost หรือลงทุนน้อยกว่า Automated Test
-
สามารถหาข้อบกพร่องได้อย่างชัดเจน เนื่องจากใช้แรงงานบุคลากรมาทำการ Test ในแต่ละ Case
ข้อเสียของ Manual Testing
-
ใช้เวลานานในการ Test ค่อนข้างมาก เพราะเป็นการใช้คนมาคอยทำ Test และต้องทำซ้ำ ๆ ไปมาจนกว่าจะไม่เจอข้อผิดพลาด
-
ไม่สามารถเปรียบเทียบหรือทำการ Test ข้อมูลที่มีจำนวนที่เยอะมากหลายพันข้อมูลได้เท่ากับ Automated Testing
Automated Testing เป็นการทดสอบโดยใช้ Tool สำหรับทดสอบทำงานด้วยตัวของมันเอง เช่น การเขียนโค้ดขึ้นมาเพื่อให้คอมพิวเตอร์หรือโปรแกรมนั้น ๆ Run Test ด้วยตนเอง โดยไม่ต้องใช้แรงงานคนในการทำทดสอบซึ่งวิธีนี้จะช่วยลดเวลาในการ Manual Test แต่อาจจะต้องมีการเขียนโค้ดทำสคริปต์เพื่อรันทดสอบ แบบ Auto Test นั่นเอง Automated Testing จึงไม่เหมาะกับโปรเจกต์สั้น ๆ เช่น โปรเจกต์ที่ใช้เวลาเพียงแค่ 3 เดือน เพราะว่าส่วนใหญ่แล้วเวลาที่เราเสียไปกับการเตรียมการจะมากกว่าที่เราจะได้รับกลับมา ยิ่งถ้า Project นั้นทำแค่เพิ่ม Feature เล็ก ๆ น้อย ๆ เข้าไปโดยที่ไม่ได้มีผลกระทบต่อ Feature หลัก เราก็ไม่จำเป็นต้องทำ Automated Testing ก็ได้
ข้อดี Automated Testing
-
ถ้าเราต้อง Run Test ซ้ำ ๆ Automated Testing จะใช้งานได้ดีกว่าไม่ต้องใช้เวลานาน เพราะใช้โปรแกรมที่เขียนโค้ดไว้นั้น Run Test ให้เองอัตโนมัติ
-
ในการ Test แต่ละครั้ง สามารถสร้าง User จำนวนมากขึ้นมาทำการ Test พร้อมกันได้ในเวลาเดียวกัน
-
จะใช้เวลาในการ Test สั้นกว่า Manual Testing เนื่องจากมีระบบ Auto ที่ได้มีการเขียนโค้ดไว้
-
สามารถชี้วัดคุณภาพของซอฟต์แวร์ได้อย่างรวดเร็ว
-
สร้างความน่าเชื่อถือให้กับซอฟต์แวร์
ข้อเสีย Automated Testing
-
ลงทุนสูงในช่วงเริ่มต้น เพราะจำเป็นต้องจ้างบุคคลที่มีความสามารถในการเขียนโค้ด รู้ภาษาคอมที่หลากหลายมาทำการเขียนโค้ดสคริปต์ต่าง ๆ เพื่อ Run test case
-
ต้องใช้ผู้ที่มีทักษะในการเขียนโปรแกรม Test อย่างดี
-
Automate Test ไม่สามารถทำได้ทุกงาน บางครั้งก็ต้องใช้ Manual Test หรือจำเป็นต้องมี Software Tester มาคอยดูแล
-
มี Cost ในการ Maintenance Test Scripts
-
ประเภทของการทดสอบ
-
Unit Testing
เป็นวิธีการทดสอบการทำงานของซอฟต์แวร์ในแต่ละหน่วย ซึ่งคำว่าหน่วยคือส่วนของการทำงานที่เล็กที่สุดที่สามารถทดสอบได้ ดำเนินการโดยใช้วิธีการทดสอบแบบ White Box Testing การทดสอบด้วย Unit Testing จะตรวจสอบกระบวนการดังกล่าวว่าเป็นไปตามที่ออกแบบไว้หรือไม่ ควรทำเป็นลำดับแรกของการทดสอบและจะดำเนินการก่อนที่จะไปขั้นตอน Integration Testing
“White Box Testing” เป็นแนวทางการทดสอบซอฟต์แวร์ที่เน้นการตรวจสอบรหัสซอร์สโค้ดภายในของโปรแกรม เป้าหมายหลักของ White Box Testing คือการตรวจสอบความถูกต้องของโค้ดที่เขียนด้วยการเรียกใช้ทุกส่วนของโค้ด การทดสอบนี้ช่วยตรวจสอบว่าโค้ดทำงานตามที่คาดหวังและไม่มีข้อผิดพลาดในส่วนภายในของโปรแกรม
ข้อดีของการทำ Unit Testing
-
ทำให้เจอ Bug หรือ Defect ตั้งแต่เนิ่น ๆ ทำให้แก้ไขได้ทัน
-
สามารถได้รับผลหรือ Feedback ที่รวดเร็ว
-
เจอ Bug ก่อนที่จะนำส่งให้ QA เพื่อลดการทำ Regression Test
-
เพิ่มความมั่นใจในประสิทธิภาพของการ Coding
-
ทำให้ได้ Software ที่มีคุณภาพ
-
Integration Testing
เป็นแนวทางการทดสอบซอฟต์แวร์ที่ต่อจากการทำ Unit Testing โดยเน้นการทดสอบการทำงานร่วมกันของส่วนต่าง ๆ หรือโมดูลในระบบ การทดสอบนี้เน้นที่การตรวจสอบว่าส่วนต่าง ๆ ทำงานร่วมกันได้อย่างถูกต้องและไม่เกิดข้อผิดพลาดหรือการขัดกันในการทำงานร่วมกัน ประกอบด้วย
-
Incremental เป็นกระบวนการทดสอบซอฟต์แวร์ที่เน้นการทดสอบโมดูลหรือส่วนย่อยของระบบที่ถูกพัฒนาขึ้นมาเพิ่มเติม หรือรวมเข้าด้วยกันในขั้นตอนการพัฒนา เป้าหมายหลักของ Incremental Testing คือการทดสอบและการรวมส่วนย่อยในขั้นตอนส่วนย่อยเพื่อให้มั่นใจว่าส่วนต่าง ๆ ทำงานร่วมกันได้อย่างถูกต้อง เหมาะกับงานที่มีขนาดใหญ่ จึงต้องแบ่งออกเป็น Component / Sub-System หรือแผนงานที่ยืดหยุ่นได้ เพราะใช้เวลาเก็บข้อมูลเพื่อมาปรับตัวระบบที่ละนิดเล็กบ้าง ใหญ่บ้าง สำหรับแนวทาง Incremental มี 3 รูปแบบ ดังนี้
-
-
Top-Down Integration Testing เป็นการทดสอบในระดับชั้นที่สูงที่สุดก่อน ต่อจากนั้นจะรวมโมดูลทั้งหมดในระบบชั้นรองลงมาเพื่อทดสอบการทำงาน และจะรวมโมดูลในระดับรองลงมาเพื่อทดสอบจนกระทั่งถึงระดับชั้นที่ต่ำที่สุด เป็นการทดสอบโมดูลโปรแกรมทั้งหมด
-
Bottom-Up Integration Testing เป็นการทดสอบโมดูลโดยเริ่มจากระดับชั้นต่ำที่สุดโดยแยกทดสอบ จากนั้นจะทำการทดสอบรวมกับโมดูลระดับชั้นที่สูงขึ้นไปที่มีความสัมพันธ์กันมีการส่งผ่านข้อมูลระหว่างกันและทดสอบในระดับชั้นสูงขึ้นไปเรื่อย ๆจนเอ็นโปรแกรมใหญ่หรืออยู่ในระดับบนสุด วิธีนี้จะช่วยให้การพัฒนาเริ่มจากส่วนย่อยที่เรียบง่ายและสร้างความมั่นใจในความถูกต้องและประสิทธิภาพ จากนั้นค่อย ๆ สร้างและทดสอบส่วนย่อยเพิ่มเข้ามาเรื่อย ๆ จนถึงการรวมเข้ากันเป็นระบบเต็ม ๆ ที่มีความถูกต้องและประสิทธิภาพ
-
-
Big Bang Integration Testing เป็นวิธีทดสอบโดยนำทุกโมดูลในระบบทั้งหมดทดสอบแยกออกจากกัน ต่อจากนั้นจึงนำโมดูลทั้งหมดมารวมกันเพื่อทดสอบรวม เหมาะกับงานที่ไม่มีความซับซ้อนหรือมีขนาดเล็ก
-
Sandwich (Mixed) Integration Testing เป็นวิธีการทดสอบที่ผสมผสานทั้งแบบ Top-down และ Bottom-up เป็นการมองระบบเป็น 3 ระดับ เหมือนกับการทำแซนด์วิช โดยการทดสอบวิธี Top-down ใช้สำหรับทดสอบกับโมดูลโปรแกรมในระดับบนสุด และวิธีการทดสอบแบบ Bottom-up ใช้กับการทดสอบโมดูลโปรแกรมในระดับต่ำสุด เหมาะสำหรับโครงการพัฒนาและทดสอบซอฟต์แวร์ที่มีความซับซ้อนและความสำคัญต่อการทำงานร่วมกันของส่วนต่าง ๆ ในระบบ ด้วยข้อดีของเทคนิคนี้ในการระบุ และแก้ไขข้อผิดพลาดระดับต่ำก่อนที่จะเพิ่มความซับซ้อนที่สูงขึ้น
-
User Interface Tests (UI Tests) หรือ E3E (End-to-End) Tests
การทดสอบสองแนวทางที่ใช้ในการตรวจสอบความถูกต้องและประสิทธิภาพของระบบซอฟต์แวร์ โดยเน้นที่ส่วนของการแสดงผลและการทำงานของอินเตอร์เฟซ (UI) แต่มีความแตกต่างกัน ดังนี้
-
User Interface Tests (UI Tests) คือการทดสอบการแสดงผลและการทำงานของอินเตอร์เฟซ (UI) ของแอปพลิเคชันหรือระบบ โดยทดสอบจะเน้นที่ส่วนต่าง ๆ ของ UI ที่ผู้ใช้งานจะเจอและกระทำการต่อเนื่อง เช่น การคลิกปุ่ม การกรอกข้อมูลในฟอร์ม การเปลี่ยนหน้าจอ เป็นต้น การทำ UI Tests มักจะใช้เครื่องมือเขียนสคริปต์หรือโค้ดที่จำลองการกระทำของผู้ใช้และตรวจสอบผลลัพธ์ที่ได้
-
E3E (End-to-End) Tests คือการรวมระหว่างการทดสอบ End-to-End (E2E Tests) และ User Interface Tests (UI Tests) โดยการทดสอบ E3E จะเน้นการทดสอบทั้งกระบวนการในมุมมองของผู้ใช้งานจริง ๆ ที่เริ่มต้นจากการกระทำของผู้ใช้และสิ้นสุดที่ผลลัพธ์ที่เกิดขึ้น การทำ E3E Tests มีความซับซ้อนและใช้เวลานานกว่าการทำ UI Tests เพราะต้องครอบคลุมทุกขั้นตอนของกระบวนการ
ดังนั้น "UI Tests" เน้นการทดสอบเฉพาะส่วนของการแสดงผลและการทำงานใน UI ในขณะที่ "E3E Tests" เน้นการทดสอบกระบวนการทั้งหมดที่ผู้ใช้งานจะทำได้ในระบบ
-
Performance Testing
เป็นการทดสอบที่ตรวจสอบว่าระบบทำงานและดำเนินการอย่างไร การทดสอบประสิทธิภาพของซอฟต์แวร์จะตรวจสอบการตอบสนอง ความเสถียร ความสามารถในการปรับขนาด ความน่าเชื่อถือ ความเร็ว และการใช้ทรัพยากรของซอฟต์แวร์และโครงสร้างพื้นฐาน นิยมใช้ก่อนอัปเดตเวอร์ชันใหม่และควรมีการทดสอบระบบอย่างต่อเนื่อง ในที่นี้จะขอกล่าวถึงการทำ Performance Test มีดังนี้
-
Load Testing เป็น Process สำหรับการวัด Response Time ในการทำงานของระบบที่อยู่ภายใต้การใช้งานรูปแบบต่าง ๆ ทั้งแบบปกติและสูงตามที่คาดหวังไว้ ซึ่งจะทำให้เรารู้ว่าความสามารถสูงสุดในการทำงานของแต่ละส่วนเป็นเท่าไร ส่วนไหนบ้างที่จะเกิดปัญหาคอขวดของระบบ (Bottleneck) ส่วนไหนที่ส่งผลให้ระบบทำงานได้ช้าลง
-
Stress Testing เป็นกระบวนการทดสอบที่มุ่งหวังทดสอบความทนทานและประสิทธิภาพของระบบหรือแอปพลิเคชันในสภาวะที่เกิดความเครียดสูงจนเกินความสามารถปกติของระบบ โดยเจตนาเพื่อตรวจสอบว่าระบบยังคงทำงานได้ถูกต้องและมีการจัดการแม้ในสภาวะที่ไม่คาดคิด เช่น การเกิดการทำงานเชิงพรีเมียมหรือความรับผิดชอบต่ำลง การทดสอบ Stress Testing ช่วยในการพิจารณาขีดความสามารถของระบบในสถานการณ์ที่ไม่ปกติและเพื่อค้นหาจุดอ่อนในระบบที่อาจเกิดปัญหาในขณะที่เกิดภาระการทำงานที่สูงขึ้น นิยมใช้ก่อนกิจกรรมสำคัญ เช่น แบล็คฟรายเดย์ การขายตั๋วคอนเสิร์ตยอดนิยมที่มีความต้องการสูง หรือการเลือกตั้ง
สรุปคือ Performance Testing ควรถูกนำเข้ามาใช้เมื่อคุณต้องการทราบข้อมูลเกี่ยวกับประสิทธิภาพของระบบในสถานการณ์จำลองการใช้งานจริง หรือในเงื่อนไขที่สอดคล้องกับสภาพแวดล้อมการใช้งานจริงของระบบ
สุดท้ายนี้การทดสอบแต่ละประเภทมีความสำคัญในตัวเอง แต่ล้วนเป็นองค์ประกอบสำคัญของการพัฒนาซอฟต์แวร์ สิ่งสำคัญคือต้องเลือกประเภทการทดสอบที่เหมาะสมกับความต้องการของโครงการพัฒนาซอฟต์แวร์ของคุณมากที่สุด การทดสอบซอฟต์แวร์เป็นกระบวนการต่อเนื่อง และซอฟต์แวร์แต่ละรุ่นต้องมีการทดสอบเพื่อให้มั่นใจถึงความน่าเชื่อถือ ความปลอดภัย และฟังก์ชันการทำงาน แม้ว่าการทดสอบซอฟต์แวร์อาจใช้เวลานาน แต่ประโยชน์ของซอฟต์แวร์ที่มีคุณภาพมีมากกว่าต้นทุนของการทดสอบที่ไม่เพียงพอ
แหล่งอ้างอิง
-
User Acceptance Test (UAT) คืออะไร? มีเรื่องอะไรที่ต้องรู้บ้างก่อนปล่อยโปรดักต์
-
Security Testing คืออะไร มาหาวิธีให้ทำซอฟต์แวร์นั้นปลอดภัยมากขึ้น