Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Property-based testing

Property-based testing

Introduction to property-based testing in german.

Frank S. Thomas

October 10, 2014
Tweet

More Decks by Frank S. Thomas

Other Decks in Programming

Transcript

  1. TESTEN MIT BEISPIELEN Vergleich von Eingaben mit erwarteten Ausgaben a

    s s e r t ( " H a l l o W e l t " . s p l i t ( " " ) = = A r r a y ( " H a l l o " , " W e l t " ) )
  2. TESTEN MIT BEISPIELEN: VORTEILE einfach zu schreiben und zu lesen

    einfach zu erweitern Dokumentation für andere Entwickler
  3. BEISPIEL Beim Zusammenfügen von zwei Listen ist die Länge der

    neuen Liste die Summe der Längen der Ausgangslisten f o r a l l l 1 , l 2 : l 1 . a p p e n d ( l 2 ) . l e n g t h = = l 1 . l e n g t h + l 2 . l e n g t h
  4. WAS IST PROPERTY-BASED TESTING? Entwickler schreibt Property Test-Framework generiert viele

    zufällige Testdaten ... und validiert Property mit diesen Testdaten l 1 = [ ] , l 2 = [ ] : l 1 . a p p e n d ( l 2 ) . l e n g t h = = l 1 . l e n g t h + l 2 . l e n g t h - > t r u e l 1 = [ 0 ] , l 2 = [ ] : l 1 . a p p e n d ( l 2 ) . l e n g t h = = l 1 . l e n g t h + l 2 . l e n g t h - > t r u e l 1 = [ ] , l 2 = [ 1 ] : l 1 . a p p e n d ( l 2 ) . l e n g t h = = l 1 . l e n g t h + l 2 . l e n g t h - > t r u e l 1 = [ 1 , 2 ] , l 2 = [ ] : l 1 . a p p e n d ( l 2 ) . l e n g t h = = l 1 . l e n g t h + l 2 . l e n g t h - > t r u e . . .
  5. UNVOLLSTÄNDIGE PROPERTIES mit einfachen Fakten beginnen Properties legen einen Rahmen

    um die Implementierung vollständige Spezifikation kann Code Duplizierung bedeuten
  6. RELATIONALE PROPERTIES f o r A l l { (

    x : T , y : T ) = > ( x . c o m p a r e T o ( y ) = = 0 ) = = x . e q u a l s ( y ) }
  7. REFERENZIMPLEMENTIERUNG Methoden einer neuen Klasse M y M a p

    sollen sich verhalten wie die Methoden von H a s h M a p f o r A l l { ( h : H a s h M a p ) = > v a l m = M y M a p . f r o m H a s h M a p ( h ) m . f o o ( ) = = h . f o o ( ) }
  8. ROUND-TRIP PROPERTIES Wenn Umkehrfunktion vorhanden: x = = g (

    f ( x ) ) f o r A l l { ( s : S t r i n g ) = > s = = u t f 8 D e c o d e ( u t f 8 E n c o d e ( s ) ) }
  9. TESTEN MIT PROPERTIES Spezifikation von Eigenschaften, die für alle Eingaben

    zutreffen Trennung der Tests und Generierung der Testdaten (teilweise) schwierig zu schreiben Randfälle müssen nicht extra betrachtet werden ein Property deckt eine Vielzahl von Beispielen ab => größere Testabdeckung durch weniger Code