mobile-app
เพิ่งไปแบ่งปันเรื่องระบบ Automated deployment สำหรับ Mobile app มา
โดยประกอบไปด้วยส่วนต่าง ๆ เช่น

  • ระบบ API หรือ Backend
  • ระบบ Mobile หรือ Frontend ทั้ง Android และ iOS

มีทั้ง process และเครื่องมือที่ใช้งาน
จึงนำมาสรุปไว้นิดหน่อย มาเริ่มกันเลย

ส่วนการทำงานของ Backend หรือ API

สิ่งที่ขาดไม่ได้เลยก็คือ Continuous Integration และ Continuous Deployment
นั่นหมายความว่า
เมื่อมีการเปลี่ยนแปลง source code และ resource ต่าง ๆ แล้ว
จะมีระบบที่ทำงานแบบอัตโนมัติตั้งแต่

  • จัดเตรียม Environment
  • Build process
  • Testing process
  • Deployment process

สามารถใช้จำนวนครั้งการ dpeloy ต่อวัน
เพื่อวัดผลการทำงานได้เลย
ซึ่งทำให้ทีมพัฒนารับรู้ feedback ต่าง ๆ ได้อย่างรวดเร็ว

ส่วนการทำงานของ Frontend หรือ Mobile

เริ่มต้นด้วย process การทำงาน ซึ่งมีหลายรูปแบบ
โดยที่ผมขอแนะนำคือ รูปการทำงานแบบนี้
นำมาจากบทความเรื่อง Automating Mobile Deployment จากทีมพัฒนา AutoCAD 360

1-kpky4g4coe_tql3zuqb9zw

โดยการทำงานนั้นสามารถนำแนวคิด Continuous Integration และ Continuous Deployment มาปรับใช้ได้
แต่ในส่วนของการ deploy ต้องรอการ review ในกรณีของ iOS app
รวมทั้ง process ต่าง ๆ สำหรับ Mobile app นั้น
ยังไม่เสถียรเหมือนกับ Web application และ API (Backend) เท่าไรนัก
ยกตัวอย่างเช่น

User Interface Testing
โดยส่วนใหญ่จะเน้นไปที่ User Experience (UX)
คำถามที่น่าสนใจคือ ทดสอบกันตอนไหน ?
รวมทั้ง process ต่าง ๆ เหล่านี้มักจะใช้เวลานาน
ยังไม่พอนะ พอเอามาพัฒนาและทดสอบ ยิ่งยากและนานเข้าไปใหญ่
แต่ต้องอยู่ในกรอบเวลาที่คนไม่ได้ทำเป็นคนกำหนด !!
เช่น

  • เมื่อเพิ่ม Animation ต่าง ๆ เข้ามา
  • ต้องทำการ deploy app
  • ต้องทำการ login
  • ต้องทำการเตรียมข้อมูลต่าง ๆ
  • ต้องการ clear ข้อมูลต่าง ๆ

นี่ยังไม่รวมถึงการทดสอบว่า feature ทำงานได้หรือไม่นะ !!

มีเครื่องมืออะไรช่วยบ้างล่ะ ?

ในการพัฒนา Android และ iOS นั้นมีเครื่องมือช่วยเยอะมาก ๆ (แต่มักไม่นำมาใช้งานกัน !!)
ตัวอย่างเช่น User Interface Testing ก็มีให้เลือกมากมาย เช่น

  • Android
    • UI Automator
    • Espresso
    • Appium
    • Calabash
    • Robotium
  • iOS
    • UI Testing + XCTest
    • Appium
    • Calabash
    • Flank

ซึ่งเครื่องมือเหล่านี้ทำงานแบบอัตโนมัติได้อีกด้วย

แน่นอนว่ายังต้องมีการทดสอบแบบ Manual
เนื่องจากมี scenario ต่าง ๆ ที่ต้องทดสอบมากมาย
รวมทั้งเรื่อง User Experience ต่าง ๆ ของการใช้งาน
ซึ่งต้องเน้นไปที่กรณีที่จำลอง หรือ ทดสอบแบบอัตโนมัติไม่ได้ หรือ ยาก
เพื่อให้เหมาะสมต่อการทดสอบบ้าง

การสร้างระบบ Continuous Integration Server

สำหรับ Mobile app นั้นมันไม่ใช่เรื่องง่ายเลย แต่ก็สามารถทำได้
โดยประกอบไปด้วยสิ่งต่าง ๆ ดังต่อไปนี้

ระบบการ Build ทำงานดังนี้

  • เมื่อทำการเปลี่ยนแปลง source code มายังระบบ Source Control เช่น Git เป็นต้น
  • ระบบ Continuous Integration จะทำการดึง source code มาทำงาน
  • ขั้นตอนการทำงานประกอบไปด้วย compile, unit testing, UI testing และ Code Analysis
  • ถ้าทำงานผ่านจะทำการสร้าง Artifact file ออกมาเช่น APK สำหรับ Android และ IPA สำหรับ iOS
  • จากนั้นทำการ upload Artifact file ไปยัง Server กลางเพื่อทดสอบต่อไป เช่น TestFight, HockerApp, Google Play Beta/Alpha เป็นต้น

สิ่งที่น่าสนใจและต้องใส่ใจคือ การทดสอบ
จะถูกแบ่งออกเป็น 3 ส่วนหลัก ๆ คือ

  • Unit testing สำหรับทดสอบการทำงานของ code สำหรับ Mobile app
    • Android ใช้งาน Unit4 และ Android Instrument test
    • iOS ใช้งาน XCTest, Quick และ Nimble
  • Integration testing สำหรับทำการทดสอบการทำงานร่วมกันระหว่าง Frontend และ Backend
  • End-to-End testing สำหรับทดสอบการทำงานทั้งระบบ
    • Android ใช้งาน UI Automator, Espresso, Appium และ Calabash
    • iOS ใช้งาน UI test, Appium และ Calabash

โดย process และเครื่องมือต่าง ๆ เหล่านี้

ไม่ได้ทำงานแบบ perfect หรือสมบูรณ์แบบ
แต่ช่วยทำงานการ development และ deployment สะดวกมากขึ้น
ลดงานที่ต้องทำซ้ำ ๆ ออกไป
ลดงานที่มักจะเกิดความผิดพลาดบ่อย ๆ ออกไป
ทำให้รู้ปัญหาและแก้ไขได้อย่างรวดเร็ว
จะได้มีเวลาไปทำในส่วนอื่น ๆ ที่สำคัญต่อไป

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

ผมเชื่อว่าทุกคนต้องการจะสร้างระบบที่มีคุณภาพออกไปให้ผู้ใช้งานเสมอ