Skip to main content
Mobile App Testing·Lesson 3 of 5

Usability & Performance Testing

A mobile app that works correctly but feels slow or confusing will still get one-star reviews. Usability and performance are just as important as functionality.

Usability Testing

Usability testing answers: "Can real users accomplish their goals easily?"

Touch Targets

Mobile users tap with fingers, not mouse pointers. Apple and Google both recommend minimum touch targets:

PlatformMinimum Size
iOS44 × 44 points
Android48 × 48 dp

What to check:

  • Buttons and links are large enough to tap accurately
  • Touch targets don't overlap
  • Interactive elements have enough spacing between them
  • No "rage tapping" needed — elements respond to first tap

Gestures

Test all gesture interactions:

GestureCommon Use
TapSelect, activate
Long pressContext menu, drag mode
SwipeDelete, navigate, dismiss
PinchZoom in/out
Pull downRefresh content
Edge swipeBack navigation

Gotchas:

  • Swipe-to-delete shouldn't be the only way to delete
  • Gestures should have visual affordances (hints)
  • Custom gestures shouldn't conflict with system gestures
  • Can users find what they need within 3 taps?
  • Is the back button behavior predictable?
  • Does the app remember scroll position when returning to a screen?
  • Do deep links open the correct screen?

Text and Readability

  • Minimum font size: 16px for body text
  • Sufficient contrast between text and background (WCAG AA: 4.5:1)
  • Text doesn't overflow or get cut off on small screens
  • Dynamic type / font scaling is supported

Forms

Mobile forms are where usability dies:

  • Show the correct keyboard type (email, number, phone)
  • Auto-capitalize first name fields
  • Don't make users type what you can auto-detect (location, date)
  • Show inline validation, not just on submit
  • Don't clear the entire form on a single validation error

Performance Testing

Key Metrics

MetricTargetWhy
App launch time< 2 seconds (cold start)Users abandon slow apps
Screen transition< 300msFeels instant
API response handlingShow loading state within 100msUser knows something is happening
Frame rate60 fps (16ms per frame)Smooth scrolling and animation
Memory usageStable over timeNo memory leaks
Battery drainMinimal in backgroundUsers uninstall battery hogs

Android Profiling Tools

Android Studio Profiler:

  • CPU profiler: Find slow methods and excessive computation
  • Memory profiler: Track allocations and detect leaks
  • Network profiler: See all API calls, timing, and payload sizes
  • Energy profiler: Estimate battery impact

How to use:

  1. Connect device or start emulator
  2. Run app in debug mode
  3. Open Profiler tab in Android Studio
  4. Monitor CPU, memory, network, and energy in real time

iOS Profiling Tools

Xcode Instruments:

  • Time Profiler: Find CPU bottlenecks
  • Allocations: Track memory usage
  • Leaks: Detect memory leaks
  • Network: Monitor API calls
  • Core Animation: Measure frame rate

How to use:

  1. Open Xcode → Product → Profile
  2. Select an instrument (e.g., Time Profiler)
  3. Click Record
  4. Use the app
  5. Analyze the timeline for spikes and anomalies

Common Performance Issues

Slow list scrolling:

  • Images not cached or resized
  • Complex layouts being recalculated during scroll
  • Too many items rendered at once (use virtualized lists)

Memory leaks:

  • Event listeners not removed
  • Retained references to destroyed views
  • Caching without size limits

Network bottlenecks:

  • Too many API calls on screen load
  • Large payloads (send only what the screen needs)
  • No caching of responses
  • Images not compressed or properly sized

Battery drain:

  • GPS running in background
  • Frequent network polling
  • Animations running when app is backgrounded
  • Wake locks not released

Testing Under Constraints

Test what happens when the device is under stress:

ConditionHow to SimulateWhat to Check
Low memoryOpen many appsApp doesn't crash when resumed
Low batteryUse battery settingsApp reduces background activity
No storageFill device storageApp shows helpful error, doesn't crash
Slow CPUUse older deviceApp remains usable, just slower