La vie d’un mini projet AgileLe 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 AgileInitialisation du projetEquipe 2 Dvp + 1 client (25%) + 1 expert JDBCUne itération = 1 jour (8h)Méthode tendant vers XP
Que faire?UC-USBacklog planning de releaseIter1TâchesModélisationTestsCodageRemaniementDocDemoBilanIter2……….
Le diagramme des Use Case
BackLog du produitLes risques?Release complète livréedans 3 joursPrésence de l’expert JDBC obligatoire J2
Le Robot AgileIter1 : Jouer sans persistance
Le Scénario : JouerDeplacer: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 objetLe système propose la liste des objets, le joueur en prend un (possibilité de perdre si surcharge – Fin du jeu)Deposer un objetLe 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 : surchargeGagné………….PerduFichier 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,NonPerduFichier 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 TestDeplacerextendsTestCase{private Robot r;	@Before	public voidsetUp() 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 voidtestDeplacerOK()	{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 voidtestDeplacerNOK()    {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-Gagnerimport org.junit.*;import junit.framework.TestCase;public class TestGagnerextendsTestCase{private Config c;	@Before	public voidsetUp()  {		c = new Config();	}		public voidtestGagner()	{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 : JunitTestSuiteimport 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
RemaniementMettre une énumération pour les points cardinauxFaire une nouvelle classe conteneur d’objets pour éviter les doublons de codeRetester
I1 : Nouveau diagramme
Bilan de l’itération 1Product backLog estimé à 10 pointsItération estimée à 8H et réaliséeChoisir des fonctionnalités de l’itération 2Soit la sérialisation (2 points de plus)Velocité = 10 + 2Iter1
I1 : Demo
Bilan de l’itérationQu’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ésentApplet-Selenium
Le Robot AgileIter2 : ConfigurerPrendre en compte les retours utilisateurs et les bugsPuis replanifier
Le Scénario : ConfigurerCharger une partie à partir d’un nomSauvegarder la partie en cours en lui donnant un nomFabriquer une nouvelle configurationCréer les objetsTableau (nom, poids, auteur)Chaise (nom, poids, solide ou non)Bouteille (nom, poids, degré, volume)Créer les pièces et les issuesRanger les objets dans les piècesCréer le robot (poidsMax, Piece)
I2 : Découpe en tâchesIHM pour la configuration (3H)Schéma de la base (1H)Conversion des objets en base avec l’expert  (JDBC – 6H)IHM-CONFObjetsIHM JOUERACCESSJDBCFichierTU-GagnerTU-Ga  Perdu   Serialisation
IHM Configuration
I2 : Schéma & contenu de la base
I2 : JDBC – ce qu’explique l’expertDB_façadePersistent_objectPersistent_object_listStatementexecuteQuery(sql : String) : ResultSetexecuteUpdate(sql : String) : intDBPersistentClassPersistentClassListPersistentClasscreate() : PersistentClassgetData()new()read(searchCriteria : string)  : PersistentClassListsetData()add(c: PersistentClass)update(c : PersistentClass)command()delete(c : PersistentClass)new()Persistent_object_listDB_façadePersistent_objectPersistenceClientRequestor SQL_helperPersistence -RDBMS - JDBCResultSetResultgetString() : stringDrive_manager DB_connectionDriverManagerConnectioncreateStatement() : StatementgetConnection(url, user, pass) : Connection
Bilan de l’itération 2Product backLog estimé à 10HItération estimée à 10H et réaliséeItération 3 est aussi terminée !!!Iter2Iter1
Bilan de la releaseVelocite30 points en 2 release 2*8HVelocite = 15
RQMConclusionIHM-DOSJouerTestsJUNITIHM-LUXEJouerObjetsIHM-ACCESSConfigurerSerializationJDBCIHMConfigurerFichierAccessEditeur XML(notePad)ConfigurerFichier-XMLA vendre pour l’iter3
RQM<<Sing>>RQM----------------------Energie----------------------Deplacer(PC)<<TM>>DeposerNourriture----------------------energieNe pas les compter en nbObjet

Le robot agile

  • 1.
    La vie d’unmini projet AgileLe Robot Agile
  • 2.
    ??? Cahier descharges ???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
  • 3.
    Le Robot AgileInitialisationdu projetEquipe 2 Dvp + 1 client (25%) + 1 expert JDBCUne itération = 1 jour (8h)Méthode tendant vers XP
  • 4.
    Que faire?UC-USBacklog planningde releaseIter1TâchesModélisationTestsCodageRemaniementDocDemoBilanIter2……….
  • 5.
  • 6.
    BackLog du produitLesrisques?Release complète livréedans 3 joursPrésence de l’expert JDBC obligatoire J2
  • 7.
    Le Robot AgileIter1: Jouer sans persistance
  • 8.
    Le Scénario :JouerDeplacer: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 objetLe système propose la liste des objets, le joueur en prend un (possibilité de perdre si surcharge – Fin du jeu)Deposer un objetLe système propose la liste des objets, le joueur en choisit un (possibilité de gagner - Fin du jeu)
  • 9.
    I1 : Découpeen tâches
  • 10.
    I1 : Modélisation(diag classe)Discussion avecLe client
  • 11.
  • 12.
    I1 : ConfigurerLes objets
  • 13.
    I1 : Exemplede tests (TR)Perdu : surchargeGagné………….PerduFichier 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,NonPerduFichier d’entréeSPOPOEOF
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
    I1 : Exemplede test(TU) Junit-Deplacerimport org.junit.Before;import junit.framework.TestCase;//TestDeplacer.javapublic class TestDeplacerextendsTestCase{private Robot r; @Before public voidsetUp() 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 voidtestDeplacerOK() {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 voidtestDeplacerNOK() {try {r.Deplacer(PointsCardinaux.nord);fail(); } catch (ExceptionRobot e) {assertTrue (e.getMessage().equals ("pas d'issues dans cette direction"));}
  • 19.
    I1 : Exemplede test(TU-TR) Junit-Gagnerimport org.junit.*;import junit.framework.TestCase;public class TestGagnerextendsTestCase{private Config c; @Before public voidsetUp() { c = new Config(); } public voidtestGagner() {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!!!!!");} }
  • 20.
    I1 : JunitTestSuiteimportjunit.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; }}
  • 21.
    I1 : Passerles tests NOK
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
    RemaniementMettre une énumérationpour les points cardinauxFaire une nouvelle classe conteneur d’objets pour éviter les doublons de codeRetester
  • 28.
    I1 : Nouveaudiagramme
  • 29.
    Bilan de l’itération1Product backLog estimé à 10 pointsItération estimée à 8H et réaliséeChoisir des fonctionnalités de l’itération 2Soit la sérialisation (2 points de plus)Velocité = 10 + 2Iter1
  • 30.
  • 31.
    Bilan de l’itérationQu’estce 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ésentApplet-Selenium
  • 32.
    Le Robot AgileIter2: ConfigurerPrendre en compte les retours utilisateurs et les bugsPuis replanifier
  • 33.
    Le Scénario :ConfigurerCharger une partie à partir d’un nomSauvegarder la partie en cours en lui donnant un nomFabriquer une nouvelle configurationCréer les objetsTableau (nom, poids, auteur)Chaise (nom, poids, solide ou non)Bouteille (nom, poids, degré, volume)Créer les pièces et les issuesRanger les objets dans les piècesCréer le robot (poidsMax, Piece)
  • 34.
    I2 : Découpeen tâchesIHM pour la configuration (3H)Schéma de la base (1H)Conversion des objets en base avec l’expert (JDBC – 6H)IHM-CONFObjetsIHM JOUERACCESSJDBCFichierTU-GagnerTU-Ga Perdu Serialisation
  • 35.
  • 36.
    I2 : Schéma& contenu de la base
  • 37.
    I2 : JDBC– ce qu’explique l’expertDB_façadePersistent_objectPersistent_object_listStatementexecuteQuery(sql : String) : ResultSetexecuteUpdate(sql : String) : intDBPersistentClassPersistentClassListPersistentClasscreate() : PersistentClassgetData()new()read(searchCriteria : string) : PersistentClassListsetData()add(c: PersistentClass)update(c : PersistentClass)command()delete(c : PersistentClass)new()Persistent_object_listDB_façadePersistent_objectPersistenceClientRequestor SQL_helperPersistence -RDBMS - JDBCResultSetResultgetString() : stringDrive_manager DB_connectionDriverManagerConnectioncreateStatement() : StatementgetConnection(url, user, pass) : Connection
  • 38.
    Bilan de l’itération2Product backLog estimé à 10HItération estimée à 10H et réaliséeItération 3 est aussi terminée !!!Iter2Iter1
  • 39.
    Bilan de lareleaseVelocite30 points en 2 release 2*8HVelocite = 15
  • 40.
  • 41.