เห็นมีคน 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
แสดงดังรูป ประกอบไปด้วย- 43 elements เยอะใช้ได้สำหรับหน้า login
- การตั้งชื่อเป็นแบบ Snake case เช่น custom_edit_text_style_ios_edit_text เป็นต้น แต่มี Camel case ปะปนมา 1 ตัวคือ disableIcon
- รูปแบบของชื่อแต่ละ element คือ name_type อ่านง่ายดีครับ
- แต่ Font ที่ใช้ใน app มันไม่ชัดเลย ถ้าปรับจะแจ่มมาก ๆ
หลังจากทำการ login และ ใส่ข้อมูลเริ่มต้นแล้วจะเข้ามาหน้าหลัก
แสดงดังรูป ประกอบไปด้วย- 70 elements
- เป็นหน้าหลักของการวางแผนจ่ายภาษี ประกอบไปด้วย
- income_button คือ รายได้
- deduct_button คือ ลดหย่อน
- planing_button คือ วางแผน
- summary_button คือ สรุป
- การตั้งชื่อของแต่ละ element ยังคงเหมือนเดิม มีผิดนิดหน่อยคือ planing_button น่าจะเป็น planning_button
- ปัญหาหลักที่เจอหน้านี้ คือ เมื่อกดตรงสิทธิ์ลดหย่อนไป และ รูปแถบ progress พบว่า app จะปิดตัวเองบ่อยมาก ๆ
หน้าต่อไปที่ลองทดสอบ คือ หน้ากรอกข้อมูลรายได้ (Income)
แสดงดังรูป ประกอบไปด้วย 116 elements ที่เยอะเพราะว่า แถบเมนูด้านล่างนั่นเองปัญหาที่พบคือตรง ? มุมขวาบน เมื่อเข้าไปแล้วพบว่า App มัน crash ไปเลย !!
เมื่อกดปุ่มเช็คเงื่อนไขแบบละเอียด เมื่อไปดูใน log พบว่าปัญหาคือ ActivityNotFoundException เนื่องจาก app ต้องการใช้ Google Play Service นั่นเอง แต่ emulator สำหรับการทดสอบไม่ได้ทำการติดตั้ง รวมทั้งกับ app ไม่ได้ทำการตรวจสอบไว้เช่นกัน แสดงดังรูปจากนั้นทำการกรอกข้อมูลรายได้ที่มาจากเงินเดือน
ประกอบไปด้วย- 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 ยากนิดหน่อยเพราะว่า ต้องทำการกรอกทีละตัว
โดยรวมแล้วเป็น App ที่น่าใช้งาน และ มี UI ที่เรียบง่าย สบายตา
แต่มีปัญหาเกี่ยวกับการจัดการ State ของ app เช่นการกดปุ่ม back (ไม่มีใครกดแล้วมั้ง !!) โดย app มันจะขึ้น popup ถามว่า ต้องการปิดโปรแกรมใช่มั้ยคะ ตลอดเลย น่าจะเป็นเพราะว่าใช้ Fragment ทำให้การจัดการ state ยากขึ้น !! แสดงดังรูป กับเมนูต่าง ๆ อยู่ด้านล่าง ซึ่งไม่เหมาะเท่าไรสำหรับ Android app แต่ขอเดาว่า น่าจะมี template มาจาก iOS app ซึ่งไม่อยากให้หน้าตาของ app มันต่างกันมากนัก ดังจะเห็นได้จาก UI ที่พยายาม custom ให้เหมือน หรือ คล้าย iOS app ให้มากที่สุด คิดว่าตอนเขียน Custom UI น่าจะสนุกมาก ๆ เพราะว่า Custom ทั้ง app เลยเกี่ยวกับ Logging ต่าง ๆ พบว่า
มี Log message ออกมาจาก Retrofit เยอะมาก ๆ หนึ่งในนั้นก็คือ Response ของแต่ละ request ซึ่งคิดว่า ไม่น่าจะพ่น log message พวกนี้ออกมาจาก app นะครับ แสดงดังรูปกับอีกเรื่องที่เจอบ่อย ๆ คือ เมื่อเปิด app ขึ้นมาอีกครั้งจะรอการ Sync นานมาก ๆ
ทำให้การทดสอบแบบอัตโนมัติ fail ได้ง่าย แสดงดังรูป สาเหตุน่าจะมาจากการไปเรียกข้อมูลล่าสุดจาก server ปัญหามาจากเรื่อง Certified SSL นั่นเอง ไม่แน่ใจเป็นปัญหาเพราะว่า ผมใช้ผ่าน emulator หรือเปล่า แสดง log การดึงข้อมูลจาก server ดังรูปปิดท้ายด้วยเขียน Automated Acceptance Test ด้วย Calabash for Android นิดหน่อย
เป็น flow การ login เข้ามาเพื่อกำหนดหน้ารายได้ (Income) กำหนดค่าลดหย่อนนิดหน่อย ปิดท้ายไปหน้าสรุป (Summary) ดังนี้จากการทดสอบเขียน Automated test ของ app ด้วย Calabash พบปัญหาดังนี้
- สามารถเขียนได้ไม่ยากเท่าไร แต่ในการเปลี่ยนหน้าจอนั้น ต้องทำการ delay การทดสอบเพื่อให้หน้าจอ render ให้ครบก่อน
- ข้อตกลงในการตั้งชื่อดี เป็นไปในทิศทางเดียวกัน มีเพียง Custom Keyboard เท่านั้นที่แตกต่าง
- ปัญหาเรื่องของการจัดการ state ของ Android app กับ Fragment
- การแสดง log ต่าง ๆ ออกมาทาง console เยอะมาก โดยเฉพาะจาก Retrofit
- ในหน้าแรกของ app มีการ sync ข้อมูลกับทาง server ตลอด ซึ่งก่อให้เกิดปัญหาบ้าง
- ส่วนของเมนูอยู่ด้านล่าง อาจจะงง ๆ เล็กน้อยสำหรับคนใช้งาน Android ซึ่งเอาตัวผมเองเป็นตัววัด !!