Screen Shot 2558-12-10 at 8.51.40 PM
เห็นมีคน share iTAX pro app ที่ Facebook กันเยอะเลย
ใกล้จะสิ้นปีแล้ว เรื่องของภาษีจึงสำคัญมาก ๆ นั่นเอง
โดย app นี้จะเข้ามาช่วยเราวางแผน และ คำนวณการเสียภาษี
รวมทั้งมีข้อมูลต่าง ๆ มากมาย
มีให้ใช้งานทั้ง Android, iOS หรือ ผ่าน web ได้อีกด้วย
ลองนำไปใช้งานดูครับ

แต่เรามา review app นี้ในมุมมองของ developer
เพื่อดูว่า app นี้เป็นอย่างไร ง่ายต่อการทดสอบแบบอัตโนมัติหรือไม่ ?
มาเริ่มกันเลย

สิ่งแรกที่สะดุดตามาก ๆ คือ ชื่อ id หรือ package name ของ app นั่นเอง

ใช้ชื่อว่า com.ld.itax_pro_android
ซึ่งน่าจะผิด naming convention ของการตั้งชื่อไปสักหน่อย

ต่อมาขนาดของ app ประมาณ 13 MB ซึ่งถือว่าไม่ใหญ่
ใช้เวลาในการ download ไม่นาน สบาย ๆ

ส่วนจำนวนของ Activity ไม่เยอะเพียง 6​ Activity เท่านั้น
แสดงว่ามีการใช้ Fragment นั่นเอง !!

จากนั้นมาดูกันหน่อยว่า app นี้ใช้ library อะไรกันบ้าง ?

  • Dagger
  • Retrofit
  • OKIO
  • Butterknife สำหรับการ binding view ด้วย Annotation
  • Bolts
  • Icepick สำหรับการจัดการ state ต่าง ๆ ของ Android
  • ReLinker สำหรับการ load library ต่าง ๆ
  • Fabric ซึ่งหลัก ๆ ใช้ crashlytics
  • ใช้ Yahoo Flurry สำหรับเก็บผลเกี่ยวกับ Analytics เอาไว้ดูเรื่อง User eXperience

มาเริ่มใช้งาน app กันดีกว่า

หน้าแรก คือ หน้า Login

แสดงดังรูป
login

ประกอบไปด้วย

  • 43 elements เยอะใช้ได้สำหรับหน้า login
  • การตั้งชื่อเป็นแบบ Snake case เช่น custom_edit_text_style_ios_edit_text เป็นต้น แต่มี Camel case ปะปนมา 1 ตัวคือ disableIcon
  • รูปแบบของชื่อแต่ละ element คือ name_type อ่านง่ายดีครับ
  • แต่ Font ที่ใช้ใน app มันไม่ชัดเลย ถ้าปรับจะแจ่มมาก ๆ

หลังจากทำการ login และ ใส่ข้อมูลเริ่มต้นแล้วจะเข้ามาหน้าหลัก

แสดงดังรูป

main

ประกอบไปด้วย

  • 70 elements
  • เป็นหน้าหลักของการวางแผนจ่ายภาษี ประกอบไปด้วย
    • income_button คือ รายได้
    • deduct_button คือ ลดหย่อน
    • planing_button คือ วางแผน
    • summary_button คือ สรุป
  • การตั้งชื่อของแต่ละ element ยังคงเหมือนเดิม มีผิดนิดหน่อยคือ planing_button น่าจะเป็น planning_button
  • ปัญหาหลักที่เจอหน้านี้ คือ เมื่อกดตรงสิทธิ์ลดหย่อนไป และ รูปแถบ progress พบว่า app จะปิดตัวเองบ่อยมาก ๆ

หน้าต่อไปที่ลองทดสอบ คือ หน้ากรอกข้อมูลรายได้ (Income)

แสดงดังรูป

income

ประกอบไปด้วย
116 elements ที่เยอะเพราะว่า แถบเมนูด้านล่างนั่นเอง

ปัญหาที่พบคือตรง ? มุมขวาบน เมื่อเข้าไปแล้วพบว่า App มัน crash ไปเลย !!

เมื่อกดปุ่มเช็คเงื่อนไขแบบละเอียด
เมื่อไปดูใน log พบว่าปัญหาคือ ActivityNotFoundException
เนื่องจาก app ต้องการใช้ Google Play Service นั่นเอง
แต่ emulator สำหรับการทดสอบไม่ได้ทำการติดตั้ง
รวมทั้งกับ app ไม่ได้ทำการตรวจสอบไว้เช่นกัน
แสดงดังรูป

Screen Shot 2558-12-10 at 10.38.22 PM

จากนั้นทำการกรอกข้อมูลรายได้ที่มาจากเงินเดือน

ประกอบไปด้วย

  • 74 elements
  • โดยชื่อของ element เงินเดือนชื่อว่า income_salary_salary ซึ่งน่าจะเป็น income_from_salary
  • โดยชื่อของ element ค่าจ้างทั่วไปชื่อว่า income_salary_freelance ซึ่งน่าจะเป็น income_from_freelance
  • ในการกรอกข้อมูลรายได้นั้น จะทำการ custom keyboard ขึ้นมาเอง มี element ดังต่อไปนี้
    • btnDone
    • btn0, btn1 ไปจนถึง btn9
  • ซึ่งการตั้งชื่อจะขัดแย้งกับการตั้งชื่อในส่วนอื่น ๆ ทั้งหมดเลย !!
  • การ custom keyboard ทำให้กรอกข้อมูลผ่าน Automate test ยากนิดหน่อยเพราะว่า ต้องทำการกรอกทีละตัว

แสดงดังรูป

keyboard

โดยรวมแล้วเป็น App ที่น่าใช้งาน และ มี UI ที่เรียบง่าย สบายตา

แต่มีปัญหาเกี่ยวกับการจัดการ State ของ app
เช่นการกดปุ่ม back (ไม่มีใครกดแล้วมั้ง !!)
โดย app มันจะขึ้น popup ถามว่า ต้องการปิดโปรแกรมใช่มั้ยคะ ตลอดเลย
น่าจะเป็นเพราะว่าใช้ Fragment ทำให้การจัดการ state ยากขึ้น !!
แสดงดังรูป

close

กับเมนูต่าง ๆ อยู่ด้านล่าง ซึ่งไม่เหมาะเท่าไรสำหรับ Android app
แต่ขอเดาว่า น่าจะมี template มาจาก iOS app
ซึ่งไม่อยากให้หน้าตาของ app มันต่างกันมากนัก
ดังจะเห็นได้จาก UI ที่พยายาม custom ให้เหมือน หรือ คล้าย iOS app ให้มากที่สุด
คิดว่าตอนเขียน Custom UI น่าจะสนุกมาก ๆ
เพราะว่า Custom ทั้ง app เลย

เกี่ยวกับ Logging ต่าง ๆ พบว่า

มี Log message ออกมาจาก Retrofit เยอะมาก ๆ
หนึ่งในนั้นก็คือ Response ของแต่ละ request
ซึ่งคิดว่า ไม่น่าจะพ่น log message พวกนี้ออกมาจาก app นะครับ
แสดงดังรูป

Screen Shot 2558-12-11 at 10.37.19 AM

กับอีกเรื่องที่เจอบ่อย ๆ คือ เมื่อเปิด app ขึ้นมาอีกครั้งจะรอการ Sync นานมาก ๆ

ทำให้การทดสอบแบบอัตโนมัติ fail ได้ง่าย
แสดงดังรูป

sync

สาเหตุน่าจะมาจากการไปเรียกข้อมูลล่าสุดจาก server
ปัญหามาจากเรื่อง Certified SSL นั่นเอง
ไม่แน่ใจเป็นปัญหาเพราะว่า ผมใช้ผ่าน emulator หรือเปล่า
แสดง log การดึงข้อมูลจาก server ดังรูป

Screen Shot 2558-12-11 at 10.40.47 AM

ปิดท้ายด้วยเขียน Automated Acceptance Test ด้วย Calabash for Android นิดหน่อย

เป็น flow การ login เข้ามาเพื่อกำหนดหน้ารายได้ (Income)
กำหนดค่าลดหย่อนนิดหน่อย
ปิดท้ายไปหน้าสรุป (Summary) ดังนี้

itax

จากการทดสอบเขียน Automated test ของ app ด้วย Calabash พบปัญหาดังนี้

  • สามารถเขียนได้ไม่ยากเท่าไร แต่ในการเปลี่ยนหน้าจอนั้น ต้องทำการ delay การทดสอบเพื่อให้หน้าจอ render ให้ครบก่อน
  • ข้อตกลงในการตั้งชื่อดี เป็นไปในทิศทางเดียวกัน มีเพียง Custom Keyboard เท่านั้นที่แตกต่าง
  • ปัญหาเรื่องของการจัดการ state ของ Android app กับ Fragment
  • การแสดง log ต่าง ๆ ออกมาทาง console เยอะมาก โดยเฉพาะจาก Retrofit
  • ในหน้าแรกของ app มีการ sync ข้อมูลกับทาง server ตลอด ซึ่งก่อให้เกิดปัญหาบ้าง
  • ส่วนของเมนูอยู่ด้านล่าง อาจจะงง ๆ เล็กน้อยสำหรับคนใช้งาน Android ซึ่งเอาตัวผมเองเป็นตัววัด !!

ส่วน Script ของ Automated Script อยู่ที่นี่ Gist::iTax Pro with Calabash Android