จากที่ทาง Android Developer ทำการเปลี่ยนแปลงเอกสารเกี่ยวกับ Testing strategies
เป็นคำแนะนำแนวทางในการทดสอบ android app
เพื่อสร้าง app ที่มีคุณภาพ ทั้งความเสถียรและน่าเชื่อถือให้มากที่สุด
โดยพยายามให้เจอปัญหาตั้งแต่การ develop process หรือ detect early นั่นเอง
เพื่อลดปัญหบน production รวมทั้งง่ายต่อการ debug หรือ profiling
มาดูกันว่าแนวทางเป็นอย่างไรบ้าง ?
แสดงการทดสอบเป็น 5 layer ดังรูป
Layer 1 Unit tests
เป็นการทดสอบส่วนการทำงานเล็ก ๆ ของ code
โดยไม่มีการทำงานกับ dependency ต่าง ๆ ของ android framework
และไม่จำเป็นต้องใช้งาน emulator หรือ real device
Layer 2 Component tests
เป็นการตรวจสอบการทำงานของ function ต่าง ๆ
เป็นการตรวจสอบการทำงานของ component หรือ module ต่าง ๆ
ว่าแต่ละส่วนทำงานได้ตามที่คาดหวังหรือไม่
ก่อนที่จะนะแต่ละส่วนมาประกอบ หรือ ทำงานร่วมกัน
ยกตัวอย่างเช่น Screenshot testing
Layer 3 Feature tests
เป็นการตรวจสอบการทำงานเมื่อนำเอา
function, component หรือ module ต่าง ๆ มาทำงานร่วมกัน
เป็นการทดสอบที่มีขนาดใหญ่ และ ซับซ้อนมากยิ่งขึ้น
แต่ถ้า layer 1 และ 2 ยังไม่ทำ หรือ ไม่ผ่าน ก็อาจจะทำให้ layer 3 มีปัญหามากยิ่งขึ้น
เช่น flaky test เป็นต้น
ยกตัวอย่างเช่น UI Behavior testing
ทำการตรวจสอบ state การทำงานต่าง ๆ บน UI
ซึ่งใน Android ได้เตรียม library ไว้ให้แล้ว ใช้งานตามที่ต้องการ เช่น
- Espresso
- Jetpack compose
- UI Automator
- Robolectric
Layer 4 Application tests
เป็นการทดสอบ application ที่ต้องทำการ build เป็น APK file ก่อน (dev/debug build)
จากนั้นทำการติดตั้งลงเครื่อง
เพื่อทำการตรวจสอบการทำงาน
มีการทำงานร่วมกับ external system มากมาย
ซึ่งจำเป็นจะต้องจัดการหรือควบคุมให้ดี
มิเช่นนั้นการทดสอบจะไม่มีคุณภาพ หรือ ขาดความน่าเชื่อถืออย่างมาก
ในการทดสอบจะทำงานร่วมกับการเปลี่ยนแปลงของ device ต่าง ๆ ด้วย
การเปลี่ยนหน้าจอ การหมุนหน้าจอ หรือ การเปลี่ยนภาษา หรือ การเปลี่ยน device เป็นต้น
สามารถใช้งาน UI behavior testing มาใช้งานได้ปกติ
Layer 5 Release candidate tests
ทำการตรวจสอบการทำงานของไฟล์ APK ที่จะ publish ออกไป
ซึ่งการทดสอบคล้ายกับ application tests
แต่ทำการ minify และ optimize แล้วสำหรับ production mode
มีการทดสอบแบบ end-to-end ที่ใหญ่และซับซ้อนขึ้นกว่า
รวมทั้ง environment ที่ทำงานด้วย ก็ใกล้เคียงกับ production อย่างมาก
เพื่อหาปัญหาต่าง ๆ ในการทำงาน
ตลอดจนเรื่องของ performance testing
ที่อาจจะส่งผลกระทบต่อ device และ ผู้ใช้งานอีกด้วย
มีคำแนะนำสำหรับ การทดสอบที่มีขนาดใหญ่ขึ้น
จำเป็นต้องมีความเสถียรอย่างสูง ยกตัวอย่างเช่น
- Device configuration
- Prevent synchronization issues
- Retry mechanisms
ลองศึกษา และ การแนะนำต่าง ๆ หล่านี้ไปใช้งานกันดู
ขอให้สนุกกับการ coding และ testing