เข้าใจ Software Testing กันก่อน
การทดสอบซอฟต์แวร์(Software Testing) เป็นกระบวนการหนึ่งของการพัฒนาซอฟต์แวร์ software development life cycle (sdlc) เพื่อเป็นการค้นหาและป้องกันข้อผิดพลาดในการส่งมอบซอฟต์แวร์ การทดสอบซอฟต์แวร์จากอดีตจนถึงปัจจุบันนั้นมีการแบ่งออกเป็น 5 ยุคด้วยกันจากเก่าไปใหม่สุดดังนี้
ยุคที่ 1 Debugging ในยุคแรกของคอมพิวเตอร์นั้นจะถูกใช้งานแบบเฉพาะด้าน จึงมีโปรแกรมน้อยไม่เหมือนปัจจุบัน การทดสอบซอฟต์แวร์จึงเน้นไปที่ทดสอบฮาร์ดแวร์เป็นหลัก ทดสอบว่าโปรแกรมที่เขียนสามารถ Run บนฮาร์ดแวร์ได้หรือไม่ยุคที่ 5 Prevention (ปัจจุบัน) การทดสอบในปัจจุบันเพื่อค้นหาและป้องกันข้อผิดพลาดที่จะเกิดขึ้นกับซอฟต์แวร์ มีการวางแผนสำหรับการทดสอบซอฟต์แวร์ตั้งแต่ในช่วง Planning, Analysis, Design, Implementation และ Maintenance หรือการทดสอบซอฟต์แวร์มีผลในทุกๆช่วงของกระบวนการพัฒนาซอฟต์แวร์
ดังนั้นการทดสอบซอฟต์แวร์เป็นขั้นตอนที่ต้องมีทุกๆครั้งก่อนจะส่งมอบให้กับลูกค้า เพื่อจะได้ซอฟต์แวร์ที่ตรงตามความคาดหวังของลูกค้า เพราะการที่ซอฟต์แวร์ทำงานไม่เป็นไปตามความคาดหวังจะนำไปสู่ปัญหาหลายๆอย่างด้วยกันเช่น เงิน เวลา ชื่อเสียงทางธุรกิจ หรืออาจนำไปสู่ความสูญเสียเสียชีวิตได้เลย การทดสอบซอฟต์แวร์จึงเป็นการประเมินความเสี่ยงของซอฟต์แวร์ ควบคุมคุณภาพของซอฟต์แวร์เพื่อลดข้อผิดพลาดที่จะได้ขึ้นได้
จุดประสงค์การทดสอบซอฟต์แวร์
- เพื่อป้องกันข้อผิดพลาดต่างๆที่จะเกิดขึ้นกับซอฟต์แวร์และเป็นการประเมินว่าซอฟต์แวร์เป็นไปตาม Requirements, User stories และ Design หรือเปล่า
- เพื่อตรวจสอบว่าซอฟต์แวร์นั้นเป็นไปตาม Requirements ที่ระบุไว้ทั้งหมดหรือไม่
- เพื่อตรวจสอบว่าซอฟต์แวร์สามารถใช้งานตามความต้องการของผู้ใช้งานได้เป็นอย่างดีหรือไม่
- เพื่อค้นหาข้อผิดพลาดของซอฟต์แวร์เพื่อลดความเสี่ยงเพื่อให้ได้ซอฟต์แวร์ที่มีคุณภาพ
- เป็นการให้ข้อมูลกับ Project Manager หรือผู้ใช้งานว่าซอฟต์แวร์นั้นมีคุณภาพระดับไหน มีความเสี่ยงอะไรบ้าง เพื่อจะใช้เป็นข้อมูลตัดสินใจว่าจะ Deploy Code ชุดนี้ขึ้น Production หรือไม่
กิจกรรมการทดสอบซอฟต์แวร์
- Test Planning เป็นการวางแผนกิจกรรมต่างๆที่จะทดสอบ กำหนดวัตถุประสงค์ เทคนิค และระยะเวลาที่จะใช้ทดสอบ โดยสามารถจัดการประชุมเพื่อวางแผนการทดสอบ
- Test Monitoring and Control ระหว่างการทดสอบนั้นต้องมีการติดตามว่ากิจกรรมการทดสอบที่ได้วางแผนนั้นเป็นไปตามแผนหรือไม่ หรือหากไม่เป็นไปตามแผนต้องหาวิธีจัดการเช่น เวลาทดสอบมีแนวโน้มที่จะไม่สามารถส่งมอบได้ทันตามเวลา ก็สามารถหา Outsource เพื่อให้งานเสร็จเร็วขึ้นได้
- Test Analysis เราจะสามารถวิเคราะห์เพื่อออกแบบ Test Case ได้ตั้งแต่เอกสาร Requirement, User Stories เอกสาร Functional และ non-Functionl หรือสามารถใช้เอกสารการ Design ที่มีการอธิบายรายละเอียดต่างๆของซอฟต์แวร์ เช่น Diagrams, Design Specifications, Code, Database ก็สามารถนำมาวิเคราะห์เพื่อออกแบบ Test Case ได้
- Test Design ในส่วนนี้เราจะเริ่ม Desing Test Case โดยเฉพาะ High-Level Test Case การ Design นั้นเราควรจะรู้ว่า เราจะทดสอบอะไร และจะทดสอบได้อย่างไร ในขั้นตอนนี้เราจะมีการจัดลำดับด้วยว่า Test Case ไหนมีความสำคัญ Test Data แบบไหนที่จะนำมาใช้ทดสอบ รวมถึงจะทดสอบบน Environment อะไร
- Test Implementation ในขั้นตอนนี้จะเริ่มสร้าง Test Cases ที่จะใช้ทดสอบซอฟต์แวร์ Automated Scripts จะเริ่มในขั้นตอนนี้ด้วย นอกจากนั้นยังต้องเตรียม Test Data ที่จะใช้ทดสอบด้วย
- Test Execution ขั้นตอนนี้จะเป็นการ Run Test หลังจากเตรียมทุกๆอย่างจากขั้นตอนก่อนหน้านี้ โดยระหว่าง Run Test ก็จะมีการบันทึกรายละเอียดต่างๆระหว่างทดสอบ ขั้นตอนการทดสอบอาจจะมี Testing Management Tools ต่างๆมาช่วย Run Test ตรวจสอบว่า ผลลัพทธ์ที่ได้จากการทดสอบซอฟต์แวร์นั้น เป็นไปตามผลที่คาดหวังไว้หรือไม่ หากพบว่าซอฟต์แวร์มี Defect หรือ Failures ก็รายงานต่อผู้เกี่ยวข้อง
- Test Completion เมื่อเสร็จสิ้นการทดสอบแล้ว ขั้นตอนนี้จะเป็นการเก็บและรวบรวมผลทดสอบทั้งหมด สรุปผลทดสอบเพื่อส่งให้ผู้ที่เกี่ยวข้องกับ Project ต่อไป ในผลการทดสอบอาจมีข้อมูลต่างๆ สิ่งสำคัญที่ต้องตอบกับผู้เกี่ยวข้องได้คือ การทดสอบรอบนี้ผ่านหรือไม่ คุณภาพซอฟต์แวร์สามารถจะ Release ได้หรือไม่
หลายคนคงเคยได้ยินศัพท์คำว่า QA หรือบางทีก็ใช้ Tester แล้วมันแตกต่างกันหรือไม่? ที่จริงแล้วสองคนนี้มีหน้าที่แตกต่างกัน Tester นั้นจะเน้นค้นหา Bug/Defect ต่างๆของระบบให้ได้มากที่สุด แต่หากเป็น QA นั้นนอกจากยังต้องค้นหา Bug/Defect แล้วยังต้องหาวิธีการป้องกันเพื่อไม่ให้ Defect เกิดขึ้น นอกจากนั้นยังทำหน้าที่ควบคุมคุณภาพของซอฟต์แวร์ทั้งในส่วนของซอฟต์แวร์และกระบวนการทำงานอีกด้วย QA จะมีผลกับทุกๆกระบวนการของ Software development life cycle (SDLC) เพื่อทำให้ซอฟต์แวร์ที่ส่งมอบให้อยู่คุณภาพสูง QA จะใช้ทักษะความสามารถ การวิเคราะห์ปัญหา การแก้ปัญหามากกว่า Tester อย่างไรก็ตามทั้งสอง Role ก็มีวัตถุประสงค์ที่จะทำให้ซอฟต์แวร์มีคุณภาพ ขึ้นอยู่กับองค์กรว่าต้องการ Role จะเหมาะสมกับ Project ที่ทำ
Manual Test/Automated Test คืออะไร?
- Manual Test คืออาศัยนักทดสอบซอฟต์แวร์ที่เป็นคนมาทำสอบโดยจำลองว่าหาเป็น User แล้วจะสามารถป้อนข้อมูลเข้าระบบอย่างไรได้บ้าง ทดสอบว่าผลลัพธ์เป็นไปตาม Test Case ที่ได้ Design ไว้หรือไม่ สรุปผลการทดสอบแต่ละข้อว่าผ่านหรือไม่ผ่าน เพื่อหา Bug หรือข้อผิดพลาดต่างๆของซอฟต์แวร์ แต่ Manual Test ก็มีข้อเสียเนื่องจากต้องใช้คนมาทดสอบ ซึ่งหากต้องการผลทดสอบที่รวดเร็วก็ทำได้ยากเพราะต้องใช้คนเป็นจำนวนมากและมีค่าใช้จ่ายเพิ่มมากขึ้นอีก ปัจจุบันจึงมีการนำเสนอการทดสอบแบบ Automated Test ขึ้นมา
- Automated Test เป็นการนำเครื่องมือโดยสร้าง Test Scripts ขึ้นมาแทนคน(Manual Test) เพื่อทดสอบซอฟต์แวร์ เราสามารถ Run Scripts ขึ้นมาเพื่อทดสอบซอฟต์แวร์ได้โดยอัตโนมัติ ทำให้การทดสอบด้วย Scripts นั้นใช้เวลาน้อยกว่า Manual Test มาก แต่การจะได้ Scripts นั้นต้องอาศัยคนที่มีความรู้ความสามารถสร้าง Test Scripts ทำให้ การทดสอบด้วย Automated Test ในช่วงแรกอาจะมีค่าใช้จ่ายสูง เพราะต้องใช้คนที่มีความสามารถและต้องใช้เวลาในการพัฒนา Scripts ช่วงแรก แต่หากผ่านไปซักพักแล้ว โดยเฉพาะมีการทดสอบแบบเดิมซ้ำๆกัน Automated Test จะยิ่งช่วยประหยัดค่าใช้จ่าย เวลา และได้ซอฟต์แวร์ที่มีคุณภาพ