การทดสอบซอฟต์แวร์ (Software Testing) – #1 กิจกรรม และขั้นตอนการทดสอบซอฟต์แวร์

สวัสดีค่ะ … ถึงเวลาซ๊ากที ฤกษ์งามยามดี กลิ่นดอกพญาสัตบรรณเลือนหาย แสงแดดสาดส่องแทนที่ ฤดูร้อนถามหา ณ เพลานี้เราได้พบกัน 🌼🌼

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

สำหรับเนื้อหาหลักของบทความนี้ (ตอนที่ 1) ผู้เขียนจะนำเสนอข้อมูลและแชร์ประสบการณ์ให้กับผู้อ่านทราบเกี่ยวกับกิจกรรมและขั้นตอนต่าง ๆ ของการทดสอบซอฟต์แวร์กันก่อนค่ะ ในตอนต่อไปเราจะลงลึกไปแต่ละขั้นตอนพร้อมตัวอย่าง และประสบการณ์ที่ผู้เขียนอยากจะแชร์ให้ผู้อ่านได้ทราบกันนะคะ (เผื่อว่าเราจะได้มาระดมสมอง ช่วยแสดงความคิดเห็นกันเข้ามา และ/หรือผู้อ่านจะมีข้อเสนอแนะให้กับผู้เขียน ถือว่าเป็นการแลกเปลี่ยนกันค่ะ)
การทดสอบซอฟต์แวร์ที่ผู้เขียนจะมาแชร์นั้น จะเป็นการทดสอบแบบ Functional Testing โดยใช้เทคนิค Blackbox Testing และทดสอบแบบ Manual นะคะ

แต่ก่อนที่เราจะเข้าสู่เนื้อหาหลักของบทความนี้กันนั้น ผู้เขียน (ขอ) อธิบายนิยาม/ความหมายของ Software Testing รวมถึง Manual Testing, Functional Testing และ Blackbox Testing กันก่อนนะคะ เพื่อทั้งผู้อ่านและผู้เขียนจะได้ทบทวนกันซักหน่อย และทำความเข้าใจไปพร้อม ๆ กันค่ะ (อิอิอิ) 😊

Software Testing หรือการทดสอบซอฟต์แวร์ คืออะไรกันน่ะ ?

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

Manual Testing คืออะไร ?

Manual Testing ก็คือ การทดสอบที่ดำเนินการโดยไม่ได้ใช้เครื่องมืออัตโนมัติ (Automated Tool) หรือสคริปต์ (Script) โดยผู้ทดสอบจะ Run Test ตาม Test Plan, Test Case หรือ Test Scenarios ด้วยมือของผู้ทดสอบเองนั่นแหละค่ะ
[Manual คำศัพท์ทางวิศวกรรม ความหมาย คือ คู่มือ, (งาน) ทำด้วยมือ]

อ่านถึงตรงนี้ผู้อ่านบางท่านอาจตั้งคำถามในใจ และ/หรืออุทาน ออกมาว่า “เดี๋ยวนี้เค้าทำ Automated Testing กันแล้วน่ะ ทำไมยัง Manual กันนี่ ! ” ก็เพราะว่า …………..

อืม ….. ยังไงผู้เขียนก็คิดว่า การที่เราจะตัดสินใจลงมือทดสอบแบบ Automated เลยแบบสุ่มสี่สุ่มห้า (รวมถึงเรื่องอื่นในชีวิต Drama ซะงั้น ฮาาา) โดยไม่ได้ดูถึงความเหมาะสมความคุ้มค่า ไอ้ที่เค้าว่าดีนั้น ก็อาจจะไม่ดีเพราะไม่ได้เหมาะสมกับการทดสอบโปรแกรมที่เราจะทดสอบก็ได้ และผู้เขียนเชื่อว่า เราจะ Automated ได้ดีนั้น ยังไงก็ต้อง Manual ได้ดีระดับหนึ่งก่อน มีความเข้าใจ และมีประสบการณ์มาก่อน เหมือนเป็นพื้นฐานที่สำคัญค่ะ อีกอย่างสุดท้ายเมื่อเรามีประสบการณ์การทดสอบซอฟต์แวร์ไประยะหนึ่งแล้ว เราก็จะพบว่าการทดสอบโปรแกรมหนึ่ง ๆ นั้น ยังไงก็ต้องทดสอบแบบ Manual ร่วมกับ Automated อยู่ดี จะ Automated 100% เลยก็อาจจะไม่ครอบคลุมทั้งหมดได้
และเอาเป็นว่า ………. ผู้เขียนจะมาเล่าเรื่องนี้ให้ละเอียดกัน (ตามที่ผู้เขียนได้ประสบพบเจอ ศึกษาหาข้อมูลมา) ซักบทความหนึ่งในโอกาสหน้านะคะ ตอนนี้ก็เริ่ม ๆ มาจับ ๆ ถู ๆ เอ้ยยยยย ศึกษา Automated Test บ้างแล้วค่ะ ส่วน Tool ตัวไหนนั้น ขออุบส์ไว้ก่อนนะคะ กลัวจะไม่เวิคคค แฮร่ ไปซะไกลแล้วววจร้าาา เรามาว่ากันด้วยเนื้อหาของตอนที่ 1 ต่อกันดีกว่า ๆ นะคะ

Functional Testing คืออะไร ?

Functional Testing คือ การทดสอบการทำงานของซอฟต์แวร์ว่าสามารถทำงานได้ครบถ้วนและถูกต้องตรงตามข้อกำหนดซอฟต์แวร์ที่ระบุไว้หรือไม่ โดยเราจะมุ่งเน้นตรวจสอบความถูกต้องของ Output ที่ออกมาค่ะ

แล้ว Blackbox Testing ล่ะ คืออะไร ?

Blackbox Testing หรือการทดสอบแบบกล่องดำ ก็คือ การทดสอบที่ไม่คำนึงถึงคำสั่งภายในซอฟต์แวร์ (เปรียบเหมือนกล่องดำที่มองไม่เห็นอะไรข้างใน) เป็นการทดสอบการทำงานของซอฟต์แวร์ตามความต้องการ (Requirements) ที่มี โดยดูค่าผลลัพธ์ที่แสดงออกมา (Output) จากข้อมูลนำเข้า (Input) ที่ให้กับซอฟต์แวร์ว่ามีความสอดคล้องกันหรือไม่ค่ะ ซึ่งถ้าโปรแกรมทำงานถูกต้องก็คือ Ouput ต้องสอดคล้องกันกับ Input นั่นเอง

ทบทวนนิยาม/ความหมาย กันแล้ว ผู้เขียนขออธิบายในส่วนกิจกรรม ขั้นตอนการทดสอบซอฟต์แวร์ต่อเลยนะคะ

ก่อนเริ่มการทดสอบซอฟต์แวร์ของทีมพัฒนาของผู้เขียนนั้น

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

เมื่อทดสอบเรียบร้อยแล้ว ผู้ทดสอบก็จะส่งมอบเอกสารซึ่งได้จากการทดสอบ (Test Report และ Defect Log) ให้กับนักพัฒนาโปรแกรมพร้อมกับการทบทวนผลการทดสอบร่วมกับทีมพัฒนาเพื่อรับทราบรายการข้อผิดพลาดและข้อเสนอแนะของโปรแกรมที่ได้จากการทดสอบ และนักพัฒนาโปรแกรมดำเนินการแก้ไขปรับปรุงโปรแกรมตามรายการเหล่านั้นต่อไปค่ะ

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

ภาพแสดงกิจกรรมการทดสอบซอฟต์แวร์

จากภาพรวมกิจกรรมต่าง ๆ ในการทดสอบซอฟต์แวร์ที่ผู้เขียนได้อธิบายไปข้างต้น ผู้เขียนจึงขอสรุปเป็นขั้นตอนการทดสอบซอฟต์แวร์ทั้งหมด 8 ขั้นตอนเพื่อให้เข้าใจง่าย ๆ (เราจะลงลึกแต่ละขั้นตอนในบทความตอนต่อไปนะคะ) ดังนี้ค่ะ

1. ผู้ทดสอบรับการถ่ายทอดการทำงานของซอฟต์แวร์ที่จะทดสอบจากนักพัฒนาโปรแกรม (Preparation Testing)

2. ผู้ทดสอบเตรียมเหตุการณ์ทดสอบ ออกแบบกรณีทดสอบ และยืนยันความถูกต้อง (Test Development and Verify)

3. ผู้ทดสอบทดสอบซอฟต์แวร์และเปรียบเทียบผลการทดสอบ (Test Execution)

4. ผู้ทดสอบรายงานผลการทดสอบ (Test Reporting)

5. ผู้ทดสอบทบทวนผลการทดสอบร่วมกับทีมพัฒนาซอฟต์แวร์ (Test Result Analysis)

6. นักพัฒนาโปรแกรมแก้ไขปรับปรุงข้อผิดพลาดและข้อเสนอแนะของซอฟต์แวร์ และแจ้งให้ผู้ทดสอบรับทราบผลการแก้ไข (Defect Fixing)

7. ผู้ทดสอบรับทราบผลการแก้ไขซอฟต์แวร์ ทดสอบผลการแก้ไขและปิดการทดสอบ (Defect Retesting and Closure)

8. นักพัฒนาโปรแกรมติดตั้งใช้งานซอฟต์แวร์

ภาพแสดงขั้นตอนการทดสอบซอฟต์แวร์

สำหรับตอนที่ 1 ผู้เขียนขอจบไว้เท่านี้ก่อนนะคะ โดยในตอนถัดไป เราจะมาลงลึกกันแต่ละขั้นตอนพร้อมตัวอย่างแต่ละขั้นตอนเพื่อจะได้เข้าใจกันมากขึ้นค่ะ

ปล. เนื้อหาในบทความนี้ได้ปรับปรุงเนื้อหาจากคู่มือเรื่อง “การทดสอบซอฟต์แวร์ด้วยกลยุทธ์การทดสอบแบบกล่องดำ (Black Box Testing) สำหรับเจ้าหน้าที่บริการลูกค้าระบบสารสนเทศบุคลากร” เพื่อให้ผู้อ่านอ่านได้ง่ายขึ้น คู่มือดังกล่าวนั้น ผู้เขียนได้จัดทำขึ้นมาโดยรวบรวมข้อมูลจากประสบการณ์การทดสอบซอฟต์แวร์ของผู้เขียนเอง ร่วมกับการศึกษาข้อมูลเพิ่มเติมจากแหล่งความรู้และ/หรือผู้มีความรู้ท่านอื่น ๆ สำหรับอ้างอิงแหล่งข้อมูลต่าง ๆ นั้น ผู้อ่านสามารถดูได้จากคู่มือดังกล่าวนะคะ