Getting Predictable - Pragmatic Approach for Mobile Development - Devday.lk 2013

1,001 views

Published on

Getting Predictable - Pragmatic Approach for Mobile Development by Anjana Somathilake
Are you been challenged by…

Aggressive timelines, increasing team size, and a QA team that demands stability?
An ever growing defect count that impacts the release date?
A "Fix one thing, break another" syndrome?
A UX that is still unknown while the product team is asking for stats.
Stakeholders that instantly need to see beta versions installed on their phones.
Random app crashes (in front of the CEO &/or Paying Clients) and no one knows why?
3rd party API changes and the team doesn’t find out till after the app submission
Achieve Predictable Delivery in Mobile Application Development by

Automating the When & How using…

Acceptance Testing with Calabash
Builds, Unit Tests and Code Quality with Jenkins CI, OCUnit and Clang Static Analyzer
App Distribution with TestFlight
And Implementing Insight and Analytics with…

Real-time Crash Reports and Analytics through Crashlytics
Actions and Events Tracking with Mixpanel

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,001
On SlideShare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
8
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Getting Predictable - Pragmatic Approach for Mobile Development - Devday.lk 2013

  1. 1. Getting Predictable Predictable Delivery in Mobile Application Development Anjana Somathilake Director, Engineering and Architecture
  2. 2. Coverage!
  3. 3. Target Audience ! App Developers who are challenged by, •  QA team that demands stability •  Continuous injection of regression defects •  Random app crashes •  …
  4. 4. Key success factors of tech startups! •  Founder(s)! Founders have strong leadership skills, charisma and communication skills. build strong teams, attract strategic partners/investors, and have deep domain knowledge. •  Vision! Vision to make the company unique and let it stand out amongst its competitors. •  Team! Strong teams that can execute on any project and make it sustainable and profitable. •  Market opportunity! The product, solution or technology should solve s demand that the target market really needs. •  High-quality product! Must create cool, innovative and useful products of high quality.
  5. 5. Key Success Factors of a High Quality Product! “Technology ! Selection”! “Engineering! Rigor”! •  On Time Delivery! •  Functional Beauty ! “Tech Architecture! and Design”! •  User Experience (UX) ! “Performance ! Tuning”!
  6. 6. The Challenge!! Predictability!
  7. 7. Our Topic?! Getting Predictable!
  8. 8. Focus !
  9. 9. Impact! Challenges KSF Missing Regression Aggressive Add New Bus Random Manual Beta App Usage Defects Timelines Developer Factor Crashes Testing Distribution Analytics On Time Delivery                 UX                 Functional Beauty                
  10. 10. Impact of the Solution! Regression Aggressive Defects Timelines _ Acceptance Testing Add New Bus Missing Usage Random Developer Factor Analytics Crashes         Unit Tests       CI Builds           App Distribution   Crash Reports Actions and Events Tracking                                               Manual Beta App Testing Distribution                      
  11. 11. Solution Approach!
  12. 12. Automation!
  13. 13. Unit Testing – JUint and OCUnit! I don’t believe in Unit Testing Are you kidding me?
  14. 14. Acceptance Testing – What is Calabash?! •  Tool for BDD (Behavior-driven development) style acceptance testing, consisting of two projects: •  •  Calabash Android: https://github.com/calabash/calabash-android Calabash iOS: https://github.com/calabash/calabash-ios •  Open-Source and Free •  Written in Objective C, Java and Ruby •  Test cases will be written in Ruby
  15. 15. Calabash Features! •  Write “business” readable specifications (Cucumber) •  •  Execute the spec as automated acceptance tests •  BDD via the Cucumber tool •  Cross-platform testing: maximize sharing when developing on multiple platforms •  Runs on physical devices as well as simulators/emulators Native and hybrid apps for Android and iOS
  16. 16. Calabash Architecture!
  17. 17. Calabash Demo! •  •  •  •  Calabash Console Cucumber Feature Files Step Definitions
  18. 18. Automated Builds – Jenkins CI! •  Contiguous integration for both iOS and Android •  Execute unit tests and Calabash tests as part of CI •  Identify build failures •  Automated emails when build errors occur, tests fails •  Upload builds to TestFlight!
  19. 19. Jenkins CI - Dashboard! https://ci.jenkins-ci.org/
  20. 20. Continuous Inspection of Code Quality - Clang Static Analyzer! •  Source code analysis tool that finds bugs in C, C++, and Objective-C! •  Find basic syntactic issues to deep bugs by reasoning about the semantics of code •  Clang Static Analyzer is built on top of Clang and LLVM •  •  •  This can be easily integrated with CI servers (i.e Jenkins) Download http://clang-analyzer.llvm.org/ Demo: http://buildbot.llvm.linuxfoundation.org/checker/
  21. 21. App Distribution for Beta Testing - TestFlight! •  Your private App store/Play store •  Upload your builds and grant access to beta testers •  Easily manage multiple versions of your app •  Manage users, teams and create distribution groups •  Easily collect UUIDs for provisioning •  Integrate with CI build servers (i.e Jenkins) •  Collect feedback on builds from testers •  Support for both iOS and Android
  22. 22. TestFlight - Demo! https://testflightapp.com/dashboard/
  23. 23. Insight and Analytics!
  24. 24. Crash Reporting - Crashlytics! •  Crash Reporting Service for Mobile Apps •  Facilitate a developer focused report on the app crashes, highlighting the root cause •  Provides details such as type of device, free space on disk/RAM and orientation •  See the guilty line of the code, the number of users affected, the number of occurrences of a crash •  Allows adding log statements to code to track down bugs •  Support for both iOS and Android
  25. 25. Crashlytics - Integration!
  26. 26. Crashlytics - Demo! https://www.crashlytics.com
  27. 27. Actions and Events Tracking - Mixpanel! •  Mixpanel is an analytics platform for mobile & web, it helps you analyze the actions users take in your app. •  An action can be anything - uploading a picture, playing a video, or sharing a post, for example.
  28. 28. Mixpanel - Features! •  •  •  •  •  •  •  •  •  Identify how customers use the app Get to know the most used and least used features Track app usage of individual users Send push notifications/GCM, text messages and emails to users Formulas for deep analysis for analytical data Awesome reports, funnels, segmentations, graphs Track revenue on purchases Carry out surveys to get user feedback Support for both iOS and Android
  29. 29. ! Mixpanel - How do my app's users invite their friends ?!
  30. 30. ! Mixpanel – Which Campaign gives us the most paying customers ?!
  31. 31. Mixpanel – Points distributed for most of the people that play my game ?!
  32. 32. Mixpanel – Integration (iOS)! #define MIXPANEL_TOKEN @"YOUR_TOKEN"! ! // Initialize the library with your! // Mixpanel project token, MIXPANEL_TOKEN! [Mixpanel sharedInstanceWithToken:MIXPANEL_TOKEN];! ! // Later, you can get your instance with! Mixpanel *mixpanel = [Mixpanel sharedInstance];! In most cases, it makes sense to do this in application:didFinishLaunchingWithOptions:!
  33. 33. Mixpanel – Sending Event (iOS)! Mixpanel *mixpanel = [Mixpanel sharedInstance];! ! [mixpanel track:@"Plan Selected" properties:@{! @"Gender": @"Female",! @"Plan": @"Premium"! }];! Once you've initialized the library, you can track an event by calling track:properties: with the event name and properties.
  34. 34. Mixpanel – Integration (Android)! MixpanelAPI mixpanel =! MixpanelAPI.getInstance(context, MIXPANEL_TOKEN);! ! JSONObject props = new JSONObject();! props.put("Gender", "Female");! props.put("Plan", "Premium");! ! mixpanel.track("Plan Selected", props);!
  35. 35. Mixpanel – Demo! https://mixpanel.com/
  36. 36. Thank You!

×