Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Keeping Your Users Happy With Testable Apps
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Greg Shackles
April 20, 2013
Technology
1
450
Keeping Your Users Happy With Testable Apps
Given at Xamarin Evolve on April 16, 2013
Greg Shackles
April 20, 2013
Tweet
Share
More Decks by Greg Shackles
See All by Greg Shackles
Building Modern Services with .NET Core 3 and gRPC
gshackles
0
200
Observability-Driven Development: What DevOps is Really About
gshackles
1
320
Monitoring Your Mobile Apps in the Wild
gshackles
1
110
Building Scalable Applications with the Actor Model
gshackles
0
670
Creating a Voice-Driven TV Remote with Azure and Alexa
gshackles
0
140
Build 2017 Recap for Xamarin Developers
gshackles
0
140
Going Serverless: Event-Driven Architecture Without The Infrastructure
gshackles
0
210
Evolve 2016 Redux
gshackles
0
150
Instrumenting Your Mobile Monitoring Strategy
gshackles
0
4.7k
Other Decks in Technology
See All in Technology
Embeddings : Symfony AI en pratique
lyrixx
0
420
TUNA Camp 2026 京都Stage ヒューリスティックアルゴリズム入門
terryu16
0
620
Change Calendarで今はOK?を仕組みにする
tommy0124
1
130
Sansanの認証基盤を支えるアーキテクチャとその振り返り
sansantech
PRO
1
120
SaaSの操作主体は人間からAIへ - 経理AIエージェントが目指す深い自動化
nishihira
0
120
GitHub Actions侵害 — 相次ぐ事例を振り返り、次なる脅威に備える
flatt_security
8
6.5k
The essence of decision-making lies in primary data
kaminashi
0
180
AWS Systems Managerのハイブリッドアクティベーションを使用したガバメントクラウド環境の統合管理
toru_kubota
1
190
The Rise of Browser Automation: AI-Powered Web Interaction in 2026
marcthompson_seo
0
310
JEDAI認定プログラム JEDAI Order 2026 受賞者一覧 / JEDAI Order 2026 Winners
databricksjapan
0
400
OCI技術資料 : ロード・バランサ 概要 - FLB・NLB共通
ocise
4
27k
RGBに陥らないために -プロダクトの価値を届けるまで-
righttouch
PRO
0
130
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
58k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
150
What's in a price? How to price your products and services
michaelherold
247
13k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Designing for Timeless Needs
cassininazir
0
180
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
100
WENDY [Excerpt]
tessaabrams
9
37k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
330
Reality Check: Gamification 10 Years Later
codingconduct
0
2.1k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
330
How to build a perfect <img>
jonoalderson
1
5.3k
Transcript
Greg Shackles OLO @gshackles
[email protected]
github.com/gshackles Keeping Your Users Happy
With Testable Apps
TDD
TDD KISS SOLID BDD DRY SOC YAGNI DDD SRP OCP
LSP ISP DIP XP IOC CQS
None
Why Test?
Stability
Stability • Obvious, but important
Stability • Obvious, but important • Refactor and iterate with
a safety net
Stability • Obvious, but important • Refactor and iterate with
a safety net • Compilation is only the first unit test
Stability • Obvious, but important • Refactor and iterate with
a safety net • Compilation is only the first unit test • Verify cross-platform compatibility
“I don’t have time to write tests!”
“I don’t have time to NOT write tests!”
Once It’s Out, It’s Out
Once It’s Out, It’s Out • This isn’t the web
Once It’s Out, It’s Out • This isn’t the web
• Difficult and expensive to fix
Once It’s Out, It’s Out • This isn’t the web
• Difficult and expensive to fix • Quality bar has been raised
Once It’s Out, It’s Out • This isn’t the web
• Difficult and expensive to fix • Quality bar has been raised • Bad reviews stick with you
The Happy Path
• Improves design The Happy Path
• Improves design • More shared code (not just mobile
apps) The Happy Path
• Improves design • More shared code (not just mobile
apps) • Optimize independently of a platform The Happy Path
• Improves design • More shared code (not just mobile
apps) • Optimize independently of a platform • IterationSpeed++ The Happy Path
• Improves design • More shared code (not just mobile
apps) • Optimize independently of a platform • IterationSpeed++ • FACT: Green tests are good for the soul The Happy Path
What To Test?
What to Test?
What to Test? • 100% code coverage != the goal
What to Test? • 100% code coverage != the goal
• Test parts that provide value
What to Test? • 100% code coverage != the goal
• Test parts that provide value • Testing platform code can be difficult
What to Test? • 100% code coverage != the goal
• Test parts that provide value • Testing platform code can be difficult • Start small
None
! ! Unit Tests
! ! ! ! Unit Tests Integra-on Tests
! ! ! ! ! ! Unit Tests Integra-on Tests
UI / UX Tests
! ! ! ! ! ! Unit Tests Integra-on Tests
UI / UX Tests Mixed Automated
Unit / Integration Tests
Unit / Integration Tests • Automated
Unit / Integration Tests • Automated • Low friction
Unit / Integration Tests • Automated • Low friction •
Leverage tooling
Unit / Integration Tests • Automated • Low friction •
Leverage tooling • NUnit (Lite)
Unit / Integration Tests • Automated • Low friction •
Leverage tooling • NUnit (Lite) • Run on all platforms
Unit / Integration Tests • Automated • Low friction •
Leverage tooling • NUnit (Lite) • Run on all platforms • Simulator vs Device
Mocking
Mocking • Limited options
Mocking • Limited options • Manual mocking
Mocking • Limited options • Manual mocking • Code generation,
T4 github.com/gshackles/Muntz
01 02 03 04 05 06 07 08 09 10
11 12 13 14 Mocking interface IService { ! string Foo(string bar); } ! class MockService : IService { ! public Func<string> FooBody { get; set; } ! ! ! public Foo(string bar) ! { ! ! return FooBody(); ! } }
Manual Testing
Manual Testing • User feedback is critical
Manual Testing • User feedback is critical • UX testing
Manual Testing • User feedback is critical • UX testing
• Exploratory testing
Manual Testing • User feedback is critical • UX testing
• Exploratory testing • TestFlight testflightapp.com
MVVM
MVVM • MvvmCross
MVVM • MvvmCross • Shared, testable view models
MVVM • MvvmCross • Shared, testable view models • Improved
IoC support
MVVM • MvvmCross • Shared, testable view models • Improved
IoC support • Databinding keeps views thin
DEMO
Q&A