เพิ่งไปแบ่งปันเรื่องระบบ Automated deployment สำหรับ Mobile app มา
โดยประกอบไปด้วยส่วนต่าง ๆ เช่น
- ระบบ API หรือ Backend
- ระบบ Mobile หรือ Frontend ทั้ง Android และ iOS
ส่วนการทำงานของ Backend หรือ API
สิ่งที่ขาดไม่ได้เลยก็คือ Continuous Integration และ Continuous Deployment นั่นหมายความว่า เมื่อมีการเปลี่ยนแปลง source code และ resource ต่าง ๆ แล้ว จะมีระบบที่ทำงานแบบอัตโนมัติตั้งแต่- จัดเตรียม Environment
- Build process
- Testing process
- Deployment process
ส่วนการทำงานของ Frontend หรือ Mobile
เริ่มต้นด้วย process การทำงาน ซึ่งมีหลายรูปแบบ โดยที่ผมขอแนะนำคือ รูปการทำงานแบบนี้ นำมาจากบทความเรื่อง Automating Mobile Deployment จากทีมพัฒนา AutoCAD 360 โดยการทำงานนั้นสามารถนำแนวคิด 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 ข้อมูลต่าง ๆ
มีเครื่องมืออะไรช่วยบ้างล่ะ ?
ในการพัฒนา Android และ iOS นั้นมีเครื่องมือช่วยเยอะมาก ๆ (แต่มักไม่นำมาใช้งานกัน !!) ตัวอย่างเช่น User Interface Testing ก็มีให้เลือกมากมาย เช่น- Android
- UI Automator
- Espresso
- Appium
- Calabash
- Robotium
- iOS
- UI Testing + XCTest
- Appium
- Calabash
- Flank
การสร้างระบบ 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 เป็นต้น
- 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 สะดวกมากขึ้น ลดงานที่ต้องทำซ้ำ ๆ ออกไป ลดงานที่มักจะเกิดความผิดพลาดบ่อย ๆ ออกไป ทำให้รู้ปัญหาและแก้ไขได้อย่างรวดเร็ว จะได้มีเวลาไปทำในส่วนอื่น ๆ ที่สำคัญต่อไปแต่การสร้างมันขึ้นมาไม่ใช่เรื่องง่าย เนื่องจากทุกคนต้องทำความเข้าใจร่วมกัน และมีเป้าหมายร่วมกันผมเชื่อว่าทุกคนต้องการจะสร้างระบบที่มีคุณภาพออกไปให้ผู้ใช้งานเสมอ