Qualité & Industrialisation des développements mobiles sur iOS & Android

  • 706 views
Uploaded on

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 …

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
706
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
33
Comments
0
Likes
3

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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
  • 4. Introduction Pourquoi se doter d’une usine logicielle aussi sur mobile ?
  • 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
  • 8. Intégration continue Les principales étapes Build Tests | Analyse 8
  • 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
  • 10. Intégration continue sur Android Automatisation de la compilation, de l'exécution des tests unitaires/ fonctionnels ...
  • 11. Build | 11
  • 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
  • 13. Tests Unitaires | 13
  • 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
  • 15. Tests Fonctionnels | 15
  • 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
  • 17. Analyse | 17
  • 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
  • 19. Démo Démo | 19
  • 20. Intégration continue sur iOS Automatisation de la compilation, de l'exécution des tests unitaires/ fonctionnels ...
  • 21. Build | 21
  • 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
  • 25. Tests Unitaires | 25
  • 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
  • 27. Tests Fonctionnels | 27
  • 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
  • 30. Analyse | 30
  • 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
  • 33. Démo Démo | 33
  • 34. Vers le déploiement continu TestFlight pour Android & iOS | 34
  • 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
  • 37. Merci