Cette checklist définit un ensemble de critères de qualité fondamentaux ainsi que les tests correspondants pour vous aider à évaluer la qualité de votre appli. Il est facile de passer à côté de certains critères, et ces tests vous aident à ne pas les oublier dans vos programmes de test.
La checklist met en évidence le niveau de qualité minimal que toutes les applis doivent respecter. Il est fort probable que vos tests soient bien plus poussés.
Chaque élément de la checklist de qualité est associé à un identifiant unique utiles lorsque vous communiquez avec votre équipe.
Expérience visuelle
Les modèles de conception graphique et d'interaction de votre appli doivent respecter les standards d'Android, pour une expérience utilisateur cohérente et intuitive.
Domaine | ID | Tests | Description |
---|---|---|---|
Navigation | VX-N1 | CR-3 | L'appli est compatible avec la navigation standard via le bouton Retour et n'affiche pas de commande personnalisée servant de bouton de retour. |
VX-N2 | CR-3 | L'appli est compatible avec la navigation par gestes pour accéder et revenir à l'écran d'accueil. | |
VX-N3 | CR-1 CR-3 CR-5 |
L'appli conserve et restaure correctement l'état de l'utilisateur ou son propre état. Elle préserve l'état de l'utilisateur ou son propre état lorsqu'elle quitte le premier plan, et empêche la perte accidentelle de données en cas de retour en arrière ou d'un autre changement d'état. Lors du retour au premier plan, l'appli doit restaurer l'état préservé et les éventuelles transactions avec état qui étaient en attente. Exemples : modifications effectuées dans des champs modifiables, progression dans un jeu, menus, vidéos et autres sections de l'appli ou du jeu.
|
|
Notifications | VX-S1 | CR-9 | Les notifications respectent les consignes du Material Design. En particulier :
|
VX-S2 | CR-9 | Pour les applications de chat, de réseaux sociaux et les conversations:
|
|
UI et graphismes | VX-U1 | CR-5 | L'application est compatible avec les orientations paysage et portrait (si possible).
L'appli offre globalement les mêmes fonctionnalités et les mêmes actions quelle que soit l'orientation, et préserve la parité fonctionnelle entre les orientations. De petits changements de contenu ou d'affichage sont tolérés. |
VX-U2 | CR-5 | L'application utilise la totalité de l'écran dans les deux orientations et ne tient pas compte des changements d'orientation.
En cas de légère variation de la géométrie de l'écran, l'utilisation du format letterbox sur une toute petite zone est tolérée. |
|
VX-U3 | CR-5 | L'application gère correctement les transitions rapides entre les orientations d'écran sans rencontrer de problèmes d'affichage ou de perte d'état. | |
Qualité visuelle | VX-V1 | CR-all | L'appli affiche les graphismes, textes, images et autres éléments de l'interface utilisateur sans distorsion, flou ni pixélisation notable.
|
VX-V2 | CR-all | L'appli affiche le texte et les blocs de texte de manière acceptable dans chacune des langues compatibles.
|
|
VX-V3 | CR-all | Le contenu de l'appli et tous les contenus Web auxquels elle fait référence sont compatibles avec le thème sombre. |
Fonctionnement
Votre appli doit implémenter le comportement fonctionnel attendu.
Domaine | ID | Tests | Description |
---|---|---|---|
Son | FN-A1 | CR-1 CR-8 |
Le son est réactivé lorsque l'appli revient au premier plan, sinon l'appli indique à l'utilisateur que la lecture est en pause. |
FN-A2 | CR-1 CR-2 CR-8 |
Si la lecture audio est une fonctionnalité essentielle, l'appli doit gérer la lecture en arrière-plan. | |
FN-A3 | CR-0 | Lorsque l'utilisateur lance la lecture audio, l'appli doit effectuer l'une des opérations suivantes dans un délai d'une seconde :
|
|
FN-A4 | CR-0 | L'appli doit demander la priorité audio quand la lecture audio commence, et abandonner la priorité audio quand la lecture s'arrête. | |
FN-A5 | CR-0 | L'appli doit savoir gérer les demandes de priorité audio provenant d'autres applis. Par exemple, elle peut baisser le volume de lecture lorsqu'une autre appli lit un contenu vocal. | |
Multimédia | FN-M1 | CR-0 CR-6 CR-8 |
Si l'appli lit un contenu audio en arrière-plan, elle doit créer une notification stylisée avec MediaStyle. |
FN-M2 | CR-0 | Si l'appli lit de la vidéo, elle doit gérer la lecture Picture-in-picture. | |
FN-M3 | CR-0 | Si l'appli encode de la vidéo, elle doit utiliser la norme de compression vidéo HEVC. | |
Partage | FN-S1 | CR-0 | L'appli doit utiliser Android Sharesheet pour partager des contenus. Elle peut suggérer des cibles qui ne sont pas disponibles pour les solutions personnalisées. |
Service d'arrière-plan | FN-B1 | CR-6 | Dans la mesure du possible, l'application évite d'exécuter des services en arrière-plan. Pour assurer la fluidité de l'appareil de l'utilisateur, le système applique différentes restrictions aux services d'arrière-plan. Les pratiques suivantes sont considérées comme des usages incorrects des services d'arrière-plan :
Découvrez comment choisir la solution adaptée à votre travail. |
FN-B2 | CR-10 | L'appli gère correctement les fonctionnalités de gestion de l'alimentation introduites dans Android 6.0 (Sommeil et Mise en veille des applis). Dans le cas où la gestion de l'alimentation perturbe les fonctionnalités de base, seules les applis qualifiées peuvent demander une exception. Consultez Prise en charge d'autres scénarios d'utilisation dans Sommeil et Mise en veille des applis. |
Performances et stabilité
Votre appli doit répondre aux attentes des utilisateurs sur le plan des performances, de la stabilité, de la compatibilité et de la réactivité.
Domaine | ID | Tests | Description |
---|---|---|---|
Stabilité | PS-S1 | CR-all SD-1 |
L'appli ne plante pas et ne bloque pas le thread UI, ce qui entraînerait des erreurs ANR (Android Not Responding). Utilisez le rapport pré-lancement de Google Play pour identifier les problèmes de stabilité potentiels. Après le déploiement, pensez à consulter la page Android Vitals dans la Google Play Console. |
Performances | PS-P1 | CR-all SD-1 |
L'appli se charge rapidement, ou affiche un indicateur de progression ou un autre signal similaire si le chargement prend plus de deux secondes. |
PS-P2 | CR-all SD-1 |
Les applis doivent effectuer un rendu des images toutes les 16 ms pour atteindre 60 images par seconde. Les développeurs peuvent utiliser l'option Rendu HWUI du profil lors des tests. En cas de problème, des outils sont à votre disposition pour diagnostiquer les lenteurs d'affichage. | |
PS-P3 | PM-1 | Si StrictMode est activé (consultez ci-dessous Tests avec StrictMode), aucun clignotement rouge (avertissement StrictMode lié aux performances) n'est visible lorsque vous testez l'appli. Les clignotements rouges signalent les comportements insatisfaisants concernant le stockage, l'accès au réseau ou les fuites de mémoire. | |
SDK | PS-T1 | CR-0 | L'appli s'exécute sur la dernière version publique de la plate-forme Android sans planter ni nuire gravement aux fonctionnalités de base. |
PS-T2 | SP-1 | L'application cible le dernier SDK Android en définissant la valeur targetSdk . |
|
PS-T3 | SP-1 | L'application est compilée avec le dernier SDK en définissant la valeur compileSdk . |
|
PS-T4 | SP-2 SP-3 |
Tous les SDK tiers utilisés sont à jour. Toute amélioration apportée à ces SDK, comme la stabilité, la compatibilité ou la sécurité, doit être disponible pour les utilisateurs dans les meilleurs délais. Le développeur est responsable du codebase de l'ensemble de l'application, y compris de tout SDK tiers utilisé. |
|
PS-T5 | CR-0 | L'appli n'utilise pas d'interfaces autres que les SDK. | |
Batterie | PS-B1 | BA-1 | L'appli gère correctement les fonctionnalités de gestion de l'alimentation introduites dans Android 6.0 (Sommeil et Mise en veille des applis). Dans le cas où la gestion de l'alimentation perturbe les fonctionnalités de base, seules les applis qualifiées peuvent demander une exception. Pendant le développement, les développeurs peuvent tester le comportement des fonctionnalités Mise en veille des applis et Sommeil à l'aide de ces commandes ADB.
En ce qui concerne l'utilisation de la batterie, les développeurs peuvent utiliser le profileur d'énergie d'Android Studio ou l'outil Battery Historian ainsi que des tâches programmées en arrière-plan afin de diagnostiquer une utilisation inattendue de la batterie. |
Confidentialité et sécurité
Votre appli doit traiter les données utilisateur et les informations personnelles de manière sécurisée, avec le niveau d'autorisation approprié.
En plus de cette checklist, les applis publiées sur le Google Play Store doivent également respecter les Règles sur les données utilisateur afin de protéger la confidentialité des utilisateurs.
Domaine | ID | Tests | Description |
---|---|---|---|
Autorisations | SC-P1 | SC-4 | L'appli ne demande que le nombre minimum absolu d'autorisations dont elle a besoin pour prendre en charge son scénario d'utilisation. Pour certaines autorisations comme la position, utilisez si possible la position approximative plutôt que la position précise. |
SC-P2 |
L'application ne doit demander l'autorisation d'accéder qu'à des données sensibles (telles que SMS, journal d'appels ou Zone géographique) ou de services payants (comme Téléphone ou SMS) s'ils sont directement liés au service principal les cas d'utilisation des applications. Les implications liées à ces autorisations doivent être communiquées de façon visible à l'utilisateur. Selon la façon dont vous utilisez les autorisations, il existe une autre manière de traiter le scénario d'utilisation de votre appli sans devoir accéder à des informations sensibles. Par exemple, plutôt que de demander des autorisations liées aux contacts d'un utilisateur, il peut être plus judicieux de demander l'accès en utilisant un intent implicite. |
||
SC-P3 | CR-0 | L'appli demande des autorisations d'exécution en contexte, c'est-à-dire quand la fonctionnalité est demandée plutôt qu'au démarrage de l'appli. | |
SC-P4 | CR-0 | L'application doit concevoir son expérience utilisateur de manière à expliquer clairement pourquoi certaines autorisations sont nécessaires. Si c’est il doit suivre la procédure recommandée expliquer pourquoi une fonctionnalité de votre application nécessite une autorisation. L'appli doit effectuer une dégradation élégante si les utilisateurs refusent ou révoquent une autorisation. L'appli ne doit pas bloquer l'accès à l'utilisateur. |
|
Données et fichiers | SC-DF1 | SC-1 | Toutes les données sensibles sont stockées dans la mémoire de stockage interne de l'appli. |
SC-DF2 | SC-10 | Aucune donnée utilisateur personnelle ou sensible n'est enregistrée dans le journal système ou dans un journal propre à l'appli. | |
SC-DF3 | L'application ne doit utiliser aucun identifiant matériel non réinitialisable, comme le code IMEI, à des fins d'identification. | ||
Identité | SC-ID1 | CR-0 | Fournir des indices pour la saisie automatique des identifiants de compte et d'autres informations sensibles (carte de crédit, adresse physique et numéro de téléphone, par exemple). |
SC-ID2 | CR-0 | Pour faciliter la connexion au compte, intégrez One Tap pour Android. | |
SC-ID3 | CR-0 | Intégrez l'authentification biométrique pour protéger les transactions financières ou les informations sensibles, telles que les documents importants des utilisateurs. | |
Composants de l'appli | SC-AC1 | SC-5 | Seuls les composants d'appli qui partagent des données avec d'autres applis ou qui doivent être appelés par d'autres applis sont exportés.
Cela inclut les activités, les services, les broadcast receivers et en particulier les fournisseurs de contenu.
Définissez toujours explicitement l'attribut |
SC-AC2 | CR-0 SC-4 |
L'ensemble des intents et des diffusions respectent les bonnes pratiques :
|
|
SC-AC3 | SC-3 | Tous les fournisseurs de contenu qui partagent du contenu entre vos applications utilisent android:protectionLevel="signature" pour les autorisations personnalisées. C'est le cas pour les activités, les services, les broadcast receivers et en particulier pour les fournisseurs de contenu.
La plupart des applications ne doivent pas dépendre de l'accès à une liste de packages installés. L'accès est limité depuis Android 11.
|
|
Réseau | SC-N1 | SC-9 | Le trafic réseau est intégralement envoyé via le protocole SSL. |
SC-N2 | SC-6 | L'appli déclare une configuration de sécurité réseau. | |
SC-N3 | Si l'appli utilise les services Google Play, le fournisseur de sécurité est initialisé quand elle démarre. | ||
Bibliothèques | SC-U1 | SP-2 | L'ensemble des bibliothèques, des SDK et des dépendances sont à jour. |
SC-U2 | Aucune bibliothèque de débogage n'est incluse dans l'appli de production, car cela pourrait entraîner des problèmes de performances et de sécurité. | ||
WebViews | SC-W1 | SC-6 | N'utilisez pas setAllowUniversalAccessFromFileURLs() pour accéder au contenu local. Utilisez plutôt WebViewAssetLoader. |
SC-W2 | SC-7 | Les WebViews ne doivent pas utiliser addJavaScriptInterface() avec du contenu non approuvé.
Sur Android 6.0 et versions ultérieures, utilisez plutôt les canaux de message HTML. |
|
Exécution | SC-E1 | L'appli ne charge pas dynamiquement du code extérieur à son APK. Les développeurs doivent utiliser le format Android App Bundle, qui inclut Play Feature Delivery et Play Asset Delivery.
À partir d'août 2021, l'utilisation du format Android App Bundle deviendra obligatoire pour toutes les nouvelles applications du Google Play Store. |
|
Cryptographie | SC-C1 | L'appli utilise de puissants algorithmes cryptographiques fournis par la plate-forme et un générateur de nombres aléatoires. Elle n'implémente pas d'algorithmes personnalisés. |
Google Play
Vérifiez que vos applis peuvent être publiées sur Google Play.
Domaine | ID | Tests | Description |
---|---|---|---|
Règles | GP-P1 | GP-all | L'appli respecte à la lettre le Règlement relatif au contenu Google Play pour les développeurs. Elle ne propose pas de contenus inappropriés, et elle n'utilise pas la propriété intellectuelle ni la marque d'autres personnes, etc. |
GP-P2 | GP-1 | La classification d'âge de l'appli est adéquate, en fonction des Consignes de classification du contenu. | |
Page d'informations sur l'appli | GP-D1 | GP-1 GP-2 |
L'image de présentation de l'appli respecte les consignes décrites dans cet article d'aide. Faites les vérifications suivantes :
|
GP-D2 | GP-1 | Les captures d'écran et vidéos de l'appli ne montrent et ne mentionnent pas d'appareils autres que des appareils Android. | |
GP-D3 | GP-1 | Les captures d'écran ou vidéos de l'appli ne représentent pas ses contenus ni son expérience utilisateur de manière trompeuse. | |
Assistance utilisateur | GP-X1 | GP-1 | Les bugs courants signalés par les utilisateurs dans l'onglet "Avis" de la page Google Play sont résolus s'ils sont reproductibles et surviennent sur de nombreux appareils différents. Si un bug ne survient que sur quelques appareils, vous devez quand même le résoudre si ces appareils sont particulièrement populaires ou récents. |
Configurer un environnement de test
Afin de configurer un environnement de test pour cette checklist, nous vous recommandons de suivre ces conseils :
- Concentrez-vous sur les tests avec un émulateur : Android Emulator est un excellent moyen pour tester votre appli sous différentes versions d'Android et résolutions d'écran. Vous devez configurer les appareils émulés (AVD) de façon à représenter les facteurs de forme et les combinaisons matériel/logiciels les plus utilisés par votre base d'utilisateurs cible.
- Matériel : votre environnement de test doit inclure quelques périphériques physiques représentant les principaux facteurs de forme et combinaisons matériel/logiciels actuellement disponibles pour le grand public. Il n'est pas nécessaire d'effectuer des tests pour tous les appareils disponibles sur le marché. Concentrez-vous sur quelques appareils représentatifs, voire un ou deux appareils par facteur de forme.
- Bancs de test d'appareils : vous pouvez également utiliser des services tiers comme Firebase Test Lab pour tester votre appli sur un plus large éventail d'appareils.
- Faites vos tests avec la dernière version d'Android : en plus de tester votre appli avec des versions d'Android représentatives de votre base d'utilisateurs cible, vous devez toujours la tester sur la dernière version d'Android (actuellement Android 11). Vous aurez ainsi la certitude que les nouveaux comportements n'ont pas d'incidence sur l'expérience utilisateur.
Pour obtenir des conseils plus complets sur les tests, dont les tests unitaires, les tests d'intégration et les tests d'UI, consultez les principes de base des tests sur Android.
Procédures de test
Ces procédures de test vous aident à détecter différents types de problèmes de qualité dans votre appli. Vous pouvez combiner les tests ou intégrer des groupes de tests dans vos propres programmes de test. Consultez les sections ci-dessus pour voir le lien entre les critères de qualité et ces procédures de test.
Type | Test | Description |
---|---|---|
Suite de tests principale | CR-0 | Accédez à l'ensemble des sections de l'appli (intégralité des écrans, boîtes de dialogue, paramètres et parcours utilisateur).
|
CR-1 | Depuis chaque écran de l'appli, appuyez sur le bouton d'accueil de l'appareil ou balayez l'écran vers le haut dans la navigation par gestes, puis relancez l'appli depuis l'écran "Toutes les applis". | |
CR-2 | Depuis chaque écran de l'appli, passez à une autre appli en cours d'exécution, puis revenez à l'appli à tester à l'aide du sélecteur d'applis récentes. | |
CR-3 | Sur chaque écran de l'appli (et dans chaque boîte de dialogue), appuyez sur le bouton Retour ou faites un geste de retour en arrière. | |
CR-5 | Faites pivoter l'appareil en mode portrait ou paysage au moins trois fois sur chaque écran de l'application. | |
CR-6 | Passez à une autre appli pour envoyer l'appli testée en arrière-plan. Accédez aux paramètres et regardez si l'appli testée exécute des services en arrière-plan. Sur Android 4.0 ou version ultérieure, accédez à l'écran "Applis", puis recherchez l'appli dans l'onglet "En cours". | |
CR-7 | Appuyez sur le bouton Marche/Arrêt pour mettre l'appareil en veille, puis appuyez à nouveau dessus pour réactiver l'écran. | |
CR-8 | Configurez le verrouillage de l'écran de l'appareil. Appuyez sur le bouton Marche/Arrêt pour mettre l'appareil en veille afin de le verrouiller. Appuyez de nouveau sur le bouton Marche/Arrêt pour réactiver l'écran et déverrouiller l'appareil. | |
CR-9 | Déclenchez tous les types de notifications que l'appli peut afficher et examinez-les dans le panneau des notifications. Développez les notifications le cas échéant (Android 4.1 et versions ultérieures), puis appuyez sur toutes les actions disponibles. | |
CR-10 | Vérifiez la compatibilité avec d'autres scénarios d'utilisation dans les fonctionnalités Sommeil et Mise en veille des applis. | |
Installation sur la carte SD | SD-1 | Répétez la suite de tests principale avec l'appli installée sur la carte SD d'un appareil (si l'appli est compatible avec cette méthode d'installation).
Pour déplacer l'appli sur la carte SD, vous pouvez utiliser Paramètres > Infos sur l'appli > Déplacer vers la carte SD. |
Performances et stabilité | SP-1 | Examinez le fichier manifeste Android et la configuration de compilation pour vous assurer que l'appli est compilée avec le dernier SDK disponible (targetSdk et compileSdk ).
|
SP-2 | Examinez le fichier build.gradle pour identifier d'éventuelles dépendances obsolètes. |
|
SP-3 | Utilisez l'outil lint d'Android Studio afin de détecter l'utilisation d'interfaces autres que les SDK. D'autres méthodes de test existent. | |
Surveillance des performances | PM-1 | Répétez la suite de tests principale avec le profilage StrictMode activé.
Soyez particulièrement attentif à la récupération de mémoire et à son impact sur l'expérience utilisateur. |
Batterie | BA-1 | Répétez la suite de tests principale sur les cycles des fonctionnalités Sommeil et Mise en veille des applis.
Soyez particulièrement attentif aux alarmes, minuteurs, notifications, synchronisations, etc. Pour connaître les conditions requises et les consignes, consultez Test avec les fonctionnalités Sommeil et Mise en veille des applis. |
Sécurité | SC-1 | Examinez toutes les données stockées dans l'espace de stockage externe. |
SC-2 | Examinez comment les données chargées depuis l'espace de stockage externe sont gérées et traitées. | |
SC-3 | Examinez tous les fournisseurs de contenu définis dans le fichier manifeste Android. Assurez-vous que chaque fournisseur dispose d'un protectionLevel approprié.
|
|
SC-4 | Sur l'appareil, passez en revue les autorisations requises par votre appli dans le fichier manifeste, au moment de l'exécution et sur l'écran des paramètres de l'appli (Paramètres > Infos sur l'appli). | |
SC-5 | Vérifiez tous les composants d'appli définis dans le fichier manifeste Android pour contrôler que l'état d'exportation est correct. La propriété exportée doit être définie explicitement pour tous les composants. | |
SC-6 | Examinez la configuration de la sécurité réseau de l'appli pour contrôler qu'aucune vérification lint n'échoue. | |
SC-7 | Pour chaque WebView, accédez à une page nécessitant JavaScript. | |
SC-8 | Dans chaque WebView, essayez d'accéder à des sites et à des contenus qui ne sont pas chargés directement par votre appli. | |
SC-9 | Déclarez une configuration de sécurité réseau qui désactive le trafic en texte clair, puis testez l'appli. | |
SC-10 | Exécutez l'appli et déclenchez toutes les fonctionnalités essentielles tout en observant le journal de l'appareil. Aucune information privée sur l'utilisateur ne doit être enregistrée. | |
Google Play | GP-1 | Connectez-vous à la Google Play Console pour consulter votre profil de développeur, la description de l'appli, les captures d'écran, l'image de présentation, la classification du contenu et les commentaires des utilisateurs. |
GP-2 | Téléchargez votre image de présentation et vos captures d'écran, puis réduisez leur taille pour qu'elle corresponde à la taille d'affichage sur les appareils et facteurs de forme que vous ciblez. | |
GP-3 | Examinez l'ensemble des assets graphiques, contenus multimédias, textes, bibliothèques de code et autres contenus inclus dans l'appli ou le fichier d'appli téléchargeable. |
Test avec StrictMode
Pour tester les performances, nous vous recommandons d'activer StrictMode
dans votre appli et de l'utiliser pour détecter les opérations susceptibles de nuire aux performances, aux accès réseau, aux opérations de lecture ou d'écriture de fichiers, etc. Recherchez les opérations susceptibles de poser problème, aussi bien sur le thread principal que sur d'autres threads.
Vous pouvez configurer une règle de surveillance par thread avec StrictMode.ThreadPolicy.Builder
et activer tous les dispositifs de surveillance compatibles dans ThreadPolicy
avec detectAll()
.
Veillez à activer la notification visuelle des cas de non-respect des règles pour ThreadPolicy
avec penaltyFlashScreen()
.