26
Introduction à la gestion de projet, aux TDD et aux principes solides Arnaud Labourel [email protected] 10 novembre 2021 Arnaud Labourel [email protected] Introduction à la gestion de projet, aux TDD et aux principes soli 1 / 26

Introduction à la gestion de projet, aux TDD et aux

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduction à la gestion de projet, aux TDD et aux

Introduction à la gestion de projet, aux TDD etaux principes solides

Arnaud Labourel [email protected]

10 novembre 2021

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides1 / 26

Page 2: Introduction à la gestion de projet, aux TDD et aux

Section 1

La gestion de projet

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides2 / 26

Page 3: Introduction à la gestion de projet, aux TDD et aux

Analyse fonctionnelle

1 Rechercher et caractériser les fonctions qu’un logiciel devrait avoirpour satisfaire les besoins de son utilisateur.

2 Hiérarchiser ces fonctions.

Utilisée pour créer mais aussi améliorer un logiciel (ou plusgénéralement un produit).

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides3 / 26

Page 4: Introduction à la gestion de projet, aux TDD et aux

Identification des fonctions

Fonction principale : la raison pour laquelle le logiciel est créé.Cette fonction peut être divisée en plusieurs fonctions simples.

Fonction contrainte : conditions que le produit doit vérifier maisqui ne sont pas sa raison d’exister (par exemple la sécurité).

Fonction complémentaire : ce qui facilite l’utilisation du logiciel,l’améliore ou le complète.

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides4 / 26

Page 5: Introduction à la gestion de projet, aux TDD et aux

Cahier des chargesUn outil de l’analyse fonctionnelle : lister, décrire et hiérarchiser lesfonctions.Exemple de la tondeuseFonction principale :

Couper l’herbe.Fonctions contraintes :

Respecter les normes de sécurité;Pouvoir être conservée à l’extérieur;S’adapter au terrain;Ne pas être trop bruyante;Ne pas être trop encombrante;etc,. . .

Fonctions complémentaires:Ramasser l’herbe;Être automatique.

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides5 / 26

Page 6: Introduction à la gestion de projet, aux TDD et aux

Quelques notions de gestion de projet

Livrable : produit destiné à la livraison : documentation, code,tests, etc. . .

Jalon : fin d’une étape ou évènement important.

Le début d’un projet et sa fin sont des jalons. On fixe des jalonsintermédiaires pour mesurer l’avancée du projet.

Un jalon peut être un livrable lié à une date.

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides6 / 26

Page 7: Introduction à la gestion de projet, aux TDD et aux

La gestion de projet en informatique

Développer un logiciel implique de :

comprendre le besoin du client;en tirer un cahier des charges;concevoir l’architecture du logiciel;développer le logiciel;tester s’il fonctionne comme prévu;le maintenir.

Deux types de management pour y parvenir :

méthodes traditionnelles;méthodes agiles.

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides7 / 26

Page 8: Introduction à la gestion de projet, aux TDD et aux

Cascade (ou Waterfall)

Méthode traditionnelle, inspirée par le BTP.

Passage d’une phase à l’autre uniquement quand la précédente estterminée et vérifiée.

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides8 / 26

Page 9: Introduction à la gestion de projet, aux TDD et aux

Cascade

Inconvénient : très peu réactif en cas d’erreur ou de modificationnécessaire en cours de projet.

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides9 / 26

Page 10: Introduction à la gestion de projet, aux TDD et aux

Cycle en V

Un amélioration du modèle en cascade : limiter le retour aux étapesprécédentes.

Standard depuis 1980.

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides10 / 26

Page 11: Introduction à la gestion de projet, aux TDD et aux

Pro et con du cycle en V

Phase ascendante : renvoie de l’information sur la phasecorrespondante pour améliorer le logiciel.

Phase descendante : anticipation des attendus des étapesmontantes.

Inconvénient : détache complètement la conception de la réalisation.

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides11 / 26

Page 12: Introduction à la gestion de projet, aux TDD et aux

Agile

Objectifs :

plus pragmatique que les méthodes traditionnelles;impliquer le client pendant le développement;être réactif et s’adapter aux changements.

Définition par le manifeste Agile (2001).

Exemples :

développement rapide d’applications (RAD);adaptative software development;extreme programming (XP);Scrum.

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides12 / 26

Page 13: Introduction à la gestion de projet, aux TDD et aux

SCRUM

Source : agileforall.comArnaud Labourel [email protected]

Introduction à la gestion de projet, aux TDD et aux principes solides13 / 26

Page 14: Introduction à la gestion de projet, aux TDD et aux

Section 2

Tests unitaires et développement par les tests(TDD)

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides14 / 26

Page 15: Introduction à la gestion de projet, aux TDD et aux

Pourquoi les tests unitaires ?

assurer la correction du code;trouver rapidement les bugs pendant le développement;identifier des manques dans les spécifications;faciliter les modifications.

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides15 / 26

Page 16: Introduction à la gestion de projet, aux TDD et aux

Cycle de développement du TDD

1 Écrire un test : définit une fonction ou l’amélioration d’unefonction.

2 Lancer le test : il doit échouer (pour montrer que le test faitréférence à une fonctionnalité qui n’existe pas encore, et qu’ilfonctionne bien).

3 Écrire le code qui fait passer le test (et rien d’autre).4 Lancer les tests : si le test ne passe pas, retourner à l’étape 3.5 Refactorer : déplacer du code si besoin, supprimer la duplication,

vérifier les noms. . .

Théorisé par Kent Beck

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides16 / 26

Page 17: Introduction à la gestion de projet, aux TDD et aux

Intérêts

réfléchir à ce que fait le code avant de coder;garantir que tout est testé (puisque rien n’est écrit sans test);réduire significativement le temps passé à debugger;avancer par petits pas;voir son avancée.

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides17 / 26

Page 18: Introduction à la gestion de projet, aux TDD et aux

Section 3

Les principes solides

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides18 / 26

Page 19: Introduction à la gestion de projet, aux TDD et aux

Les cinq principes pour créer du code SOLID

Single Responsibility Principle (SRP) : Une classe ne doitavoir qu’une seule responsabilitéOpen/Closed Principle (OCP) : Programme ouvert pourl’extension, fermé à la modificationLiskov Substitution Principle (LSP) : Les sous-types doiventêtre substituables par leurs types de baseInterface Segregation Principle (ISP) : Éviter les interfacesqui contiennent beaucoup de méthodesDependency Inversion Principle (DIP) : Les modules d’unprogramme doivent être indépendants. Les modules doiventdépendre d’abstractions.

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides19 / 26

Page 20: Introduction à la gestion de projet, aux TDD et aux

Single Responsability Principle (SRP)Principe SRPUne classe ne doit avoir qu’une responsabilité = raison de changer

Les effets néfastes des responsabilités multiplesDifficulté à nommer car la classe est trop complexeDifficulté à réutiliser le code car seulement une des responsabilitésest réutilisableDifficulté à mettre à jour le code car changer l’implémentationd’une partie impacte les autres parties

Pourquoi SRP ?Facilite le nommage et documentationFacilite l’écriture des testsFacilite la réutilisation des classes

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides20 / 26

Page 21: Introduction à la gestion de projet, aux TDD et aux

Open/Closed Principle (OCP)

Principe OCPProgramme ouvert pour l’extension, fermé à la modification

SignificationVous devez pouvoir ajouter une nouvelle fonctionnalité :

en ajoutant des classes (Ouvert pour l’extension)sans modifier le code existant (fermé à la modification)

AvantagesLe code existant n’est pas modifié ⇒ augmentation de la fiabilitéLes classes ont plus de chance d’être réutilisablesSimplification de l’ajout de nouvelles fonctionnalités

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides21 / 26

Page 22: Introduction à la gestion de projet, aux TDD et aux

Violation OCP (1/2)

public class Circle {Point center;int radius;

}

public class Rectangle {Point TopLeft, RightBottom;

}

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides22 / 26

Page 23: Introduction à la gestion de projet, aux TDD et aux

Violation OCP (2/2)

public class GraphicTools {static void draw(Rectangle r){}static void draw(Circle c){}static void draw(Object[] shapes){

for(Object o : shapes){if(o instanceof Rectangle){

draw((Rectangle) o);}if(o instanceof Circle){

draw((Circle) o);}

}}

}

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides23 / 26

Page 24: Introduction à la gestion de projet, aux TDD et aux

Programme propre (1/2)interface Shape {

void draw();}

public class Circle implements Shape {Point center;int radius;public void draw(){ ... }

}

public class Rectangle implements Shape {Point TopLeft, RightBottom;public void draw(){ ... }

}

public class GraphicTools {static void draw(Object[] shapes){

for(Shape s : shapes){s.draw();

}}

}

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides24 / 26

Page 25: Introduction à la gestion de projet, aux TDD et aux

Liskov Substitution Principle (LSP)PrincipeLes sous-types doivent être substituables par leurs types de base.

SignificationSi une classe A étend une classe B alors un programme P écrit pourmanipuler des instances de type B doit avoir le même comportements’il manipule des instances de la classe A.

AvantagesAmélioration de la lisibilité du codeMeilleure organisation du codeModification locale lors des évolutionsAugmentation de la fiabilité

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides25 / 26

Page 26: Introduction à la gestion de projet, aux TDD et aux

Liskov Substitution Principle (LSP)Violation de LSP :

public void test(Rectangle r) {r.setWidth (2);

}r.setHeight(3);if (r.getArea()!=3*2)

System.out.println(”bizarre !”);

La mauvaise question :Un carré est-il un rectangle ?

La bonne question :Pour les utilisateurs, votre carré a-t-il le même comportement quevotre rectangle ?La réponse : Dans ce cas, NON## Dependency Inversion Principle (DIP)### Principe :Les modules d’un programme doivent être indépendants Les modulesdoivent dépendre d’abstractions Signification et objectifs :

Découpler les différents modules de votre programmeLes lier en utilisant des interfacesDécrire correctement le comportement de chaque modulePermet de remplacer un module par un autre module plusfacilement

Avantages :Les modules sont plus facilement réutilisablesSimplification de l’ajout de nouvelles fonctionnalitésL’intégration est rendue plus facile

Arnaud Labourel [email protected] à la gestion de projet, aux TDD et aux principes solides26 / 26