31
www.groupesii.com le 16/02/2012 | SII Rennes | 3 bis, avenue Belle Fontaine| 35510 Cesson Sévigné Intégra(on con(nue pour les Nuls Qualimétrie d’un projet iOS (et Android) Gaël DURAND - Architecte Mobilité - Pôle Devices Jérémy TOUDIC - Développeur Mobilité - Pôle Devices 16/02/2012 jeudi 16 février 2012

CocoaHeads Rennes #7 : Intégration continue pour les nuls

Embed Size (px)

DESCRIPTION

Screencast de la présentation du 16 février 2011 aux Cocoaheads Rennes. « Mais je comprends pas, ça marchait avant, ça ne marche plus ! ». Qui n’a jamais prononcé cette phrase au cours d’un projet ? Pourtant, la solution existe : l’intégration continue. Cette méthode consiste, entre autre, à vérifier l’intégrité d’un projet à chaque modification. Et ceci, de façon automatique. L’intégration continue pourrait sonner le glas du principe de régression et garantir la qualité de vos réalisations. Cette présentation a été assurée par Jérémy Toudic (développeur mobilité, SII Rennes) et Gaël Durand (référent technique sur les technologies mobiles au sein de SII Rennes). Gaël est aussi l’auteur de « Objective-C Créez vos applications iPhone et iPad » et enseigne à l’université. Vidéo sur la session sur Vimeo: http://vimeo.com/37104049

Citation preview

Page 1: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

Intégra(on  con(nue  pour  les  Nuls

Qualimétrie  d’un  projet  iOS  (et  Android)

Gaël DURAND - Architecte Mobilité - Pôle DevicesJérémy TOUDIC - Développeur Mobilité - Pôle Devices

16/02/2012

jeudi 16 février 2012

Page 2: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

q Objec2f  du  cocoaheads,  présenta2on  du  contexte

q SVN,  Jenkins

q Tests  unitaires  ,  Tests  fonc2onnels

q Couverture  de  code,  Analyse  Sta2que

q Documenta2on,  Déploiement

q Parlons  Android

q Conclusion

PLAN

jeudi 16 février 2012

Page 3: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

AVANT  PROPOS

ObjecAf  de  ce  Cocoaheads  :   -­‐  VulgarisaAon  de  l’IC  (focus  qualimétrie)

Démarche  globale  de  la  présentaAon  :   -­‐  PrésentaAon  succincte  des  ouAls   -­‐  Comment  les  intégrer  à  notre  IC  /  Projet  iOS   -­‐  Une  démo  foncAonnelle

jeudi 16 février 2012

Page 4: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

DEFINITION

Intégrer  du  code  dans  un  dépôt  en  conAnu

Build  du  logiciel  sur  une  machine  Aerce

Etablir  des  rapports  sur  la  qualité  du  code

Contrôle  régulier  des  rapports

jeudi 16 février 2012

Page 5: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

SIIQUEST

Démo SII Quest

jeudi 16 février 2012

Page 6: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

ARCHITECTURE  IC  iOS

jeudi 16 février 2012

Page 7: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

q Objec2f  du  cocoaheads,  présenta2on  du  contexte

q SVN,  Jenkins

q Tests  unitaires  ,  Tests  fonc2onnels

q Couverture  de  code,  Analyse  Sta2que

q Documenta2on,  Déploiement

q Parlons  Android

q Conclusion

PLAN

jeudi 16 février 2012

Page 8: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

Ou2l  de  ges2on  de  contrôle  des  sources

§ Maintenir  un  dépôt  unique  de  code  source  versionné§ Tous  les  développeurs  peuvent  commi6er  dans  le  dépôt§ Les  conflits  de  code  peuvent  être  résolus§ Des  IDE  facilitent  l’u?lisa?on  de  SVN  (Tortoise,  svnX,  plugin  Eclipse…)

    Pourquoi  SVN§ Intégra?on  complète  avec  Jenkins§ Gratuité  de  la  solu?on§ Solu?on  très  répandue

 

SVN

jeudi 16 février 2012

Page 9: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

Ou2l  open  source  d’intégra2on  con2nue§ Surveillance  des  dépôts  SVN§ Exécute  des  scripts  shell§ Construc?on  sur  machine  esclave§ Affiche  des  rapports  

Pourquoi  Jenkins§ Richesse  des  plugins§ Mul?plateforme§ Simplicité

Difficultés  rencontrées  Jenkins  /  iOS§ Configura?on  de  l’esclave§ Limita?on  des  plugins  pour  les  projets  iOS  

JENKINS

jeudi 16 février 2012

Page 10: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

JENKINS

Démo Jenkins

jeudi 16 février 2012

Page 11: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

q Objec2f  du  cocoaheads,  présenta2on  du  contexte

q SVN,  Jenkins

q Tests  unitaires  ,  Tests  fonc2onnels

q Couverture  de  code,  Analyse  Sta2que

q Documenta2on,  Déploiement

q Parlons  Android

q Conclusion

PLAN

jeudi 16 février 2012

Page 12: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

Procédé  assurant  un  fonc2onnement  correct  d’une  par2e  du  logiciel

§ OCUnit  est  un  framework  de  tests  unitaires  issu  de  XUnit§ Le  test  vérifie  que  la  par?e  du  code  a  le  comportement  a6endu§ Les  régressions  sont  détectées  après  une  modifica?on  déficiente§ Affichage  du  rapport    dans  Jenkins§ Affichage  de  la  tendance  des  tests  dans  Jenkins

Installa2on/Configura2on/U2lisa2on

§ Créer  un  nouveau  projet  iOS  en  cochant  la  case  «  Include  Unit  Tests  »§ Lancer  les  tests  unitaires  dans  Jenkins  avec  un  script  Shell§ Conver?r  le  résultat  OCUnit  au  format  Junit  avec  le  script  ocunit2junit.rb§ Afficher   le  résultat   dans   Jenkins   en   cochant   l’op?on   «  Publier   le  rapport   des   résultats  des  tests  Junit  »

TU

jeudi 16 février 2012

Page 13: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

TU

jeudi 16 février 2012

Page 14: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

Procédé  permeQant  de  tester  l’applica2on  na2ve  à  par2r  de  son  IHM

§ Fone  Monkey  est  un  framework  de  tests  IHM  mul?  OS  (iOS,  Android,  Flex)§ Le  test  est  enregistré  à  par?r  des  ac?ons  de  l‘u?lisateur  sur  l’IHM§ Les  tests  sont    enregistrés  au  format  OCUnit§ Les  tests  peuvent  être  retouchés  et  améliorés  au  besoin§ Affichage  du  rapport    dans  Jenkins§ Affichage  de  la  tendance  des  tests  dans  Jenkins

Installa2on/Configura2on/U2lisa2on

§ Récupéra?on  des  sources  FoneMonkey  pour  iOS  depuis  le  site  officiel§ Installa?on  de  FoneMonkey  dans  le  projet  iOS§ U?lisa?on  de  FoneMonkey  dans  le  projet  pour  enregistrer  les  tests  pendant  l’exécu?on  de  l’applica?on

§ Créa?on  des  tests  OCUnit  à  par?r  des  tests  enregistrés§ Faire  un  script  Shell  dans  Jenkins

TESTS  IHM  (na(fs)

jeudi 16 février 2012

Page 15: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

TESTS  IHM  (na(fs)

jeudi 16 février 2012

Page 16: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

Procédé  permeQant  de  tester  l’applica2on  web  à  par2r  de  son  IHM

§ Selenium  est  un  framework  d’applica?ons  web§ Le  test  est  configuré  via  un  plugin  Firefox§ Le  résultat  du  test  est  exporté  dans  le  langage  cible§ Les  tests  sont  lancés  sur  l’émulateur  ou  sur  l’appareil  via  un  web  driver

Installa2on/Configura2on/U2lisa2on§ Installer  le  plugin  Selenium  IDE  pour  Firefox§ Créer  un  scénario  de  test  avec  Selenium  IDE§ Exporter  le  scénario  dans  le  langage  qui  vous  convient  (p.ex.:  Java)§ Modifier   le  code  du  test  généré  en  remplaçant   le  composant  gérant   les  interac?ons  avec  le  

navigateur  Firefox  par  celui  gérant  les  interac?ons  avec  le  navigateur  de  l’iPhone  (Safari)§ Ajouter  le  test  dans  votre  projet  web  Java  qui  cible  le  navigateur  de  l’iPhone§ Configurer   le  projet   Java  qui  se  charge  de  lancer   les  tests  en  créant  une  étape  de  build  de  

type  «  Appeler  Ant  »  

TESTS  IHM  (Web)

jeudi 16 février 2012

Page 17: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

TESTS  IHM  (Web)

Démo Tests SeleniumDémo TU et TF

jeudi 16 février 2012

Page 18: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

q Objec2f  du  cocoaheads,  présenta2on  du  contexte

q SVN,  Jenkins

q Tests  unitaires  ,  Tests  fonc2onnels

q Couverture  de  code,  Analyse  Sta2que

q Documenta2on,  Déploiement

q Parlons  Android

q Conclusion

PLAN

jeudi 16 février 2012

Page 19: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

Procédé  assurant  une  bonne  couverture  de  code

§ Détec?on  des  par?es  de  code  non  u?lisées§ Couverture  de  code  en  fonc?on  des  tests§ Rapport  de  l’analyse  dans  Jenkins

Installa2on/Configura2on/U2lisa2on

§ Configurer  votre  projet  Xcode  avec§ Les  valeurs  fprofile-­‐arcs  et  -­‐fest-­‐coverage  ajoutées  à  Other  C  Flags§ La  bibliothèque  libprofile_rt.a  parmi  les  bibliothèques  à  lier  à  l’édi?on  des  liens

§ Créer  un  script  shell§ Récupérer   les   fichiers   gcda   et   gcov   contenant   les   informa?ons   de   couverture   de  code

§ Conver?r  ces  fichiers  au  format  Cobertura  avec    l’u?litaire  gcovr  

COUVERTURE  DE  CODE

jeudi 16 février 2012

Page 20: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

COUVERTURE  DE  CODE

jeudi 16 février 2012

Page 21: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

Procédé  permeQant  de  contrôler  la  qualité  du  code

§ Analyse  sta?que  dans  Xcode  (fuite  mémoire,  variable  non  ini?alisée…)§ Possibilité  de  forcer  l’analyse  sta?que  à  chaque  compila?on§ Rapport  de  l’analyse  intégré  dans  le  code

Installa2on/Configura2on/U2lisa2on

§ Lancer  la  commande    Product  >Analyse  dans  Xcode

ANALYSE  STATIQUE

jeudi 16 février 2012

Page 22: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

ANALYSE  STATIQUE

Démo Couverture Code Démo Analyse

jeudi 16 février 2012

Page 23: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

Système  de  généra2on  de  documenta2on  mul2  langage

§ Objec?ve-­‐C  pris  en  charge  par  Doxygen§ Documenta?on  au  format  HTML  accessible  depuis  un  serveur§ Code  source  consultable  dans  la  doc§ Doxygen  helper  pour  générer  commentaires  au  format  Doxygen  (service)

Installa2on/Configura2on/U2lisa2on

§ Installer  Doxygen§ Ajouter  dans  le  projet  iOS  un  fichier  de  config  Doxyfile§ Paramétrer  le  Doxyfile  afin  d’obtenir  une  doc  complète  et  agréable  à  parcourir§ Ajouter  un  script  shell  dans  Jenkins  pour  lancer  la  doc§ Rendre  la  doc  accessible  par  tous  les  membres  de  l’équipe  depuis  un  serveur

DOCUMENTATION  DOXYGEN

jeudi 16 février 2012

Page 24: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

Procédé  permeQant  de  rendre  l’applica2on  disponible  aux  testeurs

§ Un  script  construit  une  archive  au  format  ipa§ L’applica?on  est  installable  en  un  clic  sur  un  appareil  § L’applica?on  et  la  doc  sont  accessibles  depuis  un  serveur

Installa2on/Configura2on/U2lisa2on

§ Installer  la  clé  privée  de  l’applica?on  sur  la  machine  esclave§ Ajouter  un  script  shell  dans  Jenkins  qui

§ exécute  xcodebuild  avec  les  informa?ons  de  provisioning§ Déplace  l’applica?on  sur  un  serveur  accessible  par  tous  les  membres  de  l’équipe

DÉPLOIEMENT  SUR  SERVEUR  

Démo Documentation

jeudi 16 février 2012

Page 25: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

q Objec2f  du  cocoaheads,  présenta2on  du  contexte

q SVN,  Jenkins

q Tests  unitaires  ,  Tests  fonc2onnels

q Couverture  de  code,  Analyse  Sta2que

q Documenta2on,  Déploiement

q Parlons  Android

q Conclusion

PLAN

jeudi 16 février 2012

Page 26: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

ARCHITECTURE  IC  Android

jeudi 16 février 2012

Page 27: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

EMMA

jeudi 16 février 2012

Page 28: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

CHECKSTYLE  et  FINDBUGS

jeudi 16 février 2012

Page 29: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

q Objec2f  du  cocoaheads,  présenta2on  du  contexte

q SVN,  Jenkins

q Tests  unitaires  ,  Tests  fonc2onnels

q Couverture  de  code,  Analyse  Sta2que

q Documenta2on,  Déploiement

q Parlons  Android

q Conclusion

PLAN

jeudi 16 février 2012

Page 30: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

Pour  les  développeurs§ Ecriture  de  tests  moins  rébarba?ve§ Documenta?on  constamment  à  jour§ Détec?on  plus  rapide  des  bugs  et  des  erreurs  de  programma?on

Pour  les  chefs  de  projet§ Confort  dans  le  suivi  du  développement§ Analyse  en  profondeur  du  projet  à  par?r  de  rapports  complémentaires§ Assurance  d’avoir  une  version  stable  disponible  à  tout  moment§ Métriques  objec?ves  pour  faciliter  les  discussions  chef  de  projet/développeurs

Pour  les  décideurs§ Charge  sur  pe?t  projet  car  coût  de  la  mise  en  place  non  négligeable§ Mais  économies  considérables  sur  les  projets  importants

LA  QUALIMETRIE  POUR  QUI  ?POURQUOI  ?

jeudi 16 février 2012

Page 31: CocoaHeads Rennes #7 : Intégration continue pour les nuls

è  www.groupe-­‐sii.com le  16/02/2012  |  SII  Rennes  |  3  bis,  avenue  Belle  Fontaine|  35510  Cesson  Sévigné

FIN  

jeudi 16 février 2012