เพิ่งไปแบ่งปันเรื่องระบบ 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
โดยการทำงานนั้นสามารถนำแนวคิด 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 สะดวกมากขึ้น
ลดงานที่ต้องทำซ้ำ ๆ ออกไป
ลดงานที่มักจะเกิดความผิดพลาดบ่อย ๆ ออกไป
ทำให้รู้ปัญหาและแก้ไขได้อย่างรวดเร็ว
จะได้มีเวลาไปทำในส่วนอื่น ๆ ที่สำคัญต่อไป
แต่การสร้างมันขึ้นมาไม่ใช่เรื่องง่าย
เนื่องจากทุกคนต้องทำความเข้าใจร่วมกัน
และมีเป้าหมายร่วมกัน
ผมเชื่อว่าทุกคนต้องการจะสร้างระบบที่มีคุณภาพออกไปให้ผู้ใช้งานเสมอ