Le robot agile

Preview:

DESCRIPTION

Un micro projet agilePlan de releaseBacklog2 itérationsRefactoring

Citation preview

La vie d’un mini projet Agile

Le Robot Agile

??? Cahier des charges ???

Faire un jeu, il s’agit d’un robot qui se déplace dans un labyrinthe, il doit ramasser des objets et les rapporter dans la pièce de départ pour gagner. Le robot peut rester bloquer dans une pièce et il ne peut pas porter trop d’objets correspondant à un poids max. Si il est en surcharge, le joueur a perdu.

http://bernard.vinot.net/exo/robot/robotApplet/AppletRobot.html

Le Robot Agile

Initialisation du projetEquipe 2 Dvp + 1 client (25%) + 1 expert JDBC

Une itération = 1 jour (8h)Méthode tendant vers XP

Que faire?• UC-US• Backlog planning de release• Iter1

– Tâches– Modélisation– Tests– Codage– Remaniement– Doc– Demo– Bilan

• Iter2• ……….

Le diagramme des Use Case

BackLog du produit

Les risques?

Release complète livréedans 3 joursPrésence de l’expert JDBC obligatoire J2

Le Robot Agile

Iter1 : Jouer sans persistance

Le Scénario : Jouer

• Deplacer:– Le joueur choisit Nord, Sud, Est ou Ouest. Si possible, le

robot va ds la pièce, sinon un message « pas d’issues »• Prendre un objet

– Le système propose la liste des objets, le joueur en prend un (possibilité de perdre si surcharge – Fin du jeu)

• Deposer un objet– Le système propose la liste des objets, le joueur en

choisit un (possibilité de gagner - Fin du jeu)

I1 : Découpe en tâches

I1 : Modélisation (diag classe)

Discussion avecLe client

I1 : Les IHM

I1 : Configurer Les objets

I1 : Exemple de tests (TR)

• Perdu : surcharge

• Gagné– ………….

Perdu

Fichier de sortie (référence)Faites votre choix :Vous etes dans : Entree et vous …..Vous etes dans : Salon et vous …..Bascule Oui,NonVous etes dans : Salonet vous …..…… nom:Bascule,poids:4000,solideWhisky Oui,Non Perdu

Fichier d’entréeSPOPOEOF

I1 : Deplacer

I1 : Prendre

I1 : Deposer

I1 : Diagramme de classe

I1 : Exemple de test(TU) Junit-Deplacerimport org.junit.Before;import junit.framework.TestCase;

//TestDeplacer.javapublic class TestDeplacer extends TestCase{private Robot r;

@Beforepublic void setUp() throws Exception {

Piece e = new Piece ("entree");Piece s = new Piece ("salon");e.AjouterIssue(PointsCardinaux.sud, s);s.AjouterIssue(PointsCardinaux.nord,e);r = new Robot(e,10 );

}

public void testDeplacerOK(){

try {r.Deplacer(PointsCardinaux.sud);assertTrue ( r.GetPiece().GetNom().equals("salon"));r.Deplacer(PointsCardinaux.nord);assertTrue ( r.GetPiece().GetNom().equals("entree"));

} catch (ExceptionRobot e) {fail();

}}

public void testDeplacerNOK() {

try { r.Deplacer(PointsCardinaux.nord); fail(); } catch (ExceptionRobot e) {assertTrue (e.getMessage().equals("pas d'issues dans cette direction"));}

I1 : Exemple de test(TU-TR) Junit-Gagner

import org.junit.*;import junit.framework.TestCase;

public class TestGagner extends TestCase{private Config c;@Beforepublic void setUp() {

c = new Config();}public void testGagner(){

try{ c.Deplacer(PointsCardinaux.nord); fail();}catch (ExceptionRobot e){}

try{c.Deplacer(PointsCardinaux.sud);c.Deplacer(1);//sudc.Deplacer(3);//ouestc.Prendre("Pastis");………………………….c.Deplacer(1);//sudc.Deplacer(3);//ouestc.Prendre("Gauguin");c.Deplacer(2);//estc.Deplacer(0);//nordc.Deposer("Gauguin");}catch (ExceptionRobot e)

{assertEquals(e.getMessage(),"Bravo!!!!!");}}

I1 : Junit TestSuiteimport junit.framework.Test;import junit.framework.TestSuite;

//AllTests.javapublic class AllTests {

public static Test suite() {TestSuite suite = new TestSuite("Test for default package");//$JUnit-BEGIN$suite.addTestSuite(TestGagner.class);suite.addTestSuite(TestDeplacer.class);//$JUnit-END$return suite;

}

}

I1 : Passer les tests NOK

I1 : Codage

Tests JUNIT

I1 : Tests Finaux

I1 : Documentation Seq

I1 : Documentation : Classe

Remaniement

• Mettre une énumération pour les points cardinaux

• Faire une nouvelle classe conteneur d’objets pour éviter les doublons de code

• Retester

I1 : Nouveau diagramme

Robot<<Singleton>>

-poids: int-poidsMax: int

+Deplacer(pc: PC)+GetObjets(): Array<String>+GetObjetsPiece(): Array<String>+Prendre()+Prendre(nom: String)+Deposer()+Deposer(nom: String)+RafraichirPiece(): String

Piece

-nom: String-Issues: Array< Piece>-origine: Piece

+GetIssue(pc: PC): Piece+GetObjets(): Array<String>+Prendre(nom: String): Objet+Deposer(Objet)+SetIssue(pc: PC, piece: Piece)+DeposeInitiale(objet: Objet)+GetNom(): String

-maPiece

1

ConteneurObjets

-conteneur: Array<Objet>

+Ajouter(objet: Objet)+Retirer(nom: String): Objet+GetNbObjets(): int+GetObjets(): Array<String>

-leSac1

-contient

1

Objet

-nom: String-poids: int-nbObjets: boolean

+GetNom(): String+GetPoids(): int+Afficher(): String+GetNbObjets(): int

PC<<enumeration>>

+Nord+Sud+Est+Ouest

Bouteille

-degre: float-volume: float

+Afficher(): String

Chaise

-solide: boolean

+Afficher(): String

Tableau

-auteur: String

+Afficher(): String

IHMDOS IHMLUXE

Bilan de l’itération 1

• Product backLog estimé à 10 points• Itération estimée à 8H et réalisée

– Choisir des fonctionnalités de l’itération 2• Soit la sérialisation (2 points de plus)

• Velocité = 10 + 2 Iter1

I1 : Demo

Bilan de l’itération

• Qu’est ce qui a bien marché ?• Qu’est ce qui n’a pas marché ?• A-t-on besoin de qq chose ?• Que faut-il ne plus faire ?• Comment peut-on améliorer qq chose ?

?

Binôme-Estimation-TU-DP-Moral-Qualité-Client présent

Applet-Selenium

Le Robot Agile

Iter2 : ConfigurerPrendre en compte les retours utilisateurs et

les bugsPuis replanifier

Le Scénario : Configurer

• Charger une partie à partir d’un nom• Sauvegarder la partie en cours en lui donnant un nom• Fabriquer une nouvelle configuration

– Créer les objets• Tableau (nom, poids, auteur)• Chaise (nom, poids, solide ou non)• Bouteille (nom, poids, degré, volume)

– Créer les pièces et les issues– Ranger les objets dans les pièces– Créer le robot (poidsMax, Piece)

TU-Ga Perdu

I2 : Découpe en tâches

• IHM pour la configuration (3H)• Schéma de la base (1H)• Conversion des objets en base avec l’expert

(JDBC – 6H)

ACCESS

Objets

Fichier

IHM-CONF

IHM JOUER

JDBC

SerialisationTU-

Gagner

IHM Configuration

RobotConfig.exe

I2 : Schéma & contenu de la base

I2 : JDBC – ce qu’explique l’expert

PersistenceClient

Persistence -RDBMS - JDBC

Persistent_object

DB_connection

Requestor

Drive_manager

DB_façade

SQL_helper

Result

PersistentClass

getData()setData()command()new()

PersistentClassList

new()add(c: PersistentClass)

Persistent_object_list

DBPersistentClass

create() : PersistentClassread(searchCriteria : string) : PersistentClassListupdate(c : PersistentClass)delete(c : PersistentClass)

ResultSet

getString() : string

Statement

executeQuery(sql : String) : ResultSetexecuteUpdate(sql : String) : int

Connection

createStatement() : Statement

DriverManager

getConnection(url, user, pass) : Connection

DB_façadePersistent_objectPersistent_object_list

Bilan de l’itération 2

• Product backLog estimé à 10H• Itération estimée à 10H et réalisée• Itération 3 est aussi terminée !!!

Iter1Iter2

Bilan de la release

• Velocite – 30 points en 2 release 2*8H– Velocite = 15

Conclusion

IHM-LUXEJouer

IHMConfigurer

Objets

Fichier

IHM-ACCESSConfigurer

IHM-DOSJouer

Access

Fichier-XML

Editeur XML(notePad)Configurer

Serialization JDBC

A vendre pour l’iter3

RQMTestsJUNIT

RQMRobot

<<Singleton>>

-poids: int-poidsMax: int

+Deplacer(pc: PC)+GetObjets(): Array<String>+GetObjetsPiece(): Array<String>+Prendre()+Prendre(nom: String)+Deposer()+Deposer(nom: String)+RafraichirPiece(): String

Piece

-nom: String-Issues: Array< Piece>-origine: Piece

+GetIssue(pc: PC): Piece+GetObjets(): Array<String>+Prendre(nom: String): Objet+Deposer(Objet)+SetIssue(pc: PC, piece: Piece)+DeposeInitiale(objet: Objet)+GetNom(): String

-maPiece

1

ConteneurObjets

-conteneur: Array<Objet>

+Ajouter(objet: Objet)+Retirer(nom: String): Objet+GetNbObjets(): int+GetObjets(): Array<String>

-leSac

1-contient

1

Objet

-nom: String-poids: int-nbObjets: boolean

+GetNom(): String+GetPoids(): int+Afficher(): String+GetNbObjets(): int

PC<<enumeration>>

+Nord+Sud+Est+Ouest

Bouteille

-degre: float-volume: float

+Afficher(): String

Chaise

-solide: boolean

+Afficher(): String

Tableau

-auteur: String

+Afficher(): String

IHMDOS IHMLUXE

<<Sing>>RQM

----------------------Energie

----------------------Deplacer(PC)

<<TM>>Deposer

Nourriture----------------------

energieNe pas les compter en nbObjet

Recommended