conserver l’historique des modifications apportées chaque jour … et
revenir en arrière en cas de besoin
Problématique 2
partager le développement entre plusieurs personnes
permettre un accès partagé au système de fichiers versionné
permettre un accès distant depuis diverses plateformes
retrouver rapidement l’origine d’un Bug en cas de
régression
Problématique 3
Comment gérer des distributions ?
↪ plusieurs versions peuvent
coexister ( branches de développement, branches beta, branches
production )
Problématique 4
Utiliser de l’intégration continue (Gitlab, Github, Jenkins,
etc.)
↪ introduire des vérifications,
tests, production d’artefacts lors d’une mise à jour d’un dépôt.
Complexe
Multiples branches à gérer en parallèle
…
Ou
Branches de chrome…
Un logiciel de gestion de version
Agit sur une arborescence de fichiers
Permet de mutualiser un développement
Permet de stocker toute évolution du code source
↪ Ajoute une nouvelle dimension au
système de fichiers: le temps
2 modèles
Centralisés
Décentralisés
Centralisés 👹
Style CVS ou SVN
un seul dépôt de référence
besoin d’un serveur
besoin de synchronisation
conflits plus fréquents …
Décentralisés 🔆
plusieurs dépôts pour un même logiciel
chacun peut travailler à son rythme
de façon synchronisée ou pas des autres
Systèmes décentralisés
Bazaar
Mercurial
Git
Avantages ⭐️
ne pas être dépendant d’une machine
travailler sans connexion
participation “progressive” à un projet:
accès au code
contribution proposée
contributeur “actif” si acceptée
Dépôt de référence
Dépôt contenant les versions livrées d’un projet
Un dépôt est un emplacement central où sont stockées :
l’historique des versions des fichiers
les logs
les dates, auteurs, tags, etc.
Dépôt 📂
Un dépôt apparaît de l’extérieur comme un système de
fichiers composé de répertoires au sein desquels on peut naviguer,
lire et écrire selon les permissions dont on dispose.
Master (ou Trunck en SVN) 🌳
Version principale
à partir d’elle, on peut crééer des branches
Branches 🌵
un développement « secondaire » est mis en route
nouvelle fonctionnalité
correction de bugs, etc.
Destin d’une branche
Une branche peut soit être à nouveau fusionnée dans le « master
»
soit disparaître
soit donner lieu à un nouveau programme. On parle alors de fork
⑂
Le Checkout
consiste à récupérer pour la première fois les fichiers déjà
existant au sein d’un projet du dépôt
Le résultat est une copie de travail
Sous git cela consiste aussi à choisir sa branche de travail
Ajout
Pour ajouter un fichier spécifique:
git add monfic
Pour ajouter tout le contenu du répertoire courant:
git add .
Commit ⛳️
Met à jour la copie locale (puis si on veut, le dépôt)
Une nouvelle révision est alors créée
il faut que la copie de travail corresponde à la dernière version du
dépôt
un message est associé au commit
éventuellement un tag
Commit ⛳️
git commit -m"added a wonderful new feature"
ou si on veut ajouter en même temps les modifications portant sur des
fichiers existants :
git commit -am"added a wonderful new feature"
update (pull) 🆕
L’update synchronise la copie de travail locale avec le dépôt
en récupérant la dernière version des fichiers du dépôt
C’est à cette occasion que des conflits de version peuvent
apparaître :)
Choisir un projet sympa (nodejs, ruby on rails, d3js, etc.) sur
github ou gitlab
forkez-le sur Github ou Gitlab
clonez votre fork localement
choisissez un bug signalé ou une nouvelle fonctionnalité demandée
Par exemple NodeJS Github
repo
Contribuez
creez une branche pour développer le code correspondant
publiez cette branche sur votre dépôt
Soumettez un Pull Request ou PR
(Github) Soumettez un Merge Request ou
MR (Gitlab)
Attendez le verdict. Si refus, retour à 5 …
motifs de refus 😭
Merge impossible (rebasage nécessaire …)
Style non conforme, manque de commentaires
Manque de tests ou tests qui échouent
integration continue
certains tests ou programmes peuvent être automatiquement lancés
quand certains fichiers sont mis à jour sur le dépôt
spécifié dans un fichier .gitlab-ci.yml sur
Gitlab
similaire à un Dockerfile
TDD - méthodes agiles
Test-Driven Development
Kent Beck 2003
premiers concepts d'extreme programming
méthodes agiles
Agile
Les méthodes agiles constituent de nouveaux modes
d’organisation
Pas seulement en informatique
Industrie automobile, logistique, etc.
Méthodes les plus connues
Pair Programming
Test Driven Development
Scrum
Scrum Master
Product Owner
Sprints
StandUp meetings
Retrospectives
Standup Meetings
But de ces meetings
Fournir un feedback (retrospective)
Organiser les étapes suivantes
Etre dans une position “active”
Backlogs (Todo lists)
Joli backlog
Overloaded backlog
backlog un peu chargé
Méthode Scrum
Eléments Scrum
Scrum
Pierre angulaire :
items de Backlog
Tests
TDD et versionnage
Groupes :
Typiquement 4-5 personnes
certains projets concernent des centaines de personnes (noyau linux,
OS, etc.)
Avant tout: les Tests
Différentes sortes de tests
exemples
Pourquoi le TDD ?
Différentes sortes de tests
En informatique, un test est une procédure de vérification partielle d'un système
Il y a une grande diversité de tests, concentrons nous sur les 3
principales catégories
Les 3 principaux types de
tests
tests unitaires : s’appliquent à une méthode ou fonction
isolée du reste du système (d’où le nom
d’unitaire)
tests d’intégration : comme les tests unitaires, mais sans
êtres séparés du reste du système.
tests fonctionnels : On teste une fonctionnalité complète
en décrivant une sucession d’actions effectuée par un utilisateur de
l’application.
exemples
Pour tester une fonction, on fournit une liste
d’entrées/sorties
Pour tester une fonctionalité, on peut décrire son comportement
attendu en écrivant une User Story comme: “Alice se rend sur la
page d’accueil du site, voit 2 zones de saisie de nombres qu’elle
complète, puis clique sur le bouton ajouter, et constate avec plaisir
que le résultat de l’addition des 2 nombres s’affiche dans une zone
encadrée de vert au milieu de la page”