รวมการทำ 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)
ประเภทของการทดสอบ
- Whitebox testing
- Test case ต้องมีทั้ง Happy path(Positive) และ Sad path(Negative)
คุณภาพของ Unit testing จะส่งผลถึงคุณภาพของระบบโดยตรง
Integration Testing
Integration Testing คือการทดสอบการที่มีการเชื่อมโยงกับ database หรือ infrastructure ต่างๆ เช่น mail server จริงๆ เราจะมั่นใจได้ว่า code ที่เราเขียนขึ้นมานั้นสามารถ run ได้จริงๆ
ประเภทของการทดสอบ
- Blackbox testing
- Test case ส่วนใหญ่จะเป็น Happy path(Positive)
System Testing
เป็นการทดสอบโดยมองภาพการทำงานของระบบ ซึ่งจะมีการทดสอบทั้ง functional และ non-functional แต่จะเน้นที่ functional เป็นหลัก
การทำ System Test เราจะไม่ใช้ data จริงในการทดสอบ
ประเภทของการทดสอบ
- Blackbox testing
- Test case ส่วนใหญ่จะเป็น Happy path(Positive)
Acceptance Test
เป็นการทดสอบที่ต้องทำหลังจากระบบนั้นผ่านการทำ System Test มาแล้ว เพราะ acceptance test จะเน้นว่า software ที่ได้ต้องตอบความต้องการของ business นั่นหมายถึง non-functional
การทดสอบแบบ Acceptance Test นั้นจะใช้ data ของจริงหรือใกล้เคียงของจริงมากที่สุด
ประเภทของการทดสอบ
- Blackbox testing
- จะทดสอบเฉพาะ Happy path(Positive) เท่านั้น
API Testing
การทดสอบการทำงานของ API โดยตรง(ไม่ผ่าน UI) โดยจะมองทั้ง ฟังก์ชั้นการทำงาน, ประสิทธิภาพ และความปลอดภัย
ประเภทของการทดสอบ
- Blackbox testing
- Test case ต้องมีทั้ง Happy path(Positive) และ Sad path(Negative)
อ่าน วิธีการทำ API Testing แบบอัตโนมัติ ต่อได้ที่นี่
End-to-End Testing
เป็นการทดสอบการทำงานของระบบตั้งแต่เริ่มต้น จนกระทั่งจบการทำงาน โดยที่เราสามารถเลือกวิธีการทดสอบได้ว่าจะเป็นการทดสอบผ่านทาง UI หรือจะทดสอบ API โดยตรง
ประเภทของการทดสอบ
- Blackbox testing
- Test case ต้องมีทั้ง Happy path(Positive) และ Sad path(Negative)
Smoke Test
การทดสอบระบบโดยทดสอบเฉพาะ function การทำงานหลักๆเท่านั้น ใช้สำหรับการทดสอบที่ต้องการความรวดเร็วและผ่านการทดสอบในรายละเอียดมาแล้ว ส่วนใหญ่จะนำไปไว้ใน continuous deployment เพื่อทดสอบ software บน environment จริง
ประเภทของการทดสอบ
- Blackbox testing
- จะทดสอบเฉพาะ Happy path(Positive) เท่านั้น
Regression Test
เป็นการ test ซ้ำหลังจากที่เราแก้ไข defect หรือเพิ่ม code เข้าไปใหม่ เพื่อให้แน่ใจว่าระบบของเรายังคงทำงานได้(functional)อยู่เหมือนเดิม
เมื่อเราแก้ไข bug เก่าจะนำมาซึ่ง bug ใหม่เสมอ นั่นคือสาเหตุว่าทำไมเราต้องมี Regrssion Test
ประเภทของการทดสอบ
- Blackbox testing
- จะทดสอบเฉพาะ Happy path(Positive) เท่านั้น
Performance Test
การทดสอบ Performance ของระบบนั้นสามารถแบ่งออกเป็นการทดสอบย่อยๆได้หลายรูปแบบ ดังนี้
Load Test
การทดสอบความสามารถในการรองรับผู้ใช้งานที่เข้ามาพร้อมๆกันหลายๆคน โดยที่ Load Test จะเน้นที่สามารถรองรับผู้ใช้งานได้ตามตัวเลขที่ได้ประมาณการไว้
ประเภทของการทดสอบ
- การทดสอบเชิง Positve(ไม่ทำให้ระบบเสียหาย)
อ่านวิธีการทำLoad-Test ต่อได้ที่นี่
Stress Test
เราจะทดสอบเหมือนกับ Load test แต่จะเพิ่มปริมาณ request ขึ้นไปเรื่อยๆจนกว่าระบบจะ down
ประเภทของการทดสอบ
- การทดสอบเชิง Negative(ทำให้ระบบหยุดทำงาน)
Endurance Test
Endurance test คือการทดสอบที่จะส่ง request เข้าไปในระบบ(เหมือนกับ load test) แต่จะ run script ค้างไว้ เพื่อทดสอบความทนทาน(endurace) ของระบบ
ประเภทของการทดสอบ
- การทดสอบเชิง Positve(ไม่ทำให้ระบบเสียหาย)
อ่านวิธีการทำ Performance Testing ต่อได้ที่นี่
Security Testing
การทำ Security testing ก็สามารถแบ่งออกได้หลายประเภทเหมือนกับ Performance Test ดังนั้นเราจะแบ่งการทดสอบความปลอดภัยของระบบออกเป็นประเภทต่างๆ ดังนี้
Penetration Testing
Penetration testing(หรือเรียกสั้นๆว่า pen-test) คือการทดสอบเจาะระบบ โดยผู้ทดสอบ(pen-tester)จะเป็นตัวแทนของ Hacker โดยจะแบ่งขั้นตอนการทำงานเป็น phase ต่างๆ ดังนี้
- Reconnaissance รวบรวมข้อมูลที่เกี่ยวของกับระบบและผู้ใช้งานระบบให้มากที่สุด
- Scanning ทำการค้นหา service ที่เปิดให้บริการอยู่
- Vulnerability Assessment นำข้อมูลที่ได้จาก 2 phase แรกมาค้นหาช่องโหว่
- Exploitation ทำการโจมตีเข้าไปในระบบ
- Reporting สร้าง report สรุปช่องโหว่ที่พบในระบบและแนวทางในการแก้ไข
อ่านวิธีการทำ Pen-Test ต่อได้ที่นี่
ประเภทของการทดสอบ
Penetration test มีได้หลายประเภท ซึ่งแล้วแต่การตกลงกันระหว่าง pen-tester และผู้ว่าจ้าง
- Blackbox testing เราจะไม่ได้ข้อมูลอะไรมาเลย จะเหมือนเป็น Hacker จริงๆ
- Graybox testing เราอาจได้ข้อมูลบางส่วนมา เช่น network diagram, software architecture หรือ user สำหรับ login เข้าระบบ
- Whitebox testin เป็นการทดสอบภายในองค์กร ซึ่งทีม pen-tester จะเห็นทุกอย่างทั้ง software design และ source code
Software Composition Analysis (SCA)
การแตกออกมาว่า Application นี้มีการใช้งาน library หรือ framework อะไรบ้าง และ library หรือ framewotk ที่นำมาใช้นั้นมีช่องโหว่อะไรบ้าง
ประเภทของการทดสอบ
- Whitebox testing
- เป็นการทดสอบเชิง Positve
Static Application Security Testing (SAST)
การตรวจสอบคุณภาพของ Code ที่เขียน โดยเครื่องมือแต่ละตัวจะนำ Source Code และ Infrastructure as Code(IaC) ของเราไปเปรียบเทียบกับ rules ถ้ามีส่วนของ Code ที่เขียนแล้วมีแนวโน้มว่าน่าจะเกิดปัญหา เครื่องมือตัวนั้นก็จะทำการแจ้งเตือนให้ Developer ทำการแก้ไขต่อไป ซึ่งนอกจากคุณภาพของ code ที่เราเขียนแล้วยังต้องเพิ่มสิ่งเหล่านี้เข้าไปด้วย
- Secret scan คือการ scan source code เพื่อค้นหาข้อความที่เป็นความลับเช่น password หรือ API Key
- IaC scan คือการ scan เพื่อตรวจสอบ Infrastructure as Code(IaC) ของเราว่าถูกต้องตาม Security best pratices รึเปล่า
ประเภทของการทดสอบ
- Whitebox testing
- เป็นการทดสอบเชิง Positve
Dynamic Application Security Testing(DAST)
การทดสอบความปลอดภัยของระบบโดยทำการ Run Application นั้นขึ้นมาและทดสอบความปลอดภัยโดยการส่ง input ที่เป็นอันตราย เข้าไปในระบบ
ประเภทของการทดสอบ
- Blackbox testing
- ถ้าเรา run Passive scaner จะเป็นการทดสอบเชิง Psitive
- แต่ถ้า run Active scaner จะเป็นการทดสอบเชิง Negative
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
ประเภทของการทดสอบ
- Blackbox testing
- ถ้าเรา run Passive scaner จะเป็นการทดสอบเชิง Positive
- แต่ถ้า run Active scaner จะเป็นการทดสอบเชิง Negative
IAST จะเหมือน DAST แต่ละ run ค้างไว้ตลอดเวลา