Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

10 — QA Baseline (Shared)

Cross-module quality gates every screen/module must pass. Module 14_QA_Checklist.md files add module-specific items to this baseline.


1. Performance budgets

MetricBudget
App cold start → login< 2.5 s mid-range device
Screen load (list, cached)< 300 ms to first frame
Screen load (list, network)skeleton ≤ 200 ms, content ≤ 2 s
Scroll jank0 dropped frames in profiled scroll (60 fps)
Image list scroll< 8 ms frame build cost
APK/IPA sizedebug < 100 MB, release < 40 MB
Memoryno growth across 20 min session
Networkno duplicate parallel requests for same resource

2. Offline matrix

ScenarioExpected
Airplane mode → open appCached data renders + offline banner
Kill app offline, relaunchCached data + banner
Offline → attempt writeBlocked with guidance (unless module defines offline queue)
Offline → background → onlineAuto-flush queue, snackbar "Synced N items"
Slow network (3G throttle)Skeletons, no ANR, retry works
Network loss mid-uploadUpload shows pending/retry; no silent corruption
Network loss mid-paymentNever optimistic; result from server; guidance "verify before retry"

3. Security checklist

  • No tokens/logs in crash reports, analytics, or screenshots
  • Secure storage used for tokens (Keychain/Keystore)
  • No secret in client binary (keys, URLs with secrets)
  • Biometric/screen-lock gate on sensitive screens where defined
  • All requests HTTPS; TLS 1.2+
  • Server 5xx internals never surfaced in UI
  • Idempotency headers on critical POSTs
  • Session expiry → graceful re-login, state preserved where safe

4. Device matrix (P0)

ClassDevices
PhonePixel 8, Galaxy S23, iPhone 14/SE, 2× mid-range Android
TabletiPad 10, Galaxy Tab S8 (portrait + landscape)
Desktop/webChrome, Edge, Safari, Firefox ≥ 1280 px
FoldablePixel Fold (cover + unfolded)
OSAndroid 10–15, iOS 16–18, Windows 11, macOS 14

5. Localization

  • i18n via flutter_localizations; backend i18n module exists (i18n controller) — client strings client-side; server strings rendered through i18n keys where provided.
  • RTL readiness: layout direction follows locale; no hardcoded alignment.
  • Date/time/number formatting via Intl locale.
  • Text scale & string length: German/French/Hindi/Spanish smoke strings must not break layouts (flag: actual supported locales = org config; base English + platform).

6. Dark/light mode

  • Full visual QA pass in both modes on every screen.
  • No hardcoded colors; tokens only (enforced by code review + golden tests).

7. Animation QA

  • All transitions m-* tokens; reduced-motion respected.
  • No dropped frames during hero/transitions (profile 120 fps).
  • Haptics only where defined; none on desktop.

8. Analytics events (shared)

All module events follow: {module}.{screen}.{action} (e.g., students.list.search). Common events: app.launch, auth.login.success|failure, screen.view, search.perform, offline.enter|exit, error.viewed(code), sync.flush. Proposal flag: analytics SDK not selected; events are contract for later wiring.

9. Test pyramid (client)

LayerCoverage target
Unit (cubits, validators, formatters)≥ 80% logic
Widget testsEvery screen: 3 states (loading/error/success+empty)
Golden testsShared components + every screen (light/dark, 3 sizes)
IntegrationCritical journeys (login, mark attendance, pay invoice)
E2E (device cloud)P0 flows per release

10. Release gates

  • Typecheck + lint + full test suite green
  • Perf budgets met (profiled)
  • A11y checklist per changed screen
  • Offline matrix pass
  • Cross-tenant & permission scenarios (403/404) pass
  • No console errors / crash-free session rate ≥ 99.9%