Slide 1

Slide 1 text

Mobile App Continuous Delivery PRESENTED BY QC Li⎪ February 03, 2017

Slide 2

Slide 2 text

About me QC Li Yahoo! Mobile App Engineer qcli @ yahoo-inc . com

Slide 3

Slide 3 text

Outline ■ Continuous Delivery ■ Continuous Delivery Pipeline ■ Mobile App Continuous Delivery Pipeline

Slide 4

Slide 4 text

Continuous Delivery

Slide 5

Slide 5 text

CD https://commons.wikimedia.org/wiki/File:Compact_disc.svg

Slide 6

Slide 6 text

Continuous Delivery Continuous Delivery (CD) is a software engineering approach in which teams keep producing valuable software in short cycles and ensure that the software can be reliably released at any time. “ — Wikipedia

Slide 7

Slide 7 text

Continuous Delivery What we want is … ■ Low Cycle Time ● Cycle time: The time from deciding that you need to make a change to having it in production. ■ High Quality

Slide 8

Slide 8 text

Continuous Delivery Automation almost everything

Slide 9

Slide 9 text

Continuous Delivery Commit to Production without human intervention

Slide 10

Slide 10 text

Continuous Delivery Pipeline

Slide 11

Slide 11 text

Continuous Delivery Pipeline ■ Workflow of tasks ■ Automatically delivers code from commit to production Automation Commit Task A Task B Task C Production Candidate Release

Slide 12

Slide 12 text

Automation Version Control Ready for release Continuous Delivery Pipeline ■ Keep everything in Version Control Commit A Task A Task B Task C Production Candidate A

Slide 13

Slide 13 text

Automation Automation Version Control Ready for release Continuous Delivery Pipeline ■ Keep everything in Version Control Commit A Task A Task B Task C Commit B Task A Task B Task C Production Candidate B Production Candidate A

Slide 14

Slide 14 text

Continuous Delivery Pipeline ■ Each change should propagate through the pipeline instantly Trigger Commit A Task A Task B Task C

Slide 15

Slide 15 text

Continuous Delivery Pipeline ■ If any part of the pipeline fail, stop the line Trigger Commit A Task A Task B Task C Trigger Feedback

Slide 16

Slide 16 text

Continuous Delivery Pipeline ■ If any part of the pipeline fail, stop the line Trigger Production Candidate Commit A Task A Task B Task C Trigger Trigger Trigger Trigger Trigger Commit B Commit C Trigger Trigger Feedback

Slide 17

Slide 17 text

Continuous Delivery Pipeline ■ Let the state of pipeline visible Trigger Production Candidate Commit A Task A Task B Task C Trigger Trigger Trigger Trigger Trigger Commit B Commit C Trigger Trigger Feedback https://commons.wikimedia.org/wiki/File:Eye_iris.jpg

Slide 18

Slide 18 text

Continuous Delivery Pipeline ■ Let the state of pipeline visible ● Dashboard https://commons.wikimedia.org/wiki/File:Eye_iris.jpg

Slide 19

Slide 19 text

Continuous Delivery Pipeline ■ Let the state of pipeline visible ● Physically

Slide 20

Slide 20 text

Continuous Delivery Pipeline ■ Let the state of pipeline visible ● Physically https://youtu.be/2ygPkb8KW70?t=2m55s

Slide 21

Slide 21 text

Continuous Delivery Pipeline ■ Quick feedback ■ Everyone is responsible for the quality ■ Everyone is responsible for the delivery process

Slide 22

Slide 22 text

Continuous Delivery Pipeline — Plasma Chen, 2014 Generated by 萌典字圖

Slide 23

Slide 23 text

Continuous Delivery Pipeline ■ Automatically delivers code from commit to production ● Build production from code ● Testing Automation Commit Task A Task B Task C Production Candidate Release

Slide 24

Slide 24 text

Continuous Delivery Pipeline ■ Automatically delivers code from commit to production ● Build production from code ● Testing Automation Commit Build Testing Production Candidate Release

Slide 25

Slide 25 text

Mobile App Continuous Delivery Pipeline ■ Automatically delivers code from commit to production ● Commit Stage ● Automated Acceptance Testing Stage ● Automated Non-functional Testing Stage Automation Commit Commit Stage Acceptance Testing Non-functional Testing Production Candidate Release

Slide 26

Slide 26 text

Mobile App Continuous Delivery Pipeline ■ Commit Stage ● Build App ● Assert App works at technical level Automation Commit Commit Stage Acceptance Testing Non-functional Testing Production Candidate Release

Slide 27

Slide 27 text

Mobile App Continuous Delivery Pipeline ■ Automated Acceptance Testing Stage ● Assert App works at functional level Automation Commit Commit Stage Acceptance Testing Non-functional Testing Production Candidate Release

Slide 28

Slide 28 text

Mobile App Continuous Delivery Pipeline ■ Automated Non-functional Testing Stage ● Assert App works at non-functional level Automation Commit Commit Stage Acceptance Testing Non-functional Testing Production Candidate Release

Slide 29

Slide 29 text

Pre Commit

Slide 30

Slide 30 text

Pre Commit ■ Developing, make changes ■ Build locally ■ Test locally (e.g. Unit test) ■ Commit after it can be built successfully and passing test Automation Commit Commit Stage Acceptance Testing Non-functional Testing Production Candidate Release

Slide 31

Slide 31 text

Pull Request ■ After commit change locally, create a pull request Commit Commit

Slide 32

Slide 32 text

Code Review ■ Changes need be reviewed by other developers ■ DO NOT merge it without code review

Slide 33

Slide 33 text

Code Review ■ Changes need be reviewed by other developers ■ DO NOT merge it without code review

Slide 34

Slide 34 text

Merge ■ Merge after it can be built successfully and passing test

Slide 35

Slide 35 text

Merge ■ Merge after it can be built successfully and passing test

Slide 36

Slide 36 text

Commit Stage

Slide 37

Slide 37 text

Commit Stage ■ Assert App works at technical level ■ Build ■ Unit test Automation Commit Commit Stage Acceptance Testing Non-functional Testing Production Candidate Release

Slide 38

Slide 38 text

Build ■ Compile source code to build App Source Code Source Code Source Code .apk .ipa

Slide 39

Slide 39 text

Unit Test ■ Test a method with input, then check if the output is expected ■ Don’t repeat yourself ■ Arrange-Act-Assert pattern

Slide 40

Slide 40 text

Unit Test

Slide 41

Slide 41 text

Analysis ■ Check its health ● Test coverage ● Duplicated code ● Number of warnings ● ...

Slide 42

Slide 42 text

Automated Acceptance Testing Stage

Slide 43

Slide 43 text

Automated Acceptance Testing Stage ■ Assert App delivers the value to user is expected ■ Smoke test ■ Functional test Automation Commit Commit Stage Acceptance Testing Non-functional Testing Production Candidate Release

Slide 44

Slide 44 text

Smoke Test ■ Check App can provide most important features ■ Test through UI automation ✔

Slide 45

Slide 45 text

Functional Test ■ Check App provide main features we want to deliver ■ Test through UI automation ✔

Slide 46

Slide 46 text

Automated Non-functional Testing Stage

Slide 47

Slide 47 text

Automated Non-functional Testing Stage ■ Assert App works at non-functional level ■ Stability Test ■ Performance Test Automation Commit Commit Stage Acceptance Testing Non-functional Testing Production Candidate Release

Slide 48

Slide 48 text

Stability Test ■ Monkey test https://commons.wikimedia.org/wiki/File:Monkey-typing.jpg

Slide 49

Slide 49 text

Stability Test ■ Monkey test

Slide 50

Slide 50 text

Performance Test ■ Cold start time ■ Memory usage ■ FPS ■ ...

Slide 51

Slide 51 text

Release

Slide 52

Slide 52 text

Mobile App Continuous Delivery Pipeline ■ There is always a gap between ideal and reality Automation Commit Commit Stage Acceptance Testing Non-functional Testing Production Candidate Release

Slide 53

Slide 53 text

Mobile App Continuous Delivery Pipeline ■ There is always a gap between ideal and reality Automation Commit Commit Stage Acceptance Testing Non-functional Testing Production Candidate Release Manual Testing

Slide 54

Slide 54 text

Manual Testing ■ Something can not be tested automatically

Slide 55

Slide 55 text

Release ■ Submit the production candidate to Google Play / App Store .apk .ipa

Slide 56

Slide 56 text

After Release ■ If find an error in production... — 《論語》 Generated by 萌典字圖

Slide 57

Slide 57 text

After Release ■ Add test cases to prevent it, 「不貳過」 — 《論語》 Generated by 萌典字圖

Slide 58

Slide 58 text

Mobile App Continuous Delivery Pipeline ■ Low cycle time ■ High quality Automation Commit Commit Stage Acceptance Testing Non-functional Testing Production Candidate Release Manual Testing

Slide 59

Slide 59 text

Mobile App Continuous Delivery Pipeline Automation Commit Commit Stage Acceptance Testing Non-functional Testing Production Candidate Release Manual Testing Commit to Production (almost) without human intervention

Slide 60

Slide 60 text

Q & A ._./