Chapitre 20
20 - QCM d'auto-évaluation
20 - QCM d'auto-évaluation
Chapitre 20 — 100 QCM corrigés
Objectif : valider l'ensemble des connaissances des chapitres 01 à 18 au travers de 100 questions à choix multiples. Les réponses, commentées, sont données en fin de fichier.
Section 1 — Android (Questions 1 à 10)
Q1. Quel est le langage recommandé par Google pour le développement Android natif depuis 2019 ?
A. Java B. Kotlin C. C++ D. JavaScript
Q2. Que déclare l'élément <application> du fichier AndroidManifest.xml ?
A. Les activités et le point d'entrée de l'application B. La version du SDK de compilation C. Le chemin des ressources graphiques D. La configuration du système de build
Q3. Quel composant exécute un travail de longue durée sans interface utilisateur ?
A. Activity B. Fragment C. Service D. ContentProvider
Q4. Quelle est la différence principale entre onCreate et onStart d'une Activity ?
A. onCreate est appelé une seule fois, onStart à chaque retour au premier plan
B. onCreate prépare la vue, onStart charge les données réseau
C. onStart est appelé avant onCreate
D. Aucune différence
Q5. Quel fichier Gradle centralise les versions de vos dépendances ?
A. gradle.properties
B. libs.versions.toml
C. settings.gradle.kts
D. local.properties
Q6. Quel composant Compose est équivalent à RecyclerView ?
A. Column
B. LazyColumn
C. Scaffold
D. Card
Q7. À quoi sert viewModelScope ?
A. Lancer des coroutines liées au cycle de vie du ViewModel B. Effectuer des appels réseau bloquants C. Créer des vues personnalisées D. Gérer la navigation entre écrans
Q8. Quel est le rôle du composant WorkManager ?
A. Planifier des travaux de fond garantis, même après redémarrage B. Afficher des notifications locales C. Gérer la rotation de l'écran D. Optimiser la compilation Kotlin
Q9. Quelle permission utilise le modèle runtime (octroi à l'exécution) ?
A. ACCESS_FINE_LOCATION
B. INTERNET
C. VIBRATE
D. READ_APP_BADGE
Q10. Quel annotation Compose permet d'optimiser la recomposition en préservant une valeur ?
A. @Composable
B. @Immutable
C. @Stable
D. @Preview
Section 2 — iOS (Questions 11 à 20)
Q11. Quel est le langage de programmation officiel d'Apple depuis 2014 ?
A. Objective-C B. Swift C. Kotlin D. Dart
Q12. Que représente le symbole ? dans let name: String? ?
A. Une valeur optionnelle pouvant être nil
B. Une valeur obligatoire
C. Une constante générique
D. Un paramètre inout
Q13. Quelle structure UI, introduite en 2019, décrit l'interface de façon déclarative ?
A. UIKit B. AppKit C. SwiftUI D. CoreGraphics
Q14. Quel est le rôle d'un AppDelegate dans le cycle de vie iOS ?
A. Répondre aux événements du cycle de vie de l'application B. Gérer la mémoire du processeur C. Compiler le code Swift D. Créer les fichiers storyboard
Q15. Quelle API Swift gère la concurrence de façon moderne (async/await) ?
A. GCD et DispatchQueue B. OperationQueue C. La concurrence structurée (async let, TaskGroup) D. Thread solo
Q16. Comment déclarer une classe dont le comportement est décrit par un contrat ?
A. class avec override
B. protocol puis extension
C. struct avec mutating
D. enum avec associatedValue
Q17. Quelle technique permet de lancer deux travaux async en parallèle dans Swift ?
A. DispatchQueue.main.async
B. async let
C. @escaping
D. defer
Q18. Comment protéger des données partagées entre plusieurs acteurs concurrents ?
A. Un actor
B. Un singleton
C. Un enum
D. Une struct mutée librement
Q19. Quelle balise Xcode permet d'associer l'interface à une classe ?
A. @IBOutlet / @IBAction
B. @State
C. @Published
D. @ViewBuilder
Q20. Quel framework permet d'intercepter le trafic réseau en iOS (équivalent d'OkHttp) ?
A. URLSession B. CoreData C. Metal D. MapKit
Section 3 — Cross-platform (Questions 21 à 30)
Q21. Comment React Native exécute-t-il le JavaScript ?
A. Sur le thread principal de l'UI B. Sur un moteur JavaScript (JSC/Hermes) dans un thread séparé C. Sur le serveur D. En compilant directement en natif
Q22. Qu'est-ce que le « bridge » dans React Native ?
A. Le pont entre le code JS et le code natif B. Une librairie de navigation C. Un composant de liste D. Un outil de débogage
Q23. Quel hook React Native remplace componentDidMount ?
A. useMemo
B. useEffect
C. useReducer
D. useLayoutEffect uniquement
Q24. Quel composant Flutter dessine un conteneur avec marge, padding et décorations ?
A. Text
B. Container
C. Button
D. AppBar
Q25. En Flutter, comment gérer l'état global simplement avec le SDK (sans package) ?
A. InheritedWidget
B. ValueNotifier
C. Les deux
D. Context seul
Q26. Quelle est la différence entre une StatefulWidget et une StatelessWidget ?
A. Une StatefulWidget possède un état mutable ; une StatelessWidget est immuable
B. Une StatelessWidget est plus rapide car elle n'utilise pas le GPU
C. Une StatefulWidget ne peut pas être reconstruite
D. Aucune différence fonctionnelle
Q27. Qu'est-ce que l'objet buildContext en Flutter ?
A. La référence à la position du widget dans l'arbre B. Un modèle de données C. Un gestionnaire de base de données D. Un type de layout
Q28. Quel outil permet de compiler Flutter en code natif ?
A. Webpack B. Le compilateur Dart (AOT) avec l'engin Skia/Impeller C. React Native CLI D. Le navigateur
Q29. Qu'est-ce qu'Expo pour React Native ?
A. Un framework et une plateforme de build pour RN B. Un système de base de données C. Un langage de programmation D. Un simulateur iOS uniquement
Q30. Quel avantage principal du cross-platform ?
A. Un code unique pour Android et iOS (partiel ou total) B. Des performances toujours identiques au natif C. L'absence de SDK natif D. La gratuité des stores
Section 4 — Architecture (Questions 31 à 40)
Q31. Que signifie MVVM ?
A. Model-View-ViewModel B. Model-View-Vie-Mobile C. Multi-View-ViewModel D. Model-Vue-VueModèle (pattern Android uniquement)
Q32. Dans Clean Architecture, de quoi dépend le domaine ?
A. D'aucun framework externe B. D'Android SDK C. De Retrofit D. De la base de données
Q33. Quel est le rôle d'un use case ?
A. Orchestrer une règle métier de l'application B. Afficher l'interface utilisateur C. Gérer les permissions D. Compiler le code
Q34. Dans MVI, que représente un Intent ?
A. Une intention d'utilisateur (action) dans l'application B. Un composant Android de navigation C. Une classe de layout D. Un service de notification
Q35. Quel est l'avantage de l'« unidirectional data flow » ?
A. Un état prévisible et traçable B. Des animations plus fluides C. Une base de données plus rapide D. Un code moins verbeux toujours
Q36. Qu'est-ce qu'une « single source of truth » ?
A. Une seule source de données de référence pour l'état B. Un seul fichier par feature C. Un seul serveur backend D. Une seule activité dans l'application
Q37. À quoi sert l'injection de dépendances ?
A. Fournir les dépendances d'un objet au lieu de les créer lui-même B. Injecter du JavaScript dans l'UI C. Ralentir les builds D. Ajouter des logs automatiquement
Q38. Quel est le rôle de la couche data ?
A. Fournir les données (réseau, base, cache) B. Afficher les données C. Décrire les règles métier D. Gérer le rendu graphique
Q39. Pourquoi découper en modules Gradle ?
A. Limiter les recompilations, clarifier les responsabilités B. Réduire le nombre de fichiers Kotlin C. Cacher le code au Play Store D. Éviter les tests
Q40. Quelle est la différence entre une architecture en couches et en modules/features ?
A. Les couches séparent par responsabilité, les modules par domaine fonctionnel B. Aucune, ce sont des synonymes C. Les modules ne permettent pas les tests D. Les couches obligent à un seul fichier par couche
Section 5 — Data (Questions 41 à 50)
Q41. Quelle base de données est utilisée par Room en interne ?
A. SQLite B. PostgreSQL C. MySQL D. MongoDB
Q42. Comment Room expose-t-il des données réactives ?
A. Flow<List<T>> ou LiveData
B. JSON
C. String
D. CompletableFuture seul
Q43. À quoi sert l'annotation @Dao ?
A. À définir une interface d'accès aux données B. À créer une table C. À configurer le thème D. À déclarer une permission
Q44. Quel framework Apple gère la persistance relationnelle graphique ?
A. CoreData B. Metal C. AVFoundation D. CoreGraphics
Q45. Que représente NSManagedObjectContext dans CoreData ?
A. L'espace de travail de l'app, où l'on crée et modifie des objets B. Le modèle de base de données C. Un framework réseau D. Un contrôleur de navigation
Q46. Quelle est la différence entre SharedPreferences et Room (Android) ?
A. SharedPreferences stocke des paires clé/valeur simples ; Room stocke des données structurées
B. SharedPreferences est plus puissant
C. Room ne supporte pas les requêtes
D. Aucune différence
Q47. Comment stocker un secret (token) de façon sécurisée sur Android ?
A. Dans Android Keystore / EncryptedSharedPreferences
B. Dans SharedPreferences en clair
C. Dans le code source
D. Dans un fichier JSON dans assets
Q48. Sur iOS, où stocker un secret de façon sécurisée ?
A. Dans le Keychain
B. Dans UserDefaults
C. Dans un fichier plist public
D. Dans le code source
Q49. Qu'est-ce qu'une migration en base de données ?
A. Le passage d'un schéma à une version supérieure en préservant les données B. La copie de la base vers le réseau C. La suppression de la base D. Le chiffrement de la base
Q50. Qu'est-ce que le « offline-first » ?
A. Concevoir l'app pour fonctionner sans réseau en priorité, puis synchroniser B. Refuser le réseau par défaut C. N'utiliser que le cache serveur D. Supprimer toutes les données locales
Section 6 — Networking (Questions 51 à 60)
Q51. Quelle bibliothèque Android est un client HTTP typé avec annotations ?
A. Retrofit B. OkHttp seul C. Room D. Glide
Q52. Que permet un interceptor OkHttp ?
A. Intercepter et modifier les requêtes/réponses (auth, logs, cache) B. Créer des tables C. Gérer la mémoire D. Animer les vues
Q53. Comment décoder une réponse JSON en Swift moderne ?
A. JSONDecoder().decode(Type.self, from: data)
B. JSONSerialization uniquement
C. parse()
D. Codable seulement avec NSArray
Q54. Quel est le rôle de URLSession ?
A. Effectuer des requêtes HTTP et gérer les téléchargements B. Sauvegarder des données C. Rendre des vues D. Déclencher des notifications
Q55. Quelle méthode HTTP est idempotente et généralement utilisée pour lire ?
A. GET B. POST C. DELETE D. PATCH
Q56. Que signifie « HTTP 429 » ?
A. Too Many Requests B. Not Found C. Unauthorized D. Internal Server Error
Q57. Quelle technologie permet une communication bidirectionnelle temps réel ?
A. WebSocket B. HTTP simple C. FTP D. SMTP
Q58. Qu'est-ce que le « payload » d'une requête ?
A. Le corps des données envoyées B. L'URL de la requête C. L'en-tête uniquement D. Le certificat SSL
Q59. Que fait try? await client.fetch() en Swift ?
A. Retourne une valeur optionnelle si une erreur est levée B. Échoue silencieusement toujours C. Annule la tâche D. Bloque le thread
Q60. Comment optimiser les téléchargements d'images ?
A. Cache mémoire + cache disque (Coil/Glide/SDWebImage) B. Charger toutes les images en mémoire C. Décoder en haute résolution toujours D. Utiliser le format BMP
Section 7 — Testing (Questions 61 à 70)
Q61. Quel est l'objectif d'un test unitaire ?
A. Vérifier une unité de code de façon isolée et rapide B. Vérifier l'ensemble du parcours utilisateur C. Tester les performances réseau D. Valider le design
Q62. Qu'est-ce qu'un « fake » en test ?
A. Une implémentation simulée d'une dépendance B. Un test qui échoue C. Une classe de production D. Un build de release
Q63. Que vérifie un test d'UI Compose ?
A. Le comportement de l'interface utilisateur B. La base de données C. La performance CPU D. Le design du thème uniquement
Q64. Quelle bibliothèque Android permet de tester les interactions UI ?
A. Espresso (ou Compose UI Test) B. JUnit uniquement C. Mockito seulement pour le réseau D. LeakCanary
Q65. Quel outil E2E mobile est écrit en YAML et multi-plateforme ?
A. Maestro B. JaCoCo C. Lint D. SonarQube
Q66. Que mesure la couverture de code ?
A. La part de code exécuté par les tests B. La vitesse des tests C. La qualité du design D. Le nombre de bugs
Q67. Quelle est la structure recommandée pour un test ?
A. Arrange – Act – Assert (AAA) B. Read – Write – Delete C. Build – Run – Deploy D. Compile – Link – Execute
Q68. Qu'est-ce que le « snapshot testing » ?
A. Comparer le rendu à une référence enregistrée B. Tester les captures d'écran en réseau C. Un test de performance D. Un test de sécurité
Q69. Pourquoi tester sur des devices/émulateurs réels (E2E) ?
A. Pour vérifier l'intégration avec le vrai environnement (network, sensors, GPU) B. Pour économiser du temps de build C. Pour éviter d'écrire des tests unitaires D. Ce n'est jamais utile
Q70. Que signifie « test qui flak(e) » ?
A. Un test qui échoue de manière intermittente, non reproductible B. Un test qui réussit toujours C. Un test qui se déploie automatiquement D. Un test de sécurité
Section 8 — Sécurité (Questions 71 à 80)
Q71. Quel standard référence les exigences de sécurité mobile ?
A. OWASP MASVS B. ISO 27001 seul C. WCAG D. GDPR seul
Q72. Quel est le plus grand risque de stocker des données sensibles en clair ?
A. L'accès par des applications ou processeurs malveillants sur le device B. Une batterie plus faible C. Une UI plus lente D. Un build plus long
Q73. Qu'est-ce que le « code signing » ?
A. La signature cryptographique qui certifie l'origine et l'intégrité de l'app B. La compression du code source C. La licence de l'IDE D. Le hash des ressources graphiques
Q74. Que protège le « certificate pinning » ?
A. L'app contre l'interception en épinglant les certificats attendus B. La batterie C. Les ressources graphiques D. La vitesse de compilation
Q75. Quelle donnée est la plus sensible à chiffrer en transit ?
A. Les identifiants et données personnelles B. Les images publiques C. Les logs de debug D. Les fichiers d'icônes
Q76. Que permet la biométrie (Face ID / empreinte) dans une app ?
A. Authentifier l'utilisateur de façon forte et pratique B. Chiffrer les images C. Suivre la publicité D. Compresser la vidéo
Q77. Quel est le rôle du sandbox Android/iOS ?
A. Limiter l'accès d'une app aux ressources du système B. Accélérer le réseau C. Sauvegarder les données automatiquement D. Rendre l'app gratuite
Q78. Comment éviter les attaques « man-in-the-middle » sur le réseau ?
A. TLS/HTTPS + validation des certificats + pinning B. HTTP non chiffré C. Compression gzip D. Requêtes POST seulement
Q79. Que protège le « Data at rest » ?
A. Les données stockées sur l'appareil B. Les données en transit C. Les données en RAM seulement D. Rien
Q80. Quel est le risque d'un « API key » codée en dur dans l'app ?
A. Extraction par les attaquants via désassemblage B. Une app plus lourde C. Une UI instable D. Une consommation batterie
Section 9 — DevOps (Questions 81 à 90)
Q81. Que signifie CI ?
A. Continuous Integration (intégration continue) B. Code Interpreter C. Cloud Interface D. Compile Instant
Q82. Quel est le rôle de Fastlane ?
A. Automatiser les tâches de build et de déploiement B. Gérer les données C. Analyser la sécurité D. Créer les UI
Q83. Qu'est-ce qu'un « build pipeline » ?
A. La chaîne automatisée de compilation, tests et livraison B. Un fichier de thème C. Un type de base de données D. Un plugin de design
Q84. Quel est l'outil de CI/CD cloud multi-plateforme le plus courant ?
A. GitHub Actions (ou GitLab CI, Jenkins) B. Gradle seul C. Xcodebuild seul D. CocoaPods
Q85. Comment distribuer une version de test Android en interne ?
A. Android App Bundle / APK via lien (Firebase App Distribution…) B. Uniquement via le Play Store public C. Via un QR code magique D. Par Bluetooth
Q86. Sur iOS, comment distribuer une build bêta ?
A. TestFlight B. Le navigateur web C. Par SMS D. Les stores publics uniquement
Q87. Que contient le « Build Variants » Android ?
A. Combinaisons buildType × productFlavor (debug/release × flavor) B. Les fichiers de thème C. Les dépendances versionnées D. Les emulators
Q88. Qu'est-ce que l'observabilité mobile ?
A. Collecter logs, metrics et traces pour surveiller l'app en production B. Rendre l'app accessible C. Optimiser le design D. Le suivi des users du store
Q89. Que fait la « dSYM » sur iOS ?
A. Symbolise les crashs pour l'analyse B. Compile le code C. Chiffre les données D. Dessine les vues
Q90. Quel outil analyse les crashs et issues en production (exemple) ?
A. Crashlytics / Firebase Crashlytics B. Gradle C. Xcode préview D. le compilateur Swift
Section 10 — PWA (Questions 91 à 100)
Q91. Qu'est-ce qu'une PWA ?
A. Une application web avec capacités d'app native (installable, offline, notifications) B. Une application iOS uniquement C. Un site statique sans JS D. Un framework mobile
Q92. Quel composant central permet le mode hors-ligne ?
A. Le Service Worker B. Le WebView C. Le DOM D. Le CSS Grid
Q93. Quel fichier JSON déclare l'installation de la PWA ?
A. manifest.json
B. package.json
C. config.xml
D. webpack.json
Q94. Quel stockage est recommandé pour les données hors-ligne d'une PWA ?
A. IndexedDB
B. Les cookies
C. localStorage toujours
D. Le cache DNS
Q95. Qu'est-ce que le « app shell » ?
A. La structure HTML/CSS/JS minimale à mettre en cache pour un lancement rapide B. Le fichier de configuration C. Une coquille de notification D. Un outil de build
Q96. Comment une PWA peut-elle envoyer des notifications ?
A. Via l'API Push Notifications (Web Push) B. Uniquement via le serveur SMTP C. Impossibilité totale D. Via la caméra
Q97. Quel est le critère « LCP » dans les Core Web Vitals ?
A. Le plus grand contenu visible (temps de chargement) B. La latence du réseau C. Le nombre de requêtes D. La taille du bundle
Q98. Quelle technologie permet le stockage hors-ligne de gros volumes en PWA ?
A. Cache API + IndexedDB
B. sessionStorage
C. Le DOM
D. JSON inline
Q99. Que signifie « Installable » pour une PWA ?
A. L'utilisateur peut l'installer sur son écran d'accueil B. Elle s'installe automatiquement dans tous les stores C. Elle remplace le Play Store D. Elle nécessite un APK
Q100. Quelle est la principale limite des PWA par rapport au natif ?
A. Accès matériel limité et dépendance au navigateur B. Le langage de programmation C. L'impossibilité d'avoir une UI D. La gratuité
Corrigé commenté
Android — Q1 à Q10
| Q | Réponse | Justification |
|---|---|---|
| Q1 | B | Kotlin est le langage officiellement recommandé par Google (2019). |
| Q2 | A | <application> déclare les composants et le point d'entrée. |
| Q3 | C | Un Service exécute des tâches de fond sans UI. |
| Q4 | A | onCreate une fois ; onStart à chaque retour au premier plan. |
| Q5 | B | libs.versions.toml centralise les versions (version catalog). |
| Q6 | B | LazyColumn rend les listes de façon paresseuse, comme RecyclerView. |
| Q7 | A | viewModelScope lie les coroutines au cycle de vie du ViewModel. |
| Q8 | A | WorkManager garantit l'exécution des tâches différées, même après redémarrage. |
| Q9 | A | La localisation nécessite une permission runtime (dangerous). |
| Q10 | C | @Stable garantit que la valeur est observée efficacement par Compose. |
iOS — Q11 à Q20
| Q | Réponse | Justification |
|---|---|---|
| Q11 | B | Swift est le langage officiel depuis 2014. |
| Q12 | A | Le ? déclare une optionnelle, qui peut être nil. |
| Q13 | C | SwiftUI, framework déclaratif (WWDC 2019). |
| Q14 | A | L'AppDelegate gère les événements du cycle de vie. |
| Q15 | C | La concurrence structurée (async/await, async let, TaskGroup). |
| Q16 | B | Un protocol définit un contrat, implémenté par une extension ou un type. |
| Q17 | B | async let lance deux tâches en parallèle. |
| Q18 | A | Un actor protège son état mutable de la course de données. |
| Q19 | A | @IBOutlet/@IBAction relient le storyboard au code (UIKit). |
| Q20 | A | URLSession est le framework HTTP natif iOS. |
Cross-platform — Q21 à Q30
| Q | Réponse | Justification |
|---|---|---|
| Q21 | B | RN exécute le JS sur un moteur séparé (JSC/Hermes), dans un thread hors UI. |
| Q22 | A | Le bridge (ou JSI) relie JS et natif. |
| Q23 | B | useEffect reproduit componentDidMount/componentDidUpdate. |
| Q24 | B | Container applique marges, paddings et décorations. |
| Q25 | C | InheritedWidget et ValueNotifier sont dans le SDK sans package. |
| Q26 | A | Stateful = état mutable, Stateless = immuable. |
| Q27 | A | buildContext localise le widget dans l'arbre. |
| Q28 | B | Le compilateur Dart AOT + moteur Skia/Impeller. |
| Q29 | A | Expo est un framework + plateforme de build pour RN. |
| Q30 | A | Le principal avantage : code partagé entre plateformes. |
Architecture — Q31 à Q40
| Q | Réponse | Justification |
|---|---|---|
| Q31 | A | Model-View-ViewModel. |
| Q32 | A | Le domaine (entités + use cases) est indépendant des frameworks. |
| Q33 | A | Le use case orchestre une règle métier. |
| Q34 | A | En MVI, un Intent est une intention/action de l'utilisateur. |
| Q35 | A | Flux unidirectionnel = état prévisible et traçable. |
| Q36 | A | Une seule source de vérité pour l'état. |
| Q37 | A | La DI fournit les dépendances de l'extérieur. |
| Q38 | A | La couche data fournit les données. |
| Q39 | A | Modules = recompilation limitée + responsabilités claires. |
| Q40 | A | Couches = responsabilité ; modules = domaine fonctionnel. |
Data — Q41 à Q50
| Q | Réponse | Justification |
|---|---|---|
| Q41 | A | Room est un wrapper typé sur SQLite. |
| Q42 | A | Flow/LiveData fournissent des données réactives. |
| Q43 | A | @Dao définit l'interface d'accès (CRUD). |
| Q44 | A | CoreData est la couche de persistance d'Apple. |
| Q45 | A | Le contexte gère l'ensemble des objets en mémoire. |
| Q46 | A | Préférences = paires clé/valeur ; Room = relationnel structuré. |
| Q47 | A | Keystore + EncryptedSharedPreferences. |
| Q48 | A | Le Keychain, gestionnaire de secrets d'Apple. |
| Q49 | A | Migration = évolution du schéma en préservant les données. |
| Q50 | A | Offline-first : local d'abord, synchronisation ensuite. |
Networking — Q51 à Q60
| Q | Réponse | Justification |
|---|---|---|
| Q51 | A | Retrofit fournit une API HTTP typée par annotations. |
| Q52 | A | Les intercepteurs modifient requêtes/réponses. |
| Q53 | A | JSONDecoder().decode(...) décodage typé et sûr. |
| Q54 | A | URLSession effectue les requêtes HTTP. |
| Q55 | A | GET est idempotent et utilisé pour la lecture. |
| Q56 | A | 429 = Too Many Requests. |
| Q57 | A | WebSocket est bidirectionnel temps réel. |
| Q58 | A | Le payload est le corps des données envoyées. |
| Q59 | A | try? convertit l'erreur en optionnelle nil. |
| Q60 | A | Cache mémoire + disque (Coil/Glide/SDWebImage). |
Testing — Q61 à Q70
| Q | Réponse | Justification |
|---|---|---|
| Q61 | A | Un test unitaire vérifie une unité isolée, rapidement. |
| Q62 | A | Un fake est une implémentation simulée de dépendance. |
| Q63 | A | Les tests d'UI vérifient le comportement de l'interface. |
| Q64 | A | Espresso / Compose UI Test. |
| Q65 | A | Maestro, flows E2E en YAML multi-plateforme. |
| Q66 | A | La couverture mesure la part de code exécutée par les tests. |
| Q67 | A | Arrange – Act – Assert. |
| Q68 | A | Comparaison avec une référence enregistrée. |
| Q69 | A | Intégration avec le vrai environnement. |
| Q70 | A | Un test flaky est intermittent et non reproductible. |
Sécurité — Q71 à Q80
| Q | Réponse | Justification |
|---|---|---|
| Q71 | A | OWASP MASVS référence les exigences de sécurité mobile. |
| Q72 | A | Le principal risque est l'accès par des acteurs malveillants sur le device. |
| Q73 | A | Le code signing certifie l'origine et l'intégrité. |
| Q74 | A | Le pinning empêche l'interception en vérifiant le certificat. |
| Q75 | A | Identifiants et données personnelles en priorité. |
| Q76 | A | La biométrie renforce l'authentification. |
| Q77 | A | Le sandbox limite l'accès aux ressources. |
| Q78 | A | TLS + validation + pinning contre les MITM. |
| Q79 | A | « Data at rest » = données stockées sur l'appareil. |
| Q80 | A | Les clés sont extractibles par désassemblage. |
DevOps — Q81 à Q90
| Q | Réponse | Justification |
|---|---|---|
| Q81 | A | Continuous Integration. |
| Q82 | A | Fastlane automatise build et déploiement. |
| Q83 | A | La chaîne automatisée compile, teste et livre. |
| Q84 | A | GitHub Actions, GitLab CI, Jenkins… |
| Q85 | A | AAB/APK distribué par lien (Firebase App Distribution…). |
| Q86 | A | TestFlight pour les builds bêta iOS. |
| Q87 | A | buildType × productFlavor. |
| Q88 | A | Logs, metrics et traces pour surveiller en production. |
| Q89 | A | La dSYM symbolise les crashs. |
| Q90 | A | Crashlytics analyse les crashs en production. |
PWA — Q91 à Q100
| Q | Réponse | Justification |
|---|---|---|
| Q91 | A | Une app web avec capacités natives. |
| Q92 | A | Le Service Worker gère le mode hors-ligne. |
| Q93 | A | manifest.json déclare l'installation. |
| Q94 | A | IndexedDB pour les données hors-ligne. |
| Q95 | A | L'app shell est la structure minimale à cacher. |
| Q96 | A | Web Push pour les notifications. |
| Q97 | A | LCP = Largest Contentful Paint. |
| Q98 | A | Cache API + IndexedDB. |
| Q99 | A | Installable sur l'écran d'accueil. |
| Q100 | A | Accès matériel limité et dépendance au navigateur. |
Analyse des résultats
| Score | Interprétation |
|---|---|
| 90-100 | Prêt pour les entretiens et le projet fil rouge |
| 70-89 | Solide, revoir les sections < 7/10 |
| 50-69 | Revoir les chapitres des sections faibles |
| < 50 | Reprendre les chapitres 01 à 18 en priorité |
Liens vers les chapitres à réviser
- Android → chapitre 02, 03, 04
- iOS → chapitre 05, 06, 07
- Cross-platform → chapitre 08, 09
- Architecture → chapitre 10
- Data → chapitre 11
- Networking → chapitre 12
- Testing → chapitre 13
- Sécurité → chapitre 15
- DevOps → chapitre 16
- PWA → chapitre 17