07Sep, 2023
Language blog :
Thai
Share blog : 
07 September, 2023
Thai

Software testing มีกี่ประเภท และวิธีการเลือกใช้ให้เหมาะสม

By

5 mins read
Software testing มีกี่ประเภท และวิธีการเลือกใช้ให้เหมาะสม

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

 

  1. Manual Testing vs Automated Testing

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

 

ข้อดีของ Manual Testing

  1. คุ้มค่าในระยะสั้น มีประสิทธิภาพการทำงานสูงคาดการณ์วางแผนได้

  2. ประหยัด Cost หรือลงทุนน้อยกว่า Automated Test

  3. สามารถหาข้อบกพร่องได้อย่างชัดเจน เนื่องจากใช้แรงงานบุคลากรมาทำการ Test ในแต่ละ Case 

 

ข้อเสียของ Manual Testing

  1. ใช้เวลานานในการ Test ค่อนข้างมาก เพราะเป็นการใช้คนมาคอยทำ Test และต้องทำซ้ำ ๆ ไปมาจนกว่าจะไม่เจอข้อผิดพลาด

  2.  ไม่สามารถเปรียบเทียบหรือทำการ Test ข้อมูลที่มีจำนวนที่เยอะมากหลายพันข้อมูลได้เท่ากับ Automated Testing 

 

Automated Testing เป็นการทดสอบโดยใช้ Tool สำหรับทดสอบทำงานด้วยตัวของมันเอง เช่น การเขียนโค้ดขึ้นมาเพื่อให้คอมพิวเตอร์หรือโปรแกรมนั้น ๆ Run Test ด้วยตนเอง โดยไม่ต้องใช้แรงงานคนในการทำทดสอบซึ่งวิธีนี้จะช่วยลดเวลาในการ Manual Test แต่อาจจะต้องมีการเขียนโค้ดทำสคริปต์เพื่อรันทดสอบ แบบ Auto Test นั่นเอง Automated Testing จึงไม่เหมาะกับโปรเจกต์สั้น ๆ เช่น โปรเจกต์ที่ใช้เวลาเพียงแค่ 3 เดือน เพราะว่าส่วนใหญ่แล้วเวลาที่เราเสียไปกับการเตรียมการจะมากกว่าที่เราจะได้รับกลับมา ยิ่งถ้า Project นั้นทำแค่เพิ่ม Feature เล็ก ๆ น้อย ๆ เข้าไปโดยที่ไม่ได้มีผลกระทบต่อ Feature หลัก เราก็ไม่จำเป็นต้องทำ Automated Testing ก็ได้

 

ข้อดี Automated Testing

  1. ถ้าเราต้อง Run Test ซ้ำ ๆ Automated Testing จะใช้งานได้ดีกว่าไม่ต้องใช้เวลานาน เพราะใช้โปรแกรมที่เขียนโค้ดไว้นั้น Run Test ให้เองอัตโนมัติ

  2. ในการ Test แต่ละครั้ง สามารถสร้าง User จำนวนมากขึ้นมาทำการ Test พร้อมกันได้ในเวลาเดียวกัน

  3. จะใช้เวลาในการ Test สั้นกว่า Manual Testing เนื่องจากมีระบบ Auto ที่ได้มีการเขียนโค้ดไว้

  4. สามารถชี้วัดคุณภาพของซอฟต์แวร์ได้อย่างรวดเร็ว

  5. สร้างความน่าเชื่อถือให้กับซอฟต์แวร์



ข้อเสีย Automated Testing

  1. ลงทุนสูงในช่วงเริ่มต้น เพราะจำเป็นต้องจ้างบุคคลที่มีความสามารถในการเขียนโค้ด รู้ภาษาคอมที่หลากหลายมาทำการเขียนโค้ดสคริปต์ต่าง ๆ เพื่อ Run test case 

  2. ต้องใช้ผู้ที่มีทักษะในการเขียนโปรแกรม Test อย่างดี

  3. Automate Test ไม่สามารถทำได้ทุกงาน บางครั้งก็ต้องใช้ Manual Test หรือจำเป็นต้องมี Software Tester มาคอยดูแล

  4. มี Cost ในการ Maintenance Test Scripts



  1. ประเภทของการทดสอบ

  1. Unit Testing 

 

เป็นวิธีการทดสอบการทำงานของซอฟต์แวร์ในแต่ละหน่วย ซึ่งคำว่าหน่วยคือส่วนของการทำงานที่เล็กที่สุดที่สามารถทดสอบได้ ดำเนินการโดยใช้วิธีการทดสอบแบบ White Box Testing การทดสอบด้วย Unit Testing จะตรวจสอบกระบวนการดังกล่าวว่าเป็นไปตามที่ออกแบบไว้หรือไม่ ควรทำเป็นลำดับแรกของการทดสอบและจะดำเนินการก่อนที่จะไปขั้นตอน Integration Testing

 

 

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

ข้อดีของการทำ Unit Testing 

  1. ทำให้เจอ Bug หรือ Defect ตั้งแต่เนิ่น ๆ ทำให้แก้ไขได้ทัน

  2. สามารถได้รับผลหรือ Feedback ที่รวดเร็ว

  3. เจอ Bug ก่อนที่จะนำส่งให้ QA เพื่อลดการทำ Regression Test

  4. เพิ่มความมั่นใจในประสิทธิภาพของการ Coding

  5. ทำให้ได้ Software ที่มีคุณภาพ



  1. Integration Testing 

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

 

  1. Incremental เป็นกระบวนการทดสอบซอฟต์แวร์ที่เน้นการทดสอบโมดูลหรือส่วนย่อยของระบบที่ถูกพัฒนาขึ้นมาเพิ่มเติม หรือรวมเข้าด้วยกันในขั้นตอนการพัฒนา เป้าหมายหลักของ Incremental Testing คือการทดสอบและการรวมส่วนย่อยในขั้นตอนส่วนย่อยเพื่อให้มั่นใจว่าส่วนต่าง ๆ ทำงานร่วมกันได้อย่างถูกต้อง เหมาะกับงานที่มีขนาดใหญ่ จึงต้องแบ่งออกเป็น Component / Sub-System หรือแผนงานที่ยืดหยุ่นได้ เพราะใช้เวลาเก็บข้อมูลเพื่อมาปรับตัวระบบที่ละนิดเล็กบ้าง ใหญ่บ้าง สำหรับแนวทาง Incremental มี 3 รูปแบบ ดังนี้

 

 

    1. Top-Down Integration Testing เป็นการทดสอบในระดับชั้นที่สูงที่สุดก่อน ต่อจากนั้นจะรวมโมดูลทั้งหมดในระบบชั้นรองลงมาเพื่อทดสอบการทำงาน และจะรวมโมดูลในระดับรองลงมาเพื่อทดสอบจนกระทั่งถึงระดับชั้นที่ต่ำที่สุด เป็นการทดสอบโมดูลโปรแกรมทั้งหมด

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

 

 

  1. Big Bang Integration Testing  เป็นวิธีทดสอบโดยนำทุกโมดูลในระบบทั้งหมดทดสอบแยกออกจากกัน ต่อจากนั้นจึงนำโมดูลทั้งหมดมารวมกันเพื่อทดสอบรวม เหมาะกับงานที่ไม่มีความซับซ้อนหรือมีขนาดเล็ก

  2. Sandwich (Mixed) Integration Testing เป็นวิธีการทดสอบที่ผสมผสานทั้งแบบ Top-down และ Bottom-up เป็นการมองระบบเป็น 3 ระดับ เหมือนกับการทำแซนด์วิช โดยการทดสอบวิธี Top-down ใช้สำหรับทดสอบกับโมดูลโปรแกรมในระดับบนสุด และวิธีการทดสอบแบบ Bottom-up ใช้กับการทดสอบโมดูลโปรแกรมในระดับต่ำสุด เหมาะสำหรับโครงการพัฒนาและทดสอบซอฟต์แวร์ที่มีความซับซ้อนและความสำคัญต่อการทำงานร่วมกันของส่วนต่าง ๆ ในระบบ ด้วยข้อดีของเทคนิคนี้ในการระบุ และแก้ไขข้อผิดพลาดระดับต่ำก่อนที่จะเพิ่มความซับซ้อนที่สูงขึ้น



  1. User Interface Tests (UI Tests) หรือ E3E (End-to-End) Tests

การทดสอบสองแนวทางที่ใช้ในการตรวจสอบความถูกต้องและประสิทธิภาพของระบบซอฟต์แวร์ โดยเน้นที่ส่วนของการแสดงผลและการทำงานของอินเตอร์เฟซ (UI) แต่มีความแตกต่างกัน ดังนี้

 

  1. User Interface Tests (UI Tests) คือการทดสอบการแสดงผลและการทำงานของอินเตอร์เฟซ (UI) ของแอปพลิเคชันหรือระบบ โดยทดสอบจะเน้นที่ส่วนต่าง ๆ ของ UI ที่ผู้ใช้งานจะเจอและกระทำการต่อเนื่อง เช่น การคลิกปุ่ม การกรอกข้อมูลในฟอร์ม การเปลี่ยนหน้าจอ เป็นต้น การทำ UI Tests มักจะใช้เครื่องมือเขียนสคริปต์หรือโค้ดที่จำลองการกระทำของผู้ใช้และตรวจสอบผลลัพธ์ที่ได้

  2. 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" เน้นการทดสอบกระบวนการทั้งหมดที่ผู้ใช้งานจะทำได้ในระบบ 

 

  1. Performance Testing

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

 

  1. Load Testing เป็น Process สำหรับการวัด Response Time ในการทำงานของระบบที่อยู่ภายใต้การใช้งานรูปแบบต่าง ๆ ทั้งแบบปกติและสูงตามที่คาดหวังไว้ ซึ่งจะทำให้เรารู้ว่าความสามารถสูงสุดในการทำงานของแต่ละส่วนเป็นเท่าไร ส่วนไหนบ้างที่จะเกิดปัญหาคอขวดของระบบ (Bottleneck) ส่วนไหนที่ส่งผลให้ระบบทำงานได้ช้าลง 

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

 

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

 

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

 

แหล่งอ้างอิง

 

Written by
Senna Labs
Senna Labs

Subscribe to follow product news, latest in technology, solutions, and updates

- More than 120,000 people/day visit to read our blogs

Other articles for you

18
May, 2024
JS class syntax
18 May, 2024
JS class syntax
เชื่อว่าหลายๆคนที่เขียน javascript กันมา คงต้องเคยสงสัยกันบ้าง ว่า class ที่อยู่ใน js เนี่ย มันคืออะไร แล้วมันมีหน้าที่ต่างกับการประกาศ function อย่างไร? เรามารู้จักกับ class ให้มากขึ้นกันดีกว่า class เปรียบเสมือนกับ blueprint หรือแบบพิมพ์เขียว ที่สามารถนำไปสร้างเป็นสิ่งของ( object ) ตาม blueprint หรือแบบพิมพ์เขียว( class ) นั้นๆได้ โดยภายใน class

By

4 mins read
Thai
18
May, 2024
15 สิ่งที่ทุกธุรกิจต้องรู้เกี่ยวกับ 5G
18 May, 2024
15 สิ่งที่ทุกธุรกิจต้องรู้เกี่ยวกับ 5G
ผู้ให้บริการเครือข่ายในสหรัฐฯ ได้เปิดตัว 5G ในหลายรูปแบบ และเช่นเดียวกับผู้ให้บริการเครือข่ายในยุโรปหลายราย แต่… 5G มันคืออะไร และทำไมเราต้องให้ความสนใจ บทความนี้ได้รวบรวม 15 สิ่งที่ทุกธุรกิจต้องรู้เกี่ยวกับ 5G เพราะเราปฏิเสธไม่ได้เลยว่ามันกำลังจะถูกใช้งานอย่างกว้างขวางขึ้น 1. 5G หรือ Fifth-Generation คือยุคใหม่ของเทคโนโลยีเครือข่ายไร้สายที่จะมาแทนที่ระบบ 4G ที่เราใช้อยู่ในปัจจุบัน ซึ่งมันไม่ได้ถูกจำกัดแค่มือถือเท่านั้น แต่รวมถึงอุปกรณ์ทุกชนิดที่เชื่อมต่ออินเตอร์เน็ตได้ 2. 5G คือการพัฒนา 3 ส่วนที่สำคัญที่จะนำมาสู่การเชื่อมต่ออุปกรณ์ไร้สายต่างๆ ขยายช่องสัญญาณขนาดใหญ่ขึ้นเพื่อเพิ่มความเร็วในการเชื่อมต่อ การตอบสนองที่รวดเร็วขึ้นในระยะเวลาที่น้อยลง ความสามารถในการเชื่อมต่ออุปกรณ์มากกว่า 1 ในเวลาเดียวกัน 3. สัญญาณ 5G นั้นแตกต่างจากระบบ

By

4 mins read
Thai
18
May, 2024
จัดการ Array ด้วย Javascript (Clone Deep)
18 May, 2024
จัดการ Array ด้วย Javascript (Clone Deep)
ในปัจจุบันนี้ ปฏิเสธไม่ได้เลยว่าภาษาที่ถูกใช้ในการเขียนเว็บต่าง ๆ นั้น คงหนีไม่พ้นภาษา Javascript ซึ่งเป็นภาษาที่ถูกนำไปพัฒนาเป็น framework หรือ library ต่าง ๆ มากมาย ผู้พัฒนาหลายคนก็มีรูปแบบการเขียนภาษา Javascript ที่แตกต่างกัน เราเลยมีแนวทางการเขียนที่หลากหลาย มาแบ่งปันเพื่อน ๆ เกี่ยวกับการจัดการ Array ด้วยภาษา Javascript กัน เรามาดูตัวอย่างกันเลยดีกว่า โดยปกติแล้วการ copy ค่าจาก value type ธรรมดา สามารถเขียนได้ดังนี้

By

4 mins read
Thai

Let’s build digital products that are
simply awesome !

We will get back to you within 24 hours!Go to contact us
Please tell us your ideas.
- Senna Labsmake it happy
Contact ball
Contact us bg 2
Contact us bg 4
Contact us bg 1
Ball leftBall rightBall leftBall right
Sennalabs gray logo28/11 Soi Ruamrudee, Lumphini, Pathumwan, Bangkok 10330+66 62 389 4599hello@sennalabs.com© 2022 Senna Labs Co., Ltd.All rights reserved.