SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
Unit Tests als Spezifikation?
Nicole Rauch, Marc Philipp
26. November 2010
Eine einfache Funktion
   public double f ( double x ) {
      if( x < 5.0 ) return 3.0;
      else if( x < 10.0 ) return 2.0;
      else return 4.0;
   }



   Beispielwerte für f:         Unit-Tests für f:
                                @Test public void valuesOfF() {
    x    f( x )                   assertEquals( 3.0, f( 1.0 ), 0.01 );
     1      3                     assertEquals( 3.0, f( 3.0 ), 0.01 );
     3      3                     assertEquals( 2.0, f( 7.0 ), 0.01 );
     7      2                     assertEquals( 4.0, f( 12.0 ), 0.01 );
                                }
    12      4




                  Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
Eine einfache Funktion
   public double f ( double x ) {
      if( x < 5.0 ) return 3.0;
      else if( x < 10.0 ) return 2.0;
      else return 4.0;
   }



   Beispielwerte für f:

    x    f( x )
     1      3
     3      3
     7      2
    12      4




                  Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
Was ist das Problem?




   „Traditional test suites verify a few well-picked scenarios or example
   inputs. However, such example-based testing does not uncover
   errors in legal inputs that the test writer overlooked.“
                                                               [Saff et.al.]




                  Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
Eine Alternative: Spezifikationen




   Eine geeignete mathematische Spezifikation ist z. B.:

                     ∀x. (x < 5               ⇒ f (x) = 3)
                       ∧ (5 ≤ x < 10          ⇒ f (x) = 2)
                       ∧ (10 ≤ x              ⇒ f (x) = 4)




                 Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
Eine Lösung: JUnit Theories



      Herkömmliche Tests benutzen Beispiele:
          Überprüfung des Verhaltens unter ausgewählten Eingaben
          Entwickler ist dafür verantwortlich, charakteristische Beispiele
          zu wählen
      Eine Theory verallgemeinert eine Menge von Tests:
          Vorbedingung wird explizit angegeben
          Assertion muss für alle Eingaben gelten, die die
          Vorbedingungen erfüllen




               Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
Theories für unsere Funktion
   @Theory
   public void valuesLessThan5( double x ) {
      assumeTrue( x < 5.0 );
      assertEquals( 3.0, f(x), 0.01 );
   }

   @Theory
   public void valuesBetween5And10( double x ) {
      assumeTrue( 5.0 <= x );
      assumeTrue( x < 10.0 );
      assertEquals( 2.0, f(x), 0.01 );
   }

   @Theory
   public void values10OrGreater( double x ) {
      assumeTrue( 10.0 <= x );
      assertEquals( 4.0, f(x), 0.01 );
   }



                 Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
Woher kommen die Eingabewerte?



   @DataPoint
   public static double VALUE1 = 1.0;

   @DataPoint
   public static double VALUE2 = 3.0;

   @DataPoint
   public static double VALUE3 = 7.0;

   @DataPoint
   public static double VALUE4 = 12.0;




                 Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
DEMO




Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
ScalaCheck




      Generatoren erzeugen randomisierte Testwerte
      Test ist grün nach 100 erfolgreichen Durchläufen
      Test ist rot nach 500 unpassenden Eingaben




               Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
Das war’s!

                                               Wirklich?



Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
Objekte




Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
Eine User Story




              Als Benutzer möchte ich einer Person
              Adressen zuordnen können.

              Die Person soll jede Adresse nur
              einmal enthalten.




              Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
DEMO




Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
Bob
           Bob
                                                            Hamburg



                                                           Karlsruhe




           Bob
                                                            Hamburg

      Hamburg

                                                           Karlsruhe




                 Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
QuickCheck für Java?
Erste Ansätze



    QuickCheck-Portierung [quickcheck.dev.java.net]

          Stellt Generatoren für Standardtypen zur Verfügung
          Benutzung über for-Schleifen im Unit Test


    JCheck [jcheck.org]

          Generatoren müssen an jedem Test angegeben werden
          Verschachtelte Annotations
          Keine Wiederverwendung von Theories




                   Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
QuickCheck für Java?
Neuer Ansatz




    JUnit-QuickCheck

         Eleganter neuer Ansatz
         Basiert auf JUnit Theories
         Parameter werden mit @Forall annotiert
         Vordefinierte Generatoren für Standard-Typen
         Steckt noch in den Kinderschuhen




                  Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
DEMO




Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
Unterschiede

   ScalaCheck
      Generatoren erzeugen randomisierte Testwerte
      Test ist grün nach 100 erfolgreichen Durchläufen
      Test ist rot nach 500 unpassenden Eingaben


   JUnit-QuickCheck

      Generiert pro Parameter 100 Eingabewerte
      Bei 2 Parametern 10.000 Kombinationen, bei drei 1.000.000
      Test ist grün, wenn alle passenden Eingaben erfolgreich sind
      Test ist rot, wenn kein passender Eingabewert gefunden wurde



                Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
Fazit




   Was macht einen guten Unit Test aus?
      Er vermittelt durch Beispiele schnell ein intuitives Verständnis.
   Was macht eine gute Spezifikation aus?
      Sie beschreibt die zugrundeliegenden Regeln durch Abstraktion.
   Geht beides zusammen?
       Es gibt kein Entweder-oder; beide Teile sind wichtig.




                 Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
Das war’s!

                                                Wirklich!



Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?
Vielen Dank!



   Code & Folien auf GitHub:

            https://github.com/marcphilipp/xpdays2010/



   Nicole                                      Marc
   E-Mail nicole@andrena.de                     E-Mail marc@andrena.de
   Twitter @NicoleRauch                        Twitter @marcphilipp




                Nicole Rauch, Marc Philipp   Unit Tests als Spezifikation?

Contenu connexe

En vedette

Pruebas de grado blog
Pruebas de grado blogPruebas de grado blog
Pruebas de grado blogjoss96
 
Terapias contra blancos moleculares academia de farmacia
Terapias contra blancos moleculares academia de farmaciaTerapias contra blancos moleculares academia de farmacia
Terapias contra blancos moleculares academia de farmaciaHMSalud
 
PRESENTACION SOBRE (IN) SEGURIDAD PUBLICA - FUNDACION NAUMANN
PRESENTACION SOBRE (IN) SEGURIDAD PUBLICA - FUNDACION NAUMANNPRESENTACION SOBRE (IN) SEGURIDAD PUBLICA - FUNDACION NAUMANN
PRESENTACION SOBRE (IN) SEGURIDAD PUBLICA - FUNDACION NAUMANNMarcelo Montes
 
EVALUACION DIAGNOSTICA BLOQUE 2
EVALUACION DIAGNOSTICA BLOQUE 2EVALUACION DIAGNOSTICA BLOQUE 2
EVALUACION DIAGNOSTICA BLOQUE 2BrendaColli
 
Planeamiento curricular
Planeamiento curricularPlaneamiento curricular
Planeamiento curricularcilamaritza
 
Surselva Tourismus AG: 2. Sommer Kick-Off für Mitarbeitende mit Gästekontakt...
Surselva Tourismus AG: 2. Sommer Kick-Off für Mitarbeitende mit Gästekontakt...Surselva Tourismus AG: 2. Sommer Kick-Off für Mitarbeitende mit Gästekontakt...
Surselva Tourismus AG: 2. Sommer Kick-Off für Mitarbeitende mit Gästekontakt...Gérard Carigiet
 
TIPOS DE INTERESES
TIPOS DE INTERESES TIPOS DE INTERESES
TIPOS DE INTERESES JOSECANTOS95
 
Guerilla Marketing Workshop für Gärtner und Floristen
Guerilla Marketing Workshop für Gärtner und FloristenGuerilla Marketing Workshop für Gärtner und Floristen
Guerilla Marketing Workshop für Gärtner und FloristenStefan Frisch, M.A.
 
Informe escuela estruturalista copiaClase Dra Ana Chavez
Informe escuela estruturalista   copiaClase Dra Ana ChavezInforme escuela estruturalista   copiaClase Dra Ana Chavez
Informe escuela estruturalista copiaClase Dra Ana ChavezMely Bustillos
 
Entwicklung in Spielen als Innovationstreiber für Usability
Entwicklung in Spielen als Innovationstreiber für UsabilityEntwicklung in Spielen als Innovationstreiber für Usability
Entwicklung in Spielen als Innovationstreiber für Usabilityitemis AG
 
Stipendium präsentation
Stipendium präsentationStipendium präsentation
Stipendium präsentationMochibon
 
2014 02 26_kurzreferat krisenkommunikation kampaweb slideshare
2014 02 26_kurzreferat krisenkommunikation kampaweb slideshare2014 02 26_kurzreferat krisenkommunikation kampaweb slideshare
2014 02 26_kurzreferat krisenkommunikation kampaweb slideshareKampaweb
 
Programa Quimica Segundo semestre
Programa Quimica Segundo semestrePrograma Quimica Segundo semestre
Programa Quimica Segundo semestreIngrid Aldana
 
Resultados pruebas saber once
Resultados pruebas saber onceResultados pruebas saber once
Resultados pruebas saber onceandresm1018
 

En vedette (18)

Resumen del libro n3
Resumen del libro n3Resumen del libro n3
Resumen del libro n3
 
LAS PRISIONERAS
LAS PRISIONERASLAS PRISIONERAS
LAS PRISIONERAS
 
Pruebas de grado blog
Pruebas de grado blogPruebas de grado blog
Pruebas de grado blog
 
Terapias contra blancos moleculares academia de farmacia
Terapias contra blancos moleculares academia de farmaciaTerapias contra blancos moleculares academia de farmacia
Terapias contra blancos moleculares academia de farmacia
 
Normas
NormasNormas
Normas
 
PRESENTACION SOBRE (IN) SEGURIDAD PUBLICA - FUNDACION NAUMANN
PRESENTACION SOBRE (IN) SEGURIDAD PUBLICA - FUNDACION NAUMANNPRESENTACION SOBRE (IN) SEGURIDAD PUBLICA - FUNDACION NAUMANN
PRESENTACION SOBRE (IN) SEGURIDAD PUBLICA - FUNDACION NAUMANN
 
EVALUACION DIAGNOSTICA BLOQUE 2
EVALUACION DIAGNOSTICA BLOQUE 2EVALUACION DIAGNOSTICA BLOQUE 2
EVALUACION DIAGNOSTICA BLOQUE 2
 
Planeamiento curricular
Planeamiento curricularPlaneamiento curricular
Planeamiento curricular
 
Surselva Tourismus AG: 2. Sommer Kick-Off für Mitarbeitende mit Gästekontakt...
Surselva Tourismus AG: 2. Sommer Kick-Off für Mitarbeitende mit Gästekontakt...Surselva Tourismus AG: 2. Sommer Kick-Off für Mitarbeitende mit Gästekontakt...
Surselva Tourismus AG: 2. Sommer Kick-Off für Mitarbeitende mit Gästekontakt...
 
TIPOS DE INTERESES
TIPOS DE INTERESES TIPOS DE INTERESES
TIPOS DE INTERESES
 
Guerilla Marketing Workshop für Gärtner und Floristen
Guerilla Marketing Workshop für Gärtner und FloristenGuerilla Marketing Workshop für Gärtner und Floristen
Guerilla Marketing Workshop für Gärtner und Floristen
 
Informe escuela estruturalista copiaClase Dra Ana Chavez
Informe escuela estruturalista   copiaClase Dra Ana ChavezInforme escuela estruturalista   copiaClase Dra Ana Chavez
Informe escuela estruturalista copiaClase Dra Ana Chavez
 
Entwicklung in Spielen als Innovationstreiber für Usability
Entwicklung in Spielen als Innovationstreiber für UsabilityEntwicklung in Spielen als Innovationstreiber für Usability
Entwicklung in Spielen als Innovationstreiber für Usability
 
Mis redes sociales
Mis redes socialesMis redes sociales
Mis redes sociales
 
Stipendium präsentation
Stipendium präsentationStipendium präsentation
Stipendium präsentation
 
2014 02 26_kurzreferat krisenkommunikation kampaweb slideshare
2014 02 26_kurzreferat krisenkommunikation kampaweb slideshare2014 02 26_kurzreferat krisenkommunikation kampaweb slideshare
2014 02 26_kurzreferat krisenkommunikation kampaweb slideshare
 
Programa Quimica Segundo semestre
Programa Quimica Segundo semestrePrograma Quimica Segundo semestre
Programa Quimica Segundo semestre
 
Resultados pruebas saber once
Resultados pruebas saber onceResultados pruebas saber once
Resultados pruebas saber once
 

Unit Tests als Spezifikation?

  • 1. Unit Tests als Spezifikation? Nicole Rauch, Marc Philipp 26. November 2010
  • 2. Eine einfache Funktion public double f ( double x ) { if( x < 5.0 ) return 3.0; else if( x < 10.0 ) return 2.0; else return 4.0; } Beispielwerte für f: Unit-Tests für f: @Test public void valuesOfF() { x f( x ) assertEquals( 3.0, f( 1.0 ), 0.01 ); 1 3 assertEquals( 3.0, f( 3.0 ), 0.01 ); 3 3 assertEquals( 2.0, f( 7.0 ), 0.01 ); 7 2 assertEquals( 4.0, f( 12.0 ), 0.01 ); } 12 4 Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 3. Eine einfache Funktion public double f ( double x ) { if( x < 5.0 ) return 3.0; else if( x < 10.0 ) return 2.0; else return 4.0; } Beispielwerte für f: x f( x ) 1 3 3 3 7 2 12 4 Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 4. Was ist das Problem? „Traditional test suites verify a few well-picked scenarios or example inputs. However, such example-based testing does not uncover errors in legal inputs that the test writer overlooked.“ [Saff et.al.] Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 5. Eine Alternative: Spezifikationen Eine geeignete mathematische Spezifikation ist z. B.: ∀x. (x < 5 ⇒ f (x) = 3) ∧ (5 ≤ x < 10 ⇒ f (x) = 2) ∧ (10 ≤ x ⇒ f (x) = 4) Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 6. Eine Lösung: JUnit Theories Herkömmliche Tests benutzen Beispiele: Überprüfung des Verhaltens unter ausgewählten Eingaben Entwickler ist dafür verantwortlich, charakteristische Beispiele zu wählen Eine Theory verallgemeinert eine Menge von Tests: Vorbedingung wird explizit angegeben Assertion muss für alle Eingaben gelten, die die Vorbedingungen erfüllen Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 7. Theories für unsere Funktion @Theory public void valuesLessThan5( double x ) { assumeTrue( x < 5.0 ); assertEquals( 3.0, f(x), 0.01 ); } @Theory public void valuesBetween5And10( double x ) { assumeTrue( 5.0 <= x ); assumeTrue( x < 10.0 ); assertEquals( 2.0, f(x), 0.01 ); } @Theory public void values10OrGreater( double x ) { assumeTrue( 10.0 <= x ); assertEquals( 4.0, f(x), 0.01 ); } Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 8. Woher kommen die Eingabewerte? @DataPoint public static double VALUE1 = 1.0; @DataPoint public static double VALUE2 = 3.0; @DataPoint public static double VALUE3 = 7.0; @DataPoint public static double VALUE4 = 12.0; Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 9. DEMO Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 10. ScalaCheck Generatoren erzeugen randomisierte Testwerte Test ist grün nach 100 erfolgreichen Durchläufen Test ist rot nach 500 unpassenden Eingaben Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 11. Das war’s! Wirklich? Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 12. Objekte Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 13. Eine User Story Als Benutzer möchte ich einer Person Adressen zuordnen können. Die Person soll jede Adresse nur einmal enthalten. Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 14. DEMO Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 15. Bob Bob Hamburg Karlsruhe Bob Hamburg Hamburg Karlsruhe Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 16. QuickCheck für Java? Erste Ansätze QuickCheck-Portierung [quickcheck.dev.java.net] Stellt Generatoren für Standardtypen zur Verfügung Benutzung über for-Schleifen im Unit Test JCheck [jcheck.org] Generatoren müssen an jedem Test angegeben werden Verschachtelte Annotations Keine Wiederverwendung von Theories Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 17. QuickCheck für Java? Neuer Ansatz JUnit-QuickCheck Eleganter neuer Ansatz Basiert auf JUnit Theories Parameter werden mit @Forall annotiert Vordefinierte Generatoren für Standard-Typen Steckt noch in den Kinderschuhen Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 18. DEMO Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 19. Unterschiede ScalaCheck Generatoren erzeugen randomisierte Testwerte Test ist grün nach 100 erfolgreichen Durchläufen Test ist rot nach 500 unpassenden Eingaben JUnit-QuickCheck Generiert pro Parameter 100 Eingabewerte Bei 2 Parametern 10.000 Kombinationen, bei drei 1.000.000 Test ist grün, wenn alle passenden Eingaben erfolgreich sind Test ist rot, wenn kein passender Eingabewert gefunden wurde Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 20. Fazit Was macht einen guten Unit Test aus? Er vermittelt durch Beispiele schnell ein intuitives Verständnis. Was macht eine gute Spezifikation aus? Sie beschreibt die zugrundeliegenden Regeln durch Abstraktion. Geht beides zusammen? Es gibt kein Entweder-oder; beide Teile sind wichtig. Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 21. Das war’s! Wirklich! Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?
  • 22. Vielen Dank! Code & Folien auf GitHub: https://github.com/marcphilipp/xpdays2010/ Nicole Marc E-Mail nicole@andrena.de E-Mail marc@andrena.de Twitter @NicoleRauch Twitter @marcphilipp Nicole Rauch, Marc Philipp Unit Tests als Spezifikation?