Basic Software Testing

Peerapol Tapeng
te<h @TDG
Published in
2 min readJun 16, 2020

Qa Tester มือใหม่เข้าใจในบทความเดียว จากเริ่มต้นสู่มือโปร!!!!!!!!!!

1.การทดสอบซอฟต์แวร์

คือขั้นตอนของการพัฒนาซอฟต์แวร์ เป็นกิจกรรมที่จัดทำขึ้นเพื่อประเมินและปรับปรุงคุณภาพของซอฟต์แวร์ โดยการค้นหาข้อผิดพลาดที่มีอยู่ในระบบ และปัญหาที่เกิดขึ้นและทำการแก้ไขปัญหา โดยตรวจสอบ ความถูกต้อง สมบูรณ์ ปลอดภัย และมีประสิทธิภาพและคุณภาพที่ดี “การทดสอบซอฟต์แวร์แบ่งได้เป็น กระบวนการหลักดังนี้คือ กระบวนการตรวจสอบความถูกต้องของซอฟต์แวร์ที่ถูกพัฒนาขึ้นว่าเป็นไปตามข้อกำหนดคุณลักษณะความต้องการใช้งานซอฟต์แวร์ที่ได้กำหนดไว้หรือไม่ (Verification) และ กระบวนการตรวจสอบผลการพัฒนาซอฟต์แวร์ที่เกิดขึ้นจริงว่าตรงกับความคาดหวังของผู้ใช้หรือไม่ (Validation)”[1] “เพื่อยืนยันว่าซอฟต์แวร์ที่พัฒนาขึ้นมาเป็นไปตามข้อกำหนดความต้องการที่ได้ตกลงไว้กับผู้ใช้งานระบบ”[2] โดยทั่วไปผู้ใช้งานจะร่วมกันกำหนดเกณฑ์มาตรฐานที่จะส่งมอบยอมรับซอฟต์แวร์ ผู้ที่จะทำการทดสอบจะประกอบไปด้วย นักทดสอบมืออาชีพ นักวิเคราะห์ ผู้การจัดการโครงและผู้ใช้งานระบบ

2. วงจรการทดสอบซอฟต์แวร์ (Software Testing Life Cycle)

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

2.1 การวิเคราะห์ความต้องการของระบบ (Requirement analysis)

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

2.2 การวางแผนการทดสอบ (Test Planning)

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

2.3 การสร้างกรณีทดสอบ (Test case development)

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

2.4 การกำหนดสภาพแวดล้อมของการทดสอบ (Test environment setup)

สภาพแวดล้อมของการทดสอบเป็นการติดตั้งซอฟต์แวร์และฮาร์ดแวร์ที่ต้องการใช้ร่วมกับโปรแกรมภายใต้การทดสอบ ซึ่งประกอบไปด้วยการติดตั้งระบบปฏิบัติการของทั้งไคลเอนต์และเซิร์ฟเวอร์ นอกจากนั้นยังรวมไปถึงระบบฐานข้อมูล ตลอดจนส่วนประกอบอื่น ๆ ที่จำเป็นสำหรับการรันโปรแกรมทดสอบดังกล่าว ในขั้นตอนนี้อาจมีการดำเนินการไปพร้อม ๆ กับการสร้างกรณีทดสอบแบบคู่ขนาน นักทดสอบจะต้องแน่ใจว่าสถาปัตยกรรมการทดสอบและเงื่อนไขต่าง ๆ เป็นไปตามที่กำหนดไว้ จากนั้นอาจมีความจำเป็นต้องทดสอบความพร้อมต่าง ๆ ที่เรียกว่าการทดสอบแบบสโมค (Smoke Testing) เพื่อทดสอบความพร้อมของสภาพแวดล้อมในการทำงานก่อนเริ่มต้นการทดสอบจริง [4]

2.5 การประมวลผลการทดสอบ (Test execution)

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

2.6 การสิ้นสุดการบวนการทดสอบ (Test cycle closure)

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

3. ระดับการทดสอบซอฟต์แวร์

การทดสอบนอกจากจะมีเป้าหมายในการค้นหาข้อบกพร่องแล้วยังสามารถใช้เป็นเครื่องมือในการเพิ่มคุณภาพของซอฟต์แวร์ได้ และเพื่อให้เป็นไปตามเป้าหมายที่กำหนด การทดสอบจึงถูกนำไปใช้ในทุก ๆ ขั้นตอนของการพัฒนาระบบร่วมกับวงจรการพัฒนาระบบ โดยมีการนำเสนอผ่านไดอาแกรมที่เรียกว่า วีโมเดล (V-Model) สำหรับการทดสอบเพื่อแสดงให้เห็นว่าการทดสอบมีส่วนเกี่ยวข้องกับทุก ๆ ขั้นตอนในวงจรชีวิตของการพัฒนาระบบ ในไดอาแกรมดังกล่าวสามารถแบ่งขั้นตอนการพัฒนาและการทดสอบออกเป็นระดับต่าง ๆ ได้หลายระดับ ซึ่งแต่ละระดับของการทดสอบจะแสดงให้เห็นความเกี่ยวข้องกับขั้นตอนหนึ่ง ๆ ในวงจรชีวิตของการพัฒนาระบบเสมอ นับตั้งแต่ขั้นตอนของการกำหนดความต้องการของระบบ การออกแบบ และขั้นตอนในการพัฒนาระบบ วีโมเดลบางครั้งจะถูกเรียกว่า V&V Model (ย่อมาจากVerification & Validation Model) ที่ใช้สำหรับนำเสนอกิจกรรมในการทดสอบที่มีการทำงานควบคู่ไปกับกิจกรรมในการพัฒนาระบบที่มีความสัมพันธ์กัน [4]

3.1 การทดสอบหน่วยโปรแกรม (Unit testing)

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

3.2 การทดสอบแบบบูรณาการ (Integration testing)

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

3.3 การทดสอบระบบ (System Testing)

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

3.4 การทดสอบการตรวจรับ (Acceptance Testing)

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

4. ประเภทการทดสอบทดสอบซอฟต์แวร์

4.1 การทดสอบความปลอดภัย(security test) เป็นการทดสอบความปลอดภัยของระบบ เพื่อป้องกันการเข้าถึงข้อมูลโดยทุจริต โดยตรวจสอบการเข้าถึงฟังก์ชันของการทำงานและการเข้าถึงข้อมูลของผู้ใช้ตามสิทธิ์ในระดับต่าง ๆ

4.2 การทดสอบความเข้ากันได้ (compatibility test) เป็นการทดสอบความสามารถของการทำงานเข้ากันกับทรัพยากรในระบบเช่น การเข้ากันระหว่าง ฮาร์ดแวร์ ซอฟต์แวร์ เครือข่าย และระบบปฏิบัติการ ว่าสามารถทำงานเข้ากันได้อย่างมีปนะสิทธิภาพ

4.3 การทดสอบประสิทธิภาพ (performance testing) การทดสอบประสิทธิภาพจะวัดคุณลักษณะคุณภาพของระบบเช่นความยืดหยุ่น ความน่าเชื่อถือ และการใช้ทรัพยากรว่าสามารถรองรับการใช้งานด้วยจำนวนผู้ใช้หรือจำนวนข้อมูลที่มีในระบบเป็นจำนานมาก และยังสามารถคงประสิทธิภาพการทำงานของระบบได้ดี

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

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

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

เอกสารอ้างอิง

[1] อรยา ปรีชาพานิช. (2549). การทดสอบซอฟต์แวร์,

[2] ภาคย์ เหลืองจรุงรัตน์. (2558). การพัฒนาระบบสนับสนุนกระบวนการทดสอบซอฟต์แวร์ สำหรับบริษัท โปรซอฟท์ คอมเทค จำกัด

[3] “ISTQB Foundation Level and Agile TesterCertification guide” .

[4] รศ.รังสิต ศิรินังษี. (2556). คู่มือปฏิบัติการทดสอบ ซอฟต์แวร์ด้วย QTP, สาขาเทคโนโลยีสารสนเทศ คณะวิทยาศาสตร์ มหาวิทยาลัยแม่โจ้

[5] “Software Development Life Cycle” .[ออนไลน์].

--

--