SafeBite/docs/test-plan.md
Bruno Charest c4add0a3fe feat: add user testing plan for SafeBite app
- Created a comprehensive user testing plan document to validate the app's usability, reliability, accessibility, and resilience.
- Included various test scenarios covering onboarding, product scanning, manual barcode entry, and accessibility features.

chore: update dependencies for code quality tools

- Added ktlint version 12.2.0 for Kotlin code style enforcement.
- Added detekt version 1.23.7 for static code analysis.

chore: increment version numbers

- Updated MINOR version to 32 and CODE to 43 in version.properties to reflect recent changes.
2026-05-11 15:13:18 -04:00

210 lines
5.8 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🧪 Plan de tests utilisateurs — SafeBite
**Document de validation UX • 11 mai 2026**
---
## 1. Objectifs
Valider que SafeBite est :
- **Compréhensible** : utilisateur identifie un verdict DANGER en < 2 secondes
- **Fiable** : 10 scans d'affilée sans crash ni freeze
- **Accessible** : utilisable par une personne daltonienne + TalkBack
- **Résilient** : rotation écran, appel entrant, batterie faible
---
## 2. Profils testeurs requis
| # | Profil | Critère |
|---|--------|---------|
| 1 | Adulte sans allergie | Usage smartphone quotidien |
| 2 | Adulte avec allergie(s) | Connaît ses allergènes |
| 3 | Parent (enfant allergique) | Gère un profil famille |
| 4 | Senior (50+) | Usage smartphone basique |
| 5 | Daltonien (deutéranopie ou protanopie) | Distinction rouge/vert altérée |
---
## 3. Scénarios de test
### S1 — Premier lancement (Onboarding)
```
Prérequis : App fresh install
1. Ouvrir l'application
2. Suivre l'onboarding (prénom, allergies, objectif)
3. Arriver sur le dashboard FIRST_TIME
✅ Succès si : onboarding complété en < 60 secondes
❌ Échec si : confusion sur les étapes, blocage
```
### S2 — Scan d'un produit dangereux (test principal)
```
Prérequis : Profil configuré avec allergie "Arachides"
Produit : Snickers (contient arachides) — code 5000159461153
1. Depuis le dashboard, tap sur FAB Scanner
2. Scanner le code-barres Snickers
3. Observer le verdict
✅ Succès si : verdict ROUGE identifié en < 2s
❌ Échec si : confusion sur le verdict (ne sait pas si c'est safe ou pas)
```
### S3 — Scan d'un produit safe
```
Produit : Bouteille d'eau — code 3274080005007
1. Scanner le code-barres
2. Observer le verdict VERT
✅ Succès si : verdict SAFE clairement identifié
❌ Échec si : confusion avec warning
```
### S4 — Saisie manuelle code-barres
```
Prérequis : Produit non reconnu par le scanner
1. Ouvrir le scanner
2. Tap "Saisir un code-barres"
3. Entrer 3017620422003 (Nutella)
4. Valider
✅ Succès si : résultat affiché (verdict + fiche produit)
❌ Échec si : erreur de format, blocage
```
### S5 — Scan OCR (produit non trouvé)
```
Prérequis : Code-barres inconnu (ex: 1234567890123)
1. Scanner le code inconnu
2. Tap "Lire les ingrédients"
3. Prendre une photo d'étiquette
4. Vérifier le texte OCR extrait
✅ Succès si : OCR capture ouverte, photo possible
❌ Échec si : app crash, freeze
```
### S6 — Gestion de liste
```
Prérequis : Au moins 1 produit scanné
1. Aller dans l'onglet Listes
2. Créer une liste "Test courses"
3. Ajouter un produit depuis le verdict
4. Swiper pour cocher/décocher
5. Supprimer un produit (swipe left)
✅ Succès si : toutes les actions fonctionnent
❌ Échec si : swipe bloqué, produit non ajouté
```
### S7 — 10 scans rapides d'affilée
```
Prérequis : App ouverte
1. Scanner 10 produits différents aussi vite que possible
2. Observer le comportement
✅ Succès si : 0 crash, 0 freeze > 5s
❌ Échec si : crash, ANR, perte de données
```
### S8 — Rotation écran pendant scan
```
1. Ouvrir le scanner
2. Pivoter le téléphone (paysage → portrait)
3. Scanner un produit
4. Pivoter pendant l'affichage du verdict
✅ Succès si : pas de perte d'état, scan fonctionne après rotation
❌ Échec si : caméra freeze, UI cassée
```
### S9 — Appel entrant pendant le scan
```
1. Ouvrir le scanner
2. Recevoir un appel (ou simuler avec un second téléphone)
3. Revenir dans l'app après l'appel
✅ Succès si : le scanner se réinitialise et fonctionne
❌ Échec si : caméra bloquée, crash
```
### S10 — Mode sombre
```
1. Activer le mode sombre (paramètres)
2. Visiter les 4 onglets (Dashboard, Listes, Suivi, Famille)
3. Scanner un produit et vérifier le verdict
✅ Succès si : tout est lisible, contraste OK
❌ Échec si : texte illisible, icônes invisibles
```
---
## 4. Test Accessibilité
### A1 — TalkBack
```
1. Activer TalkBack dans Paramètres Android
2. Naviguer dans tous les onglets
3. Scanner un produit et écouter l'annonce du verdict
✅ Succès si : tous les boutons annoncés, verdict annoncé correctement
❌ Échec si : éléments sans contentDescription, verdict silencieux
```
### A2 — Taille de texte maximale
```
1. Paramètres → Affichage → Taille police → Maximum
2. Naviguer dans tous les écrans
✅ Succès si : pas de texte coupé, pas de chevauchement
❌ Échec si : boutons hors écran, texte tronqué
```
---
## 5. Grille d'observation
| Testeur | S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | S9 | S10 | A1 | A2 | Notes |
|---------|----|----|----|----|----|----|----|----|----|-----|----|----|-------|
| #1 | | | | | | | | | | | | | |
| #2 | | | | | | | | | | | | | |
| #3 | | | | | | | | | | | | | |
| #4 | | | | | | | | | | | | | |
| #5 | | | | | | | | | | | | | |
Légende : OK | Mineur | Bloquant
---
## 6. Produits de test recommandés
| Produit | Code-barres | Allergène connu |
|---------|-------------|-----------------|
| Snickers | 5000159461153 | Arachides, Lait |
| Nutella | 3017620422003 | Noisettes, Lait |
| Bouteille d'eau Cristaline | 3274080005007 | Aucun |
| Barre Kinder | 8000500310427 | Lait, Gluten |
| Sauce Soja Kikkoman | 8715035111108 | Soja, Gluten |
---
## 7. Rapport final
Une fois les tests complétés, remplir :
| Métrique | Cible | Résultat |
|----------|-------|----------|
| Temps identification verdict danger | < 2s | ___ |
| Crashs sur 10 scans | 0 | ___ |
| Score accessibilité TalkBack | 100% | ___ |
| Bugs bloquants découverts | 0 | ___ |
| Satisfaction globale (1-5) | 4 | ___ |