SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
cocktail d’expérience informatiques
             Genève 3 & 4 octobre 2011
                    Seconde édition
                      soft-shake.ch




Auteur    Alexis HASSLER
  Track   Java
Session   Test d'intégration
          avec Arquillian
Test d'intégration
       avec
    Arquillian




               Alexis Hassler
Arquillian




         Alexis Hassler
@AlexisHassler
Arquillian
Alexis
Hassler
JavaEE


JAX-WS     JAX-RS   JPA



Servlet
            EJB     JNDI

 JSP

            CDI     JMS
 JSF
Tests

Unitaire           Intégration
Test unitaire




       new


       mock
✔   EJB
Test d'intégration

Composant déployé dans son
conteneur
–   Mode embarqué
–   Déploiement distant
EJB

Mode embarqué



EJBContainer.createEJBContainer()

Context.lookup(...)
Spring Framework

Runner
–   Démarrer l'ApplicationContext



                 @RunWith

                 @Autowired
CDI

Weld SE
–   Runner maison
    cf. http://blog.alexis-hassler.com/2011/01/junit-runner-pour-cdi-weld.html




                           @RunWith

                           @Inject
JPA

   Conteneur JPA




Persistence.createEntityManagerFactory(...)
           .createEntityManager()
JMS

   Conteneur autonome




new ActiveMQConnectionFactory(
        "vm://localhost?broker.persistent=false");
HTTP / Servlet / JSP / ...

Conteneur autonome




      new ServletTester()

      new HttpTester()
✔   EJB / OpenEJB
Problème

1 conteneur par technologie
–   Pas de mode embarqué universel

Mode remote + Maven
–   pas dans le cycle de vie standard

Configurations spécifiques
JavaEE


JAX-WS     JAX-RS   JPA



Servlet
            EJB     JNDI

 JSP

            CDI     JMS
 JSF
JavaEE

                             JMS
       JAX-RS




                                    Transaction
                        EJB
Servlet
            CDI

                              JPA
 JSF
                  Bean
                Validation
Tester les composants,
  pas uniquement les classes,
     pas toute l'application
Mettre les

tests dans le conteneur
      plutôt que gérer le
    conteneur dans les tests
Structure d'un test


@RunWith(Arquillian.class)

@Deployment

@EJB, @Inject, @Resource

@Test
✔   EJB / OpenEJB
Conteneurs

JavaEE                 CDI
–   JBoss AS,           –   Weld SE,

–   GlassFish,          –   Weld EE,

–   Websphere AS        –   OpenWebBeans

Web                    EJB
–   Jetty,              –   Apache OpenEJB

–   Tomcat
Conteneurs




                                      DeployableContainer
ShrinkWrap

                     Arquillian
                                                            Conteneur
Test Case
                    junit-container



            JUnit
Conteneurs

Classpath

Profil maven
✔   EJB / Glassfish Embedded
✔   CDI / Glassfish Embedded
       ✔   CDI / Weld SE
Conteneurs

Remote



           Managed



                      Embedded
Conteneur embarqué
Démarrage du conteneur
     (in-process)


         Déploiement de l'archive




                            Exécution locale du test


                                         Retrait de l'archive


                                                   Arrêt du conteneur
Conteneur géré
Démarrage du conteneur
    (out-process)


         Déploiement de l'archive


                    Déploiement du service
                           Arquillian

                                Exécution du test
                                dans le conteneur


                                         Retrait de l'archive


                                                    Arrêt du conteneur
Conteneur distant
      Conteneur
préalablement démarré


        Déploiement de l'archive


                  Déploiement du service
                         Arquillian

                               Exécution du test
                               dans le conteneur


                                        Retrait de l'archive
Conteneurs



                     Remote                Managed                 Embedded
JBoss AS       4.2, 5.0, 5.1, 6.0, 7.0   4.2, 5.1, 6.0, 7.0                 5.1, 6.0
Glassfish                         3.1                                            3.1
Websphere AS                      7.0                                            8.0
Jetty                                                                       6.1, 7.0
Tomcat                            6.0                                            6.0
Weld                                                          SE 1.1, SE 1.0, EE 1.1
OpenWebBeans                                                                     1.0
OpenEJB                                                                          3.1
✔   EJB / JBoss AS 7 managed
    ✔   EJB / JBoss AS 7 remote
Architecture




                                      DeployableContainer
ShrinkWrap

                     Arquillian
                                                            Conteneur
Test Case
                    junit-container



            JUnit
Protocole Servlet


                 ShrinkWrap.create(WebArchive.class)
                           .addClasses(...);


                      Web Archive


  JUnit

Arquillian             Test case
                    Arquillian Servlet
Protocole Servlet 3.0


                   ShrinkWrap.create(JavaArchive.class)
                             .addClasses(...);


                        Web Archive


  JUnit

Arquillian               Test case
                      Arquillian Servlet
Protocole Servlet 2.5


                   ShrinkWrap.create(JavaArchive.class)
                             .addClasses(...);

                        Arquillian ear
                        Java Archive


  JUnit

Arquillian               Test case

                       Arquillian war
                      Arquillian Servlet
Protocole Servlet
              ShrinkWrap.create(EnterpriseArchive.class)
                        .addAsModule(jar);
                   ShrinkWrap.create(JavaArchive.class)
                             .addClasses(...);

                      Enterprise Archive
                        Java Archive


  JUnit

Arquillian                Test case

                        Arquillian war
                      Arquillian Servlet
Protocole JMX-AS7


                 ShrinkWrap.create(XxxArchive.class)
                           .addClasses(...);

                      JBoss AS 7

                      Any Archive


  JUnit

Arquillian
                        Test case

                    Arquillian Service
                    Arquillian MBean
✔   EJB / deploymentExportPath
as-client

Web, JAX-RS, JAX-WS,

RMI, EJB remote,...

                Web Archive


  JUnit

Arquillian
Test case
as-client



@ArquillianResource(MyServlet.class)
URL baseURL ;

@Deployment(testable=false)
public static Archive createDeployment() {
    ...
}

@Test
@RunAsClient
private void shouldDoX() {
    ...
}
as-client

Utilisable pour du test fonctionnel
– selenium,   htmlunit, httpunit,...
Drone

    Intégration sélénium

@RunWith(Arquillian.class)
public class BasicClientTest {

    @Drone DefaultSelenium browser;

    @Test
    public void testLoginAndLogout() {
      browser.open(deploymentUrl + "home.jsp");
      ...
    }
}
✔   JAX-RS / JBoss AS 7 managed
Arquillian

Test d'intégration

In-container

As-client

Multi-conteneurs
Références

http://jboss.org/arquillian
http://github.com/arquillian
http://github.com/hasalex/arquillian-demo
Lundi 3 octobre
    17h00

Contenu connexe

Tendances

ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursHoracio Gonzalez
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur SpringAntoine Rey
 
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoiPerf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoipkernevez
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Antoine Rey
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootDNG Consulting
 

Tendances (6)

ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
 
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoiPerf ug   comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
Perf ug comment ne plus rajouter de ram a vos jvm sans savoir pourquoi
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
 

Similaire à soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Arquillian, un alien en Bretagne
Arquillian, un alien en BretagneArquillian, un alien en Bretagne
Arquillian, un alien en BretagneAlexis Hassler
 
Esupdays 19 : Packaging Esup Cas
Esupdays 19 : Packaging Esup Cas Esupdays 19 : Packaging Esup Cas
Esupdays 19 : Packaging Esup Cas Ludovic A
 
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)hibnico
 
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdfJFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdfqsdqsd4
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?PALO IT
 
DevoxxFR 2013 - Arquillian
DevoxxFR 2013 - ArquillianDevoxxFR 2013 - Arquillian
DevoxxFR 2013 - ArquillianAlexis Hassler
 
Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013
Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013
Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013Xavier NOPRE
 

Similaire à soft-shake.ch - Tests d'intégration JavaEE avec Arquillian (20)

Arquillian, un alien en Bretagne
Arquillian, un alien en BretagneArquillian, un alien en Bretagne
Arquillian, un alien en Bretagne
 
Gradle_ToursJUG
Gradle_ToursJUGGradle_ToursJUG
Gradle_ToursJUG
 
gradle_nantesjug
gradle_nantesjuggradle_nantesjug
gradle_nantesjug
 
Gradle_ToulouseJUG
Gradle_ToulouseJUGGradle_ToulouseJUG
Gradle_ToulouseJUG
 
Esupdays 19 : Packaging Esup Cas
Esupdays 19 : Packaging Esup Cas Esupdays 19 : Packaging Esup Cas
Esupdays 19 : Packaging Esup Cas
 
Cours JSP
Cours JSPCours JSP
Cours JSP
 
Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010Java EE 6 Solutions Linux 2010
Java EE 6 Solutions Linux 2010
 
Gradle_NormandyJUG
Gradle_NormandyJUGGradle_NormandyJUG
Gradle_NormandyJUG
 
Administration glassfish 3
Administration glassfish 3Administration glassfish 3
Administration glassfish 3
 
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
 
JavaEEGibello.ppt
JavaEEGibello.pptJavaEEGibello.ppt
JavaEEGibello.ppt
 
Apache Maven 3
Apache Maven 3Apache Maven 3
Apache Maven 3
 
Soiree Maven 2
Soiree Maven 2Soiree Maven 2
Soiree Maven 2
 
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdfJFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
JFTL-2018-Comment-mettre-en-place-des-plateformes-de-test-grâce-à-Docker.pdf
 
Gradle_BordeauxJUG
Gradle_BordeauxJUGGradle_BordeauxJUG
Gradle_BordeauxJUG
 
2
22
2
 
Et pourquoi pas JEE ?
Et pourquoi pas JEE ?Et pourquoi pas JEE ?
Et pourquoi pas JEE ?
 
Présentation1
Présentation1Présentation1
Présentation1
 
DevoxxFR 2013 - Arquillian
DevoxxFR 2013 - ArquillianDevoxxFR 2013 - Arquillian
DevoxxFR 2013 - Arquillian
 
Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013
Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013
Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013
 

Plus de soft-shake.ch

soft-shake.ch - Windows Phone 7 „Mango“ – what’s new for Developers?
soft-shake.ch - Windows Phone 7 „Mango“ – what’s new for Developers?soft-shake.ch - Windows Phone 7 „Mango“ – what’s new for Developers?
soft-shake.ch - Windows Phone 7 „Mango“ – what’s new for Developers?soft-shake.ch
 
soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5soft-shake.ch
 
soft-shake.ch - WebMatrix: Your Web Made Easy
soft-shake.ch - WebMatrix: Your Web Made Easysoft-shake.ch - WebMatrix: Your Web Made Easy
soft-shake.ch - WebMatrix: Your Web Made Easysoft-shake.ch
 
soft-shake.ch - Domotique et robotique avec le micro Framework .NET
soft-shake.ch - Domotique et robotique avec le micro Framework .NETsoft-shake.ch - Domotique et robotique avec le micro Framework .NET
soft-shake.ch - Domotique et robotique avec le micro Framework .NETsoft-shake.ch
 
soft-shake.ch - Clojure Values
soft-shake.ch - Clojure Valuessoft-shake.ch - Clojure Values
soft-shake.ch - Clojure Valuessoft-shake.ch
 
soft-shake.ch - Data grids and Data Grids
soft-shake.ch - Data grids and Data Gridssoft-shake.ch - Data grids and Data Grids
soft-shake.ch - Data grids and Data Gridssoft-shake.ch
 
soft-shake.ch - Data grids and Data Caching
soft-shake.ch - Data grids and Data Cachingsoft-shake.ch - Data grids and Data Caching
soft-shake.ch - Data grids and Data Cachingsoft-shake.ch
 
soft-shake.ch - JBoss AS 7, la révolution
soft-shake.ch - JBoss AS 7, la révolutionsoft-shake.ch - JBoss AS 7, la révolution
soft-shake.ch - JBoss AS 7, la révolutionsoft-shake.ch
 
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coinsoft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coinsoft-shake.ch
 
soft-shake.ch - Un zeste d’Erlang dans le shaker!
soft-shake.ch - Un zeste d’Erlang dans le shaker!soft-shake.ch - Un zeste d’Erlang dans le shaker!
soft-shake.ch - Un zeste d’Erlang dans le shaker!soft-shake.ch
 
soft-shake.ch - Déploiement continu sur le cloud avec SlipStream
soft-shake.ch - Déploiement continu sur le cloud avec SlipStreamsoft-shake.ch - Déploiement continu sur le cloud avec SlipStream
soft-shake.ch - Déploiement continu sur le cloud avec SlipStreamsoft-shake.ch
 
soft-shake.ch - An introduction to social architecture
soft-shake.ch - An introduction to social architecturesoft-shake.ch - An introduction to social architecture
soft-shake.ch - An introduction to social architecturesoft-shake.ch
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch
 
soft-shake.ch - De Hermes RUP à Hermes Scrum
soft-shake.ch - De Hermes RUP à Hermes Scrumsoft-shake.ch - De Hermes RUP à Hermes Scrum
soft-shake.ch - De Hermes RUP à Hermes Scrumsoft-shake.ch
 
soft-shake.ch - Stewardship et motivation
soft-shake.ch - Stewardship et motivationsoft-shake.ch - Stewardship et motivation
soft-shake.ch - Stewardship et motivationsoft-shake.ch
 
soft-shake.ch - Agile qu'es aco : scrum xp lean
soft-shake.ch - Agile qu'es aco : scrum xp leansoft-shake.ch - Agile qu'es aco : scrum xp lean
soft-shake.ch - Agile qu'es aco : scrum xp leansoft-shake.ch
 
soft-shake.ch - Documentation et agilité
soft-shake.ch - Documentation et agilitésoft-shake.ch - Documentation et agilité
soft-shake.ch - Documentation et agilitésoft-shake.ch
 
soft-shake.ch - Agilité = discipline et rigueur ?
soft-shake.ch - Agilité = discipline et rigueur ?soft-shake.ch - Agilité = discipline et rigueur ?
soft-shake.ch - Agilité = discipline et rigueur ?soft-shake.ch
 
soft-shake.ch - Transition agile & Accompagnement au changement
soft-shake.ch - Transition agile & Accompagnement au changementsoft-shake.ch - Transition agile & Accompagnement au changement
soft-shake.ch - Transition agile & Accompagnement au changementsoft-shake.ch
 
soft-shake.ch - Agilité et Testing: de l'intérêt d'une démarche structurée
soft-shake.ch - Agilité et Testing: de l'intérêt d'une démarche structuréesoft-shake.ch - Agilité et Testing: de l'intérêt d'une démarche structurée
soft-shake.ch - Agilité et Testing: de l'intérêt d'une démarche structuréesoft-shake.ch
 

Plus de soft-shake.ch (20)

soft-shake.ch - Windows Phone 7 „Mango“ – what’s new for Developers?
soft-shake.ch - Windows Phone 7 „Mango“ – what’s new for Developers?soft-shake.ch - Windows Phone 7 „Mango“ – what’s new for Developers?
soft-shake.ch - Windows Phone 7 „Mango“ – what’s new for Developers?
 
soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5soft-shake.ch - Introduction to HTML5
soft-shake.ch - Introduction to HTML5
 
soft-shake.ch - WebMatrix: Your Web Made Easy
soft-shake.ch - WebMatrix: Your Web Made Easysoft-shake.ch - WebMatrix: Your Web Made Easy
soft-shake.ch - WebMatrix: Your Web Made Easy
 
soft-shake.ch - Domotique et robotique avec le micro Framework .NET
soft-shake.ch - Domotique et robotique avec le micro Framework .NETsoft-shake.ch - Domotique et robotique avec le micro Framework .NET
soft-shake.ch - Domotique et robotique avec le micro Framework .NET
 
soft-shake.ch - Clojure Values
soft-shake.ch - Clojure Valuessoft-shake.ch - Clojure Values
soft-shake.ch - Clojure Values
 
soft-shake.ch - Data grids and Data Grids
soft-shake.ch - Data grids and Data Gridssoft-shake.ch - Data grids and Data Grids
soft-shake.ch - Data grids and Data Grids
 
soft-shake.ch - Data grids and Data Caching
soft-shake.ch - Data grids and Data Cachingsoft-shake.ch - Data grids and Data Caching
soft-shake.ch - Data grids and Data Caching
 
soft-shake.ch - JBoss AS 7, la révolution
soft-shake.ch - JBoss AS 7, la révolutionsoft-shake.ch - JBoss AS 7, la révolution
soft-shake.ch - JBoss AS 7, la révolution
 
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coinsoft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coin
 
soft-shake.ch - Un zeste d’Erlang dans le shaker!
soft-shake.ch - Un zeste d’Erlang dans le shaker!soft-shake.ch - Un zeste d’Erlang dans le shaker!
soft-shake.ch - Un zeste d’Erlang dans le shaker!
 
soft-shake.ch - Déploiement continu sur le cloud avec SlipStream
soft-shake.ch - Déploiement continu sur le cloud avec SlipStreamsoft-shake.ch - Déploiement continu sur le cloud avec SlipStream
soft-shake.ch - Déploiement continu sur le cloud avec SlipStream
 
soft-shake.ch - An introduction to social architecture
soft-shake.ch - An introduction to social architecturesoft-shake.ch - An introduction to social architecture
soft-shake.ch - An introduction to social architecture
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.js
 
soft-shake.ch - De Hermes RUP à Hermes Scrum
soft-shake.ch - De Hermes RUP à Hermes Scrumsoft-shake.ch - De Hermes RUP à Hermes Scrum
soft-shake.ch - De Hermes RUP à Hermes Scrum
 
soft-shake.ch - Stewardship et motivation
soft-shake.ch - Stewardship et motivationsoft-shake.ch - Stewardship et motivation
soft-shake.ch - Stewardship et motivation
 
soft-shake.ch - Agile qu'es aco : scrum xp lean
soft-shake.ch - Agile qu'es aco : scrum xp leansoft-shake.ch - Agile qu'es aco : scrum xp lean
soft-shake.ch - Agile qu'es aco : scrum xp lean
 
soft-shake.ch - Documentation et agilité
soft-shake.ch - Documentation et agilitésoft-shake.ch - Documentation et agilité
soft-shake.ch - Documentation et agilité
 
soft-shake.ch - Agilité = discipline et rigueur ?
soft-shake.ch - Agilité = discipline et rigueur ?soft-shake.ch - Agilité = discipline et rigueur ?
soft-shake.ch - Agilité = discipline et rigueur ?
 
soft-shake.ch - Transition agile & Accompagnement au changement
soft-shake.ch - Transition agile & Accompagnement au changementsoft-shake.ch - Transition agile & Accompagnement au changement
soft-shake.ch - Transition agile & Accompagnement au changement
 
soft-shake.ch - Agilité et Testing: de l'intérêt d'une démarche structurée
soft-shake.ch - Agilité et Testing: de l'intérêt d'une démarche structuréesoft-shake.ch - Agilité et Testing: de l'intérêt d'une démarche structurée
soft-shake.ch - Agilité et Testing: de l'intérêt d'une démarche structurée
 

soft-shake.ch - Tests d'intégration JavaEE avec Arquillian