Questo elenco di controllo definisce un insieme di criteri di qualità fondamentali e test associati per aiutarti a valutare la qualità della tua app. Alcuni di questi criteri potrebbero essere facilmente sfuggiti e i test ti aiutano a ricordarti di includerli nei piani di test.
L'elenco di controllo evidenzia la qualità minima che tutte le app devono soddisfare. Probabilmente il test andrà ben oltre quanto descritto qui.
Ogni voce dell'elenco di controllo della qualità ha un ID univoco che potrebbe esserti utile quando comunichi con il tuo team.
Esperienza visiva
La tua app deve fornire design visivo e pattern di interazione Android standard, ove appropriato, per un'esperienza utente coerente e intuitiva.
Area | ID | Test | Descrizione |
---|---|---|---|
Navigazione | VX-N1 | RP-3 | L'app supporta la navigazione con pulsante Indietro standard e non utilizza prompt di tipo "Pulsante Indietro" personalizzati sullo schermo. |
VX-N2 | RP-3 | L'app supporta la navigazione tramite gesti per tornare indietro / andare alla schermata Home. | |
VX-N3 | RP-1 RP-3 RP-5 |
L'app conserva e ripristina correttamente lo stato dell'utente o dell'app. L'app mantiene lo stato dell'utente o dell'app quando non è più in primo piano e impedisce la perdita accidentale di dati a causa della navigazione a ritroso e di altre modifiche dello stato. Quando torni in primo piano, l'app deve ripristinare lo stato conservato e qualsiasi transazione stateful significativa in attesa. Alcuni esempi sono: modifiche a campi modificabili, avanzamento del gioco, menu, video e altre sezioni dell'app o del gioco.
|
|
Notifiche | VX-S1 | RP-9 | Le notifiche seguono le linee guida di Material Design. In particolare:
|
VX-S2 | RP-9 | Per le app social e di messaggistica:
|
|
UI e grafica | VX-U1 | RP-5 | L'app supporta sia l'orientamento orizzontale che quello verticale (se possibile).
Gli orientamenti espongono in gran parte le stesse caratteristiche e azioni e preservano la parità funzionale. Sono ammesse modifiche di minore entità ai contenuti o alle visualizzazioni. |
VX-U2 | RP-5 | L'app utilizza l'intero schermo in entrambi gli orientamenti e non include il formato letterbox per tenere conto dei cambiamenti di orientamento.
È ammesso un letterbox di minore entità per compensare piccole variazioni nella geometria dello schermo. |
|
VX-U3 | RP-5 | L'app gestisce correttamente le transizioni rapide tra gli orientamenti del display senza problemi di rendering o perdita di stato. | |
Qualità visiva | VX-V1 | RP-tutti | L'app mostra elementi grafici, testo, immagini e altri elementi UI senza distorsioni, sfocature o pixelizzazione evidenti.
|
VX-V2 | RP-tutti | L'app mostra blocchi di testo e di testo in modo accettabile per ciascuna delle lingue supportate.
|
|
VX-V3 | RP-tutti | I contenuti dell'app e tutti i contenuti web a cui fa riferimento l'app supportano il tema scuro. |
Funzionalità
L'app deve implementare il comportamento funzionale previsto.
Area | ID | Test | Descrizione |
---|---|---|---|
Audio | FN-A1 | RP-1 RP-8 |
L'audio riprende quando l'app torna in primo piano o indica all'utente che la riproduzione è in pausa. |
FN-A2 | RP-1 RP-2 RP-8 |
Se la riproduzione audio è una funzionalità principale, l'app deve supportare la riproduzione in background. | |
FN-A3 | RP-0 | Quando l'utente avvia la riproduzione audio, l'app dovrebbe eseguire una delle seguenti operazioni entro un secondo:
|
|
FN-A4 | RP-0 | L'app dovrebbe richiedere l'audio attivo quando la riproduzione dell'audio inizia e abbandona lo stato attivo quando la riproduzione si interrompe. | |
FN-A5 | RP-0 | L'app deve gestire le richieste di altre app relative all'audio. Ad esempio, un'app potrebbe ridurre il volume di riproduzione quando un'altra app riproduce la voce. | |
Contenuti multimediali | FN-M1 | RP-0 RP-6 RP-8 |
Se l'app riproduce l'audio in background, deve creare una notifica con stile con MediaStyle. |
FN-M2 | RP-0 | Se l'app riproduce video, dovrebbe supportare la riproduzione Picture in picture. | |
FN-M3 | RP-0 | Se l'app codifica i video, deve utilizzare lo standard di compressione video HEVC. | |
Condivisione | FN-S1 | RP-0 | L'app deve utilizzare Android Sharesheet per condividere contenuti. Può suggerire target non disponibili per soluzioni personalizzate. |
Servizio in background | FN-B1 | RP-6 | Se possibile, l'app evita di eseguire servizi in background. Per garantire il corretto funzionamento del dispositivo dell'utente, il sistema applica varie limitazioni per i servizi in background. Non sono considerati buoni utilizzi dei servizi in background:
Scopri come scegliere la soluzione giusta per il tuo lavoro. |
FN-B2 | RP-10 | L'app supporta correttamente le funzionalità di gestione dell'alimentazione introdotte in Android 6.0 (Sospensione e Standby delle app). Nel caso in cui la funzionalità di base venga interrotta dalla gestione dell'alimentazione, solo le app idonee possono richiedere un'esenzione. Vedi Assistenza per altri casi d'uso in Sospensione e Standby delle app. |
Prestazioni e stabilità
L'app deve fornire le prestazioni, la stabilità, la compatibilità e la reattività previste dagli utenti.
Area | ID | Test | Descrizione |
---|---|---|---|
Stabilità | PS-S1 | RP-tutti SD-1 |
L'app non si arresta in modo anomalo o non blocca il thread dell'interfaccia utente causando errori ANR (Android non risponde). Utilizza il report pre-lancio di Google Play per identificare potenziali problemi di stabilità. Dopo il deployment, presta attenzione alla pagina Android Vitals nella Developer Console di Google Play. |
Esibizione | PS-P1 | RP-tutti SD-1 |
L'app si carica rapidamente o fornisce un feedback sullo schermo all'utente (un indicatore di avanzamento o un segnale simile) se il caricamento dell'app richiede più di due secondi. |
PS-P2 | RP-tutti SD-1 |
Le app dovrebbero eseguire il rendering dei frame ogni 16 ms per raggiungere 60 frame al secondo. Gli sviluppatori possono utilizzare l'opzione Rendering HWUI del profilo nei test. In caso di problemi, hai a disposizione strumenti per diagnosticare più facilmente il rendering lento. | |
PS-P3 | PM-1 | Se la modalità StrictMode è attiva (vedi la sezione Test StrictMode di seguito), non sono visibili lampi di colore rosso (avvisi di prestazioni da StrictMode) durante il test dell'app. Eventuali lampeggiamenti di colore rosso indicano comportamenti dannosi in merito allo spazio di archiviazione, all'accesso alla rete o a perdite di memoria. | |
SDK | PS-T1 | RP-0 | L'app viene eseguita sull'ultima versione pubblica della piattaforma Android senza arresti anomali o senza compromettere gravemente la funzionalità di base. |
PS-T2 | SP1 | L'app ha come target l'SDK Android più recente impostando il valore targetSdk . |
|
PS-T3 | SP1 | L'app è stata creata con l'SDK più recente impostando il valore compileSdk . |
|
PS-T4 | SP-2 SP-3 |
Tutti gli SDK di terze parti utilizzati sono aggiornati. Eventuali miglioramenti a questi SDK, quali stabilità, compatibilità o sicurezza, devono essere disponibili tempestivamente per gli utenti. Lo sviluppatore è responsabile del codebase dell'intera app, inclusi gli SDK di terze parti utilizzati. |
|
PS-T5 | RP-0 | L'app non utilizza interfacce non SDK. | |
Batteria | PS-B1 | BA-1 | L'app supporta correttamente le funzionalità di gestione dell'alimentazione introdotte in Android 6.0 (Sospensione e Standby delle app). Nel caso in cui la funzionalità di base venga interrotta dalla gestione dell'alimentazione, solo le app idonee possono richiedere un'esenzione. Durante lo sviluppo, gli sviluppatori possono testare il comportamento di standby e sospensione dell'app utilizzando questi comandi ADB.
In termini di utilizzo della batteria, gli sviluppatori possono utilizzare lo strumento Profilo energetico di Android Studio o Battery Historian, in combinazione con le attività pianificate in background, per diagnosticare l'utilizzo imprevisto della batteria. |
Privacy e sicurezza
L'app deve gestire i dati utente e le informazioni personali in modo sicuro, con il livello di autorizzazione appropriato.
Oltre a questo elenco di controllo, le applicazioni pubblicate sul Google Play Store devono rispettare anche le norme relative ai dati utente per proteggere la privacy degli utenti.
Area | ID | Test | Descrizione |
---|---|---|---|
Autorizzazioni | SC-P1 | SC-4 | L'app richiede solo il numero minimo assoluto di autorizzazioni necessarie per supportare il caso d'uso in questione. Per alcune autorizzazioni come la posizione, se possibile utilizza la posizione approssimativa al posto della posizione precisa. |
SC-P2 |
L'app deve richiedere l'autorizzazione ad accedere a dati sensibili (come SMS, registro chiamate o posizione) o a servizi a pagamento (come Telefono o SMS) solo se sono direttamente correlati ai casi d'uso principali delle app. Le implicazioni relative a queste autorizzazioni devono essere comunicate all'utente in posizione ben visibile. A seconda di come utilizzi le autorizzazioni, potrebbe esistere un modo alternativo per soddisfare il caso d'uso della tua app senza fare affidamento sull'accesso a informazioni sensibili. Ad esempio, anziché richiedere autorizzazioni relative ai contatti di un utente, potrebbe essere più appropriato richiedere l'accesso utilizzando un intent implicito. |
||
SC-P3 | RP-0 | L'app richiede le autorizzazioni di runtime nel contesto, quando viene richiesta la funzionalità, anziché in anticipo durante l'avvio dell'app. | |
SC-P4 | RP-0 | L'app deve progettare l'esperienza utente in modo da comunicare chiaramente perché sono necessarie determinate autorizzazioni. Se ciò non è possibile, segui la procedura consigliata per spiegare perché una funzionalità dell'app richiede l'autorizzazione. L'app deve ridurre automaticamente la qualità quando gli utenti negano o revocano un'autorizzazione. L'app non deve impedire all'utente di accedere del tutto all'app. |
|
Dati e file | SC-DF1 | SC-1 | Tutti i dati sensibili vengono archiviati nella memoria interna dell'app. |
SC-DF2 | SC-10 | Nessun dato utente personale o sensibile viene registrato nel log di sistema o in un log specifico dell'app. | |
SC-DF3 | L'app non deve utilizzare ID hardware non reimpostabili, ad esempio l'IMEI, per scopi di identificazione. | ||
Identità | SC-ID1 | RP-0 | Fornisci suggerimenti per la compilazione automatica delle credenziali dell'account e altre informazioni sensibili, come i dati della carta di credito, l'indirizzo fisico e il numero di telefono. |
SC-ID2 | RP-0 | Integra One Tap per Android per un'esperienza di accesso ottimale. | |
SC-ID3 | RP-0 | Integra l'autenticazione biometrica per proteggere le transazioni finanziarie o le informazioni sensibili, come i documenti importanti degli utenti. | |
Componenti dell'app | SC-AC1 | SC-5 | Vengono esportati solo i componenti delle applicazioni che condividono dati con altre app o i componenti che devono essere richiamati da altre app.
Sono inclusi attività, servizi, ricevitori di trasmissione e in particolare fornitori di contenuti.
Imposta sempre l'attributo |
SC-AC2 | CR-0 SC-4 |
Tutti gli intent e le trasmissioni seguono le best practice:
|
|
SC-AC3 | SC-3 | Tutti i fornitori di contenuti che condividono contenuti tra le tue app utilizzano android:protectionLevel="signature" per le autorizzazioni personalizzate. Sono inclusi attività, servizi, ricevitori di trasmissione e in particolare fornitori di contenuti.
La maggior parte delle app non dovrebbe fare affidamento sull'accesso a un elenco di pacchetti installati. L'accesso è stato limitato a partire da Android 11.
|
|
Reti | SC-N1 | SC-9 | Tutto il traffico di rete viene inviato tramite SSL. |
SC-N2 | SC-6 | L'applicazione dichiara una configurazione di sicurezza di rete. | |
SC-N3 | Se l'applicazione utilizza Google Play Services, il fornitore di sicurezza viene inizializzato all'avvio dell'applicazione. | ||
Librerie | SC-U1 | SP2 | Tutte le librerie, gli SDK e le dipendenze sono aggiornati. |
SC-U2 | Nell'app di produzione non sono incluse librerie di debug. Ciò può causare problemi di prestazioni e di sicurezza. | ||
WebView | SC-W1 | SC-6 | Non utilizzare setAllowUniversalAccessFromFileURLs() per accedere ai contenuti locali. Utilizza invece WebViewAssetLoader. |
SC-W2 | SC-7 | I componenti WebView non devono utilizzare addJavaScriptInterface() con contenuti non attendibili.
Su Android 6.0 e versioni successive, utilizza invece i canali per i messaggi HTML. |
|
Attuazione | SC-E1 | L'app non carica dinamicamente codice al di fuori del relativo APK. Gli sviluppatori devono usare gli Android App Bundle, che includono Play Feature Delivery e Play Asset Delivery.
A partire da agosto 2021, l'utilizzo degli Android App Bundle diventerà obbligatorio per tutte le nuove app nel Google Play Store. |
|
Crittografia | SC-C1 | L'app utilizza potenti algoritmi crittografici forniti dalla piattaforma e un generatore di numeri casuali. Inoltre, l'app non implementa algoritmi personalizzati. |
Google Play
Assicurati che le tue app possano essere pubblicate su Google Play.
Area | ID | Test | Descrizione |
---|---|---|---|
Norme | GP-P1 | GP-tutti | L'app rispetta rigorosamente i termini delle Norme relative ai contenuti per gli sviluppatori di Google Play, non offre contenuti inappropriati, non utilizza la proprietà intellettuale o il brand di altre persone e così via. |
GP P2 | GP-1 | Il livello di maturità dell'app sia impostato correttamente in base alle linee guida per la classificazione dei contenuti. | |
Pagina dei dettagli dell'app | GP D1 | GP-1 GP-2 |
L'immagine in primo piano dell'app è conforme alle linee guida descritte in questo articolo di assistenza. Accertati che:
|
GP D2 | GP-1 | Gli screenshot e i video dell'app non mostrano né fanno riferimento a dispositivi non Android. | |
GP D3 | GP-1 | Gli screenshot o i video dell'app non rappresentano in modo fuorviante i contenuti e l'esperienza dell'app. | |
Assistenza utenti | GP X1 | GP-1 | I bug comuni segnalati dagli utenti nella scheda Recensioni della pagina di Google Play vengono risolti se sono riproducibili e si verificano su molti dispositivi diversi. Se un bug si verifica solo su pochi dispositivi, dovresti comunque risolverlo se si tratta di dispositivi particolarmente popolari o nuovi. |
Configurazione di un ambiente di test
Ai fini della configurazione di un ambiente di test per questo elenco di controllo, consigliamo quanto segue:
- Incentrato sul test degli emulatori: Android Emulator è un ottimo modo per testare la tua app in diverse versioni Android e risoluzioni dello schermo. Ti consigliamo di configurare dispositivi emulati per rappresentare i fattori di forma e le combinazioni hardware/software più comuni per la base utenti target.
- Dispositivi hardware: l'ambiente di test deve includere un numero limitato di dispositivi hardware reali che rappresentino i fattori di forma chiave e le combinazioni di hardware/software attualmente disponibili per i consumatori. Non è necessario eseguire test su ogni dispositivo sul mercato; piuttosto, dovresti concentrarti su un numero limitato di dispositivi rappresentativi, anche utilizzando uno o due dispositivi per fattore di forma.
- Lab di test dei dispositivi: puoi anche utilizzare servizi di terze parti, ad esempio Firebase Test Lab, per testare la tua app su una gamma più ampia di dispositivi.
- Esegui test con la versione più recente di Android: oltre a testare versioni di Android rappresentative per la tua base utenti target, devi sempre eseguire il test con la versione più recente di Android (attualmente Android 11). In questo modo, le ultime modifiche al comportamento non influiranno negativamente sull'esperienza degli utenti.
Per indicazioni più complete sui test, tra cui test delle unità, test di integrazione e test dell'interfaccia utente, consulta le Nozioni di base sui test di Android.
Procedure di test
Queste procedure di test ti aiutano a scoprire vari tipi di problemi di qualità nella tua app. Puoi combinare i test o integrare gruppi di test nei tuoi piani di test. Consulta le sezioni precedenti per i riferimenti che associano i criteri a queste procedure di test.
Tipo | Test | Descrizione |
---|---|---|
Suite principale | RP-0 | Puoi accedere a tutte le parti dell'app: tutte le schermate, le finestre di dialogo, le impostazioni e tutti i flussi utente.
|
RP-1 | Dalla schermata di ogni app, premi il tasto Home del dispositivo o scorri verso l'alto nella navigazione tramite gesti, quindi riavvia l'app dalla schermata Tutte le app. | |
RP 2 | Dalla schermata di ogni app, passa a un'altra app in esecuzione, quindi torna all'app in fase di test utilizzando il selettore di app Recenti. | |
RP 3 | Dalla schermata di ogni app (e dalle finestre di dialogo), premi il pulsante Indietro o utilizza il gesto di scorrimento indietro. | |
RP 5 | Dalla schermata di ogni app, ruota il dispositivo tra l'orientamento orizzontale e quello verticale almeno tre volte. | |
CR-6 | Passa a un'altra app per inviare l'app di prova in background. Vai alle Impostazioni e controlla se nell'app di test sono presenti servizi in esecuzione in background. In Android 4.0 e versioni successive, apri la schermata App e trova l'app nella scheda "In esecuzione". | |
CR-7 | Premi il tasto di accensione per attivare la modalità di sospensione del dispositivo, quindi premilo di nuovo per riattivare lo schermo. | |
CR-8 | Imposta un blocco schermo sul dispositivo. Premi il tasto di accensione per attivare la modalità di sospensione del dispositivo (che blocca il dispositivo). Quindi, premi di nuovo il tasto di accensione per riattivare lo schermo e sbloccare il dispositivo. | |
CR-9 | Nel riquadro a scomparsa delle notifiche, attiva e osserva tutti i tipi di notifiche che l'app può visualizzare. Espandi le notifiche dove applicabile (Android 4.1 e versioni successive) e tocca tutte le azioni disponibili. | |
RP 10 | Esamina l'assistenza per altri casi d'uso in modalità Sospensione e Standby delle app. | |
Installa su scheda SD | SD-1 | Ripeti la procedura di Core Suite con l'app installata sulla scheda SD del dispositivo (se l'app supporta questo metodo di installazione).
Per spostare l'app sulla scheda SD, puoi utilizzare Impostazioni > Informazioni app > Sposta su scheda SD. |
Prestazioni e stabilità | SP1 | Esamina il file manifest Android e la configurazione della build per assicurarti che l'applicazione sia basata sull'SDK più recente disponibile (targetSdk e compileSdk ).
|
SP2 | Controlla se nel file build.gradle sono presenti dipendenze obsolete. |
|
SP3 | Utilizza lo strumento lint di Android Studio per rilevare l'utilizzo di interfacce non SDK. Sono inoltre disponibili altri metodi di test alternativi. | |
Monitoraggio delle prestazioni | PM-1 | Ripeti Core Suite con la profilazione StrictMode abilitata.
Presta particolare attenzione alla garbage collection e al suo impatto sull'esperienza utente. |
Batteria | BA-1 | Ripeti Core Suite per tutti i cicli di sospensione e standby delle app.
Presta particolare attenzione a sveglie, timer, notifiche, sincronizzazioni e così via. Per i requisiti e le linee guida, consulta la sezione Test con sospensione e standby delle app. |
Sicurezza | SC-1 | Esamina tutti i dati archiviati nella memoria esterna. |
SC-2 | Esamina come vengono gestiti ed elaborati i dati caricati da un'unità di archiviazione esterna. | |
SC-3 | Esamina tutti i fornitori di contenuti definiti nel file manifest di Android. Assicurati che ogni fornitore abbia un protectionLevel appropriato.
|
|
SC-4 | Controlla tutte le autorizzazioni richieste dalla tua app nel file manifest, in fase di runtime e nella schermata delle impostazioni dell'app (Impostazioni > Informazioni sull'app) sul dispositivo. | |
SC-5 | Controlla tutti i componenti dell'applicazione definiti nel file manifest Android per verificare lo stato di esportazione appropriato. La proprietà esportata deve essere impostata in modo esplicito per tutti i componenti. | |
SC-6 | Controlla la configurazione della sicurezza di rete dell'app per assicurarti che nessun controllo lint della configurazione abbia esito negativo. | |
SC-7 | Per ogni componente WebView, vai a una pagina che richiede JavaScript. | |
SC-8 | In ogni componente WebView, cerca di accedere a siti e contenuti che non sono caricati direttamente dalla tua app. | |
SC-9 | Dichiara una configurazione di sicurezza di rete che disattiva il traffico di testo non crittografato, quindi testa l'app. | |
SC-10 | Esegui l'applicazione ed esercita tutte le funzionalità di base, osservando il log del dispositivo. Non deve essere registrata alcuna informazione privata dell'utente. | |
Google Play | GP-1 | Accedi alla Google Play Developer Console per controllare il profilo sviluppatore, la descrizione dell'app, gli screenshot, l'immagine in primo piano, la classificazione dei contenuti e il feedback degli utenti. |
GP 2 | Scarica l'immagine in primo piano e gli screenshot, poi scalali per adattarli alle dimensioni di visualizzazione dei dispositivi e dei fattori di forma scelti come target. | |
GP 3 | Esamina tutte le risorse grafiche, i contenuti multimediali, il testo, le librerie di codici e gli altri contenuti presenti nell'app o nel download del file di espansione. |
Test con StrictMode
Per i test delle prestazioni, ti consigliamo di attivare StrictMode
nell'app e di utilizzarlo per rilevare operazioni che potrebbero influire sulle prestazioni, sugli accessi alla rete, sulle operazioni di lettura/scrittura di file e così via. Cerca le operazioni potenzialmente problematiche sia sul thread principale che
su altri thread.
Puoi configurare un criterio di monitoraggio per thread utilizzando StrictMode.ThreadPolicy.Builder
e abilitare tutti i tipi di monitoraggio supportati in ThreadPolicy
utilizzando detectAll()
.
Assicurati di attivare la notifica visiva di violazioni delle norme per ThreadPolicy
che utilizza penaltyFlashScreen()
.