การทดสอบซอฟต์แวร์ คืออะไร? Quality Assurance หรือ Software Tester มีหน้าที่ ต้องรู้อะไรบ้าง

เข้าใจ Software Testing กันก่อน

     การทดสอบซอฟต์แวร์(Software Testing) เป็นกระบวนการหนึ่งของการพัฒนาซอฟต์แวร์ software development life cycle (sdlc) เพื่อเป็นการค้นหาและป้องกันข้อผิดพลาดในการส่งมอบซอฟต์แวร์ การทดสอบซอฟต์แวร์จากอดีตจนถึงปัจจุบันนั้นมีการแบ่งออกเป็น 5 ยุคด้วยกันจากเก่าไปใหม่สุดดังนี้

ยุคที่ 1 Debugging ในยุคแรกของคอมพิวเตอร์นั้นจะถูกใช้งานแบบเฉพาะด้าน จึงมีโปรแกรมน้อยไม่เหมือนปัจจุบัน การทดสอบซอฟต์แวร์จึงเน้นไปที่ทดสอบฮาร์ดแวร์เป็นหลัก ทดสอบว่าโปรแกรมที่เขียนสามารถ Run บนฮาร์ดแวร์ได้หรือไม่

ยุคที่ 2 Demonstration การทดสอบในยุคนี้จะทดสอบหลังโปรแกรมเสร็จสิ้นแล้ว โดยจะให้ความสำคัญว่า Software นั้นตรงตาม Requirement หรือไม่

ยุคที่ 3 Destruction ยุคนี้จะต่อยอดมาจากยุคที่ 2 นอกจากจะทดสอบว่าโปรแกรมตรงตาม Requirement แล้ว ยังทดสอบเพื่อเน้นหาข้อผิดพลาดของซอฟต์แวร์อีกด้วย

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

ยุคที่ 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 ได้หรือไม่
Quality Assurance(QA) ต่างจาก Tester อย่างไร?

     หลายคนคงเคยได้ยินศัพท์คำว่า 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 จะยิ่งช่วยประหยัดค่าใช้จ่าย เวลา และได้ซอฟต์แวร์ที่มีคุณภาพ
อย่างไรก็ตามในปัจจุบันยังอาศัยทั้ง Manual Test และ Automated Test อยู่ หากองค์กรไหนสามารถหาหรือพัฒนา QA ให้สามารถทำทั้ง 2 ได้ก็จะเป็นประโยชน์อย่างมาก ปัจจุบันหลายองค์กรให้ความสำคัญกับ Automated Test มากกว่าเพราะในระยะยาวสามารถทำให้ต้นทุนลดลงได้ แต่ในบางกรณียังคงต้องใช้การทดสอบแบบ Manual Test อยู่ เช่น ซอฟต์แวร์ที่สร้างขึ้นมาแล้วใช้เพียงครั้งเดียวหรือใช้เพียงชั่วคราว หรือในกรณีที่เกี่ยวกับการ Design, UI หน้าจอต่างๆ ที่ต้องอาศัยคนเข้าไปดูถึงจะประเมินซอฟต์แวร์ได้


ป้ายกำกับ

แสดงเพิ่มเติม

บทความยอดนิยม

Software Development Life Cycle (SDLC) คืออะไร ทำไมจำเป็นต่อการพัฒนาซอฟต์แวร์

ม.ปลายอยากเข้าสายคอม วิทยาการคอม วิศวกรรมคอม เตรียมตัวอย่างไร ต้องมีพื้นฐานอะไรบ้าง

Automation testing หรือ การทดสอบซอฟต์แวร์อัตโนมัติ คืออะไร ทำไมถึงสำคัญต่อการทดสอบซอฟต์แวร์

วิธีเก็บ วิเคราะห์ รวบรวม requirement อย่างไรให้มีประสิทธิภาพ

Performance Test คือ อะไร วัดประสิทธิภาพของระบบ ล่มไม่ล่ม จะรู้ได้อย่างไร

8 สิ่งที่ AI จะมาเปลี่ยนโลกในอนาคต

ถอดรหัสความลับเครื่อง Enigma จุดเริ่มต้นและจุดจบของสงครามโลกครั้งที่ 2