Coding Gun

รวมการทำ Software Testing แบบต่างๆ

การทดสอบ software นั้นมีด้วยกันหลายประเภทมากๆ ในบทความนี้เราจะสรุปวิธีการทดสอบแต่ละแบบ ว่าการทดสอบแต่ละแบบมีไว้เพื่ออะไร เราจะได้ออกแบบ test-case ให้เป็นไปตามจุดประสงค์ของการทดสอบแต่ละแบบได้

Unit Testing

Unit Testing คือการทดสอบแต่ละ function หรือ method ที่เราเขียน โดยที่เราต้องจำลองสิ่งที่เกี่ยวข้องกับ function และ method นี้ทั้งหมดเช่น เราต้องใช้การ fake data เพื่อจำลองข้อมูล และใช้ mocking เพื่อสร้าง mail server จำลองขึ้นมา เพื่อทดสอบการส่ง mail โดยที่ไม่ต้องเชื่อมต่อกับ mail Server จริงๆ

Developer จะเป็นผู้เขียน test cases เนื่องจาก unit testing เป็นการทดสอบแบบ whitebox ซึ่งจะต้องเข้าใจ source code และในการทำ unit testing เราจะต้อง test ให้ครบทุกๆฟังก์ชั้น และทุกๆเงื่อนไข เราจะวัดได้จาก path coverage(ครอบคลุมกี่เปอร์เซ็นของ source code)

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

คุณภาพของ Unit testing จะส่งผลถึงคุณภาพของระบบโดยตรง

Integration Testing

Integration Testing คือการทดสอบการที่มีการเชื่อมโยงกับ database หรือ infrastructure ต่างๆ เช่น mail server จริงๆ เราจะมั่นใจได้ว่า code ที่เราเขียนขึ้นมานั้นสามารถ run ได้จริงๆ

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

System Testing

เป็นการทดสอบโดยมองภาพการทำงานของระบบ ซึ่งจะมีการทดสอบทั้ง functional และ non-functional แต่จะเน้นที่ functional เป็นหลัก

การทำ System Test เราจะไม่ใช้ data จริงในการทดสอบ

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

Acceptance Test

เป็นการทดสอบที่ต้องทำหลังจากระบบนั้นผ่านการทำ System Test มาแล้ว เพราะ acceptance test จะเน้นว่า software ที่ได้ต้องตอบความต้องการของ business นั่นหมายถึง non-functional

การทดสอบแบบ Acceptance Test นั้นจะใช้ data ของจริงหรือใกล้เคียงของจริงมากที่สุด

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

API Testing

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

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

อ่าน วิธีการทำ API Testing แบบอัตโนมัติ ต่อได้ที่นี่

End-to-End Testing

เป็นการทดสอบการทำงานของระบบตั้งแต่เริ่มต้น จนกระทั่งจบการทำงาน โดยที่เราสามารถเลือกวิธีการทดสอบได้ว่าจะเป็นการทดสอบผ่านทาง UI หรือจะทดสอบ API โดยตรง

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

Smoke Test

การทดสอบระบบโดยทดสอบเฉพาะ function การทำงานหลักๆเท่านั้น ใช้สำหรับการทดสอบที่ต้องการความรวดเร็วและผ่านการทดสอบในรายละเอียดมาแล้ว ส่วนใหญ่จะนำไปไว้ใน continuous deployment เพื่อทดสอบ software บน environment จริง

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

Regression Test

เป็นการ test ซ้ำหลังจากที่เราแก้ไข defect หรือเพิ่ม code เข้าไปใหม่ เพื่อให้แน่ใจว่าระบบของเรายังคงทำงานได้(functional)อยู่เหมือนเดิม

เมื่อเราแก้ไข bug เก่าจะนำมาซึ่ง bug ใหม่เสมอ นั่นคือสาเหตุว่าทำไมเราต้องมี Regrssion Test

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

Performance Test

การทดสอบ Performance ของระบบนั้นสามารถแบ่งออกเป็นการทดสอบย่อยๆได้หลายรูปแบบ ดังนี้

Load Test

การทดสอบความสามารถในการรองรับผู้ใช้งานที่เข้ามาพร้อมๆกันหลายๆคน โดยที่ Load Test จะเน้นที่สามารถรองรับผู้ใช้งานได้ตามตัวเลขที่ได้ประมาณการไว้

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

อ่านวิธีการทำLoad-Test ต่อได้ที่นี่

Stress Test

เราจะทดสอบเหมือนกับ Load test แต่จะเพิ่มปริมาณ request ขึ้นไปเรื่อยๆจนกว่าระบบจะ down

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

Endurance Test

Endurance test คือการทดสอบที่จะส่ง request เข้าไปในระบบ(เหมือนกับ load test) แต่จะ run script ค้างไว้ เพื่อทดสอบความทนทาน(endurace) ของระบบ

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

อ่านวิธีการทำ Performance Testing ต่อได้ที่นี่

Security Testing

การทำ Security testing ก็สามารถแบ่งออกได้หลายประเภทเหมือนกับ Performance Test ดังนั้นเราจะแบ่งการทดสอบความปลอดภัยของระบบออกเป็นประเภทต่างๆ ดังนี้

Penetration Testing

Penetration testing(หรือเรียกสั้นๆว่า pen-test) คือการทดสอบเจาะระบบ โดยผู้ทดสอบ(pen-tester)จะเป็นตัวแทนของ Hacker โดยจะแบ่งขั้นตอนการทำงานเป็น phase ต่างๆ ดังนี้

  1. Reconnaissance รวบรวมข้อมูลที่เกี่ยวของกับระบบและผู้ใช้งานระบบให้มากที่สุด
  2. Scanning ทำการค้นหา service ที่เปิดให้บริการอยู่
  3. Vulnerability Assessment นำข้อมูลที่ได้จาก 2 phase แรกมาค้นหาช่องโหว่
  4. Exploitation ทำการโจมตีเข้าไปในระบบ
  5. Reporting สร้าง report สรุปช่องโหว่ที่พบในระบบและแนวทางในการแก้ไข

อ่านวิธีการทำ Pen-Test ต่อได้ที่นี่

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

Penetration test มีได้หลายประเภท ซึ่งแล้วแต่การตกลงกันระหว่าง pen-tester และผู้ว่าจ้าง

Software Composition Analysis (SCA)

การแตกออกมาว่า Application นี้มีการใช้งาน library หรือ framework อะไรบ้าง และ library หรือ framewotk ที่นำมาใช้นั้นมีช่องโหว่อะไรบ้าง

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

Static Application Security Testing (SAST)

การตรวจสอบคุณภาพของ Code ที่เขียน โดยเครื่องมือแต่ละตัวจะนำ Source Code และ Infrastructure as Code(IaC) ของเราไปเปรียบเทียบกับ rules ถ้ามีส่วนของ Code ที่เขียนแล้วมีแนวโน้มว่าน่าจะเกิดปัญหา เครื่องมือตัวนั้นก็จะทำการแจ้งเตือนให้ Developer ทำการแก้ไขต่อไป ซึ่งนอกจากคุณภาพของ code ที่เราเขียนแล้วยังต้องเพิ่มสิ่งเหล่านี้เข้าไปด้วย

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

Dynamic Application Security Testing(DAST)

การทดสอบความปลอดภัยของระบบโดยทำการ Run Application นั้นขึ้นมาและทดสอบความปลอดภัยโดยการส่ง input ที่เป็นอันตราย เข้าไปในระบบ

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

Interactive Application Security Testing(IAST)

Interactive Application Security Testing(IAST) คือการทดสอบความปลอดภัยด้วยการส่ง input เข้าไปโจมตีระบบเหมือนกับ Dynamic Application Security Testing(DAST) แต่ IAST จะ run ตลอดเวลาด้วยการฝังเครื่องมือที่ใช้ทดสอบเข้าไปใน complier หรือ proxy นั่นหมายความว่าถ้าไม่มีการ compile หรือ ไม่มี traffic ก็จะไม่มีการทดสอบ ดังนั้นเราจึงต้องทดสอบ IAST ร่วมกับการทดสอบแบบอื่นๆ เช่น API testing หรือ UI testing

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

IAST จะเหมือน DAST แต่ละ run ค้างไว้ตลอดเวลา

Phanupong Permpimol
Follow me