• Like
Gestion de projets en bioinformatique
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Gestion de projets en bioinformatique

  • 744 views
Published

 

Published in Education
  • 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
744
On SlideShare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
14
Comments
0
Likes
1

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. Gestion de projets en bioinformatique Pierre Poulain pierre.poulain@univ-paris-diderot.fr 09/2011
  • 2. À l’exception des illustrations et images dont les crédits sont indiquésà la fin du document et dont les droits appartiennent à leurs auteursrespectifs, le reste de ce cours est sous licence Creative CommonsPaternité (CC-BY).http://creativecommons.org/licenses/by/2.0/fr/PP Université Paris Diderot - Paris 7 2
  • 3. Menu 1 Qu’est-ce qu’un projet ? 5 Gestionnaires de versions 2 Gestion de projet en bioinformatique 6 Documentation (automatique) de code 3 Outils pour le travail collaboratif 4 Comparaison de code sourcePP Université Paris Diderot - Paris 7 3
  • 4. DéfinitionD’après Wikipédia : « Un projet est un engagement irréversiblede résultat incertain, non reproductible a priori à l’identique,nécessitant le concours et l’intégration d’une grande diversitéde contribution, et répondant à un besoin exprimé. »PP Université Paris Diderot - Paris 7 4
  • 5. Nature d’un projetOrganisation d’un projet par la méthode QQOQCCP. Quoi (Quelles actions ?) Qui (Pour qui est le projet ? Qui est impliqué ?) Où (Quel domaine est concerné ? Quel est le contexte ?) Quand (Dans quel ordre fait-on les choses ?) Comment (Quels moyens ? Quelles méthodes) Combien (Combien ça coûte ?) Pourquoi (Pourquoi ce projet ? Quels sont les objectifs ?)PP Université Paris Diderot - Paris 7 5
  • 6. Diagramme de GanttModélisation de la planification de tâches nécessaires à laréalisation d’un projet (Henry L. Gantt, 1977).GanttProject http://www.ganttproject.biz/PP Université Paris Diderot - Paris 7 6
  • 7. Menu 1 Qu’est-ce qu’un projet ? 5 Gestionnaires de versions 2 Gestion de projet en bioinformatique 6 Documentation (automatique) de code 3 Outils pour le travail collaboratif 4 Comparaison de code sourcePP Université Paris Diderot - Paris 7 7
  • 8. Gestion de projet en bioinformatiqueA Quick Guide to Organizing Computational Biology ProjectsW. S. Noble, PLoS Computational Biology, 5 : e1000424, 20091. structuration d’un projet en bioinformatique2. reproductibilité des résultats3. documentationPP Université Paris Diderot - Paris 7 8
  • 9. Organisation des fichiers et répertoiresW. S. Noble, PLoS Computational Biology, 5 : e1000424, 2009PP Université Paris Diderot - Paris 7 9
  • 10. Bien gérer un projet (bioinformatique)séparer données primaires, résultats et analysesscript global pour regénérer simulations et analysesgestion des erreursgestionnaires de versionssauvegardes !PP Université Paris Diderot - Paris 7 10
  • 11. Bien gérer un projet (bioinformatique) 2documentation générale – cahier de laboratoiredocumentation ponctuelle (README)documentation des scripts et programmes(commentaires + docstring/doxygen)PP Université Paris Diderot - Paris 7 11
  • 12. Cahier de laboratoirephysique (papier) ou virtuel (notebook.html)horodatage obligatoirevaleur légaley consigner toutes les simulations et tous les résultats(programmes utilisés et paramètres)répertoires et noms de fichiersperso (laboratoire / entreprise)© refaire simulations et analyses (sans vous)PP Université Paris Diderot - Paris 7 12
  • 13. Menu 1 Qu’est-ce qu’un projet ? 5 Gestionnaires de versions 2 Gestion de projet en bioinformatique 6 Documentation (automatique) de code 3 Outils pour le travail collaboratif 4 Comparaison de code sourcePP Université Paris Diderot - Paris 7 13
  • 14. Travail collaboratiftravailler à plusieurs sur un même projetà des temps différents ou pas à des endroits différents ou pas outils pour discuter, échanger et comparerPP Université Paris Diderot - Paris 7 14
  • 15. Travail collaboratifdiscuter : MSN, Gtalk, Facebook, Skype...échanger : mail, clef USB, Dropbox...se réunir : Doodle (http://www.doodle.com/)PP Université Paris Diderot - Paris 7 15
  • 16. EtherPadédition collaborative simultanée en temps réelietherpad http://ietherpad.com/SplinePad http://pad.spline.de/PrimaryPad http://primarypad.com/TypeWithMe http://typewith.me/services similairesWriteboard http://writeboard.com/collabedit http://collabedit.com/PP Université Paris Diderot - Paris 7 16
  • 17. EtherPadAdresse « publique » du typehttp://ietherpad.com/N3rtMQIpKPP Université Paris Diderot - Paris 7 17
  • 18. Menu 1 Qu’est-ce qu’un projet ? 5 Gestionnaires de versions 2 Gestion de projet en bioinformatique 6 Documentation (automatique) de code 3 Outils pour le travail collaboratif 4 Comparaison de code sourcePP Université Paris Diderot - Paris 7 18
  • 19. xxdiffxxdiff script1.py script2.pyPP Université Paris Diderot - Paris 7 19
  • 20. Meldmeld script1.py script2.pyPP Université Paris Diderot - Paris 7 20
  • 21. Menu 1 Qu’est-ce qu’un projet ? 5 Gestionnaires de versions 2 Gestion de projet en bioinformatique 6 Documentation (automatique) de code 3 Outils pour le travail collaboratif 4 Comparaison de code sourcePP Université Paris Diderot - Paris 7 21
  • 22. Pourquoi ?login@host> cd test_projet_en_bazar/login@host> ls00README script (8e copie).py script_OLD.pyscript (12e copie).py script (autre copie).py script.pyscript_14042010.py script (copie).py script_ver1.pyscript-22032010.py script_LAST.py script_ver2.pyscript (7e copie).py script_NEW.py script_ver3_03052010.pyPP Université Paris Diderot - Paris 7 22
  • 23. Oui mais !login@host> ls -ltotal 60-rw-r--r-- 1 poulain dsimb 38 2010-07-22 10:47 00README-rw-r--r-- 1 poulain dsimb 153 2010-07-22 10:45 script (12e copie).py-rw-r--r-- 1 poulain dsimb 75 2010-04-14 09:17 script_14042010.py-rw-r--r-- 1 poulain dsimb 51 2010-03-22 15:49 script-22032010.py-rw-r--r-- 1 poulain dsimb 124 2010-07-22 10:40 script (7e copie).py-rw-r--r-- 1 poulain dsimb 135 2010-07-22 11:12 script (8e copie).py-rw-r--r-- 1 poulain dsimb 95 2010-07-22 11:31 script (autre copie).py-rw-r--r-- 1 poulain dsimb 108 2010-07-22 12:05 script (copie).py-rw-r--r-- 1 poulain dsimb 153 2010-06-27 10:35 script_LAST.py-rw-r--r-- 1 poulain dsimb 176 2010-07-22 17:30 script_NEW.py-rw-r--r-- 1 poulain dsimb 69 2010-03-29 11:56 script_OLD.py-rw-r--r-- 1 poulain dsimb 27 2010-02-02 17:03 script.py-rw-r--r-- 1 poulain dsimb 131 2010-07-22 18:05 script_ver1.py-rw-r--r-- 1 poulain dsimb 167 2010-07-22 17:50 script_ver2.py-rw-r--r-- 1 poulain dsimb 80 2010-05-03 14:30 script_ver3_03052010.pyPP Université Paris Diderot - Paris 7 23
  • 24. La solutionles gestionnaires de versionsarchiver les différentes modifications apportées à des donnéestextuelles.py .c .cpp .pl .java .html .xhtml .tex .txtPP Université Paris Diderot - Paris 7 24
  • 25. Gestionnaires de versionsVersion Control System (VCS)Deux principes :- Centralized Version Control System (CVCS)- Distributed Version Control System (DVCS)PP Université Paris Diderot - Paris 7 25
  • 26. Gestionnaires de versions (2)Centralized Version Control System (CVCS)- Concurrent Versions System (CVS)- subversion (svn)Distributed Version Control System (DVCS)PP Université Paris Diderot - Paris 7 26
  • 27. Ranger le bazar avec Bazaarhttp://bazaar.canonical.com/- né en 2005- supporté par Canonical (Ubuntu)- robuste- simple d’utilisation- développé en Python- adossé à la plateforme de développementhttps://launchpad.net/Bazaar in five minutes http://doc.bazaar.canonical.com/bzr.dev/en/mini-tutorial/index.htmlPP Université Paris Diderot - Paris 7 27
  • 28. Initialisation de la branchelogin@host> mkdir projetlogin@host> cd projetlogin@host> bzr initCreated a standalone tree (format: 2a)login@host> ls -a./ ../ .bzr/# définition identitélogin@host> bzr whoami "Prénom Nom <adresse.mail@provider>"# vérificationlogin@host> bzr whoamiPrénom Nom <adresse.mail@provider>PP Université Paris Diderot - Paris 7 28
  • 29. Liste des commandeslogin@host> bzr helpBazaar 2.1.1 -- a free distributed version-control toolhttp://bazaar-vcs.org/Basic commands: bzr init makes this directory a versioned branch bzr branch make a copy of another branch bzr add make files or directories versioned bzr ignore ignore a file or pattern bzr mv move or rename a versioned file bzr status summarize changes in working copy bzr diff show detailed diffs bzr merge pull in changes from another branch bzr commit save some or all changes bzr send send changes via email bzr log show history of changes bzr check validate storage bzr help init more help on e.g. init command bzr help commands list all commands bzr help topics list all help topicsPP Université Paris Diderot - Paris 7 29
  • 30. Ajout de fichier et statutlogin@host> vi script.py script.py# -*- coding: utf-8 -*-# projet Pythonprint "début du projet"seq = "GWALILIPAGA"print "séquence :", seqlogin@host> ls -a./ ../ .bzr/ script.pylogin@host> bzr statusunknown: script.pyPP Université Paris Diderot - Paris 7 30
  • 31. Ajout de fichier et statut (2)login@host> bzr add script.pyadding script.pylogin@host> bzr statusadded: script.pyscript.py est maintenant « versionné »login@host> bzr commit -m "ajout de script.py"Committing to: /home/login/chemin/du/projet/added script.pyCommitted revision 1.commit = enregistrement version et journal (log) de la branchebzr commit sans option -m lance un éditeur de textePP Université Paris Diderot - Paris 7 31
  • 32. Suivi des modifications script.py (avant) script.py (après)# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-# projet Python # projet Pythonprint "début du projet" print "Comptage dalanines"seq = "GWALILIPAGA" seq = "GWALILIPAGA"print "séquence :", seq print "séquence :", seq compteur = 0 for aa in seq: if aa == "A": compteur += 1 print compteurlogin@host> bzr statusmodified: script.pylogin@host> bzr commit -m "comptage des alanines"Committing to: /home/login/chemin/du/projet/modified script.pyCommitted revision 2.PP Université Paris Diderot - Paris 7 32
  • 33. Suivi des modifications (2) script.py (avant) script.py (après)# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-# projet Python # projet Pythonprint "Comptage dalanines" print "Comptage dalanines"seq = "GWALILIPAGA" seq = "GWALILIPAGA"print "séquence :", seq print "séquence :", seqcompteur = 0 compteur = 0for aa in seq: for aa in seq: if aa == "A": if aa == "A": compteur += 1 compteur += 1print compteur print "Nombre alanines :", compteurlogin@host> bzr statusmodified: script.pylogin@host> bzr commit -m "amélioration affichage résultat"Committing to: /home/login/chemin/du/projet/modified script.pyCommitted revision 3.PP Université Paris Diderot - Paris 7 33
  • 34. Journal des modificationslogin@host> bzr log------------------------------------------------------------revno: 3committer: Prénom Nom <adresse.mail@provider>branch nick: projettimestamp: Sat 2010-09-11 18:26:32 +0200message: amélioration affichage résultat------------------------------------------------------------revno: 2committer: Prénom Nom <adresse.mail@provider>branch nick: projettimestamp: Sat 2010-09-11 18:15:47 +0200message: comptage des alanines------------------------------------------------------------revno: 1committer: Prénom Nom <adresse.mail@provider>branch nick: projettimestamp: Sat 2010-09-11 18:00:45 +0200message: ajout de script.pyPP Université Paris Diderot - Paris 7 34
  • 35. Rappel des modificationslogin@host> bzr diff -r1..2=== modified file script.py--- script.py 2010-09-11 16:00:45 +0000+++ script.py 2010-09-11 16:15:47 +0000@@ -1,7 +1,12 @@ # -*- coding: utf-8 -*- # projet Python-print "début du projet"+print "Comptage dalanines" seq = "GWALILIPAGA" print "séquence :", seq+compteur = 0+for aa in seq:+ if aa == "A":+ compteur += 1+print compteurbzr diff -r..2 / bzr diff -r2..PP Université Paris Diderot - Paris 7 35
  • 36. Rappel des modifications (bonus)login@host> bzr diff -r1..2 --using meldPP Université Paris Diderot - Paris 7 36
  • 37. Annulation de modifications script.py (avant) script.py (après)# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-# projet Python # projet Pythonprint "Comptage dalanines" print "Comptage dalanines"seq = "GWALILIPAGA" seq = "GWALILIPAGA"print "séquence :", seq print "séquence :", seqcompteur = 0 for aa in seq:for aa in seq: compteur = 0 if aa == "A": if aa == "A": compteur += 1 compteur += 1print "Nombre alanines :", compteur print "Nombre alanines :", compteurlogin@host> python script.pyComptage dalaninesséquence : GWALILIPAGANombre alanines : 1oups !PP Université Paris Diderot - Paris 7 37
  • 38. Annulation de modifications (2)login@host> bzr revert M script.pylogin@host> cat script.py# -*- coding: utf-8 -*-# projet Pythonprint "Comptage dalanines"seq = "GWALILIPAGA"print "séquence :", seqcompteur = 0for aa in seq: if aa == "A": compteur += 1print "Nombre alanines :", compteurouf ! Retour à l’état du dernier commit.PP Université Paris Diderot - Paris 7 38
  • 39. Annulation de modifications (3) script.py (avant) script.py (après)# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-# projet Python # projet Pythonprint "Comptage dalanines" print "Comptage dalanines"seq = "GWALILIPAGA" seq = "GWALILIPAGA"print "séquence :", seq print "séquence :", seqcompteur = 0 for aa in seq:for aa in seq: compteur = 0 if aa == "A": if aa == "A": compteur += 1 compteur = 1print "Nombre alanines :", compteur print "Nombre alanines :", compteurlogin@host> bzr commit -m "meilleur compteur"Committing to: /home/login/chemin/du/projet/modified script.pyCommitted revision 4.login@host> python script.pyComptage dalaninesséquence : GWALILIPAGANombre alanines : 1re-oups !PP Université Paris Diderot - Paris 7 39
  • 40. Annulation de modifications (4)login@host> bzr revert script.py -r3 M script.pylogin@host> cat script.py# -*- coding: utf-8 -*-# projet Pythonprint "Comptage dalanines"seq = "GWALILIPAGA"print "séquence :", seqcompteur = 0for aa in seq: if aa == "A": compteur += 1print "Nombre alanines :", compteurlogin@host> bzr statusmodified: script.pylogin@host> bzr commit -m "script.py - retour version 3"Committing to: /home/login/chemin/du/projet/modified script.pyCommitted revision 5.re-ouf !PP Université Paris Diderot - Paris 7 40
  • 41. Annulation de modifications (5)Si commit par erreur :bzr uncommitPour enlever un fichier du gestionnaire de versions :- en le gardant sur le disquebzr remove --keep script.py- en le détruisant aussi sur le disquebzr remove --force script.pyPP Université Paris Diderot - Paris 7 41
  • 42. Copie de branchelogin@host> cd ..login@host> bzr branch projet/ projet2Branched 5 revision(s).login@host> cd projet2login@host> lsscript.pyPP Université Paris Diderot - Paris 7 42
  • 43. Travail sur la nouvelle branche (projet2) script.py (avant) script.py (après)# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-# projet Python # projet Pythonprint "Comptage dalanines" print "Comptage dalanines"seq = "GWALILIPAGA" seq = "GWALILIPAGA"print "séquence :", seq print "séquence :", seqcompteur = 0 compteur = seq.count("A")for aa in seq: print "Nombre alanines :", compteur if aa == "A": compteur += 1print "Nombre alanines :", compteurlogin@host> bzr commit -m "count() au lieu de for"Committing to: /home/login/chemin/du/projet2/modified script.pyCommitted revision 6.PP Université Paris Diderot - Paris 7 43
  • 44. Historique de la branche projet2login@host> bzr log------------------------------------------------------------revno: 6committer: Prénom Nom <adresse.mail@provider>branch nick: projet2timestamp: Mon 2010-09-13 20:51:32 +0200message: count() au lieu de for------------------------------------------------------------revno: 5committer: Prénom Nom <adresse.mail@provider>branch nick: projettimestamp: Sun 2010-09-12 21:10:08 +0200message: script.py - retour version 3------------------------------------------------------------revno: 4committer: Prénom Nom <adresse.mail@provider>branch nick: projettimestamp: Sun 2010-09-12 18:44:15 +0200message: meilleur compteur------------------------------------------------------------PP Université Paris Diderot - Paris 7 44
  • 45. Fusion de brancheslogin@host> cd ../projetlogin@host> bzr merge ../projet2/ M script.pyAll changes applied successfully. script.py # -*- coding: utf-8 -*- # projet Pythonprint "Comptage dalanines"seq = "GWALILIPAGA"print "séquence :", seqcompteur = seq.count("A")print "Nombre alanines :", compteurlogin@host> bzr commit -m "ajout amélioration de projet2"Committing to: /home/login/chemin/du/projet/modified script.pyCommitted revision 6.PP Université Paris Diderot - Paris 7 45
  • 46. Gestion des conflits script.py (projet) script.py (projet2)# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-# projet Python # projet Pythonprint "Comptage dalanines" print "Comptage dalanines"seq = "GWALILIPAGA" seq = "GWALILIPAGA"print "séquence :", seq print "séquence :", seqcompteur = seq.count("A") compteur = seq.count("A")print "Nb ala :", compteur print "alanines :", compteurlogin@host> bzr merge ../projet2 M script.pyText conflict in script.py1 conflicts encountered.login@host> lsscript.py script.py.BASE script.py.OTHER script.py.THISPP Université Paris Diderot - Paris 7 46
  • 47. Gestion des conflits (2) script.py (conflits) script.py.BASE (ancêtre commun)# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-# projet Python # projet Pythonprint "Comptage dalanines" print "Comptage dalanines"seq = "GWALILIPAGA" seq = "GWALILIPAGA"print "séquence :", seq print "séquence :", seqcompteur = seq.count("A") compteur = seq.count("A")<<<<<<< TREE print "Nombre alanines :", compteurprint "Nb ala :", compteur=======print "alanines :", compteur>>>>>>> MERGE-SOURCE script.py.OTHER (branche projet2) script.py.THIS (branche projet)# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-# projet Python # projet Pythonprint "Comptage dalanines" print "Comptage dalanines"seq = "GWALILIPAGA" seq = "GWALILIPAGA"print "séquence :", seq print "séquence :", seqcompteur = seq.count("A") compteur = seq.count("A")print "alanines :", compteur print "Nb ala :", compteurPP Université Paris Diderot - Paris 7 47
  • 48. Gestion des conflits (3)On garde la version de projet :login@host> cp script.py.THIS script.pylogin@host> bzr resolveAll conflicts resolved.login@host> lsscript.py script.py# -*- coding: utf-8 -*-# projet Pythonprint "Comptage dalanines"seq = "GWALILIPAGA"print "séquence :", seqcompteur = seq.count("A")print "Nb ala :", compteurlogin@host> bzr commit -m "merge with projet2"Committing to: /home/login/chemin/du/projet/Committed revision 8.PP Université Paris Diderot - Paris 7 48
  • 49. Conclusioncommit-ez souvent !explorez les (très très très nombreuses)capacités de BazaarPP Université Paris Diderot - Paris 7 49
  • 50. Menu 1 Qu’est-ce qu’un projet ? 5 Gestionnaires de versions 2 Gestion de projet en bioinformatique 6 Documentation (automatique) de code 3 Outils pour le travail collaboratif 4 Comparaison de code sourcePP Université Paris Diderot - Paris 7 50
  • 51. PrincipeGénérer de la documentation1. automatiquement2. à partir du code sourcePP Université Paris Diderot - Paris 7 51
  • 52. pydoc – docstring testmod.py# -*- coding: utf-8 -*-docstring pour le module testmod.pytestmod est un module de testles docstrings sont de simples chaînes de caractèresclass TestClasse(): """docstring pour la classe TestClasse""" def testmethode(self): "docstring pour la méthode testmethode"def testfonction(): "docstring pour la fonction testfonction"PP Université Paris Diderot - Paris 7 52
  • 53. pydoc – docstring 2login@host> pythonPython 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)[GCC 4.4.3] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> import testmod>>> help(testmod)PP Université Paris Diderot - Paris 7 53
  • 54. Help on module testmod:NAME testmodFILE /chemin/du/module/testmod.pyDESCRIPTION docstring pour le module testmod.py testmod est un module de test les docstrings sont de simples chaînes de caractèresCLASSES TestClasse class TestClasse | docstring pour la classe TestClasse | | Methods defined here: | | testmethode(self) | docstring pour la méthode testmethodeFUNCTIONS testfonction() docstring pour la fonction testfonctionPP Université Paris Diderot - Paris 7 54
  • 55. Doxygencode source → documentation (variables, fonctions, classes)C, C++, Java, Python, PHP...HTML, LaTeX, RTFPP Université Paris Diderot - Paris 7 55
  • 56. Doxygen 2paramètres via Doxyfile (complexe)DoxyWizardlogin@host> doxygen...login@host> firefox html/index.htmlPP Université Paris Diderot - Paris 7 56
  • 57. Doxygen 3PP Université Paris Diderot - Paris 7 57
  • 58. Doxygen 4PP Université Paris Diderot - Paris 7 58
  • 59. Conclusion générale organisez-vous temps, arborescence documentez cahier de laboratoire, code investissez bzr, outils sauvegardez !PP Université Paris Diderot - Paris 7 59
  • 60. RéférencesA Quick Guide to Organizing Computational Biology ProjectsW. S. Noble, PLoS Computational Biology, 5 : e1000424, 2009http://www.ploscompbiol.org/article/info%3Adoi%2F10.1371%2Fjournal.pcbi.1000424Présentation bazaarhttp://www.slideshare.net/giordano/bazaar-dvcs-for-human-beings-3121638Bazaar in five minuteshttp://doc.bazaar.canonical.com/bzr.dev/en/mini-tutorial/index.htmlQuick ref cardhttp://doc.bazaar.canonical.com/latest/en/quick-reference/index.htmlbzr explorerhttp://doc.bazaar.canonical.com/explorer/en/visual-tour-gnome.htmlDoxygenhttp://www.stack.nl/~dimitri/doxygen/PP Université Paris Diderot - Paris 7 60