Outils de gestion de projets

Preview:

Citation preview

Outils de gestion de projetsSébastien Combéfis

Mercredi 13 avril 2016

Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative CommonsAttribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.

Contexte

Travail collaboratif sur un projet informatique

Nécessité de coordination entre les développeurs

Utilisation d’outils en ligne de gestion

Pour différents aspects de la gestion de projet

3

Versioning de code

Source Code Management

Pour tout projet informatique, il faut une stratégie de backup

On ajoute souvent une gestion des versions

Un développeur peut proposer plusieurs révisions par jour

Source Code Manager (SCM)Version Control System (VCS)

Revision Control System (RCS)

5

Buts d’un gestionnaire de versions

Gestion d’un projet de programmation

Garder l’historique de toutes les modifications

Travail en équipe

Support de branches de développement

6

Git

Système inventé par Linus Torvalds pour le kernel Linux

Git a vu le jour en avril 2005

Premier commit le 8 avril

Logiciel de gestion de versions décentralisé

Connexion internet uniquement pour les pull et push

7

Prononciation

[ gít ] [ jít ]

4 8

8

Prononciation

[ gít ] [ jít ]

4 8

8

Git avec un serveur central

Accès en écriture pour tous les développeurs

Serveur central

Développeur A Développeur B

push

pull pull

push

9

Git décentralisé

Accès en écriture seulement pour les mainteneurs

Les contributeurs font des pull requests

Serveur

Contributeur

Serveur principal

Mainteneur

pushpull

push

pull request

10

États des fichiers (1)

Un fichier doit être explicitement ajouté au dépôt Git

UntrackedModified

Staged Committedgit add git commit

Espace de travail Zone de transit Dépôt Git

11

États des fichiers (2)

Untracked/ModifiedNouveaux fichiers ou fichiers modifiés

Pas pris en compte pour le prochain commit

StagedFichiers ajoutés, modifiés, supprimés ou déplacés

Pris en compte pour le prochain commit

Unmodified/CommittedAucune modification pour le prochain commit

12

Commandes de base

Ajouter un fichier dans la zone de transit

git add <fichier>

Obtenir l’état des fichiers

git status

Valider les modifications en créant un commit

git commit -m "Titre du commit"

Obtenir l’historique des commits

git log

13

Le concept de branche

Une branche pointe vers un commit

À chaque nouveau commit, le pointeur de branche avance

Un commit pointe vers le commit parent

82ea19

cd27e1

master

master

98173c

master

14

Le concept de branche

Une branche pointe vers un commit

À chaque nouveau commit, le pointeur de branche avance

Un commit pointe vers le commit parent

82ea19 cd27e1

master

master

98173c

master

14

Le concept de branche

Une branche pointe vers un commit

À chaque nouveau commit, le pointeur de branche avance

Un commit pointe vers le commit parent

82ea19 cd27e1

master master

98173c

master

14

Création d’une nouvelle branche

Une nouvelle branche est créée avec « git branch <name> »

1 $ git branch test

82ea19 cd27e1 98173c

master

test

15

Branche courante

La commande « git branch » liste les branches existantes

1 $ git branch2 * master3 test

La branche courante est identifiée par HEAD

82ea19 cd27e1 98173c

master

test

HEAD

16

Changer de branche

La commande « git checkout <name> » change de branche

1 $ git checkout test2 Switched to branch ’test ’

La branche courante est identifiée par HEAD

82ea19 cd27e1 98173c

master

testHEAD

17

Commit sur une branche

Un commit va toujours se faire sur la branche courante

1 ...2 $ git commit ...3 $ git checkout master4 ...5 $ git commit ...

82ea19 cd27e1 98173c

62eac3

ab716e 716ea4

master

testHEAD

HEAD

masterHEAD

18

Commit sur une branche

Un commit va toujours se faire sur la branche courante

1 ...2 $ git commit ...3 $ git checkout master4 ...5 $ git commit ...

82ea19 cd27e1 98173c

62eac3

ab716e

716ea4

master

testHEAD

HEAD

masterHEAD

18

Commit sur une branche

Un commit va toujours se faire sur la branche courante

1 ...2 $ git commit ...3 $ git checkout master4 ...5 $ git commit ...

82ea19 cd27e1 98173c

62eac3

ab716e 716ea4

master

testHEAD

masterHEAD

18

Commit sur une branche

Un commit va toujours se faire sur la branche courante

1 ...2 $ git commit ...3 $ git checkout master4 ...5 $ git commit ...

82ea19 cd27e1 98173c

62eac3

ab716e 716ea4

master

test

HEAD

HEAD

masterHEAD

18

Commit sur une branche

Un commit va toujours se faire sur la branche courante

1 ...2 $ git commit ...3 $ git checkout master4 ...5 $ git commit ...

82ea19 cd27e1 98173c

62eac3

ab716e 716ea4

test

HEAD

masterHEAD

18

Pourquoi des branches ?

Organisation du code ou de l’équipe de développement

Conventions à choisir pour chaque projet

Plusieurs utilisations différentes

Une branche par développeur

Une branche par système d’exploitation supporté

Une branche par version (production, développement...)

Convention spéciale pour la plateforme d’hébergement

19

Modèle de branchement

http://nvie.com/posts/a-successful-git-branching-model/20

Fusion de branches

Fusionner deux branches pour en combiner les modifications

La fusion se fait vers la branche courante

1 $ git merge test

82ea19 cd27e1 98173c

62eac3

ab716e 716ea4

test

masterHEAD

886ca5

21

Dépôts distants (1)

Stockage de références vers des dépôts distants

Identifiant pour chaque référence

1 $ git remote -v2 charlesvdv https :// github .com/ charlesvdv / pythia .git ( fetch )3 charlesvdv https :// github .com/ charlesvdv / pythia .git (push)4 origin https :// github .com/pythia - project / pythia .git ( fetch )5 origin https :// github .com/pythia - project / pythia .git (push)

Récupération de commits d’un dépôt distant

Deux opérations possibles en une fois avec git pull

1 $ git fetch charlesvdv updatekernel2 $ git merge remotes / charlesvdv / updatekernel

22

Dépôts distants (2)

Envoi de commits vers un dépôt distant

Utilisation de git push

1 $ git push origin master

Assurer la cohérence entre les branches locales et distantes

État ahead/behind du local par rapport au distant

23

Autres systèmes de versionnement

Mercurial (https://www.mercurial-scm.org/)

Écrit en Python, commande principale hg

Bazaar (http://bazaar.canonical.com/en/)

Écrit en Python, commande principale bzr

24

Plateforme GitHub (1)

Plateforme d’hébergement de dépôts Git

Serveur public permettant le partage de code

Création gratuite d’un compte pour dépôts publics

https://github.com/

25

Plateforme GitHub (2)

26

Plateforme Bitbucket

Plateforme d’hébergement de dépôts Git et Mercurial

Serveur public permettant le partage de code

Création gratuite d’un compte pour dépôts publics et privés

https://bitbucket.org/

27

Déploiement de code

Déploiement

Installation, configuration et déploiement automatisé

Sur base d’un dépôt Git, ou tout autre dépôt distant

Configuration de l’environnement d’exécution

Les logiciels prérequis qui doivent être installés

Définition du script de lancement

Commande(s) à exécuter pour lancer le logiciel

Définition de variables d’environnement

Configuration d’options et paramètres au logiciel

29

Plateforme Heroku (1)

Plateforme d’hébergement d’applications

Déploiement d’applications web et serveur en ligne

Création gratuite de dynos pour petites applications

https://www.heroku.com

30

Plateforme Heroku (2)

31

Exemple d’une app Python

Environnement d’exécution avec runtime.txt

1 python -3.5.1

Script de lancement avec Procfile

1 web: python3 server .py

Prérequis à installer avec requirements.txt

1 bottle ==0.12.92 requests ==2.9.1

32

Outil Jenkins

Outil d’intégration continue

Déploiement d’applications web et serveur en ligne

Outil open-source installable facilement sur un serveur

https:// jenkins.io/

33

Test de code

Testing

Nécessité de tester qu’un programme fait bien ce qu’il faut

Définir ce que le programme doit faire

Écrire un jeu de tests pour vérifier le programme

Impossible de garantir l’exactitude d’un programme

On ne peut pas tester tous les scénarios possibles

Amélioration de la qualité de code

Un jeu de tests bien choisi diminue le nombre de bugs potentiels

35

Types de test

Test utilisateur (usability testing)

Évaluer un programme par des tests utilisateurs (ergonomie...)

Test fonctionnel (functional testing)

Assurance qualité (QA) et test black-box sur les spécifications

Test d’intégration (integration testing)

Vérification des performances et de la fiabilité du programme

36

Test unitaire

Test individuel d’une unité dans le code

Une fonction, une classe ou une méthode

Définition du test sur base d’une spécification du code

Étant donné les préconditions, vérifier les postconditions

Utilisé notamment en Test-Driven Development (TDD)

Technique de développement de logiciel piloté par les tests

37

Cycle TDD

Cycle en trois phases principales

Red–Green–Refactor

Red

Green Refactor

1. Écrire un test qui échoue

2. Faire fonctionner le code 3. Éliminer la redondance

38

Plateforme Travis (1)

Plateforme d’exécution automatique de tests

Code automatiquement rapatrié depuis GitHub par exemple

Création gratuite d’un compte pour tester des dépôts publics

https:// travis-ci.org/

39

Plateforme Travis (2)

40

Exemple d’une app Java

Configuration des tests avec .travis.yml

1 language : java2 script : ant test3 jdk: openjdk7

Création du script de test1 <project name=" MathLib ">2 <target name="test">3 <delete dir="bin" />4 <mkdir dir="bin" />5 <javac includeantruntime =" false " srcdir ="." destdir ="bin" classpath ="lib/junit4

-4.11. jar" />67 <junit printsummary ="on" showoutput ="true" haltonfailure ="yes" fork="true">8 <classpath >9 <pathelement location ="bin" />

10 <pathelement location ="lib/junit4 -4.11. jar" />11 <pathelement location ="lib/hamcrest -core -1.3. jar" />12 </classpath >13 <formatter type =" plain " usefile =" false " />14 <test name="be. ukonline . mathlib .test. TestMatrix " />15 <test name="be. ukonline . mathlib .test. TestSinus " />16 </junit >17 </target >18 </project >

41

Planification et tâches

Plateforme Trello (1)

Plateforme de gestion de projets

Utilisation du paradigme Kanban de Toyota pour la gestion

Création gratuite d’un compte pour version complète de base

https:// trello.com/

43

Plateforme Trello (2)

44

Plateforme FreedCamp (1)

Plateforme de gestion de projets

Paradigme Kanban, liste de todo’s, calendrier...

Création gratuite d’un compte pour version complète de base

https:// freedcamp.com/

45

Plateforme FreedCamp (2)

46

Plateforme Slack (1)

Plateforme de communication

Messagerie entre membres d’une équipe

Création gratuite d’un compte pour petites équipes

https://slack.com/

47

Plateforme Slack (2)

48

Plateforme Tom’splanner (1)

Plateforme de planification d’un projet

Réalisation d’un diagramme de Gantt en ligne

Création gratuite d’un compte personnel avec un planning

http://www.tomsplanner.com/

49

Plateforme Tom’splanner (2)

50

Documentation de code

Plateforme Read the Docs (1)

Plateforme d’hébergement de documentation

Récupération depuis dépôt Git (Markdown ou reStructuredText)

Création gratuite d’un compte

https:// readthedocs.org/

52

Plateforme Read the Docs (2)

53

Créditshttps://www.flickr.com/photos/vfsdigitaldesign/5396691102https://www.flickr.com/photos/jwhitesmith/7363049912https://openclipart.org/detail/34531/tango-computerhttps://openclipart.org/detail/36565/tango-network-serverhttps://www.flickr.com/photos/faisal_akram/8107449789https://www.flickr.com/photos/nasamarshall/21064480196https://www.flickr.com/photos/bohman/5206587246https://www.flickr.com/photos/bike/10502030344

54

Recommended