Screen Shot 2558-09-07 at 11.52.23 AM
จากบทความเรื่อง Automated Android Development
ทำการอธิบายเกี่ยวกับวิธีการพัฒนา Android application
เพื่อให้สามารถทำงานแบบอัตโนมัติได้ง่าย
ซึ่งมันช่วยทำให้ชีวิตของนักพัฒนาดีขึ้น

มาดูกันว่าในบทความอธิบายเรื่องอะไรบ้าง ?

จากบทความอธิบายถึง 5 องค์ประกอบที่สำคัญ ดังนี้

  1. กำหนดวิธีการ branching model ในการพัฒนา
  2. นำ Agile มาใช้งาน
  3. ว่าด้วยเรื่องของการ build ด้วย Gradle
  4. วิธีการทดสอบ
  5. การนำ Continuous Integration มาใช้งาน

มีรายละเอียดดังนี้

1. กำหนดวิธีการ branching model ของ source code ก่อนเลย

กำหนดข้อตกลงการทำงานร่วมกันของคนในทีม
ว่าจะมีนโยบาย หรือ วิธีการอย่างไรบ้าง
เพื่อให้เข้าใจตรงกัน และ ทำงานไปในทิศทางเดียวกัน
เช่น

  • แต่ละ feature จะทำการ commit กันอย่างไร ?
  • กระบวนการ release เป็นอย่างไร ?
  • มั่นใจได้อย่างไรว่า สิ่งที่เปลี่ยนแปลงไปนั้น จะไม่กระทบส่วนการทำงานอื่น ๆ ?

ดังนั้น ควรต้องตอบคำถามเหล่านี้ให้ชัดเจนก่อนเริ่มทำงานนะครับ !!

จากบทความทำตามแนวคิด Git Branch Model
ซึ่งจะแยก branch ตามสถานะของระบบ ประกอบไปด้วย

  • Alpha หรือ Develop คือ อยู่ในช่วงการพัฒนา เมื่อพัฒนาแต่ละ feature เสร็จ ให้ทำการส่ง pull request ต่อไป
  • Beta หรือ Stage คือ เมื่อ feature ต่าง ๆ ทำการทดสอบผ่าน และทำการ merge เรียบร้อย (ทำการ approve pull request)
  • Release คือ เมื่อทำการ release หรือส่งมอบงาน

ในขั้นตอนของการ approve นั้นจะทำการ review code
ให้ code เป็นไปตาม coding conversion ที่ตกลงกันไว้
และทำการทดสอบ ทั้ง unit test, functional test และ acceptance test
เพื่อให้ได้ code ที่มีคุณภาพที่ดีขึ้น

2. นำ Agile มาใช้งาน

ไม่ว่าจะเป็น Scrum, Kanban หรือวิธีการอะไรก็ตาม
ซึ่งทำงานเป็นรอบสั้น ๆ เท่า ๆ กัน
จากบทความทำงานรอบละ 2 สัปดาห์

โดยแบ่งการทำงานเป็น 2 ส่วนหลักต่อรอบ คือ

  • ในสัปดาห์ที่ 1 ทำการพัฒนา feature ต่าง ๆ ซึ่งทำงานอยู่บน Alpha/Develop branch
  • ในสัปดาห์ที่ 2 ทำการแก้ไข และ ปรับปรุงแต่ละ feature จากสัปดาห์แรกให้มันมันคุณภาพที่ดีขึ้น เช่น แก้ไข bug และ refactor code เป็นต้น ซึ่งทำงานอยู่บน Beta/Stage branch

ถ้าทำตามนี้แล้ว จะทำให้เรามั่นใจได้ว่า
เมื่อจบแต่ละรอบการทำงานสามารถส่งมอบ feature ได้เสมอ
คำว่าพร้อมส่งมอบ คือ พร้อมเอาขึ้น Google Play Store เลยนะ

ปล.
ถ้าบน production เกิดปัญหา หรือ ข้อผิดพลาดขึ้นมา
ก็ให้ทำการ hotfix ที่ release branch ได้เลย
เมื่อแก้ไขเรียบร้อยแล้ว ต้อง merge กลับไปยัง branch อื่น ๆ ด้วย คือ Alpha/Develop และ Beta/Stage
นี่คือ Branching model ที่ต้องกำหนดร่วมกันนั่นเอง

3. ว่าด้วยเรื่องของการ build ด้วย Gradle

เมื่อเราเข้าใจ Branch model และขั้นตอนการพัฒนาเรียบร้อยแล้ว
ซึ่งเป็นการทำงานแบบ manual

จากนั้นเราต้องให้ความสำคัญกับการทำงานแบบอัตโนมัติ
เพื่อให้การทำงานรวดเร็ว และ สะดวกมากขึ้น
เครื่องมือที่ใช้งานคือ Gradle for Android

ถ้าใครยังไม่ใช้
แสดงว่าไม่ได้ใช้งาน Android Studio แน่นอน !!
ดังนั้นมาใช้งานกันเถอะนะ

ในบทความแนะนำให้ใช้ BuildConfig ซะ
สำหรับแยกการ build ตามแต่ละสถานะ เช่น alpha, beta และ release
ถ้าใครยังไม่ใช้ กรุณาใช้ซะ !!

4. วิธีการทดสอบ

ไม่ว่าจะพัฒนาระบบอะไรก็ตาม
การทดสอบนั้นเป็นสิ่งที่สำคัญ และ จำเป็นอย่างมาก
เพื่อทำให้มั่นใจว่า สิ่งที่นักพัฒนาทำการแก้ไข
ไม่ส่งผลกระทบต่อส่วนการทำงานอื่นจริง ๆ นะ

คำถาม
คุณทำการทดสอบหรือไม่ ?
คำตอบ
ทำแน่นอน ใครบ้างที่ไม่ทำล่ะ !!

คำถาม
คุณทำการทดสอบแบบไหน แบบ manual หรือไม่ ?
คำตอบ
…..

ในบทความแนะนำให้ทำการทดสอบแบบอัตโนมัติให้มากที่สุด
ตั้งแต่ Unit test, Integration test, User Interface(UI) test และ Performance test
ตลอดจนกระบวนการ deployment
เพื่อทำให้การทดสอบง่าย เร็ว และเสถียรมากขึ้น

เมื่อพูดถึงเครื่องมือ และ library สำหรับการทดสอบ Android application นั้น
ในปัจจุบันมีให้ครบถ้วน เช่น

  • Unit test ใช้ jUnit, Mockito
  • Integration test ใช้ Android Unit test และ Instrumentation
  • User Interface(UI) test ใช้ Espresso

5. การนำ Continuous Integration มาใช้งาน

เมื่อทำการเปลี่ยนแปลง code หรือ configuration ต่าง ๆ ที่เกี่ยวข้อง
และส่งการเปลี่ยนแปลงไปยัง Version control แล้ว
จะต้องมีระบบทำการ build ระบบงานแบบอัตโนมัติ
ซึ่งเราเรียกระบบนั้นว่า Continuous Integration Server

จากบทความแนะนำให้ใช้เครื่องมือชื่อว่า Jenkins
ซึ่งมีขั้นตอนการทำงานดังนี้

  • ทำการตรวจสอบการเปลี่ยนแปลงที่ Version control ใน branch แต่ละตัว
  • จากนั้นทำการ build ตามขั้นตอน เช่น การตรวจสอบ code, การทดสอบ เป็นต้น
  • ถ้าผลการ build ทำงานไม่ผ่าน ระบบต้องส่งผลการทำงานไปยังคนที่เกี่ยวข้องทั้งหมดทางช่องทางต่าง ๆ ที่ตกลงกันไว้ เช่น E-mail, Messaging ต่าง ๆ เป็นต้น

ส่วนเรื่องการส่งมอบระบบงานนั้น
ในบทความแนะนำให้ทำการ deploy ไปที่ HockeyApp ก่อน (Internal testing) หรือเครื่องมืออื่น ๆ
เนื่องจากสามารถทำการ upload app ได้ง่าย
รวมทั้งสามารถกำหนดกลุ่มผู้ใช้งานงานได้อย่างสะดวก
ลองใช้ดูสิครับ รออะไรกันอยู่ !!

โดยรวมแล้ว ทั้ง 5 เรื่องนี้

น่าจะพอมีประโยชน์สำหรับการพัฒนา Android application บ้าง
ลองนำไปปรับใช้งานดู เพื่อเพิ่มคุณภาพในด้านต่าง ๆ กันครับ