android-testing-course
สองวันที่ผ่านมามีโอกาสแบ่งปัน
เรื่องการทดสอบแบบอัตโนมัติสำหรับ Android app (Automated testing for Android App)
ซึ่งจัดโดยสถาบัน IMC
จึงทำการสรุปเนื้อหาต่าง ๆ ไว้ดังต่อไปนี้

วันที่หนึ่ง

ทำการอธิบายถึงปัญหาของการพัฒนา และทดสอบ Android App ในปัจจุบัน
ตลอดจนเครื่องไม้เครื่องมือที่เยอะมาก ๆ
ซึ่งทำให้ยากต่อการเริ่มต้นเรียนรู้ และนำไปใช้งาน
รวมทั้งอธิบายถึงรูปแบบการทดสอบ
ที่มักจะทดสอบแบบ manual กันทั้งหมด
ซึ่งใช้ทั้งเวลา คน และค่าใช้จ่ายจำนวนมาก

ดังนั้น ถ้าเรามีวิธีการที่ช่วยลดสิ่งต่าง ๆ เหล่านี้ลงไปได้
มันน่าจะดีขึ้นไม่มากก็น้อยนะ
หนึ่งในวิธีการคือ การทดสอบแบบอัตโนมัตินั่นเอง (Automated testing)

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

โดยการทดสอบที่แนะนำ และพาทำ workshop ประกอบไปด้วย

1. Unit testing ด้วย JUnit4
สำหรับการทดสอบในส่วนของ business logic
รวมทั้งส่วนการทำงานภายในของ Android App
โดยขอเรียกว่าเป็น Developer testing
ซึ่งการทดสอบไม่จำเป็นต้องใช้งาน Emulator หรือ Device จริง ๆ เลย
ส่งผลให้การทดสอบเร็วมาก ๆ
ได้นำเอาแนวคิด Test-Driven Development (TDD) เข้ามาใช้งาน
ตลอดจนเรื่องของ Code coverage อีกด้วย
รวมทั้งแนะนำเทคนิคต่าง ๆ ของ JUnit4

2. User Interface testing (UI) ด้วย Espresso
สำหรับการทดสอบในมุมมองของผู้ใช้งาน หรือ Customer testing
นั่นคือ ทำการทดสอบผ่าน User Interface ของ App นั่นเอง
แน่นอนว่า ต้องทำการทดสอบบน Emulator หรือ Device จริง ๆ
เพื่อทำให้มั่นใจว่า App ที่พัฒนาขึ้นมานั้น
ติดตั้งได้จริง
ทำงานได้จริง

ทำให้ใช้เวลาในการทดสอบนานกว่า Unit test อย่างมาก
ดังนั้นจำเป็นต้องทดสอบในระดับ feature เท่านั้น

3. Stress testing ด้วย Monkey test
เป็นเครื่องมือที่มีมากับ Android SDK อยู่แล้ว
จะทำสร้าง event สำหรับการใช้งาน App แบบมั่ว ๆ
เพื่อทดสอบว่า App ที่เราพัฒนายังสามารถทำงานได้
ในสถานการณ์ หรือ การใช้งานรูปแบบต่าง ๆ หรือไม่

วันที่สอง

หลังจากที่เราทำการทดสอบในส่วนต่าง ๆ เรียบร้อยแล้ว
จากนั้นจึงแนะนำเรื่องของ Continuous Integration(CI)
ซึ่งเป็นแนวปฎิบัติเพื่อ

  • ทำการ integrate code ในส่วนต่าง ๆ เข้ากันบ่อย
  • ทำการทดสอบอยู่อย่างบ่อย ๆ
  • ทำให้ได้รับ feedback ต่าง ๆ อย่างรวดเร็ว

โดยให้ทุกคนสร้างระบบ Continuous Integration ด้วย Jenkins
รวมทั้งการออกแบบ build pipeline ของการทำงานอีกด้วย
ตั้งแต่การดึง source code จาก Version Control System
การ compile source code
การทดสอบ Unit test
การทำสอบ UI test
การทำรายงานเรื่อง Code coverage

จากนั้นทำการแนะนำเรื่อง Continuous Delivery และ Continuos Deployment
ซึ่งทำการแนะนำ Fastlane สำหรับ Android app ทั้ง Supply และ Screengrab
เพื่อสร้างระบบการ deploy แบบอัตโนมัติ
เป็นเรื่องใหม่แต่อยากขอแนะนำให้ลองนำไปใช้งานดูนะ
มันแจ่มมาก ๆ

ปิดท้ายด้วยเรื่องของ Mocking หรือ Test double
แน่นอนว่ามีเรื่อง Testable code อีกด้วย
ในส่วนนี้อาจจะสอนเร็วไปหน่อย !!
แต่อยากให้นักพัฒนาทุกคนลองกลับไปศึกษาเพิ่มเติม
เนื่องจากเป็นสิ่งที่นักพัฒนาทุกคนต้องเข้าใจ และนำไปประยุกต์ใช้งานได้
เช่น เรื่องของ SOLID, Refactoring และ Clean code เป็นต้น

สุดท้ายแล้ว

หวังว่าความรู้ต่าง ๆ ในสองวันนี้
น่าจะเป็นจุดเริ่มต้นสำหรับการเดินทางเรื่อง Automated testing
และนำไปต่อยอดเพื่อประยุกต์ใช้สำหรับการพัฒนา Android App ต่อไป

ขอบคุณทั้ง 16 คนที่มาร่วมเดินทางไปกับผม
และทางสถาบัน IMC ที่ให้โอกาส
ส่วนตัวผมได้ทั้งความรู้ และ ความสนุกสนานอย่างมาก
รวมทั้งจะนำ feedback ต่าง ๆ ไปปรับปรุงสำหรับครั้งต่อ ๆ ไปครับ

Tags: