Présentation d'une usine logicielle type pour iOS & Android permettant la compilation, la mise en place de tests automatisés unitaires et fonctionnels, le déploiement à distance sur les 2 plate-formes dominantes du marché mobile actuel
Qualité & Industrialisation des développements mobiles sur iOS & Android
1. De l'intégration continue au déploiement
continu sur Android & iOS
Thibaud CAVIN
Simone CIVETTA
Thomas GUERIN
2. Agenda
Partie 1
Partie 2
Partie 3
Introduction
Intégration
continue sur
Android & iOS
Vers le déploiement
continu
Pourquoi se doter
d’une usine
logicielle aussi sur
mobile ?
|
Automatisation de
la compilation, de
l'exécution des
tests unitaires/
fonctionnels...
TestFlight pour iOS &
Android
2
3. Thibaud CAVIN
Responsable de la mobilité chez Xebia
Développement / Déploiement / Soumission des apps
mobiles sur les stores grand-public ou d’entreprise
Thibaud CAVIN
Responsable Mobilité
Simone CIVETTA
Développeur iOS confirmé
Développement des apps mobiles iOS, Android, hybrides et
web mobiles
Simone CIVETTA
Consultant iOS
Thomas GUERIN
Développeur Java & Android confirmé
Développement des apps Android et web mobiles,
également des backend auxquels elles s’y connectent
Thomas GUERIN
Consultant Android
|
3
5. Le marché de la mobilité arrive à
Une consolidation des acteurs en place :
✓ Rachat de la division mobile de Nokia par
Microsoft
✓ Blackberry ...
✓ Suprématie Android en PDM / iOS pour les
services
Attentes fortes des utilisateurs
95% de
PDM*
iOS/Android/WP
Un relais de croissance déterminant
|
* : Chiffres de StatCounter GlobalStats en France
5
6. Un projet mobile ...
... se réalise sur plusieurs plateformes mobiles (iOS &
Android) :
✓ Les mêmes fonctionnalités, une ergonomie adaptée
néanmoins
✓ Fragmentation toujours importante sur Android
... possède un cycle de développement court
|
6
7. Pourquoi se doter d’une usine
Des projets mobiles aux produits mobiles :
✓ Mises à jour régulières (2 mois)
✓ La qualité est importante
✓ Retours utilisateurs sur les stores
Améliorer son «Time-To-Market» dans un contexte
concurrentiel
Assurer la non régression de ses applications
Une intégration de plus en plus complexe avec le SI pour des
services mobiles à valeur ajoutée
|
7
9. Serveur d’intégration continue
Utilisation de Jenkins CI
L’unité est le job
Nombreux plugins disponibles
3 jobs essentiels :
✓ Build du projet et exécution des tests unitaires
✓ Exécution des tests fonctionnels
✓ Déploiement du livrable
|
9
12. Quel système de build ?
Build
Gradle vs Maven
Maven :
✓ Configuration -> xml
✓ Plugin créé par la communauté
✓ Bonne intégration dans les IDE
Gradle:
✓ Configuration -> scripting groovy
✓ Nouveau système de build “officiel” pour Android
✓ Très vite adopté
|
12
14. Tests unitaires
TU
JUnit ou Robolectric ?
JUnit :
✓ Difficile de mocker les composants du sdk
✓ Utile pour tester la logique du modèle métier
Robolectric :
✓ Plus de “java.lang.RuntimeException: Stub!”
✓ Exécution des tests directement dans la JVM
✓ Quelques limitations (gridlayout, menudrawer...)
|
14
16. Tests fonctionnels
TF
Framework d’instrumentation :
✓ Intégrer nativement au sein de la plate-forme
✓ Permet d’intéragir avec les composants d’une application
✓ Faible niveau d’abstraction
Robotium :
✓ Surcouche du framework d’instrumentation
✓ Meilleur niveau d’abstraction
✓ Écriture des tests simplifiés
|
16
18. Analyse des rapports
Sonar :
✓ Suivi des principales métriques du code (couverture,
duplication...)
✓ Adapter le profil qualité
Spoon :
✓ Exécution distribuée des tests fonctionnels
✓ Génération de rapports d’exécution clairs
✓ Format HTML
|
18
22. Build
Targets
Gestion des targets sous Xcode :
✓ Une target pour chaque configuration de
l’appli
✓ Un job Jenkins pour chaque target
|
22
23. Cocoa Pods
Build
Pour ne pas réinventer la roue... cette fois-ci :
✓ Plusieurs composants d’un projet iOS proviennent de
bibliothèques open-source
Un dependency manager pour les projets Xcode :
✓ Cocoa Pods : dependency manager qui les intègre
automatiquement les composants dans le projet
✓ Configuré à partir d’un fichier de texte : podfile
✓ Chaque target peut avoir des dépendances (ou des versions de
dépandances) spécifiques
|
23
24. xcodebuild
Build
Back to the CLI
✓ Le build est exécuté par un outil en ligne de commande :
xcodebuild (fournie avec Xcode)
✓ Des wrappers simplifient la configuration de l’outil et permettent
d’obtenir du «pretty-printing» (xctool by Facebook)
|
24
26. TU
GHUnit
Une IHM pour les tests fonctionnels indépendante de
l’IDE
✓ Avec GHUnit l’exécution des tests et la visualisation
du résultat peuvent être réalisés sur un terminal ou
dans le simulateur
Test asynchrones
✓ GHUnit supporte nativement l'exécution de tests
asynchrones
Intégration avec Jenkins
✓ Exécution en ligne de commande avec output en
format JUnit XML pour intégrer les rapports dans un
Job Jenkins
|
26
28. TF
Cucumber
Tests écrits en langage naturel
✓ Cucumber exécute des tests fonctionnels décrits par un langage
de description en format naturel et localisable : Gherkin
✓ Un test se compose d’une liste de steps, qui composent un
scénario. Plusieurs scenarios forment un feature.
Ruby inside
✓ Chaque step Gherkin correspond à un block de code écrit en ruby
|
28
29. Calabash-iOS
TF
Une extension pour Cucumber
✓ Calabash-iOS intègre Cucumber dans iOS
✓ permet l'exécution des steps sur un terminal ou un simulateur
✓ enrichit les fonctions ruby sous-jacentes à Gherkin en ajoutant
des méthodes comme touch, swipe, scroll, etc
Rapports détaillés
✓ Les résultats d'un test Calabash peuvent être enregistrés sous
forme de fichier HTML, JSON ou JUnit XML et être facilement intégrés
dans Jenkins
|
29
31. Couverture du code
Le bon vieux gcov..
✓ Les métriques de couverture du
code sont fournies par le
compilateur, qui produit des
fichiers en format gcov
Intégration dans Jenkins
✓ Grâce à gconv il est possible de
convertir les rapports en format
Cobertura XML pour les intégrer
facilement dans Jenkins
|
31
32. Visualisation des rapports des
Tests Fonctionnels
Une extension pour Cucumber
✓ Si on décide d'enregistrer les résultats sous forme de JSON, il est
très simple de construire un visualiseur de rapports afin de
présenter les résultats des tests de façon plus intuitive et interactive
|
32
35. Déploiement continu
Deploy
Build, tests, analyse et .... déploiement
✓ A chaque instant, mettre à disposition ses
applications aux utilisateurs tests
✓ Récupération des retours utilisateurs au plus
tôt
Déploiement continu facile avec Jenkins et
Testflight
✓ Plugin Testflight
|
35
36. Deploy
TestFlight
Crashs et logs à
distance
Builds et
utilisateurs
Gérer ses builds
(Dev, RCT, etc.) et
ses accès utilisateurs
par projet
Sur iOS & Android !
Accéder sur le portail
TestFlight aux logs
et crashs remontés
par vos applications
« Analytics »
Temps moyen des
sessions de tests,
types de terminaux
ou d’OS..
« Checkpoints » et
A/B Testing
Définition de
checkpoints dans
votre application
pour savoir si vos
fonctionnalités sont
accédées. Egalement
|
36