จากการสอบถาม Android developer มาพบว่า
ประมาณ 99% ทำการทดสอบแบบ manual ทั้งหมด !!
(ถ้าใครทำแบบอื่นๆ บอกผมด้วยนะ ^_^)
จากคำตอบที่ได้มานั้น
ทำให้เกิดคำถามที่น่าสนใจ คือ ทำไมถึงทดสอบแบบ manual อย่างเดียวล่ะ
ทำไมถึงไม่ทำการทดสอบแบบ Automated บ้าง ?
ทั้งๆ ที่มันน่าจะช่วยแบ่งเบาภาระลงไปได้เยอะนะ !!
ตัวอย่างการสัมภาษณ์ทีมพัฒนา Android app นิรนาม
คำถาม
ในการพัฒนา Android app คุณทำการทดสอบหรือไม่ ?
คำตอบ
ไม่ทดสอบแล้วจะรู็ได้อย่างไรว่า app ทำงานถูกต้อง … (ถามไม่คิดเลย)
คำถาม
แล้วทดสอบแบบไหนล่ะ ?
คำตอบ
ก็นั่งจิ้มๆ ทดสอบไปไงล่ะ
คำถาม
เป็น manual test แบบ 100% เลยใช่ไหม ?
คำตอบ
ใช่สิ ก็บอกว่านั่งจิ้มๆ ทดสอบยังไงล่ะ !!
คำถาม
แล้วถ้าต้องสนับสนุนหลายๆ ยี่ห้อ หลายขนาดหน้าจอล่ะ ทำยังไง ?
คำตอบ
ก็ต้องนั่งจิ้มๆ กันต่อไปยังไงล่ะ
คำถาม
แล้วมันมีปัญหาอะไรหรือเปล่า สำหรับการทดสอบแบบ manual เพียงอย่างเดียว ?
คำตอบ
เยอะมากมายนะสิ !! …
test case ก็เยอะ
เวลาก็มีน้อย
คนทดสอบก็น้อย
เฮ้อ …. มีอีกเพียบ …
คำถาม
แล้วแก้ไขปัญหานี้อย่างไรล่ะ ?
คำตอบ
ขอเวลาในการทดสอบเพิ่ม
ถ้าไม่ได้ก็ต้องจากคนเพิ่ม หรือ หาคนทดสอบเพิ่มนะสิ
มาช่วยกันนั่งจิ้มเยอะๆ จะได้เสร็จเร็วๆ
แล้วมันมีวิธีการทดสอบอื่นๆ อีกหรือไม่นะ ?
ถ้ามันมี Automated testing มาช่วยแบบนี้คงจะดีไม่น้อย
ก่อนอื่นมาดูว่า การทดสอบที่ดีนั้นควรเป็นไปตาม Pyramid Testing
จะประกอบไปด้วยการทดสอบส่วนต่างๆ คือ
- Unit testing
- Integration testing
- Acceptance testing
- UI testing
- Manual testing
แสดงดังรูป
แต่สิ่งที่เรากำลังทดสอบกับ Android app นั้นกลับตรงกันข้าม
นั่นก็คือ ทดสอบแบบ manual มากที่สุด แสดงดังรูป
คำถามที่ได้รับจากเหล่า Android developer คือ
- แล้วมันทำได้ด้วยหรือ ?
- มีใครเขาทำกันบ้าง ?
- ไม่เห็นมีใครเขาทำกันเลย ?
- มันทำยากนะ ?
- แบบนี้ก็ต้องเพิ่มเวลาในการพัฒนาอีกสิ ?
- มันจะคุ้มหรือ ?
- ทำอย่างไรล่ะ ?
ซึ่งผมไม่มีคำตอบอะไรให้หรอกนะ …
แต่อยากจะถามว่า ที่ทำมานั่นนะ มันมีปัญหาอะไรบ้าง ?
แล้วเคยคิดที่จะแก้ไขกันบ้างหรือไม่ ?
หรือปล่อยไปแบบนั้นล่ะ มันคือข้อจำกัดนะ ต้องทำใจ ?
ดังนั้นก่อนอื่น มาเรียนรู้ก่อนนะว่าทางผู้พัฒนา Android SDK เข้าสนับสนุน Automated testing นะ
ถ้าไม่เชื่อลองเข้าไปดูที่ Best practice for Android testing
ประกอบไปด้วย
- Unit testing
- Functional testing
- UI Component testing
- Automated UIO testing
คำถาม
เคยอ่านกันไหม หรือไปหาแต่ใน google หรือ stackoverflow กัน ?
คำตอบที่ดูดีหน่อย
เคยอ่านเมื่อนานมาล่ะ แต่อ่านไม่รู้เรื่องเลย
แถม IDE ที่ใช้พัฒนาไม่สนับสนุนอีก …
รู้หรือยังว่า Android Studio 1.2 เขาสนับสนุน test แล้วนะ ?
ถ้าไม่รู้ก็มาดูกันเลย ว่ามันเป็นอย่างไร
เพียงแค่กำหนด version ของ Gradle build tool ที่ใช้ซะ
หน้าตาของไฟล์ build.gradle เป็นดังนี้
และสามารถทำการ Run test ได้เลย ดังรูป
แต่การจะทดสอบส่วนการทำงานต่างๆ ของ Android application มันยากมาก
เนื่องจากส่วนการทำงานต่างๆ ผูกติดกับ Android platform เกือบทั้งหมด
ไม่ว่าจะเป็น
- Application ซึ่งคือ God object ของ Android application
- Activity คือ class ที่ใช้จัดการ Life cycle ขนาดยักษ์
- หรือบางคนบอกว่าใช้งาน Fragment สิ … แต่ว่ามันก็ยังยากนะเออ
ปัญหาที่พบเจอใน Android application คือ
ส่วนการทำงานต่างๆ มันผูกติดกับ Android platform หมดเลย
ทำให้เราทดสอบระบบงานยากมากๆ
ดังนั้น สิ่งที่เราต้องทำกันต่อไป คือ
แยกส่วนการทำงานต่างๆ ออกมาจาก Android platform หรือ Isolate dependency
เพื่อให้มันง่ายต่อการทดสอบด้วย JAVA library ทั่วไปได้ เช่น
- jUnit
- Mockito