đŸ§Ș 5.1 VĂ©rifier les exigences fonctionnelles d'une application mobile

Une application mobile ne peut pas ĂȘtre considĂ©rĂ©e comme "terminĂ©e" uniquement parce qu'elle se lance ou qu'elle fonctionne sur le tĂ©lĂ©phone du dĂ©veloppeur.

Avant toute publication (et mĂȘme tout au long du dĂ©veloppement), il est indispensable de vĂ©rifier que les fonctionnalitĂ©s rĂ©pondent rĂ©ellement aux besoins attendus.

Ce chapitre se concentre sur la vérification des exigences fonctionnelles, c'est-à-dire sur la question essentielle :

Est-ce que l'application fait correctement ce qu'elle est censée faire ?

🎯 Objectifs d'apprentissage

À la fin de ce chapitre, vous serez capables de :

  • expliquer pourquoi les tests fonctionnels sont indispensables dans un projet mobile ;
  • dĂ©finir ce qu'est une exigence fonctionnelle ;
  • distinguer les principaux types de tests fonctionnels sur mobile ;
  • rĂ©diger un cas de test fonctionnel clair et reproductible ;
  • exĂ©cuter un test et analyser son rĂ©sultat ;
  • identifier et dĂ©crire un bug fonctionnel de maniĂšre structurĂ©e ;
  • comprendre le rĂŽle des tests de rĂ©gression dans la qualitĂ© d'une application mobile.

đŸ€” 5.1.1 Pourquoi tester les exigences fonctionnelles ?

Dans un contexte de développement mobile, il est trÚs courant d'entendre des phrases comme :

"Bah moi ça marche sur mon tĂ©lĂ©phone ! â˜ïžđŸ€“"

Mais ce constat est largement insuffisant.

Une application mobile est utilisée :

  • sur des appareils diffĂ©rents (tailles, performances, OS...) ;
  • dans des conditions variĂ©es (dĂ©placement, luminositĂ©, rĂ©seau...) ;
  • par des utilisateurs qui n'ont pas participĂ© au dĂ©veloppement (attentes et expertises diverses).

ConsĂ©quences d’un bug fonctionnel

Un bug fonctionnel peut avoir des conséquences immédiates :

  • frustration de l'utilisateur ;
  • abandon de l'application ;
  • avis nĂ©gatif sur le store ;
  • perte de crĂ©dibilitĂ© ;
  • risque de rejet par les stores lors de la validation.

Sur mobile, ces effets sont amplifiés :

  • les utilisateurs dĂ©sinstallent rapidement une application qui ne fonctionne pas comme prĂ©vu.

Tester les exigences fonctionnelles permet donc de :

  • dĂ©tecter les erreurs avant qu'elles n'atteignent les utilisateurs finaux ;
  • rĂ©duire fortement les risques aprĂšs publication.

đŸ§Ÿ 5.1.2 Qu'est-ce qu'une exigence fonctionnelle ?

Une exigence fonctionnelle décrit une action que l'utilisateur doit pouvoir réaliser dans l'application.

Elle exprime un besoin concret, du point de vue de l'utilisateur, et non du développeur.

Exemples :

  • l'utilisateur peut crĂ©er un compte ;
  • l'utilisateur peut se connecter ;
  • l'utilisateur peut ajouter un Ă©lĂ©ment Ă  une liste ;
  • l'utilisateur peut supprimer une donnĂ©e ;
  • l'utilisateur peut consulter une information.

Exigence fonctionnelle = testable

🚹 Important :

Chaque exigence fonctionnelle doit pouvoir ĂȘtre :

  • comprise clairement ;
  • testĂ©e ;
  • validĂ©e ou refusĂ©e.

Il existe un lien direct entre :

  • une exigence fonctionnelle (ce que l'application doit faire) ;
  • la fonctionnalitĂ© correspondante dans l'application (le code) ;
  • un ou plusieurs tests fonctionnels (les vĂ©rifications associĂ©es).

Sans exigence clairement identifiée, il est impossible de tester correctement.

đŸ§Ș 5.1.3 Types de tests fonctionnels sur mobile

Dans le cadre de ce module, les tests fonctionnels sont principalement manuels.

Ils consistent à utiliser l'application comme le ferait un utilisateur, en suivant des scénarios précis.

On distingue notamment :

  • Tests manuels dirigĂ©s → on suit un cas de test prĂ©cis.

  • Tests exploratoires → on explore l'application de maniĂšre plus libre, pour dĂ©tecter des comportements inattendus.

  • Tests de rĂ©gression → rĂ©alisĂ©s aprĂšs une correction pour vĂ©rifier que les fonctionnalitĂ©s existantes fonctionnent toujours.

OĂč tester ? Émulateur vs appareil rĂ©el

Les tests peuvent ĂȘtre rĂ©alisĂ©s :

  • sur un Ă©mulateur

    • rapide et pratique ;
    • utile pour les premiers tests ;
    • certaines limites (capteurs, performances, ressenti).
  • sur un appareil rĂ©el

    • indispensable pour valider le comportement rĂ©el ;
    • nĂ©cessaire pour les APIs natives et les conditions d’usage rĂ©elles.

👉 Sur mobile, tester sur un appareil rĂ©el est toujours recommandĂ© avant publication.

📝 5.1.4 RĂ©diger un cas de test fonctionnel

Un cas de test décrit précisément comment vérifier une exigence fonctionnelle.

Il doit ĂȘtre suffisamment clair pour que n'importe quelle personne puisse l'exĂ©cuter et obtenir le mĂȘme rĂ©sultat.

Un cas de test fonctionnel contient généralement :

  • un identifiant unique ou un titre ;
  • des prĂ©conditions (Ă©tat initial de l'application) ;
  • une suite d'Ă©tapes Ă  effectuer ;
  • un rĂ©sultat attendu.

Exemple simplifiĂ© – Test de connexion

Exigence : l’utilisateur peut se connecter avec un compte valide.

Préconditions :

  • l'utilisateur possĂšde un compte valide.

Étapes :

  1. ouvrir l'application ;
  2. saisir l'email et le mot de passe ;
  3. appuyer sur "Se connecter".

Résultat attendu :

  • l'utilisateur accĂšde Ă  l'Ă©cran principal.

CaractĂ©ristiques d’un bon cas de test

Un bon cas de test est :

  • prĂ©cis

    • pas d’ambiguĂŻtĂ© dans les actions Ă  effectuer ;
  • comprĂ©hensible

    • toute personne non dĂ©veloppeuse peut l'exĂ©cuter ;
  • reproductible

    • deux personnes diffĂ©rentes obtiennent le mĂȘme rĂ©sultat dans les mĂȘmes conditions.

▶ 5.1.5 ExĂ©cuter les tests et observer les rĂ©sultats

Exécuter un test = suivre exactement les étapes décrites dans le cas de test, puis observer le comportement réel.

À l’issue de l’exĂ©cution, le rĂ©sultat peut ĂȘtre :

  • ✅ Conforme

    • le rĂ©sultat observĂ© correspond au rĂ©sultat attendu.
  • ❌ Non conforme

    • le comportement diffĂšre de ce qui est attendu.

Il est important de noter les observations, mĂȘme si le test est rĂ©ussi.

En cas d’échec : collecter des Ă©lĂ©ments

En cas de test non conforme, il est utile de collecter :

  • une description du problĂšme ;
  • une capture d'Ă©cran (ou vidĂ©o courte) ;
  • le contexte d’utilisation (appareil, version, rĂ©seau, etc.).

👉 Ces informations seront prĂ©cieuses pour :

  • comprendre le bug ;
  • le reproduire ;
  • le corriger.

🐞 5.1.6 Identifier, dĂ©crire et corriger un bug fonctionnel

Un bug fonctionnel apparaßt lorsqu'une exigence n'est pas respectée.

Pour qu'un bug puisse ĂȘtre corrigĂ© efficacement, il doit ĂȘtre dĂ©crit clairement.

Exemple de mauvais rapport de bug

⛔ "L'app ne marche pas quand je clique sur le bouton de connexion."

ProblĂšmes :

  • pas de contexte (appareil, version...) ;

  • pas d'Ă©tapes prĂ©cises → impossible de reproduire ;

  • pas de rĂ©sultat attendu exprimĂ© ;

  • "ne marche pas" peut vouloir dire :

    • crash,
    • message d'erreur,
    • rien ne se passe,
    • ou autre chose.

(et en plus, elle n'a pas de jambes)

Exemple de bon rapport de bug

â˜ïžđŸ€“ "Sur un iPhone 12 avec la version 1.0.0 de l'application, lorsque je clique sur le bouton de connexion aprĂšs avoir saisi mes identifiants, rien ne se passe : la page reste statique. J'attendais Ă  ĂȘtre redirigĂ© vers l'Ă©cran principal."

Ce rapport contient :

  • un contexte prĂ©cis

    • iPhone 12, version 1.0.0 ;
  • des Ă©tapes claires

    • cliquer sur le bouton aprĂšs saisie des identifiants ;
  • le rĂ©sultat observĂ©

    • rien ne se passe, Ă©cran statique ;
  • le rĂ©sultat attendu

    • redirection vers l’écran principal.

AprĂšs correction : re-tester

Une fois le bug corrigé :

  • le test correspondant doit ĂȘtre rejouĂ© ;

  • on vĂ©rifie que :

    • la correction fonctionne ;
    • aucune autre fonctionnalitĂ© n’a Ă©tĂ© impactĂ©e.

Cycle fondamental :

test → bug → correction → re-test

🔄 5.1.7 Tests de rĂ©gression

Corriger un bug peut parfois en créer un autre.

Les tests de régression consistent à rejouer des tests existants aprÚs une modification du code.

Sur une application mobile, il est particuliĂšrement important de re-tester :

  • les fonctionnalitĂ©s principales ;

  • les parcours utilisateurs critiques :

    • connexion,
    • inscription,
    • sauvegarde,
    • navigation.

MĂȘme une petite modification peut avoir un impact inattendu ailleurs.

đŸ„„ Anecdote – La noix de coco de Team Fortress 2

Un utilisateur a décompilé des fichiers du jeu Team Fortress 2 et a découvert une image de noix de coco dans les assets.

En essayant de la supprimer, il constate que le jeu ne se lance plus sans ce fichier.

  • Easter egg ?
  • bug de rĂ©gression ?
  • simple vĂ©rification d'intĂ©gritĂ© des fichiers ?

Personne n’est 100 % certain, mais cela illustre bien :

une petite modification peut avoir des conséquences inattendues.

"I have no f**** idea who put this here, but when I deleted it the game wouldn’t start. Words cannot describe my f**** confusion."*

🧠 5.1.8 Bonnes pratiques de test fonctionnel

Quelques principes essentiels :

  • tester le plus tĂŽt possible, pas uniquement Ă  la fin ;
  • tester les cas normaux et les cas limites ;
  • documenter les tests, mĂȘme lorsqu'ils rĂ©ussissent ;
  • tester sur appareil rĂ©el avant publication ;
  • rejouer rĂ©guliĂšrement les tests critiques (rĂ©gression).

Les tests fonctionnels sont une étape clé de la qualité logicielle, et non une contrainte inutile.

đŸ§Ș 5.1.9 ActivitĂ© pratique – Tests fonctionnels

À partir d’une application mobile donnĂ©e (rĂ©elle ou fictive), vous devez :

  • identifier 3 Ă  5 exigences fonctionnelles ;
  • rĂ©diger les cas de test correspondants ;
  • simuler l’exĂ©cution des tests ;
  • identifier d’éventuels problĂšmes ;
  • proposer des corrections.

Ce travail peut ĂȘtre rĂ©alisĂ© :

  • individuellement ;
  • ou en binĂŽme.

🔗 Sources et rĂ©fĂ©rences