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
3. Target Audience !
App Developers who are challenged by,
• QA team that demands stability
• Continuous injection of regression defects
• Random app crashes
• …
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. 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”!
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
13. Unit Testing – JUint and OCUnit!
I don’t believe in
Unit Testing
Are you kidding
me?
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. 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
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. Jenkins CI - Dashboard!
https://ci.jenkins-ci.org/
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. 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
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
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. 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
31. Mixpanel – Points distributed for most of the people that play my game ?!
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. 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.