Testing Mobile Applications
This domain covers test types and levels: which quality characteristics need mobile-specific tests, and where in the lifecycle those tests sit.
Functional areas unique to mobile
Install, upgrade and uninstall including data migration; permissions and denial paths; push and local notifications; deep links; in-app purchase; background/foreground transitions and state restore; offline mode and sync conflicts; orientation changes and multi-touch gestures.
Interruptions and reliability
Incoming call, SMS, alarm, another app's notification, low-battery warning, headphone unplug, network loss. A preempted app must resume with state intact or fail gracefully. This is a test type in its own right and belongs on real devices.
Non-functional test types
- Usability in context: one-handed use, bright sunlight, walking, touch-target size.
- Performance/efficiency: cold start time, memory, battery drain, data usage, frame rate.
- Security: data at rest and in transit, credentials in keystore/keychain, permission scope, root/jailbreak detection, no secrets in logs.
- Compatibility: device, OS version, network, browser.
Levels and environments
Unit and integration testing by developers; system testing on emulators plus representative real devices; acceptance testing; field testing and beta distribution via store tracks (TestFlight, internal/closed testing); crowdtesting for breadth.
Worked example
A VoIP app passes a Wi-Fi regression run. Testers then inject a GSM call during an active VoIP call: audio routing stays on the earpiece afterwards. Reasoning: interruption is a reliability test needing a real device with telephony, and the defect is restoration of audio-route state, not call setup.
Traps that cost marks
Only the happy path on the best device; treating "no crash" as offline support instead of checking cached data and conflict resolution; skipping upgrade tests from the previous store version.