221
Génie Logiciel ESIEA 2013-2014 Mise-à-jour : 21/03/2014

Cours de Génie Logiciel / ESIEA 2013-2014

Embed Size (px)

DESCRIPTION

Slides du cours de Génie Logiciel pour les étudiants de l'ESIEA, année 2013-2014. Le Génie Logiciel, c'est "l'ensemble des activités de conception et de mise en œuvre des produits et des procédures tendant à rationaliser la production du logiciel et son suivi." UML, Xp, Scrum, Méthodes agiles, Java, Design Pattern, Swing, SVN, Objet, Tests, etc. et un peu de bavardages...

Citation preview

Page 1: Cours de Génie Logiciel / ESIEA 2013-2014

Génie Logiciel

ESIEA 2013-2014

Mise-à-jour : 21/03/2014

Page 2: Cours de Génie Logiciel / ESIEA 2013-2014

Thierry Leriche-Dessirier

[email protected] @thierryleriche

ESIEA 2001

Page 3: Cours de Génie Logiciel / ESIEA 2013-2014

Cours UFA+3A (matin) : • 17 mars • 24 mars • 31 mars • 7 avril

Evaluation • ??? (aucun document)

• pas durant les cours…

Planning ( INF3038 )

TD UFA (matin) : • 25 mars x2 • 8 avril x2

TD 3A : • plein de dates…

Logiciels : • Java JDK 1.6 • Maven 3 • Eclipse 3.6

Page 4: Cours de Génie Logiciel / ESIEA 2013-2014

Projet ( LAB3416 )

par équipe de 6-8

Dates clés : • 31 mars : constitution des équipes • 7 avril : Présentation du sujet • 23 mai : Remise du projet par email

Page 5: Cours de Génie Logiciel / ESIEA 2013-2014

Pédagogie ( futurs jeunes ingénieurs )

www.icauda.com/cours

Page 6: Cours de Génie Logiciel / ESIEA 2013-2014
Page 7: Cours de Génie Logiciel / ESIEA 2013-2014

Génie Logiciel

Page 8: Cours de Génie Logiciel / ESIEA 2013-2014

L’ESIEA l’Ecole qui forme

l’Ingénieur et l’Homme

Page 9: Cours de Génie Logiciel / ESIEA 2013-2014

Arrêté ministériel du 30 décembre 1983 (Journal officiel du 19 février 1984)

Le génie logiciel est « l'ensemble des activités de conception et de mise en œuvre des produits et des procédures tendant à rationaliser la production du logiciel et son suivi »

Page 10: Cours de Génie Logiciel / ESIEA 2013-2014

De quoi on parle dans ce cours ?

Page 11: Cours de Génie Logiciel / ESIEA 2013-2014

UML

Page 12: Cours de Génie Logiciel / ESIEA 2013-2014

Java avancé

Page 13: Cours de Génie Logiciel / ESIEA 2013-2014

Eclipse IDE

Page 14: Cours de Génie Logiciel / ESIEA 2013-2014

Design patterns

Page 15: Cours de Génie Logiciel / ESIEA 2013-2014

Tests : JUnit, TDD, 3T

Page 16: Cours de Génie Logiciel / ESIEA 2013-2014

Les méthodes agiles : Scrum, Xp, Kanban, …

Page 17: Cours de Génie Logiciel / ESIEA 2013-2014

Gestion de source

Page 18: Cours de Génie Logiciel / ESIEA 2013-2014

Acteurs des projets

Chef de projet

Analyste Architecte

Développeurs

Graphiste Junior

Page 19: Cours de Génie Logiciel / ESIEA 2013-2014

Utilisateurs

Enfants (bébés, jeunes, ado, …)

Personnes avec un handicap (malvoyants, daltoniens,

malentendants, …)

Femmes

Hommes

Page 20: Cours de Génie Logiciel / ESIEA 2013-2014
Page 21: Cours de Génie Logiciel / ESIEA 2013-2014

Mais on parle aussi…

de vaches, de chiens, de téléphones, de voitures, …

Page 22: Cours de Génie Logiciel / ESIEA 2013-2014
Page 23: Cours de Génie Logiciel / ESIEA 2013-2014

UML + Java (en support)

Page 24: Cours de Génie Logiciel / ESIEA 2013-2014

Un peu d’histoire… pourquoi UML ?

Page 26: Cours de Génie Logiciel / ESIEA 2013-2014

http://en.wikipedia.org/wiki/Unified_Modeling_Language

Page 27: Cours de Génie Logiciel / ESIEA 2013-2014

9 diagrammes :

• de classes ; • de cas d’utilisation (use case) ; • d’objets ; • de collaboration ; • de séquence ; • d’états-transitions ; • d’activités ; • de composants ; • de déploiement

Page 28: Cours de Génie Logiciel / ESIEA 2013-2014

Diagramme de classe

Page 29: Cours de Génie Logiciel / ESIEA 2013-2014

Des exemples simples

Page 30: Cours de Génie Logiciel / ESIEA 2013-2014

public interface Mammifere {

int getNombreMamelle();

}

public class Loup implements Mammifere {

private int nbMamelle;

@Override

public int getNombreMamelle() {

return nbMamelle;

}

public void setNombreMamelle(int nbMamelle) {

this.nbMamelle = nbMamelle;

}

}

Accesseurs ( getter / setter )

Page 31: Cours de Génie Logiciel / ESIEA 2013-2014

La classe Loup implémente l’interface Mammifere

Attributs

Méthodes

Graphes UML avec ObjectAid

Fleche avec trait en pointillé

Page 32: Cours de Génie Logiciel / ESIEA 2013-2014

public class Chien extends Loup {

private boolean lof;

private String tatouage;

public boolean isLof() {

return lof;

}

public void setLof(boolean lof) {

this.lof = lof;

}

public String getTatouage() {

return tatouage;

}

public void setTatouage(String tatouage) {

this.tatouage = tatouage;

}

}

Page 33: Cours de Génie Logiciel / ESIEA 2013-2014

La classe Chien étend la classe Loup

Fleche avec trait plein

Page 34: Cours de Génie Logiciel / ESIEA 2013-2014

La classe Chien étend la classe Loup qui implémente l’interface Mammifere

Fleche avec trait plein

Fleche avec trait en pointillé

Page 35: Cours de Génie Logiciel / ESIEA 2013-2014

Un exemple vachement plus complexe ( mais qui reste courant )

Page 36: Cours de Génie Logiciel / ESIEA 2013-2014

gén

éral

isat

ion

spéc

ialis

atio

n

Graphes UML avec Omondo

Page 37: Cours de Génie Logiciel / ESIEA 2013-2014

Pour la prochaine fois

Trouver le sigle utilisé pour représenter le « protected » Pour « private » on utilise « - » Pour « public » on utilise « + »

Et pour « protected » ???

Page 38: Cours de Génie Logiciel / ESIEA 2013-2014

public enum Genre {

HOMME(1, "Garcon"),

FEMME(2, "Fille"),

TEMPORAIRE(8, "Temp");

final int codeSecu;

final String label;

Genre(final int codeSecu, final String label) {

this.codeSecu = codeSecu;

this.label = label;

}

public int getCodeSecu() {

return codeSecu;

}

public String getLabel() {

return label;

}

}

Page 39: Cours de Génie Logiciel / ESIEA 2013-2014

public interface Mammifere {

int getNombreMamelle();

Genre getSexe();

}

public class Loup implements Mammifere {

private int nbMamelle;

private Genre sexe;

@Override

public Genre getSexe() {

return sexe;

}

public void setSexe(Genre sexe) {

this.sexe = sexe;

}

...

}

Page 40: Cours de Génie Logiciel / ESIEA 2013-2014

La classe Louppossède un attribut du type Genre (sexe). On parle d’une association.

Association *-1

Page 41: Cours de Génie Logiciel / ESIEA 2013-2014

Graphes sympas avec yUML : http://yuml.me/

Associations Télécommande et piles

Page 42: Cours de Génie Logiciel / ESIEA 2013-2014

Agrégation Télécommande et son couvercle

Une télécommande sans couvercle est-elle toujours

une télécommande ?

Diamant vide

Page 43: Cours de Génie Logiciel / ESIEA 2013-2014

Composition Télécommande et ses touches

Une télécommande sans touche est-elle toujours une

télécommande ?

Diamant plein

Page 44: Cours de Génie Logiciel / ESIEA 2013-2014

Association, Agrégation, Composition

Composition 1-1..* (biilatérale)

Association *-* (unilatérale)

Agrégation 1-1 (unilatérale)

Graphes UML avec Omondo

Page 45: Cours de Génie Logiciel / ESIEA 2013-2014

Démo UML avec YUML

Page 46: Cours de Génie Logiciel / ESIEA 2013-2014
Page 47: Cours de Génie Logiciel / ESIEA 2013-2014

[Telecommande|-piles;|+getPiles();+setPiles();]*-*[Pile]

Page 48: Cours de Génie Logiciel / ESIEA 2013-2014

[Telecommande|-couvercle;|+getCouvercle();

+setCouvercle();]<>1-1>[Couvercle]

Page 49: Cours de Génie Logiciel / ESIEA 2013-2014

[Telecommande|-touches|+getTouches();+setTouches();]++1-

1..*>[Touche|-telecommande|+getTelecommande();

setTelecommande();]

Page 50: Cours de Génie Logiciel / ESIEA 2013-2014

Diagramme de séquence

Page 51: Cours de Génie Logiciel / ESIEA 2013-2014

Au volant de sa voiture

Page 52: Cours de Génie Logiciel / ESIEA 2013-2014

Démo UML avec Web Sequence Diagrams

Page 53: Cours de Génie Logiciel / ESIEA 2013-2014
Page 54: Cours de Génie Logiciel / ESIEA 2013-2014
Page 55: Cours de Génie Logiciel / ESIEA 2013-2014

A->B: text

activate B

B-->A: text

deactivate B

A->A: text

A->B: text

Page 56: Cours de Génie Logiciel / ESIEA 2013-2014

participant Conducteur

participant Cle

participant Pedale

participant Voiture

participant Demarreur

participant Moteur

participant Arbre

Conducteur->Cle: tourner

activate Cle

Cle->Voiture: demarrer

activate Voiture

Voiture->Demarreur: activer

activate Demarreur

Demarreur->Arbre: entrainer

activate Arbre

Arbre-->Demarreur: ok

deactivate Arbre

Demarreur-->Voiture: ok

deactivate Demarreur

deactivate Voiture

deactivate Cle

Conducteur->Pedale: appuyer

activate Pedale

Pedale->Voiture: accelerer

activate Voiture

Voiture->Moteur: accelerer

activate Moteur

Moteur->Arbre: entrainer

activate Arbre

Arbre-->Moteur:

deactivate Arbre

Moteur-->Voiture: vitesse_rotation

www.websequencediagrams.com

Page 57: Cours de Génie Logiciel / ESIEA 2013-2014

Diagramme d’états-transitions

Page 58: Cours de Génie Logiciel / ESIEA 2013-2014

Feux tricolores

Etat (adjectif)

Transition

Page 59: Cours de Génie Logiciel / ESIEA 2013-2014

Lave vaisselle

Page 60: Cours de Génie Logiciel / ESIEA 2013-2014

Laver la vaisselle en machine

Graphes avec Visual Paradigm (community edition) pour Eclipse http://www.visual-paradigm.com/

Page 61: Cours de Génie Logiciel / ESIEA 2013-2014

Laver la vaisselle en machine

Fin (Ronds imbriqués)

Début (Ronds plein)

Page 62: Cours de Génie Logiciel / ESIEA 2013-2014

Laver la vaisselle en machine

Page 63: Cours de Génie Logiciel / ESIEA 2013-2014

Laver la vaisselle en machine

Page 64: Cours de Génie Logiciel / ESIEA 2013-2014

Historique

Laver la vaisselle en machine

Page 65: Cours de Génie Logiciel / ESIEA 2013-2014

Pour la prochaine fois

Diagramme d’état-transitions d’un colis livré par la poste. Penser aux centres de tri.

Page 66: Cours de Génie Logiciel / ESIEA 2013-2014

Bifurcation

Page 67: Cours de Génie Logiciel / ESIEA 2013-2014

Bifurcation

final

Page 68: Cours de Génie Logiciel / ESIEA 2013-2014

Bifurcation

Page 69: Cours de Génie Logiciel / ESIEA 2013-2014

http://uml.free.fr

Page 70: Cours de Génie Logiciel / ESIEA 2013-2014
Page 71: Cours de Génie Logiciel / ESIEA 2013-2014

Diagramme d’activité

Page 72: Cours de Génie Logiciel / ESIEA 2013-2014

Laver la vaisselle en machine (encore)

Action (verbe)

Transition

Page 73: Cours de Génie Logiciel / ESIEA 2013-2014

Laver la vaisselle en machine (encore) Diagramme très proche de l’état-transitions

Etat (adjectif)

Action (verbe)

Page 74: Cours de Génie Logiciel / ESIEA 2013-2014

Représentation des conditions

Page 75: Cours de Génie Logiciel / ESIEA 2013-2014

Représentation D’une décision

Décision

Page 76: Cours de Génie Logiciel / ESIEA 2013-2014

Synchronisation

Page 77: Cours de Génie Logiciel / ESIEA 2013-2014

Signaux

Page 78: Cours de Génie Logiciel / ESIEA 2013-2014

Diagramme Use case

Page 79: Cours de Génie Logiciel / ESIEA 2013-2014

Interactions

Page 80: Cours de Génie Logiciel / ESIEA 2013-2014

Pour la prochaine fois

Use case d’un homme en interaction avec la télé via la télécommande. Penser aux interactions entre la télé et la télécommande.

Page 81: Cours de Génie Logiciel / ESIEA 2013-2014
Page 82: Cours de Génie Logiciel / ESIEA 2013-2014

Actu de la semaine

Page 83: Cours de Génie Logiciel / ESIEA 2013-2014

Prochaines conférences

Scrum Day 10-11 avril 2014 http://www.scrumday.fr/

Devoxx France 16-18 avril 2014 http://www.devoxx.fr/

Mix-it 29-30 avril 2014 http://www.mix-it.fr/

Breizth Camp 21-23 mai 2014 http://www.breizhcamp.org/

Agile France 22-23 mai 2014 http://2014.conference-agile.fr/

Page 84: Cours de Génie Logiciel / ESIEA 2013-2014
Page 85: Cours de Génie Logiciel / ESIEA 2013-2014

Tests avec JUnit

Page 86: Cours de Génie Logiciel / ESIEA 2013-2014

Tests avec JUnit

Prouver que ça fonctionne

Page 87: Cours de Génie Logiciel / ESIEA 2013-2014

public class SimpleCalculette

implements Calculette {

@Override

public int additionner(int a, int b) {

return a + b;

}

@Override

public int multiplier(int a, int b) {

return a * b;

}

}

public interface Calculette {

int additionner(int a, int b);

int multiplier(int a, int b);

}

Page 88: Cours de Génie Logiciel / ESIEA 2013-2014

import static junit.framework.Assert.assertEquals;

import org.junit.Before;

import org.junit.Test;

public class SimpleCalculetteTestCase {

private Calculette calculette;

@Before

public void doBefore() {

calculette = new SimpleCalculette();

}

@Test

public void testAdditionner() {

final int a = 2;

final int b = 3;

int result = calculette.additionner(a, b);

assertEquals(5, result);

}

Conventions de nommage

Avant chaque test

Test

Page 89: Cours de Génie Logiciel / ESIEA 2013-2014

C’est vert donc c’est ok

Les tests de la classe

Temps d’exécution

Page 90: Cours de Génie Logiciel / ESIEA 2013-2014

Démo dans Eclipse ( calcul de φ : 1,618 033 988 7 Fibonacci )

Page 91: Cours de Génie Logiciel / ESIEA 2013-2014

Pour la prochaine fois Copie individuelle à rendre

Faire passer au vert le dernier test, sur la durée Utiliser une HashMap

Page 93: Cours de Génie Logiciel / ESIEA 2013-2014

One more thing

Page 94: Cours de Génie Logiciel / ESIEA 2013-2014

Tests

A la découverte de Junit

« Les Tests en Trois Temps » icauda.com/articles.html#3t

Page 95: Cours de Génie Logiciel / ESIEA 2013-2014
Page 96: Cours de Génie Logiciel / ESIEA 2013-2014
Page 97: Cours de Génie Logiciel / ESIEA 2013-2014

Les méthodes agiles ( Scrum, Xp, Kanban, Lean… )

Page 98: Cours de Génie Logiciel / ESIEA 2013-2014

Cycle en V

Page 99: Cours de Génie Logiciel / ESIEA 2013-2014
Page 100: Cours de Génie Logiciel / ESIEA 2013-2014

Manifeste agile

Les 4 valeurs : • Les individus et leurs interactions plus que les processus et les outils. • Des logiciels opérationnels plus qu’une documentation exhaustive. • La collaboration avec les clients plus que la négociation contractuelle. • L’adaptation au changement plus que le suivi d’un plan.

Wikipedia : http://fr.wikipedia.org/wiki/Manifeste_agile

Page 101: Cours de Génie Logiciel / ESIEA 2013-2014

Manifeste agile

Les 12 principes : • Notre plus haute priorité est de satisfaire le client en livrant rapidement et

régulièrement des fonctionnalités à grande valeur ajoutée. • Accueillez positivement les changements de besoins, même tard dans le

projet. Les processus agiles exploitent le changement pour donner un avantage compétitif au client.

• Livrez fréquemment un logiciel opérationnel avec des cycles de quelques semaines à quelques mois et une préférence pour les plus courts.

• Les utilisateurs ou leurs représentants et les développeurs doivent travailler ensemble quotidiennement tout au long du projet.

• Réalisez les projets avec des personnes motivées. Fournissez-leur l’environnement et le soutien dont ils ont besoin et faites-leur confiance pour atteindre les objectifs fixés.

• La méthode la plus simple et la plus efficace pour transmettre de l’information à l'équipe de développement et à l’intérieur de celle-ci est le dialogue en face à face.

Page 102: Cours de Génie Logiciel / ESIEA 2013-2014

Manifeste agile

Les 12 principes (suite) : • Un logiciel opérationnel est la principale mesure d’avancement. • Les processus agiles encouragent un rythme de développement soutenable.

Ensemble, les commanditaires, les développeurs et les utilisateurs devraient être capables de maintenir indéfiniment un rythme constant.

• Une attention continue à l'excellence technique et à une bonne conception renforce l’agilité.

• La simplicité – c’est-à-dire l’art de minimiser la quantité de travail inutile – est essentielle.

• Les meilleures architectures, spécifications et conceptions émergent d'équipes auto organisées.

• À intervalles réguliers, l'équipe réfléchit aux moyens de devenir plus efficace, puis règle et modifie son comportement en conséquence.

Page 103: Cours de Génie Logiciel / ESIEA 2013-2014

« Mémento Manifeste Agile »

Page 104: Cours de Génie Logiciel / ESIEA 2013-2014

« En route vers l'agilité, SCRUM et XP : retour d'expérience » http://rad-hass.developpez.com/tutoriels/conception/route-vers-agilite-scrum-et-xp-retour-

experience/

Page 105: Cours de Génie Logiciel / ESIEA 2013-2014
Page 106: Cours de Génie Logiciel / ESIEA 2013-2014

Des rôles : • Product Owner • Scrum Master • Team

Des concepts :

• Story points • Velocity • User story • Done

Des rituels : • Sprint • Daily stand up • Sprint review • Planning poker • Retrospective

Des artefacts :

• Product backlog • Sprint backlog • Task board • Burn down

Scrum

Page 107: Cours de Génie Logiciel / ESIEA 2013-2014

User story

Page 108: Cours de Génie Logiciel / ESIEA 2013-2014

Cartes Scrum ( planning poker )

Page 109: Cours de Génie Logiciel / ESIEA 2013-2014

Planning poker

Page 110: Cours de Génie Logiciel / ESIEA 2013-2014

Stand up

Page 111: Cours de Génie Logiciel / ESIEA 2013-2014

Stand up

Page 112: Cours de Génie Logiciel / ESIEA 2013-2014

Dashboard

Page 113: Cours de Génie Logiciel / ESIEA 2013-2014

Taskboard

Page 114: Cours de Génie Logiciel / ESIEA 2013-2014

Dashboard (taskboard) pour de vrai

Page 115: Cours de Génie Logiciel / ESIEA 2013-2014

Dashboard (taskboard) pour de vrai

Page 116: Cours de Génie Logiciel / ESIEA 2013-2014

Burndown d’un sprint

Page 117: Cours de Génie Logiciel / ESIEA 2013-2014

Burndown en vrai

Page 118: Cours de Génie Logiciel / ESIEA 2013-2014

Démo

Page 119: Cours de Génie Logiciel / ESIEA 2013-2014

Rétrospective de fin de sprint

Page 120: Cours de Génie Logiciel / ESIEA 2013-2014

« 3T en pratique » http://thierry-leriche-dessirier.developpez.com

« Scrum et Agile avec des bonhommes » http://hingchanscrum.blogspot.com

« Présentation des méthodes agiles et Scrum » http://ineumann.developpez.com/tutoriels/alm/agile_scrum

« Scrum Xp depuis les tranchées » http://henrik-kniberg.developpez.com/livre/scrum-xp

« Mémento Scrum gratuit » http://thierry-leriche-dessirier.developpez.com/tutoriels/general/memento-scrum-destination-

equipe/

Page 121: Cours de Génie Logiciel / ESIEA 2013-2014
Page 122: Cours de Génie Logiciel / ESIEA 2013-2014
Page 123: Cours de Génie Logiciel / ESIEA 2013-2014
Page 124: Cours de Génie Logiciel / ESIEA 2013-2014

Actu de la semaine

7B$

Page 125: Cours de Génie Logiciel / ESIEA 2013-2014

User groups

Paris JUG (Java User Group) http://www.parisjug.org/

Duchess France http://www.duchess-france.org/

Angular JS Paris http://www.meetup.com/AngularJS-Paris

Paris AUG (Android User Group) http://www.paug.fr/

Page 126: Cours de Génie Logiciel / ESIEA 2013-2014
Page 127: Cours de Génie Logiciel / ESIEA 2013-2014

Story board et maquettes

Page 128: Cours de Génie Logiciel / ESIEA 2013-2014
Page 129: Cours de Génie Logiciel / ESIEA 2013-2014

Dessins sympas avec Iphone Mockup : http://iphonemockup.lkmc.ch

Page 130: Cours de Génie Logiciel / ESIEA 2013-2014

Dessins sympas avec Iphone Mockup : http://iphonemockup.lkmc.ch

Page 131: Cours de Génie Logiciel / ESIEA 2013-2014
Page 132: Cours de Génie Logiciel / ESIEA 2013-2014
Page 133: Cours de Génie Logiciel / ESIEA 2013-2014
Page 134: Cours de Génie Logiciel / ESIEA 2013-2014

Balsamiq mockups : http://balsamiq.com/products/mockups Axure : http://www.axure.com/ Mockingbird : https://gomockingbird.com/mockingbird/# Pencil : http://pencil.evolus.vn/en-US/Home.aspx Iphone mockup : http://iphonemockup.lkmc.ch/

Page 135: Cours de Génie Logiciel / ESIEA 2013-2014
Page 136: Cours de Génie Logiciel / ESIEA 2013-2014

Gestion de version

Page 137: Cours de Génie Logiciel / ESIEA 2013-2014
Page 138: Cours de Génie Logiciel / ESIEA 2013-2014

pratique ?

Page 139: Cours de Génie Logiciel / ESIEA 2013-2014

disque réseau

Pourquoi pas sur un disque réseau ?

Page 140: Cours de Génie Logiciel / ESIEA 2013-2014

Pourquoi pas par email ?

Page 141: Cours de Génie Logiciel / ESIEA 2013-2014

• Travail à distance ? • Echanges de fichiers (nombreux) dans tous les sens ? • Versions des fichiers ? • Sauvegardes ? • Conflits sur des modifications parallèles ?

Page 142: Cours de Génie Logiciel / ESIEA 2013-2014

Gestion de sources et contrôle de versions : • garder un historique des différentes versions des

fichiers d'un projet ; • permettre le retour à une version antérieure

quelconque ; • garder un historique des modifications avec leur

nature, leur date, leur auteur... ; • permettre un accès souple à ces fichiers, en local ou

via un réseau ; • permettre à des utilisateurs distincts et souvent

distants de travailler ensemble sur les mêmes fichiers.

Page 143: Cours de Génie Logiciel / ESIEA 2013-2014

Copie de travail (working copy) La copie de travail est un répertoire situé en local sur l’ordi de l'utilisateur et qui contient une copie des fichiers. C'est cette copie qui sert de base de travail et qui est modifiée en local avant d'être envoyée vers le dépôt.

Dépôt (repository) Un dépôt Subversion est l'emplacement central où sont stockées toutes les données relatives aux projets gérés. Le dépôt contient l'historique des versions des fichiers stockés, les logs enregistrés lors des modifications, les dates et auteurs de ces modifications, etc. 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 accordées.

Page 144: Cours de Génie Logiciel / ESIEA 2013-2014

Update ( récupération de la dernière version des fichiers )

Page 145: Cours de Génie Logiciel / ESIEA 2013-2014

Import ( création de la copie locale )

Page 146: Cours de Génie Logiciel / ESIEA 2013-2014

Commit ( envoie des fichiers modifiés vers le repository )

Page 147: Cours de Génie Logiciel / ESIEA 2013-2014

Opérations Le checkout est l'opération qui consiste à récupérer pour la première fois les fichiers déjà existant au sein d'un projet du dépôt. Cette opération ne se fait en général qu'une fois par projet. Le résultat est une copie de travail. L'update consiste à synchroniser 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. Un commit est l'opération inverse d'un update. Elle consiste à mettre à jour le dépôt à partir de la copie de travail locale. Une nouvelle révision est alors créée. Un log (simple message texte contenant une description des modifications effectuées) doit être saisi à cette occasion. Remarque : pour qu'un commit soit possible, il faut que la copie de travail corresponde à la dernière version du dépôt (modifications locales exceptées). Si ce n'est pas le cas, il est nécessaire d'effectuer d'abord un update et de résoudre les conflits éventuels avant de réessayer le commit.

Page 148: Cours de Génie Logiciel / ESIEA 2013-2014

Commit ( bonne pratique : faire un update avant )

Page 149: Cours de Génie Logiciel / ESIEA 2013-2014

Version 1

Version 2

Version 3

Branches ( versions )

Page 150: Cours de Génie Logiciel / ESIEA 2013-2014

Version 1

Branche debug

Branches - merge ( versions )

Page 151: Cours de Génie Logiciel / ESIEA 2013-2014

Version 1

Version 2

Tags ( révisions )

1.1 1.2

2.1

Page 152: Cours de Génie Logiciel / ESIEA 2013-2014
Page 153: Cours de Génie Logiciel / ESIEA 2013-2014
Page 154: Cours de Génie Logiciel / ESIEA 2013-2014
Page 155: Cours de Génie Logiciel / ESIEA 2013-2014

Design patterns

Page 156: Cours de Génie Logiciel / ESIEA 2013-2014

Les 23 Design patterns de GOF :

Abstract factory, Builder, Factory, Prototype, Singleton, Adapter, Bridge, Composite, Decorator, Facade, Flyweight,

Proxy, Chain of responsability, Command, Interpreter, Iterator, Mediator, Memento, State, Strategy, Template,

Visitor, Observer

Page 157: Cours de Génie Logiciel / ESIEA 2013-2014

Les patterns JEE :

MVC (Model-View-Controller), Business delegate, Composite entity, DAO (Data Access Object), Front controller,

Intercepting filter, Service locator, Transfer object, IOC (Inversion Of Control)

JEE : Java Enterprise Edition

Page 158: Cours de Génie Logiciel / ESIEA 2013-2014

3 grosses familles :

• Création : Factory, Builder, Singleton, etc.

• Structure : Facade, Decorator / Adaptor, Proxy, etc.

• Comportement : Iterator, Observer, etc.

Page 159: Cours de Génie Logiciel / ESIEA 2013-2014

Chez vous

Classer les design patterns GOF dans les 3 familles : création, structure ou comportement.

Page 160: Cours de Génie Logiciel / ESIEA 2013-2014

A lire sur le Web : http://www.developpez.com

Page 161: Cours de Génie Logiciel / ESIEA 2013-2014

Singleton

Page 162: Cours de Génie Logiciel / ESIEA 2013-2014

Le S

ingl

eto

n

Page 163: Cours de Génie Logiciel / ESIEA 2013-2014

Le Singleton

public class NotesDesElevesService {

public Map<String, Double> findNotesDernierExamen() {

Map<String, Double> notes = new HashMap<String, Double>();

notes.put("Jean Dupont", 14.5);

notes.put("Alice Marini", 16.0);

notes.put("Marc Tonnolu", 8.0);

...

return notes;

}

}

Page 164: Cours de Génie Logiciel / ESIEA 2013-2014

Le Singleton

public class NotesDesElevesService {

public Map<String, Double> findNotesDernierExamen() {

Map<String, Double> notes = new HashMap<String, Double>();

// recherche longue en base de donnees

return notes;

}

}

Page 165: Cours de Génie Logiciel / ESIEA 2013-2014

Le Singleton

NotesDesElevesService service = new NotesDesElevesService();

Map<String, Double> notes = service.findNotesDernierExamen()

Page 166: Cours de Génie Logiciel / ESIEA 2013-2014

Le Singleton

service1 = new NDES();

service1.findNDE()

service3 = new NDES();

service3.findNDE()

service2 = new NDES();

service2.findNDE()

service4 = new NDES();

service4.findNDE()

NDES 1

NDES 2

NDES 3

NDES 4

Page 167: Cours de Génie Logiciel / ESIEA 2013-2014

Le Singleton

public class NotesDesElevesService {

private static NotesDesElevesService instance

= new NotesDesElevesService();

private NotesDesElevesService() {

...

}

public static NotesDesElevesService getInstance() {

return instance;

}

public Map<String, Double> findNotesDernierExamen() {

...

}

}

Page 168: Cours de Génie Logiciel / ESIEA 2013-2014

Le Singleton

NotesDesElevesService service =

NotesDesElevesService.getInstance();

Map<String, Double> notes = service.findNotesDernierExamen()

Page 169: Cours de Génie Logiciel / ESIEA 2013-2014

Le Singleton

service1 = getInstance();

service1.findNDE()

service3 = getInstance();

service3.findNDE()

service2 = getInstance();

service2.findNDE()

service4 = getInstance();

service4.findNDE()

NDES

Page 170: Cours de Génie Logiciel / ESIEA 2013-2014

Le Singleton

public class NotesDesElevesService {

private static NotesDesElevesService instance;

private NotesDesElevesService() {

...

}

public static NotesDesElevesService getInstance() {

if(instance == null) {

instance = new NotesDesElevesService();

}

return instance;

}

...

}

Page 171: Cours de Génie Logiciel / ESIEA 2013-2014

Chez vous

Dessiner le diagramme de classe UML du Singleton (avec les bonnes associations)

Page 172: Cours de Génie Logiciel / ESIEA 2013-2014

Le S

ingl

eto

n

synchronized ?

Page 174: Cours de Génie Logiciel / ESIEA 2013-2014

Factory

Page 175: Cours de Génie Logiciel / ESIEA 2013-2014

Fact

ory

Page 176: Cours de Génie Logiciel / ESIEA 2013-2014

Factory

public enum RaceChienEnum {

LABRADOR("Labrador"),

CANICHE("Faux chien"),

DOBERMAN("Chien méchant");

private final String name;

RaceChienEnum(String name) {

this.name = name;

}

...

}

Page 177: Cours de Génie Logiciel / ESIEA 2013-2014

Fact

ory

public class AnimalFactory {

public Chien getChien(RaceChienEnum race) {

switch (race) {

case CANICHE:

return new Caniche();

case DOBERMAN:

return new Doberman();

case LABRADOR:

return new Labrador();

default:

throw new IllegalArgumentException(

"Race de chien non gérée");

}

}

public Vache getVache(RaceVacheEnum race) {

...

}

}

Page 178: Cours de Génie Logiciel / ESIEA 2013-2014

Façade

Page 179: Cours de Génie Logiciel / ESIEA 2013-2014

Facade

Page 180: Cours de Génie Logiciel / ESIEA 2013-2014

public class CommisDeCuisine {

public Plat cuisiner(String recette) {

Placard placard = Placard.getInstance();

Frigo frigo = Frigo.getInstance();

PlaqueDeCuisson plaque = PlaqueDeCuisson.getInstance();

Poele poele = placard.prendre("poele");

plaque.allumer();

List<Ingredient> ingredients

= frigo.prendre( {"oeuf", "oeuf", "fromage", "beurre"} );

while( plaque.chauffer(poele, ingredients) ) {

// attendre

}

Plat plat = poele.getContenu();

return plat;

}

...

}

pseudo code d’une façade

Page 181: Cours de Génie Logiciel / ESIEA 2013-2014

Faca

de

participant Chef

participant CommisDeCuisine

participant Placard

participant Frigo

participant PlaqueDeCuisson

Chef->CommisDeCuisine: cuisiner

activate CommisDeCuisine

CommisDeCuisine->Placard: prendre

activate Placard

Placard-->CommisDeCuisine: poêle

deactivate Placard

CommisDeCuisine->PlaqueDeCuisson: allumer

activate PlaqueDeCuisson

CommisDeCuisine->Frigo: prendre

activate Frigo

Frigo-->CommisDeCuisine: oeufs, fromage,

beurre

deactivate Frigo

CommisDeCuisine->PlaqueDeCuisson: chauffer

PlaqueDeCuisson-->CommisDeCuisine: cuit_ok

deactivate PlaqueDeCuisson

CommisDeCuisine-->Chef: omelette

deactivate CommisDeCuisine

Page 182: Cours de Génie Logiciel / ESIEA 2013-2014

Actu de la semaine

Page 183: Cours de Génie Logiciel / ESIEA 2013-2014

Podcasts

Les Cast Codeurs http://lescastcodeurs.com/

Le rendez-vous Tech http://frenchspin.com/fr/

niptech / nipdev http://nipcast.com/

Podcast science http://www.podcastscience.fm/

Page 184: Cours de Génie Logiciel / ESIEA 2013-2014

Iterator

Page 185: Cours de Génie Logiciel / ESIEA 2013-2014

Iterator

John Marie Lucie Marc Paul

List<String> prenoms = new ArrayList<String>();

Iterator<String> iter = prenoms.iterator();

while( iter.hasNext() ) {

String prenom = iter.next();

System.out.println(prenom);

}

Page 186: Cours de Génie Logiciel / ESIEA 2013-2014

Iterator

public class EnfantQuiCompteIterator

implements Iterator<Integer> {

public final static int NOMBRE_MAX = 100;

public final static int NOMBRE_DEPART = 1;

private int nombre = NOMBRE_DEPART;

public boolean hasNext() {

return nombre < NOMBRE_MAX;

}

public Integer next() {

return ++nombre;

}

Page 187: Cours de Génie Logiciel / ESIEA 2013-2014

Observer

Page 188: Cours de Génie Logiciel / ESIEA 2013-2014

Ob

serv

er

public enum FeuState {

VERT(60000), // 60 secondes

ORANGE(3000), // 3 secondes

ROUGE(60000); // 60 secondes

private final long duree;

FeuState(long duree) {

this.duree = duree;

}

public FeuState next() {

switch (this) {

case VERT: return ORANGE;

case ORANGE: return ROUGE;

case ROUGE: return VERT;

default: throw new ISE("...");

}

}

Page 189: Cours de Génie Logiciel / ESIEA 2013-2014

Ob

serv

er

public class FeuTricolor extends Observable

implements Runnable {

private FeuState state;

public FeuState getState() {

return state;

}

@Override

public void run() {

while (true) {

try {

Thread.sleep(state.getDuree());

state = state.next();

notifyObservers(state);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

Page 190: Cours de Génie Logiciel / ESIEA 2013-2014

Observ

er

public class Conducteur implements Observer {

Voiture voiture = ...

@Override

public void update(Observable obj, Object value) {

if (obj instanceof FeuTricolor) {

FeuState state = (FeuState) value;

if (state == FeuState.VERT) {

voiture.accelerer();

}

}

}

}

Page 191: Cours de Génie Logiciel / ESIEA 2013-2014
Page 192: Cours de Génie Logiciel / ESIEA 2013-2014

JDBC

Page 193: Cours de Génie Logiciel / ESIEA 2013-2014

id name race nb_de_mamelle poids

1 Tigrou labrador 6 45.6

2 Titi caniche 4 6.2

3 Uta labrador 47.1

… … … … …

35 Medor doberman 4 60.0

… … … … …

Table CHIEN

Page 194: Cours de Génie Logiciel / ESIEA 2013-2014

@Override

public List<Labrador> findLabradors() {

List<Labrador> labradors = new ArrayList<Labrador>();

...

return labradors;

}

Page 195: Cours de Génie Logiciel / ESIEA 2013-2014

// (1)

Class.forName("oracle.jdbc.driver.OracleDriver");

// (2)

Connection con

= DriverManager.getConnection("monUrl",

"monLogin", "monPassword");

// (3)

String sql

= "SELECT * FROM chien WHERE race = 'labrador' ";

// (4)

Statement statement = con.createStatement();

// (5)

ResultSet rs = statement.executeQuery(sql);

JDBC

select

Page 196: Cours de Génie Logiciel / ESIEA 2013-2014

// (6)

while ( rs.next() ) {

// (7)

String name = rs.getString("name");

double poids = rs.getDouble("poids");

int nbMamelle = rs.getInt("nb_de_mamelle");

// (8)

Labrador labrador = new Labrador();

labrador.setName(name);

labrador.setWeight(poids);

labrador.setNombreMamelle(nbMamelle);

// (9)

labradors.add(labrador);

}

JDBC

select Iterator ?

Page 197: Cours de Génie Logiciel / ESIEA 2013-2014

String sql = "INSERT INTO chien "

+ " (name, race, nb_de_mamelle, poids) "

+ " VALUES ( " +

+ "'" + labrador.getName() + "', "

+ "'labrador', "

+ labrador.getNombreMamelle() + ", "

+ labrador.getWeight() + " )";

Statement stmt = con.createStatement();

stmt.executeUpdate(sql);

JDBC

insert

Page 198: Cours de Génie Logiciel / ESIEA 2013-2014

String sql = "INSERT INTO chien "

+ " (name, race, nb_de_mamelle, poids) "

+ " VALUES ( ?, 'labrador', ?, ?) ";

PreparedStatement stmt = con.prepareStatement(sql);

stmt.setString( 1, labrador.getName() );

stmt.setInt( 2, labrador.getNombreMamelle() );

stmt.setDouble( 3, labrador.getWeight() );

stmt.executeUpdate(sql);

JDBC

Insert (PreparedStatement)

Page 199: Cours de Génie Logiciel / ESIEA 2013-2014

« Introduction à JPA, application au chargement de données depuis une base MySQL » http://thierry-leriche-dessirier.developpez.com/tutoriels/java/charger-donnees-mysql-jpa-intro/

« JDBI » http://www.jdbi.org/

« Named Parameters for PreparedStatement » http://www.javaworld.com/article/2077706/core-java/named-parameters-for-

preparedstatement.html

« Charger des données depuis une base MySQL en 5 minutes » http://thierry-leriche-dessirier.developpez.com

Page 200: Cours de Génie Logiciel / ESIEA 2013-2014
Page 201: Cours de Génie Logiciel / ESIEA 2013-2014

SWING

Page 202: Cours de Génie Logiciel / ESIEA 2013-2014

JButton JRadioButton JCheckBox

JComboBox JList

JMenu

JTextField JTextArea

Page 203: Cours de Génie Logiciel / ESIEA 2013-2014

JLabel

JFileChooser JTable

JDialog JFrame

JProgressBar

Page 204: Cours de Génie Logiciel / ESIEA 2013-2014

« A Visual Guide to Swing Components »

http://docs.oracle.com/javase/tutorial/ui/features/components.html

http://docs.oracle.com/javase/tutorial/ui/features/compWin.html

Page 205: Cours de Génie Logiciel / ESIEA 2013-2014
Page 206: Cours de Génie Logiciel / ESIEA 2013-2014

Intégration continue

Page 207: Cours de Génie Logiciel / ESIEA 2013-2014
Page 208: Cours de Génie Logiciel / ESIEA 2013-2014

mvn clean install

mvn sonar:sonar

Page 209: Cours de Génie Logiciel / ESIEA 2013-2014
Page 210: Cours de Génie Logiciel / ESIEA 2013-2014

Ce qu’on a vu en cours et en TD :

• UML ; • Java ; • Tests (TDD, 3T) ; • Design pattern ; • DAO (JDBC / CSV / …) ; • Swing (table model) ; • Story board ; • Maven ; • Subversion ; • Scrum ; • etc.

Page 211: Cours de Génie Logiciel / ESIEA 2013-2014

Archive ZIP Projet_GL_ESIEA_2013-2014_groupe-N.zip

Rapport PDF Rapport_Projet_GL_ESIEA_2013-2014_groupe-N.pdf

Projet Java-Maven programme.zip

Email Projet GL ESIEA 2013-2014 groupe N

Page 212: Cours de Génie Logiciel / ESIEA 2013-2014

Thème du projet de GL ( mangez des carottes )

Projet ( http://www.icauda.com/cours.php )

Page 213: Cours de Génie Logiciel / ESIEA 2013-2014
Page 214: Cours de Génie Logiciel / ESIEA 2013-2014

Bill Gates : 11 règles de vie

Règle 1 : La vie n'est pas juste; il faudra vous y faire. Règle 2 : Le monde se fiche de votre estime personnelle. Le monde s'attendra à ce que vous réalisiez quelque chose AVANT que vous ne vous sentiez bien dans votre peau. Règle 3 : Vous ne toucherez pas 40 000 dollars par année immédiatement en sortant de l'école secondaire. Vous ne serez pas vice-président d'entreprise avec un téléphone dans votre voiture avant d'avoir gagné et mérité les deux. Règle 4 : Si vous pensez que votre professeur est sévère, attendez d'avoir un patron. Règle 5 : Être plongeur dans un restaurant n'a rien d'humiliant. Vos grands-parents utilisaient un terme différent pour décrire ce genre de boulot, ils appelaient cela "s'ouvrir des portes". Règle 6 : Si vous vous retrouvez dans le pétrin, ce n'est pas la faute de vos parents, alors ne vous plaignez pas de votre sort et tirez-en plutôt les leçons nécessaires.

Page 215: Cours de Génie Logiciel / ESIEA 2013-2014

Bill Gates : 11 règles de vie

Règle 7 : Avant votre naissance, vos parents n'étaient pas aussi ennuyeux qu'ils le sont aujourd'hui. Ils sont devenus comme cela à force de payer vos factures, de laver vos sous-vêtements et de vous écouter raconter à quel point vous êtes cool. Alors, avant de penser sauver la forêt équatoriale des parasites de la génération de vos parents, essayez de mettre un peu d'ordre dans votre propre chambre. Règle 8 : Votre école a peut-être cessé de distinguer les gagnants des perdants, mais pas la vie. Dans certaines écoles, ils ont éliminé la note de passage et ils vous donneront autant de chances que vous voulez avant de trouver la bonne réponse. Cela n'a absolument RIEN À VOIR avec la vraie vie. Règle 9 : La vie n'est pas divisée en semestres. Vous n'êtes pas en vacances tout l'été et très peu d'employeurs sont intéressés à vous aider à vous retrouver. Faites cela durant vos temps libres. Règle 10 : La télévision N'EST PAS représentative de la vraie vie. Dans la vie, en réalité, les gens doivent quitter le restaurant et retourner travailler. Règle 11 : Soyez gentils avec les « nerds ». Il y a de bonnes chances que vous finissiez par travailler pour l'un d'entre eux.

Page 216: Cours de Génie Logiciel / ESIEA 2013-2014
Page 217: Cours de Génie Logiciel / ESIEA 2013-2014

Cours

FAQ

Interviews

Articles / tutoriels

Magazine

Forums

News

Agendas

Critiques

Page 218: Cours de Génie Logiciel / ESIEA 2013-2014

13 OOO OOO pages vues par mois

5 500 000 visites par mois

2 500 000 visites uniques par mois

5 000 messages forum par jour

Page 219: Cours de Génie Logiciel / ESIEA 2013-2014
Page 220: Cours de Génie Logiciel / ESIEA 2013-2014

icauda.com © 1996-2014 Tous droits et bases réservés

Reproduction partielle ou complète strictement interdite sans l’autorisation de l’auteur.

Page 221: Cours de Génie Logiciel / ESIEA 2013-2014