SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
從開發到上線的
華麗⼤大冒險
andyang at coscup 2017
ABOUT ME
▸ 楊哲偉 (Andy )
▸ andyang@parkinglotapp.com
▸ 停⾞車車⼤大聲公 Android Developer
▸ love reactive programing, kotlin
▸ 社群:
▸ Taiwan Android Developer Study Group (TADSG)
▸ Taipei Android Code Club Host (果⼦子咖啡)
OUTLINE
▸ 團隊組成
▸ 開發流程
▸ 需求定義
▸ 設計
▸ 需求實例例化
▸ 預估 / ⼯工作分配
▸ 開發
▸ 測試
▸ 發布 / 上架
▸ 持續改善
團隊組成
▸ 開發流程
定義需求
▸ PM 制定出這個版本的規格
▸ 在每週開發者會議提出討論
▸ 修訂規格
▸ 重新檢視修訂後的規格
▸ 發布開發 PRD
設計
▸ 依據 PM 的 PRD 設計 UI
▸ 與 RD 討論設計可⾏行行性
▸ 發布 design guideline
▸ color, dimension
▸ 切好需要的圖片資源到 google drive
▸ hdpi, xhdpi, xxhdpi
▸ .9.png
需求實例例化
▸ 依據 PRD & Design 開始定義出需求
▸ 開出需求⺟母票
▸ 依據需求⺟母票開出明確的需求⼦子票
▸ 當有⼯工作相依於其他 team 時
▸ 開出對應的需求票給 PM | Backend | Designer
REDMINE
▸ Open Source project (Ruby)
▸ 每個 team 有對應的專案
▸ 專案可再細切版本
▸ 可以開⼦子⺟母票
▸ 需求來來就開票,票來來就解
▸ 提供 REST API
預估/⼯工作分配
▸ 預估(不先預設分配給誰)
▸ 與賈賈維斯開始喊價
▸ 取得共識
▸ 共享知識
▸ 估出需⽤用的⼯工作天數回報給 PM
▸ ⼯工作分配
▸ ⾃自由意願(搶糧)
▸ 交換⼯工作 -> 讓請假更更容易易 XD
開發
▸ 開發⼯工具
▸ Android Studio
▸ Java / Kotlin
▸ gradle -> dependency & config management
▸ Chrome Dev Tools
▸ local cache data -> shared preferences / sqlite
▸ network -> request / response / latency
▸ internal web view debugger
開發的武器
▸ retrofit 2
▸ okhttp 3
▸ glide
▸ gson
▸ rxjava
▸ lottie
▸ crashlytics
▸ stetho
▸ timber
開發架構
▸ MVP pattern
▸ View
▸ activity, fragment, dialog fragment, dialog, custom view
(with android framework)
▸ Presenter
▸ pure java class / flow control / error handling
▸ Model
▸ Repository pattern abstract outer dependency
(network, sqlite, file, hardware, disk cache)
▸ business logic
測試
▸ 使⽤用者測試
▸ ⼈人⼯工測試
▸ 使⽤用者回報 app | email | google play report
▸ fabric crash report
▸ end to end test (UI test)
▸ calabash & cucumber
▸ integration test
▸ network api test
▸ unit test
▸ with android framework (androidTest)
▸ pure java class (test)
UI TEST
▸ Calabash (UI testing framework cross platform)
▸ 環境安裝
▸ ⽤用來來操作 app 的步驟
▸ 提供 irb 介⾯面 debug
Feature
Test Server
Calabash Device
adb
Instrumentation
Server
Application
TEST CASE
▸ Cucumber
▸ ⽤用來來描述需求的步驟的語法
▸ 可以透過步驟產⽣生 step definition
▸ 新增付款信⽤用卡步驟如下
Scenario: Add payment credit card

Given I login phone "0900000100" email "tkalu+100"

When I open MyWallet

When I press view with id "addCardContainer"

When I enter text "4910 0411 1111 1113" into field with id "cardNumber"

When I enter text "0222" into field with id "cardDate"

When I enter text "222" into field with id "cardCVC"

When I wait for a second

When I press view with id "complete"

Then I wait to see "新增成功"

And I take a screenshot
TEST REPORT
▸ Jenkins Cucumber Reporting plugin
如何選擇測試⽬目標
▸ 重要的功能流程
▸ 繁複的操作步驟
▸ 可以重複測試
▸ 可以驗證結果
測試⽬目標的粒度⼤大⼩小與原則
▸ Feature
▸ 盡量量之間不要有相依關係,保持獨立性
▸ 盡量量抽出前置作業的步驟重複使⽤用
▸ Scenario
▸ ⼀一⼑刀要切多⼤大,⼀一次只測⼀一件事
▸ 可以明確知道成功與失敗
看似完美,但還缺少那最後⼀一哩路路
註冊過的會員要如何重新註冊?
兌換過的優惠卷要如何在兌換?
測試的資料如何保持穩定?
測試⽤用的 API SERVER
▸ 使⽤用 Docker 建立 mock api server
▸ 每次都是乾淨的環境
▸ 保持與正式環境⼀一樣的版本
▸ 後⾨門程式僅在 docker server 上運⾏行行,避免奇怪的漏洞洞在
正視環境上裸奔
UI TEST WITH DOCKER
產⽣生 Docker container
DockerFile 建立測試 Server
將測試 server end point 修改⾄至程式碼
產⽣生連結測試 server 的 apk
UI 測試
發布/上架
▸ api 環境
▸ development (debug)
▸ staging (debug)
▸ production (release)
▸ build type
▸ debug / release (with proguard)
▸ production flavors
▸ dev (mini sdk version 21)
▸ general (mini sdk version 16)
▸ build variants
▸ devDebug (fabric 測試版)
▸ generalRelease (fabric 正式版 / google play 上架版)
發布流程
持續改進
▸ 提⾼高預估時間的精準度
▸ 每 1-2 週圈出⼀一些票發布,減短發布週期
▸ ⼩小 feature 估計時間會比較準確,不準可以及早發現
▸ 整個版本估計 buffer 會比較⼤大
▸ 尋找好⽤用的⼯工具畫出 UI map
▸ 訓練設計師命名顏⾊色 :)
▸ Jenkins pipeline (infrastructure as code)
▸ 提⾼高 UI Testing 的穩定度
▸ UI Testing 平⾏行行化測試加速測試時間
華麗的⼤大冒險還會不斷地走下去
WE NEED YOU
▸ APP 軟體 QA 測試技術員
▸ [⼯工作內容]
▸ 與專案經理理和 App 開發團隊合作,負責 App 軟體專案的軟體品質管理理
▸ 掌握使⽤用者需求及變更更
▸ 測試計劃(test plan)的規劃及測試案例例(test case)的設計與寫作
▸ 整合測試的執⾏行行與管理理並協助軟體⼯工程師 bug 之修改
▸ 紀錄測試報告及提交 bug、回歸測試並跟蹤驗證 bug
▸ 使⽤用者回報 bug 追蹤
▸ [條件要求]
▸ 熟悉測試理理論,了了解軟體各種測試類型、⽅方法及技巧
▸ 具有規劃與執⾏行行系統化測試實務經驗
▸ 具使⽤用測試管理理⼯工具經驗
▸ 針對網路路、功能及性能測試,熟悉⼀一種或以上的測試⼯工具者佳
▸ 曾參參與後台系統或 APP 程式開發者佳
▸ 細⼼心、善溝通、重團隊、有責任⼼心
▸ 具解決問題的獨立思考能⼒力力,學習意願⾼高
Q&A

Weitere ähnliche Inhalte

Was ist angesagt?

從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用謝 宗穎
 
為瞬間巨量做好準備 20180726
為瞬間巨量做好準備 20180726為瞬間巨量做好準備 20180726
為瞬間巨量做好準備 20180726Earou Huang
 
容器式基礎架構介紹
容器式基礎架構介紹容器式基礎架構介紹
容器式基礎架構介紹Philip Zheng
 
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)Chu-Siang Lai
 
React.js what do you really mean?
React.js what do you really mean?React.js what do you really mean?
React.js what do you really mean?昱安 周
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作Philip Zheng
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽Will Huang
 
Is it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automationIs it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automationChu-Siang Lai
 
Docker + CI pipeline 的高效率 ChatBot 開發方法
Docker + CI pipeline 的高效率 ChatBot 開發方法Docker + CI pipeline 的高效率 ChatBot 開發方法
Docker + CI pipeline 的高效率 ChatBot 開發方法Philip Zheng
 
Getting started with TDD
Getting started with TDDGetting started with TDD
Getting started with TDDIvan Wei
 
Clojure cnclojure-meetup
Clojure cnclojure-meetupClojure cnclojure-meetup
Clojure cnclojure-meetupsunng87
 
VSCode Remote Development
VSCode Remote DevelopmentVSCode Remote Development
VSCode Remote DevelopmentPhilip Zheng
 
Introduction to Golang final
Introduction to Golang final Introduction to Golang final
Introduction to Golang final Paul Chao
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践YuLing Liu
 
Google IoT Core 初體驗
Google IoT Core 初體驗Google IoT Core 初體驗
Google IoT Core 初體驗Simon Su
 
Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShopPhilip Zheng
 
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Chu-Siang Lai
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台Bo-Yi Wu
 

Was ist angesagt? (20)

從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用
 
為瞬間巨量做好準備 20180726
為瞬間巨量做好準備 20180726為瞬間巨量做好準備 20180726
為瞬間巨量做好準備 20180726
 
My DevOps Tour 0.1
My DevOps Tour 0.1My DevOps Tour 0.1
My DevOps Tour 0.1
 
容器式基礎架構介紹
容器式基礎架構介紹容器式基礎架構介紹
容器式基礎架構介紹
 
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 
React.js what do you really mean?
React.js what do you really mean?React.js what do you really mean?
React.js what do you really mean?
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽
 
Is it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automationIs it really easy for companies to import Ansible automation
Is it really easy for companies to import Ansible automation
 
Docker + CI pipeline 的高效率 ChatBot 開發方法
Docker + CI pipeline 的高效率 ChatBot 開發方法Docker + CI pipeline 的高效率 ChatBot 開發方法
Docker + CI pipeline 的高效率 ChatBot 開發方法
 
Getting started with TDD
Getting started with TDDGetting started with TDD
Getting started with TDD
 
Clojure cnclojure-meetup
Clojure cnclojure-meetupClojure cnclojure-meetup
Clojure cnclojure-meetup
 
VSCode Remote Development
VSCode Remote DevelopmentVSCode Remote Development
VSCode Remote Development
 
Grunt
Grunt Grunt
Grunt
 
Introduction to Golang final
Introduction to Golang final Introduction to Golang final
Introduction to Golang final
 
Docker 最佳实践
Docker 最佳实践Docker 最佳实践
Docker 最佳实践
 
Google IoT Core 初體驗
Google IoT Core 初體驗Google IoT Core 初體驗
Google IoT Core 初體驗
 
Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShop
 
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
 

Ähnlich wie 從開發到上線的華麗大冒險

前端框架發展
 前端框架發展 前端框架發展
前端框架發展Chi-wen Sun
 
Nodejs api server_implement
Nodejs api server_implementNodejs api server_implement
Nodejs api server_implementChi-wen Sun
 
Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路AgileCommunity
 
SRE CH12 - Effective Troubleshooting
SRE CH12 - Effective TroubleshootingSRE CH12 - Effective Troubleshooting
SRE CH12 - Effective TroubleshootingRick Hwang
 
SRE CH27 - Reliable Product Launches at Scale
SRE CH27 - Reliable Product Launches at Scale SRE CH27 - Reliable Product Launches at Scale
SRE CH27 - Reliable Product Launches at Scale Rick Hwang
 
美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进美团点评技术团队
 
The way to continuous delivery
The way to continuous deliveryThe way to continuous delivery
The way to continuous deliveryQiao Liang
 
「設計」在工程師職涯中 扮演的角色
「設計」在工程師職涯中 扮演的角色「設計」在工程師職涯中 扮演的角色
「設計」在工程師職涯中 扮演的角色Chris Wang
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境Will Huang
 
團隊協作實戰DDD
團隊協作實戰DDD團隊協作實戰DDD
團隊協作實戰DDDJed Lin
 
深度學習工作流程
深度學習工作流程深度學習工作流程
深度學習工作流程Rouyun Pan
 
AdWords Academy GA 谷歌分析系列课程三报告数据深入解读
AdWords Academy GA 谷歌分析系列课程三报告数据深入解读AdWords Academy GA 谷歌分析系列课程三报告数据深入解读
AdWords Academy GA 谷歌分析系列课程三报告数据深入解读AdWordsGreaterChina
 
Top100summit 游戏中的自动化测试 - 金山 - 白银祖
Top100summit 游戏中的自动化测试 - 金山 - 白银祖Top100summit 游戏中的自动化测试 - 金山 - 白银祖
Top100summit 游戏中的自动化测试 - 金山 - 白银祖drewz lin
 
Cognos8.3安装配置For Db2
Cognos8.3安装配置For Db2Cognos8.3安装配置For Db2
Cognos8.3安装配置For Db2Franky Lao
 
测试驱动的前端开发初探
测试驱动的前端开发初探测试驱动的前端开发初探
测试驱动的前端开发初探hua qiu
 
Test driven-frontend-develop
Test driven-frontend-developTest driven-frontend-develop
Test driven-frontend-developfangdeng
 
打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012Qiao Liang
 
service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012Qiao Liang
 
美团点评技术沙龙011 - 客户端用户体验数据量化
美团点评技术沙龙011 - 客户端用户体验数据量化美团点评技术沙龙011 - 客户端用户体验数据量化
美团点评技术沙龙011 - 客户端用户体验数据量化美团点评技术团队
 

Ähnlich wie 從開發到上線的華麗大冒險 (20)

Coding dojo
Coding dojoCoding dojo
Coding dojo
 
前端框架發展
 前端框架發展 前端框架發展
前端框架發展
 
Nodejs api server_implement
Nodejs api server_implementNodejs api server_implement
Nodejs api server_implement
 
Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路Project GATE 的敏捷實踐之路
Project GATE 的敏捷實踐之路
 
SRE CH12 - Effective Troubleshooting
SRE CH12 - Effective TroubleshootingSRE CH12 - Effective Troubleshooting
SRE CH12 - Effective Troubleshooting
 
SRE CH27 - Reliable Product Launches at Scale
SRE CH27 - Reliable Product Launches at Scale SRE CH27 - Reliable Product Launches at Scale
SRE CH27 - Reliable Product Launches at Scale
 
美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进
 
The way to continuous delivery
The way to continuous deliveryThe way to continuous delivery
The way to continuous delivery
 
「設計」在工程師職涯中 扮演的角色
「設計」在工程師職涯中 扮演的角色「設計」在工程師職涯中 扮演的角色
「設計」在工程師職涯中 扮演的角色
 
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境從頭打造 C#、.NET 與 ASP.NET Core 開發環境
從頭打造 C#、.NET 與 ASP.NET Core 開發環境
 
團隊協作實戰DDD
團隊協作實戰DDD團隊協作實戰DDD
團隊協作實戰DDD
 
深度學習工作流程
深度學習工作流程深度學習工作流程
深度學習工作流程
 
AdWords Academy GA 谷歌分析系列课程三报告数据深入解读
AdWords Academy GA 谷歌分析系列课程三报告数据深入解读AdWords Academy GA 谷歌分析系列课程三报告数据深入解读
AdWords Academy GA 谷歌分析系列课程三报告数据深入解读
 
Top100summit 游戏中的自动化测试 - 金山 - 白银祖
Top100summit 游戏中的自动化测试 - 金山 - 白银祖Top100summit 游戏中的自动化测试 - 金山 - 白银祖
Top100summit 游戏中的自动化测试 - 金山 - 白银祖
 
Cognos8.3安装配置For Db2
Cognos8.3安装配置For Db2Cognos8.3安装配置For Db2
Cognos8.3安装配置For Db2
 
测试驱动的前端开发初探
测试驱动的前端开发初探测试驱动的前端开发初探
测试驱动的前端开发初探
 
Test driven-frontend-develop
Test driven-frontend-developTest driven-frontend-develop
Test driven-frontend-develop
 
打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012打造面向服务的敏捷团队 Q con-beijing2012
打造面向服务的敏捷团队 Q con-beijing2012
 
service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012service-oriented agile team-Q con-beijing2012
service-oriented agile team-Q con-beijing2012
 
美团点评技术沙龙011 - 客户端用户体验数据量化
美团点评技术沙龙011 - 客户端用户体验数据量化美团点评技术沙龙011 - 客户端用户体验数据量化
美团点评技术沙龙011 - 客户端用户体验数据量化
 

Mehr von 哲偉 楊

Specification unit test by Spek
Specification unit test by SpekSpecification unit test by Spek
Specification unit test by Spek哲偉 楊
 
Code kata 的自我修煉
Code kata 的自我修煉Code kata 的自我修煉
Code kata 的自我修煉哲偉 楊
 
輕輕鬆鬆產生 changelog
輕輕鬆鬆產生 changelog輕輕鬆鬆產生 changelog
輕輕鬆鬆產生 changelog哲偉 楊
 
Speed up add custom marker on google map
Speed up add custom marker on google mapSpeed up add custom marker on google map
Speed up add custom marker on google map哲偉 楊
 
Jenkins for android developer at TWJUG
Jenkins for android developer at TWJUGJenkins for android developer at TWJUG
Jenkins for android developer at TWJUG哲偉 楊
 
自己的 Jenkins 自己來 for Android developer
自己的 Jenkins 自己來  for Android developer自己的 Jenkins 自己來  for Android developer
自己的 Jenkins 自己來 for Android developer哲偉 楊
 
Kotlin初體驗
Kotlin初體驗Kotlin初體驗
Kotlin初體驗哲偉 楊
 
Kotlin 初體驗
Kotlin 初體驗Kotlin 初體驗
Kotlin 初體驗哲偉 楊
 
Unit test and ui testing with cucumber
Unit test and ui testing with cucumberUnit test and ui testing with cucumber
Unit test and ui testing with cucumber哲偉 楊
 
RxJava With retrolambda
RxJava With retrolambdaRxJava With retrolambda
RxJava With retrolambda哲偉 楊
 
ORMLite Android
ORMLite AndroidORMLite Android
ORMLite Android哲偉 楊
 
設計師合作經驗分享
設計師合作經驗分享設計師合作經驗分享
設計師合作經驗分享哲偉 楊
 
Hybrid design with bootstrap
Hybrid design with bootstrapHybrid design with bootstrap
Hybrid design with bootstrap哲偉 楊
 

Mehr von 哲偉 楊 (16)

Specification unit test by Spek
Specification unit test by SpekSpecification unit test by Spek
Specification unit test by Spek
 
Code kata 的自我修煉
Code kata 的自我修煉Code kata 的自我修煉
Code kata 的自我修煉
 
輕輕鬆鬆產生 changelog
輕輕鬆鬆產生 changelog輕輕鬆鬆產生 changelog
輕輕鬆鬆產生 changelog
 
Speed up add custom marker on google map
Speed up add custom marker on google mapSpeed up add custom marker on google map
Speed up add custom marker on google map
 
Spek
SpekSpek
Spek
 
Jenkins for android developer at TWJUG
Jenkins for android developer at TWJUGJenkins for android developer at TWJUG
Jenkins for android developer at TWJUG
 
自己的 Jenkins 自己來 for Android developer
自己的 Jenkins 自己來  for Android developer自己的 Jenkins 自己來  for Android developer
自己的 Jenkins 自己來 for Android developer
 
Kotlin初體驗
Kotlin初體驗Kotlin初體驗
Kotlin初體驗
 
Kotlin 初體驗
Kotlin 初體驗Kotlin 初體驗
Kotlin 初體驗
 
Unit test and ui testing with cucumber
Unit test and ui testing with cucumberUnit test and ui testing with cucumber
Unit test and ui testing with cucumber
 
RxJava With retrolambda
RxJava With retrolambdaRxJava With retrolambda
RxJava With retrolambda
 
ORMLite Android
ORMLite AndroidORMLite Android
ORMLite Android
 
設計師合作經驗分享
設計師合作經驗分享設計師合作經驗分享
設計師合作經驗分享
 
Dog point
Dog pointDog point
Dog point
 
Gson
GsonGson
Gson
 
Hybrid design with bootstrap
Hybrid design with bootstrapHybrid design with bootstrap
Hybrid design with bootstrap
 

從開發到上線的華麗大冒險

  • 2. ABOUT ME ▸ 楊哲偉 (Andy ) ▸ andyang@parkinglotapp.com ▸ 停⾞車車⼤大聲公 Android Developer ▸ love reactive programing, kotlin ▸ 社群: ▸ Taiwan Android Developer Study Group (TADSG) ▸ Taipei Android Code Club Host (果⼦子咖啡)
  • 3. OUTLINE ▸ 團隊組成 ▸ 開發流程 ▸ 需求定義 ▸ 設計 ▸ 需求實例例化 ▸ 預估 / ⼯工作分配 ▸ 開發 ▸ 測試 ▸ 發布 / 上架 ▸ 持續改善
  • 5.
  • 7. 定義需求 ▸ PM 制定出這個版本的規格 ▸ 在每週開發者會議提出討論 ▸ 修訂規格 ▸ 重新檢視修訂後的規格 ▸ 發布開發 PRD
  • 8. 設計 ▸ 依據 PM 的 PRD 設計 UI ▸ 與 RD 討論設計可⾏行行性 ▸ 發布 design guideline ▸ color, dimension ▸ 切好需要的圖片資源到 google drive ▸ hdpi, xhdpi, xxhdpi ▸ .9.png
  • 9. 需求實例例化 ▸ 依據 PRD & Design 開始定義出需求 ▸ 開出需求⺟母票 ▸ 依據需求⺟母票開出明確的需求⼦子票 ▸ 當有⼯工作相依於其他 team 時 ▸ 開出對應的需求票給 PM | Backend | Designer
  • 10. REDMINE ▸ Open Source project (Ruby) ▸ 每個 team 有對應的專案 ▸ 專案可再細切版本 ▸ 可以開⼦子⺟母票 ▸ 需求來來就開票,票來來就解 ▸ 提供 REST API
  • 11. 預估/⼯工作分配 ▸ 預估(不先預設分配給誰) ▸ 與賈賈維斯開始喊價 ▸ 取得共識 ▸ 共享知識 ▸ 估出需⽤用的⼯工作天數回報給 PM ▸ ⼯工作分配 ▸ ⾃自由意願(搶糧) ▸ 交換⼯工作 -> 讓請假更更容易易 XD
  • 12. 開發 ▸ 開發⼯工具 ▸ Android Studio ▸ Java / Kotlin ▸ gradle -> dependency & config management ▸ Chrome Dev Tools ▸ local cache data -> shared preferences / sqlite ▸ network -> request / response / latency ▸ internal web view debugger
  • 13. 開發的武器 ▸ retrofit 2 ▸ okhttp 3 ▸ glide ▸ gson ▸ rxjava ▸ lottie ▸ crashlytics ▸ stetho ▸ timber
  • 14. 開發架構 ▸ MVP pattern ▸ View ▸ activity, fragment, dialog fragment, dialog, custom view (with android framework) ▸ Presenter ▸ pure java class / flow control / error handling ▸ Model ▸ Repository pattern abstract outer dependency (network, sqlite, file, hardware, disk cache) ▸ business logic
  • 15. 測試 ▸ 使⽤用者測試 ▸ ⼈人⼯工測試 ▸ 使⽤用者回報 app | email | google play report ▸ fabric crash report ▸ end to end test (UI test) ▸ calabash & cucumber ▸ integration test ▸ network api test ▸ unit test ▸ with android framework (androidTest) ▸ pure java class (test)
  • 16. UI TEST ▸ Calabash (UI testing framework cross platform) ▸ 環境安裝 ▸ ⽤用來來操作 app 的步驟 ▸ 提供 irb 介⾯面 debug Feature Test Server Calabash Device adb Instrumentation Server Application
  • 17. TEST CASE ▸ Cucumber ▸ ⽤用來來描述需求的步驟的語法 ▸ 可以透過步驟產⽣生 step definition ▸ 新增付款信⽤用卡步驟如下 Scenario: Add payment credit card
 Given I login phone "0900000100" email "tkalu+100"
 When I open MyWallet
 When I press view with id "addCardContainer"
 When I enter text "4910 0411 1111 1113" into field with id "cardNumber"
 When I enter text "0222" into field with id "cardDate"
 When I enter text "222" into field with id "cardCVC"
 When I wait for a second
 When I press view with id "complete"
 Then I wait to see "新增成功"
 And I take a screenshot
  • 18. TEST REPORT ▸ Jenkins Cucumber Reporting plugin
  • 20. 測試⽬目標的粒度⼤大⼩小與原則 ▸ Feature ▸ 盡量量之間不要有相依關係,保持獨立性 ▸ 盡量量抽出前置作業的步驟重複使⽤用 ▸ Scenario ▸ ⼀一⼑刀要切多⼤大,⼀一次只測⼀一件事 ▸ 可以明確知道成功與失敗
  • 22. 測試⽤用的 API SERVER ▸ 使⽤用 Docker 建立 mock api server ▸ 每次都是乾淨的環境 ▸ 保持與正式環境⼀一樣的版本 ▸ 後⾨門程式僅在 docker server 上運⾏行行,避免奇怪的漏洞洞在 正視環境上裸奔
  • 23. UI TEST WITH DOCKER 產⽣生 Docker container DockerFile 建立測試 Server 將測試 server end point 修改⾄至程式碼 產⽣生連結測試 server 的 apk UI 測試
  • 24. 發布/上架 ▸ api 環境 ▸ development (debug) ▸ staging (debug) ▸ production (release) ▸ build type ▸ debug / release (with proguard) ▸ production flavors ▸ dev (mini sdk version 21) ▸ general (mini sdk version 16) ▸ build variants ▸ devDebug (fabric 測試版) ▸ generalRelease (fabric 正式版 / google play 上架版)
  • 26. 持續改進 ▸ 提⾼高預估時間的精準度 ▸ 每 1-2 週圈出⼀一些票發布,減短發布週期 ▸ ⼩小 feature 估計時間會比較準確,不準可以及早發現 ▸ 整個版本估計 buffer 會比較⼤大 ▸ 尋找好⽤用的⼯工具畫出 UI map ▸ 訓練設計師命名顏⾊色 :) ▸ Jenkins pipeline (infrastructure as code) ▸ 提⾼高 UI Testing 的穩定度 ▸ UI Testing 平⾏行行化測試加速測試時間
  • 28. WE NEED YOU ▸ APP 軟體 QA 測試技術員 ▸ [⼯工作內容] ▸ 與專案經理理和 App 開發團隊合作,負責 App 軟體專案的軟體品質管理理 ▸ 掌握使⽤用者需求及變更更 ▸ 測試計劃(test plan)的規劃及測試案例例(test case)的設計與寫作 ▸ 整合測試的執⾏行行與管理理並協助軟體⼯工程師 bug 之修改 ▸ 紀錄測試報告及提交 bug、回歸測試並跟蹤驗證 bug ▸ 使⽤用者回報 bug 追蹤 ▸ [條件要求] ▸ 熟悉測試理理論,了了解軟體各種測試類型、⽅方法及技巧 ▸ 具有規劃與執⾏行行系統化測試實務經驗 ▸ 具使⽤用測試管理理⼯工具經驗 ▸ 針對網路路、功能及性能測試,熟悉⼀一種或以上的測試⼯工具者佳 ▸ 曾參參與後台系統或 APP 程式開發者佳 ▸ 細⼼心、善溝通、重團隊、有責任⼼心 ▸ 具解決問題的獨立思考能⼒力力,學習意願⾼高
  • 29. Q&A