- 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.
210 lines
5.8 KiB
Markdown
210 lines
5.8 KiB
Markdown
# 🧪 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 | ___ |
|