Slides du cours de Génie Logiciel pour les étudiants de l'ESIEA, année 2016-17.
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.
Au programme : UML, Xp, Scrum, Méthodes agiles, Java, Design Pattern, Swing, SVN, Objet, Tests, etc. et un peu de bavardages...
3. A propos du projet des 3A
( LAB3416 )
par équipe de 6-8
Dates clés :
• 13 mars : constitution des équipes
• 20 mars : Présentation du sujet
• Semaine du 27 mars : permanence
• 28 avril : Remise du projet par email
6. 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 »
7. Wikipedia
Le génie logiciel « est une science de génie industriel qui
étudie les méthodes de travail et les bonnes pratiques
des ingénieurs qui développent des logiciels. »
Le génie logiciel « s'intéresse en particulier aux
procédures systématiques qui permettent d'arriver à ce
que des logiciels de grande taille correspondent aux
attentes du client, soient fiables, aient un coût
d'entretien réduit et de bonnes performances tout en
respectant les délais et les coûts de construction. »
23. Pour la prochaine fois
Trouver le sigle utilisé pour représenter le « protected »
Pour « private » on utilise « - »
Pour « public » on utilise « + »
Et pour « protected » ???
24. 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;
}
}
25. 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;
}
...
}
26. La classe Louppossède
un attribut du type
Genre (sexe).
On parle d’une
association.
Association *-1
27. Graphes sympas avec yUML :
http://yuml.me/
Associations
Télécommande et piles
43. Diagramme de séquence du programme suivant
Pour la prochaine fois
Copie individuelle à rendre sur papier au stylo
public class Launcher {
public static void main(String[] args) {
Job job = new Job();
int result = job.work();
System.exit(result);
}
} public class DogReader {
public DogReader(String string) {
...
}
public List<Dog> getByRace(String string) {
...
}
}
44. suite
Pour la prochaine fois
Copie individuelle à rendre sur papier au stylo
public class Job {
public int work() {
try {
DogReader dr = new DogReader("c:/files/dog.xml");
List<Dog> labradors = dr.getByRace("labrador");
AnimalService service = AnimalService.getInstance();
service.send(labradors);
return labradors.size();
} catch (Exception e) {
return -1;
}
}
}
45. suite
Pour la prochaine fois
Copie individuelle à rendre sur papier au stylo
public class AnimalService {
private static AnimalService instance = null;
private AnimalService() {
...
}
public static AnimalService getInstance() {
if (instance == null) {
instance = new AnimalService();
}
return instance;
}
public void send(List<Dog> labradors) {
...
}
}
54. Diagramme d’état-transitions d’un œuf qu’on cuit dans une
casserole d’eau et/ou dans une poêle.
Pour la prochaine fois
Copie individuelle à rendre sur papier au stylo
(un seul diagramme pour la casserole et la poêle)
70. 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/
73. 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);
}
74. 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;
final int result = calculette.additionner(a, b);
assertEquals(5, result);
}
Conventions de
nommage
Avant chaque
test
Test
77. Pour la prochaine fois
Copie individuelle à rendre sur papier au stylo
(code des tests ET code de la calculette)
Factoriser les tests et les faire tous passer au vert (y compris
le dernier sur le durée)
Utiliser une HashMap
78. Dossier – La suite de Fibonacci et le nombre d’or :
http://www.podcastscience.fm/dossiers/2011/03/17/la-suite-de-fibonacci-nombre-d-or/
87. 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
88. 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.
89. 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.
93. 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
94. « 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/
117. Scrum :
• 3 rôles (PO, équipe, SM)
• Sprints de durées fixées
• Pas de changement durant un sprint
• Board réalisé en début d’itération
• Equipes pluridisciplinaires
• Tâches limités par la durée du sprint
• Points quotidiens
Kanban :
• aucun rôles prescrit
• Dirigé par les flux
• Gestion selon capacité
• Board permanent
• Equipes spécialisés (dev, prod, etc.)
• Tâches limités par le flux et la
capacité
• Point quotidiens facultatifs mais
conseillés
120. Quelques lectures
« 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/
« Petit guide du lean »
http://leanagilecamp.fr/guide.html
130. 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/
148. • Travail à distance ?
• Echanges de fichiers (nombreux) dans tous les sens ?
• Versions des fichiers ?
• Sauvegardes ?
• Conflits sur des modifications parallèles ?
150. 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.
151. 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.
155. 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.
181. 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
182. 3 grosses familles :
• Création : Factory, Builder, Singleton, etc.
• Structure : Facade, Decorator / Adaptor, Proxy, etc.
• Comportement : Iterator, Observer, etc.
183. Chez vous
Classer les design patterns GOF dans les 3 familles :
création, structure ou comportement.
184. A lire sur le Web : http://www.developpez.com
200. Factory
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) {
...
}
}
207. Iterator
John Marie Lucie Marc Paul
List<String> prenoms = new ArrayList<String>();
prenoms.add( "John" );
prenoms.add( "Marie" );
...
for( int i = 0; i < prenoms.size(); i++ ) {
String prenom = prenoms.get(i);
System.out.println(prenom);
}
208. Iterator
John Marie Lucie Marc Paul
List<String> prenoms = ...
Iterator<String> iter = prenoms.iterator();
while( iter.hasNext() ) {
String prenom = iter.next();
System.out.println(prenom);
}
for( String prenom : prenoms ) {
System.out.println(prenom);
}
209. 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;
}
222. « 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
223.
224. 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/Git ;
• Agile (Scrum/Kanban) ;
• etc.
235. « 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
236.
237. Test DISC gratuit : www.profil4.com
Podcast : http://www.outilsdumanager.com
DISC
Comportement et Communication
238.
239. Erreur de communication…
« Ce que vous voulez que les autres fassent
pour vous, faites-le aussi pour eux »
Lc 6,31
Nous parlons aux autres comme on aimerait qu’ils nous parlent.
Il faut parler aux autres comme ils aimeraient qu’on leur parle.
« Tout ce que vous voudriez que les hommes fassent
pour vous, faites le, Vous aussi, pour eux »
Mt 7,12
254. Test DISC Essentiel Gratuit
http://profil4.com/disc-essentiel.php
Podcast Outils du Manager
http://www.outilsdumanager.com
DISC sur Wikipedia
https://en.wikipedia.org/wiki/DISC_assessment
ICAUDA
http://www.icauda.com
Profil 4
http://www.profil4.com
Illustrations par Mimika
http://www.mimikaweb.fr