SlideShare a Scribd company logo
1 of 38
Download to read offline
© Automated Software Testing GmbH www.devmate.software
Daniel Lehner
Researcher
- 1 -
© Automated Software Testing GmbH www.devmate.software
Inhalt
▪ Wo liegen die Pain Points im Unit Testing?
▪ Wie können wir diese reduzieren?
▪ Wie können wir diese NICHT reduzieren?
- 2 -
© Automated Software Testing GmbH www.devmate.software
Wie entstehen Unit Tests?
- 3 -
Next-Generation Unit Testing
Code
Unit-Test
Code
Anforderungen
Test-Erstellung
Test-Erstellung
Code-Erstellung
© Automated Software Testing GmbH www.devmate.software
Unit Test Erstellung
▪ Welche Tests sollten erstellt werden,
um dies funktional voll zu testen?
▪ Jede (Einzel-)Bedingung muss für sich
getestet werden (4 Normal-Testfälle)
▪ Grenzwerte (oben/unten) der beiden
Bedingungen (weitere 4 Testfälle)
▪ Fehlertests außerhalb der Grenzen oben
und unten sowie innerhalb der Grenzen
mit Fehlerwerten (weitere 6 Testfälle)
→ mind. 14 Unit-Tests erforderlich für gute funktionale Testabdeckung!
- 4 -
Next-Generation Unit Testing
A > 10
& B < 5
T1 T2 T3 T4
A > 10 1 1 0 0
B < 5 1 0 1 0
© Automated Software Testing GmbH www.devmate.software
Manueller
Aufwand
Pain Point Test-Erstellung
- 5 -
Next-Generation Unit Testing
Code
Unit-Test
Code
Anforderungen
Test-Erstellung
Test-Erstellung
Code-Erstellung
Manueller
Aufwand
© Automated Software Testing GmbH www.devmate.software
Was ist eigentlich ein Unit Test?
Input
{a=1, b=1}
{a=100, b=1}
{a=1, b=100}
…
Output
0.0
0.5
10.3
…
double doSomething(int a, int b)
Welche Inputs sind noch nötig? Welcher Output soll für geg.
Input erwartet werden?
© Automated Software Testing GmbH www.devmate.software
Automatisierte Input-Generierung
▪ Zufällige Wahl von Inputs auf Basis der Datentypen
▪ Funktioniert gut für Booleans
▪ Große Menge an Inputs für Zahlen und Texte
▪ Unmöglich für Fließzahlen
▪ Inputs auf Basis von Code(-Verzweigungen)
Pain Point Test-Erstellung
© Automated Software Testing GmbH www.devmate.software
Ein Beispiel
Pain Point Test-Erstellung
Unit under test contains many bugs:
no input checks, division by 0, …
/**
* Calculates the average speed.
*/
public static double getAvgSpeed(LocalDateTime start, LocalDateTime end, double distance) {
Duration duration = Duration.between(start, end);
double hours = duration.getSeconds() / 60 / 60;
return distance / hours;
}
© Automated Software Testing GmbH www.devmate.software
KI-basierte Erstellung in der Praxis
Pain Point Test-Erstellung
AI erstellt nur 1 Testfall, der
überhaupt keinen Fehler findet
aber 100% des Codes abdeckt
Die erstellten Testdaten haben überhaupt keine
fachliche Relevanz, sondern verwirren den Leser eher
(Warum wurden genau dieser Wert gewählt?)
© Automated Software Testing GmbH www.devmate.software
Conclusio
▪ Test-Generierung erfordert Datenbasis
▪ Muss händisch definiert warden
▪ Tradeoff Aufwand VS Qualität
▪ Lösung: Low-Code Definition von Testfällen
Pain Point Test-Erstellung
© Automated Software Testing GmbH www.devmate.software
Low-Code Input-Definition
Pain Point Test-Erstellung
Source: https://www.automated-software-testing.com/
Händische Definition
sinnvoller Input-Daten
Äquivalenz
Klasse
© Automated Software Testing GmbH www.devmate.software
Low-Code Input-Definition
Pain Point Test-Erstellung
Source: https://www.automated-software-testing.com/
Tool combines equivalence
classes and representatives to
test cases.
Parameter
Test
© Automated Software Testing GmbH www.devmate.software
Low-Code Input-Definition
Pain Point Test-Erstellung
Collapsed view
looks like test table
in Excel.
© Automated Software Testing GmbH www.devmate.software
Vorschlag von Inputs
Low-Code Input-Definition
Source: https://www.devmate.software/
Equivlaence-Class & Data
Prediction Module
© Automated Software Testing GmbH www.devmate.software
Was ist eigentlich ein Unit Test?
Input
{a=1, b=1}
{a=100, b=1}
{a=1, b=100}
…
Output
0.0
0.5
10.3
…
double doSomething(int a, int b)
Welche Inputs sind noch nötig? Welcher Output soll für geg.
Input erwartet werden?
Lösung:
Low-Code
© Automated Software Testing GmbH www.devmate.software
KI-Basierte Output-Generierung
▪ How it works
▪ Systeme lernen anhand vorgegebener Tests
▪ Wissen wird für Generieung der Tests verwendet
▪ Beispiel Neuronale Netze
▪ Neuronales Netz auf Basis bekannter Input->Output-Kombinationen
▪ Neue Inputs -> Vorhersage von entsprechendem Output
▪ Input = Methoden-Input
▪ Output = Methoden-Output
Pain Point Test-Erstellung
© Automated Software Testing GmbH www.devmate.software
Beispiel „Lernen von Test-Outputs“
Neuronales Netz für testSomething(a, b)
Wie groß ist hier der Mehrwert auf Methoden-Ebene?
Woher kommen die Test-Daten?
Garbage In -> Garbage Out
Kann man Methoden-übergreifend verallgemeinern?
Input
{a=1, b=1}
{a=100, b=1}
{a=1, b=100}
…
Output
0.0
0.5
10.3
…
New Input
{a=5, b=5}
Calculated
Output
0.3
© Automated Software Testing GmbH www.devmate.software
Conclusio
▪ Lernbasierte Methoden liefern wenig sinnvolle Ergebnisse
▪ Output muss selbst definiert werden
▪ Reduktion des Aufwands durch Low-Code Tooling
Pain Point Test-Erstellung
© Automated Software Testing GmbH www.devmate.software
Low-Code Output-Definition
Pain Point Test-Erstellung
Source: https://www.automated-software-testing.com/
Developer defines “Test Oracle”
(expected Values):
- Values
- Exceptions
- Expected Side-Effects
© Automated Software Testing GmbH www.devmate.software
Generierter Test-Code
Pain Point Test-Erstellung
Source: https://www.automated-software-testing.com/
Tool generates readable and
maintainable unit test code.
Test data set for
positive tests
Test data set for
negative tests
Parameterized test
© Automated Software Testing GmbH www.devmate.software
Manueller
Aufwand
Lösung Test-Erstellung
- 21 -
Next-Generation Unit Testing
Code
Unit-Test
Code
Anforderungen
Low-Code
Automatisierung
© Automated Software Testing GmbH www.devmate.software
Validierung von Unit Tests
- 22 -
Code
Unit-Test
Code
Anforderungen
Validierung
© Automated Software Testing GmbH www.devmate.software
Unit Test Ausführung
▪ Viele Testfälle nötig, um sinnvolle Abdeckung von Anforderungen zu erreichen
▪ Rechenbeispiel
▪ Ausführung 1.000 TF, 1 TF = 3 s, 3 commits/tag
▪ Kosten: >5 Stunden = 5.500 € pro Monat
▪ In der Praxis durchaus mehr
▪ #Commits bei agiler Software Entwicklung
▪ Ausführungszeit bei Frontend- oder Hardware-Tests
- 23 -
Test-Validierung
© Automated Software Testing GmbH www.devmate.software
Pain Point Validierung
- 24 -
Code
Unit-Test
Code
Anforderungen
Validierung
Lange
Ausführungszeit
© Automated Software Testing GmbH www.devmate.software
Reduktion und Priorisierung von Testfällen
▪ Erster Ansatz
▪ Ermittlung aller Kombinationen von Testfällen
▪ Berechnung von Ausführungszeit + Coverage pro Kombination
▪ Test-Set mit maximaler Coverage bei minimaler Ausführungszeit
Ausgeführte Testfälle Ausführungszeit Coverage
TF 1 10 s 20 %
TF 2 15 s 20 %
TF 3 5 s 20 %
TF 1 + TF 2 22 s 40 %
TF 1 + TF 3 12 s 20 %
TF 2 + TF 3 17 s 40 %
TF 1 + TF 2 + TF 3 27 s 45 %
Problem 1:
Was ist die beste
Kombination?
Problem 2:
#Kombinationen
© Automated Software Testing GmbH www.devmate.software
Reduktion und Priorisierung von Testfällen
▪ Lösung: Meta-Heuristische Sucherverfahren
(z.B. Genetischer Algorithmus)
▪ Intelligente Kombination von Möglichkeiten
▪ Einführung von Zufall zum Finden globaler Maxima
▪ Mehrere Iterationen
▪ Ausgabe bestes Ergebnis pro Iteration auf Basis vorgegebener
Optimierungskriterien
© Automated Software Testing GmbH www.devmate.software
Beispiel Reduktion/Priorisierung Test-Set
Urspr. Kombinationen
1, 0, 0, 0, 0
0, 1, 0, 0, 0
0, 0, 0, 1, 1
1, 1, 0, 0, 0
0, 1, 0, 1, 1
0, 0, 0, 1, 1
1, 1, 0, 1, 1
0, 1, 0, 1, 1
1, 0, 0, 1, 1
1. Iteration 2. Iteration
5 Testfälle. [1, 0, 0, 0, 0] => nur der erste Testfall wird ausgeführt
© Automated Software Testing GmbH www.devmate.software
Erste Ergebnisse
▪ Testfälle können reduziert werden, bei gleichbleibender Code
Coverage, aber reduzierter Mutation Coverage
▪ Ergebnisse variieren stark pro Package
▪ Abhängig von der Code-Komplexität
▪ Optimierung von Mutation Score aktuell nicht möglich
▪ Keine Test-Basierte Auswertung von Mutation Tools (open-source)
Metrik Initiales
Set
Reduziertes
Set
Unterschied
# Testfälle 246 178 - 28 %
Coverage 57 % 57 % 0 %
Mutation Score - 1 %
© Automated Software Testing GmbH www.devmate.software
Lösung Validierung
- 29 -
Code
Unit-Test
Code
Anforderungen
Genetische
Algorithmen
Validierung
© Automated Software Testing GmbH www.devmate.software
Wie gut sind meine Unit Tests?
- 30 -
Code
Unit-Test
Code
Anforderungen
Abdeckung
© Automated Software Testing GmbH www.devmate.software
Das Problem mit Code Coverage
▪ Welche Unit-Tests werden typischerweise erstellt?
▪ Unit-Test, der einmal links geht und
▪ Unit-Test, der einmal rechts geht
→ 100% Code-Abdeckung ist mit 2 Tests erreicht
und im CI-System ist alles „grün“
▪ Recap: mind. 14 Unit-Tests für gute funktionale Testabdeckung!
▪ Was tun bei Fehlern im Code?
▪ Ist das nicht der Grund, warum wir Tests erstellen?
- 31 -
A > 10
& B < 5
© Automated Software Testing GmbH www.devmate.software
Mutation Scores als Lösung?
▪ Mutation Score
▪ Einfügen von Fehlern in bestehenden Testcode
▪ Wird Fehler von Test Suite erkannt?
▪ % gefundener Fehler = Mutation Score
▪ Aber: Einfügen von Mutanten dauert sehr lange
▪ Gesamte Test Suite muss für jeden Mutanten neu ausgeführt werden
▪ Conclusion
▪ Code Coverage schnell, aber ungenau
▪ Mutation Score genauer, aber langsam
- 32 -
© Automated Software Testing GmbH www.devmate.software
Pain Point Test-Abdeckung
- 33 -
Code
Unit-Test
Code
Anforderungen
Abdeckung
Genauigkeit VS
Zeit
© Automated Software Testing GmbH www.devmate.software
„Billiger“ Nachbau von Mutation Score
▪ Verschiedene Metriken
▪ Jede einzelne Metrik „schlechte“ Repräsentation
▪ Aber was, wenn wir die Metriken kombinieren?
▪ Neuronales Netz zur Errechnung eines kombinierten Metrik-Wertes
▪ Korreliert zu 99 % mit Mutation Score
- 34 -
0
10
20
30
40
50
60
Coverage Metrics Mutation Testing Test Smells
© Automated Software Testing GmbH www.devmate.software
Lösung Test-Abdeckung
- 35 -
Code
Unit-Test
Code
Anforderungen
Abdeckung
Maschinelles Lernen
(Neuronale Netze)
© Automated Software Testing GmbH www.devmate.software
Genauigkeit VS
Zeit
Lange
Ausführungszeit
Manueller
Aufwand
Manueller
Aufwand
Takeaway
- 36 -
Code
Unit-Test
Code
Anforderungen
Abdeckung
Maschinelles Lernen
(Neuronale Netze)
Genetische
Algorithmen
Validierung
Low-Code
Automatisierung
Low-Code
Automatisierung
Test-Erstellung
Test-Erstellung
Code-Erstellung
© Automated Software Testing GmbH www.devmate.software
▪ Kontaktieren Sie uns
▪ JKU: daniel.lehner@jku.at
▪ Devmate: johannes.bergsmann@automated-software-testing.com
▪ Lesen Sie unseren Blog
▪ devmate.software/blog
▪ Weiteres Forschungsprojekt
▪ 3-Jähriges Projekt, 32 Partner aus 7 Ländern
▪ Verbindung KI, Digitale Zwillinge, und Software Testing
Interessiert?
- 37 -
© Automated Software Testing GmbH www.devmate.software
Fragen / Diskussion
- 38 -
Daniel Lehner
daniel.lehner@jku.at
http://derlehner.at/

More Related Content

Similar to Die nächste Generation des Unit Testing

Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
Christian Baranowski
 
Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013
Nico Orschel
 
Automatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumAutomatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit Selenium
Benjamin Schmid
 
96% macoun 2013
96% macoun 201396% macoun 2013
96% macoun 2013
Maxim Zaks
 

Similar to Die nächste Generation des Unit Testing (20)

Testgetriebene Softwareentwicklung
Testgetriebene SoftwareentwicklungTestgetriebene Softwareentwicklung
Testgetriebene Softwareentwicklung
 
eCATT & OpenSource - Automatisierter Test in heterogenen Systemlandschaften
eCATT & OpenSource - Automatisierter Test in heterogenen SystemlandschafteneCATT & OpenSource - Automatisierter Test in heterogenen Systemlandschaften
eCATT & OpenSource - Automatisierter Test in heterogenen Systemlandschaften
 
TDD mit ABAP Units
TDD mit ABAP UnitsTDD mit ABAP Units
TDD mit ABAP Units
 
Funktionstests in SAP
Funktionstests in SAPFunktionstests in SAP
Funktionstests in SAP
 
UnitTests? Ja, aber richtig!
UnitTests? Ja, aber richtig!UnitTests? Ja, aber richtig!
UnitTests? Ja, aber richtig!
 
Intersys - Integration mit Spirateam (Zurich 2017)
Intersys - Integration mit Spirateam (Zurich 2017)Intersys - Integration mit Spirateam (Zurich 2017)
Intersys - Integration mit Spirateam (Zurich 2017)
 
PHPUnit - Eine kurze Einführung
PHPUnit - Eine kurze EinführungPHPUnit - Eine kurze Einführung
PHPUnit - Eine kurze Einführung
 
Unit testing mit Javascript
Unit testing mit JavascriptUnit testing mit Javascript
Unit testing mit Javascript
 
Behaviour-Driven Development
Behaviour-Driven DevelopmentBehaviour-Driven Development
Behaviour-Driven Development
 
Testen mit, durch und in Scrum
Testen mit, durch und in ScrumTesten mit, durch und in Scrum
Testen mit, durch und in Scrum
 
Erfolgsfaktoren für modellbasiertes Testen
Erfolgsfaktoren für modellbasiertes TestenErfolgsfaktoren für modellbasiertes Testen
Erfolgsfaktoren für modellbasiertes Testen
 
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
Dev Day 2019: Kay Grebenstein – Wie wir müssen das noch testen? - design for ...
 
Magento 2 Zertifizierung - Wissenswertes und ein paar Tipps
Magento 2 Zertifizierung - Wissenswertes und ein paar TippsMagento 2 Zertifizierung - Wissenswertes und ein paar Tipps
Magento 2 Zertifizierung - Wissenswertes und ein paar Tipps
 
UI Testautomation in der Praxis: Von Lokalisierung bis Nachhaltigkeit
UI Testautomation in der Praxis: Von Lokalisierung bis NachhaltigkeitUI Testautomation in der Praxis: Von Lokalisierung bis Nachhaltigkeit
UI Testautomation in der Praxis: Von Lokalisierung bis Nachhaltigkeit
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
 
Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013Testmanagement mit Visual Studio 2013
Testmanagement mit Visual Studio 2013
 
Referat: Scrum Rocks – Testing Sucks?! (reloaded)
Referat: Scrum Rocks – Testing Sucks?! (reloaded)Referat: Scrum Rocks – Testing Sucks?! (reloaded)
Referat: Scrum Rocks – Testing Sucks?! (reloaded)
 
Automatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumAutomatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit Selenium
 
96% macoun 2013
96% macoun 201396% macoun 2013
96% macoun 2013
 
Windows as a Service - Herausforderungen ohne Windows Desktop Analytics
Windows as a Service - Herausforderungen ohne Windows Desktop AnalyticsWindows as a Service - Herausforderungen ohne Windows Desktop Analytics
Windows as a Service - Herausforderungen ohne Windows Desktop Analytics
 

More from Daniel Lehner

More from Daniel Lehner (15)

Digitale Zwillinge - Potenziale und Geschäftsmodelle
Digitale Zwillinge - Potenziale und GeschäftsmodelleDigitale Zwillinge - Potenziale und Geschäftsmodelle
Digitale Zwillinge - Potenziale und Geschäftsmodelle
 
Schritt für Schritt zum digitalen Zwilling
Schritt für Schritt zum digitalen ZwillingSchritt für Schritt zum digitalen Zwilling
Schritt für Schritt zum digitalen Zwilling
 
What's a Digital Twin - and why you need a better one?
What's a Digital Twin - and why you need a better one?What's a Digital Twin - and why you need a better one?
What's a Digital Twin - and why you need a better one?
 
A Model-Driven Platform for Engineering Holistic Digital Twins
A Model-Driven Platform for Engineering Holistic Digital TwinsA Model-Driven Platform for Engineering Holistic Digital Twins
A Model-Driven Platform for Engineering Holistic Digital Twins
 
Git-basiertes Qualitätsmonitoring von Systems Engineering Modellen
Git-basiertes Qualitätsmonitoring von Systems Engineering ModellenGit-basiertes Qualitätsmonitoring von Systems Engineering Modellen
Git-basiertes Qualitätsmonitoring von Systems Engineering Modellen
 
Towards Reactive Planning With Digital Twins and Model-Driven Optimization
Towards Reactive Planning With Digital Twins and Model-Driven OptimizationTowards Reactive Planning With Digital Twins and Model-Driven Optimization
Towards Reactive Planning With Digital Twins and Model-Driven Optimization
 
Git-based Model Management
Git-based Model ManagementGit-based Model Management
Git-based Model Management
 
How to Engineer Digital Twins
How to Engineer Digital TwinsHow to Engineer Digital Twins
How to Engineer Digital Twins
 
Modeling Capabilities of Digital Twin Platforms: Old Wine in New Bottles?
Modeling Capabilities of Digital Twin Platforms: Old Wine in New Bottles?Modeling Capabilities of Digital Twin Platforms: Old Wine in New Bottles?
Modeling Capabilities of Digital Twin Platforms: Old Wine in New Bottles?
 
Sustainable Development and Management of Systems Engineering Models
Sustainable Development and Management of Systems Engineering ModelsSustainable Development and Management of Systems Engineering Models
Sustainable Development and Management of Systems Engineering Models
 
2021_moddit_presentation_final.pdf
2021_moddit_presentation_final.pdf2021_moddit_presentation_final.pdf
2021_moddit_presentation_final.pdf
 
Towards a Flexible Evolution of Digital Twins with Fluent APIs
Towards a Flexible Evolution of Digital Twins with Fluent APIsTowards a Flexible Evolution of Digital Twins with Fluent APIs
Towards a Flexible Evolution of Digital Twins with Fluent APIs
 
AML4DT: A Model-Driven Framework for Developing and Maintaining Digital Twin...
AML4DT: A Model-Driven Framework for Developing  and Maintaining Digital Twin...AML4DT: A Model-Driven Framework for Developing  and Maintaining Digital Twin...
AML4DT: A Model-Driven Framework for Developing and Maintaining Digital Twin...
 
Model-based Detection of Runtime Inconsistencies
Model-based Detection of Runtime InconsistenciesModel-based Detection of Runtime Inconsistencies
Model-based Detection of Runtime Inconsistencies
 
A Reference Architecture for Leveraging Model Repositories for Digital Twins
A Reference Architecture for Leveraging Model Repositories for Digital TwinsA Reference Architecture for Leveraging Model Repositories for Digital Twins
A Reference Architecture for Leveraging Model Repositories for Digital Twins
 

Die nächste Generation des Unit Testing

  • 1. © Automated Software Testing GmbH www.devmate.software Daniel Lehner Researcher - 1 -
  • 2. © Automated Software Testing GmbH www.devmate.software Inhalt ▪ Wo liegen die Pain Points im Unit Testing? ▪ Wie können wir diese reduzieren? ▪ Wie können wir diese NICHT reduzieren? - 2 -
  • 3. © Automated Software Testing GmbH www.devmate.software Wie entstehen Unit Tests? - 3 - Next-Generation Unit Testing Code Unit-Test Code Anforderungen Test-Erstellung Test-Erstellung Code-Erstellung
  • 4. © Automated Software Testing GmbH www.devmate.software Unit Test Erstellung ▪ Welche Tests sollten erstellt werden, um dies funktional voll zu testen? ▪ Jede (Einzel-)Bedingung muss für sich getestet werden (4 Normal-Testfälle) ▪ Grenzwerte (oben/unten) der beiden Bedingungen (weitere 4 Testfälle) ▪ Fehlertests außerhalb der Grenzen oben und unten sowie innerhalb der Grenzen mit Fehlerwerten (weitere 6 Testfälle) → mind. 14 Unit-Tests erforderlich für gute funktionale Testabdeckung! - 4 - Next-Generation Unit Testing A > 10 & B < 5 T1 T2 T3 T4 A > 10 1 1 0 0 B < 5 1 0 1 0
  • 5. © Automated Software Testing GmbH www.devmate.software Manueller Aufwand Pain Point Test-Erstellung - 5 - Next-Generation Unit Testing Code Unit-Test Code Anforderungen Test-Erstellung Test-Erstellung Code-Erstellung Manueller Aufwand
  • 6. © Automated Software Testing GmbH www.devmate.software Was ist eigentlich ein Unit Test? Input {a=1, b=1} {a=100, b=1} {a=1, b=100} … Output 0.0 0.5 10.3 … double doSomething(int a, int b) Welche Inputs sind noch nötig? Welcher Output soll für geg. Input erwartet werden?
  • 7. © Automated Software Testing GmbH www.devmate.software Automatisierte Input-Generierung ▪ Zufällige Wahl von Inputs auf Basis der Datentypen ▪ Funktioniert gut für Booleans ▪ Große Menge an Inputs für Zahlen und Texte ▪ Unmöglich für Fließzahlen ▪ Inputs auf Basis von Code(-Verzweigungen) Pain Point Test-Erstellung
  • 8. © Automated Software Testing GmbH www.devmate.software Ein Beispiel Pain Point Test-Erstellung Unit under test contains many bugs: no input checks, division by 0, … /** * Calculates the average speed. */ public static double getAvgSpeed(LocalDateTime start, LocalDateTime end, double distance) { Duration duration = Duration.between(start, end); double hours = duration.getSeconds() / 60 / 60; return distance / hours; }
  • 9. © Automated Software Testing GmbH www.devmate.software KI-basierte Erstellung in der Praxis Pain Point Test-Erstellung AI erstellt nur 1 Testfall, der überhaupt keinen Fehler findet aber 100% des Codes abdeckt Die erstellten Testdaten haben überhaupt keine fachliche Relevanz, sondern verwirren den Leser eher (Warum wurden genau dieser Wert gewählt?)
  • 10. © Automated Software Testing GmbH www.devmate.software Conclusio ▪ Test-Generierung erfordert Datenbasis ▪ Muss händisch definiert warden ▪ Tradeoff Aufwand VS Qualität ▪ Lösung: Low-Code Definition von Testfällen Pain Point Test-Erstellung
  • 11. © Automated Software Testing GmbH www.devmate.software Low-Code Input-Definition Pain Point Test-Erstellung Source: https://www.automated-software-testing.com/ Händische Definition sinnvoller Input-Daten Äquivalenz Klasse
  • 12. © Automated Software Testing GmbH www.devmate.software Low-Code Input-Definition Pain Point Test-Erstellung Source: https://www.automated-software-testing.com/ Tool combines equivalence classes and representatives to test cases. Parameter Test
  • 13. © Automated Software Testing GmbH www.devmate.software Low-Code Input-Definition Pain Point Test-Erstellung Collapsed view looks like test table in Excel.
  • 14. © Automated Software Testing GmbH www.devmate.software Vorschlag von Inputs Low-Code Input-Definition Source: https://www.devmate.software/ Equivlaence-Class & Data Prediction Module
  • 15. © Automated Software Testing GmbH www.devmate.software Was ist eigentlich ein Unit Test? Input {a=1, b=1} {a=100, b=1} {a=1, b=100} … Output 0.0 0.5 10.3 … double doSomething(int a, int b) Welche Inputs sind noch nötig? Welcher Output soll für geg. Input erwartet werden? Lösung: Low-Code
  • 16. © Automated Software Testing GmbH www.devmate.software KI-Basierte Output-Generierung ▪ How it works ▪ Systeme lernen anhand vorgegebener Tests ▪ Wissen wird für Generieung der Tests verwendet ▪ Beispiel Neuronale Netze ▪ Neuronales Netz auf Basis bekannter Input->Output-Kombinationen ▪ Neue Inputs -> Vorhersage von entsprechendem Output ▪ Input = Methoden-Input ▪ Output = Methoden-Output Pain Point Test-Erstellung
  • 17. © Automated Software Testing GmbH www.devmate.software Beispiel „Lernen von Test-Outputs“ Neuronales Netz für testSomething(a, b) Wie groß ist hier der Mehrwert auf Methoden-Ebene? Woher kommen die Test-Daten? Garbage In -> Garbage Out Kann man Methoden-übergreifend verallgemeinern? Input {a=1, b=1} {a=100, b=1} {a=1, b=100} … Output 0.0 0.5 10.3 … New Input {a=5, b=5} Calculated Output 0.3
  • 18. © Automated Software Testing GmbH www.devmate.software Conclusio ▪ Lernbasierte Methoden liefern wenig sinnvolle Ergebnisse ▪ Output muss selbst definiert werden ▪ Reduktion des Aufwands durch Low-Code Tooling Pain Point Test-Erstellung
  • 19. © Automated Software Testing GmbH www.devmate.software Low-Code Output-Definition Pain Point Test-Erstellung Source: https://www.automated-software-testing.com/ Developer defines “Test Oracle” (expected Values): - Values - Exceptions - Expected Side-Effects
  • 20. © Automated Software Testing GmbH www.devmate.software Generierter Test-Code Pain Point Test-Erstellung Source: https://www.automated-software-testing.com/ Tool generates readable and maintainable unit test code. Test data set for positive tests Test data set for negative tests Parameterized test
  • 21. © Automated Software Testing GmbH www.devmate.software Manueller Aufwand Lösung Test-Erstellung - 21 - Next-Generation Unit Testing Code Unit-Test Code Anforderungen Low-Code Automatisierung
  • 22. © Automated Software Testing GmbH www.devmate.software Validierung von Unit Tests - 22 - Code Unit-Test Code Anforderungen Validierung
  • 23. © Automated Software Testing GmbH www.devmate.software Unit Test Ausführung ▪ Viele Testfälle nötig, um sinnvolle Abdeckung von Anforderungen zu erreichen ▪ Rechenbeispiel ▪ Ausführung 1.000 TF, 1 TF = 3 s, 3 commits/tag ▪ Kosten: >5 Stunden = 5.500 € pro Monat ▪ In der Praxis durchaus mehr ▪ #Commits bei agiler Software Entwicklung ▪ Ausführungszeit bei Frontend- oder Hardware-Tests - 23 - Test-Validierung
  • 24. © Automated Software Testing GmbH www.devmate.software Pain Point Validierung - 24 - Code Unit-Test Code Anforderungen Validierung Lange Ausführungszeit
  • 25. © Automated Software Testing GmbH www.devmate.software Reduktion und Priorisierung von Testfällen ▪ Erster Ansatz ▪ Ermittlung aller Kombinationen von Testfällen ▪ Berechnung von Ausführungszeit + Coverage pro Kombination ▪ Test-Set mit maximaler Coverage bei minimaler Ausführungszeit Ausgeführte Testfälle Ausführungszeit Coverage TF 1 10 s 20 % TF 2 15 s 20 % TF 3 5 s 20 % TF 1 + TF 2 22 s 40 % TF 1 + TF 3 12 s 20 % TF 2 + TF 3 17 s 40 % TF 1 + TF 2 + TF 3 27 s 45 % Problem 1: Was ist die beste Kombination? Problem 2: #Kombinationen
  • 26. © Automated Software Testing GmbH www.devmate.software Reduktion und Priorisierung von Testfällen ▪ Lösung: Meta-Heuristische Sucherverfahren (z.B. Genetischer Algorithmus) ▪ Intelligente Kombination von Möglichkeiten ▪ Einführung von Zufall zum Finden globaler Maxima ▪ Mehrere Iterationen ▪ Ausgabe bestes Ergebnis pro Iteration auf Basis vorgegebener Optimierungskriterien
  • 27. © Automated Software Testing GmbH www.devmate.software Beispiel Reduktion/Priorisierung Test-Set Urspr. Kombinationen 1, 0, 0, 0, 0 0, 1, 0, 0, 0 0, 0, 0, 1, 1 1, 1, 0, 0, 0 0, 1, 0, 1, 1 0, 0, 0, 1, 1 1, 1, 0, 1, 1 0, 1, 0, 1, 1 1, 0, 0, 1, 1 1. Iteration 2. Iteration 5 Testfälle. [1, 0, 0, 0, 0] => nur der erste Testfall wird ausgeführt
  • 28. © Automated Software Testing GmbH www.devmate.software Erste Ergebnisse ▪ Testfälle können reduziert werden, bei gleichbleibender Code Coverage, aber reduzierter Mutation Coverage ▪ Ergebnisse variieren stark pro Package ▪ Abhängig von der Code-Komplexität ▪ Optimierung von Mutation Score aktuell nicht möglich ▪ Keine Test-Basierte Auswertung von Mutation Tools (open-source) Metrik Initiales Set Reduziertes Set Unterschied # Testfälle 246 178 - 28 % Coverage 57 % 57 % 0 % Mutation Score - 1 %
  • 29. © Automated Software Testing GmbH www.devmate.software Lösung Validierung - 29 - Code Unit-Test Code Anforderungen Genetische Algorithmen Validierung
  • 30. © Automated Software Testing GmbH www.devmate.software Wie gut sind meine Unit Tests? - 30 - Code Unit-Test Code Anforderungen Abdeckung
  • 31. © Automated Software Testing GmbH www.devmate.software Das Problem mit Code Coverage ▪ Welche Unit-Tests werden typischerweise erstellt? ▪ Unit-Test, der einmal links geht und ▪ Unit-Test, der einmal rechts geht → 100% Code-Abdeckung ist mit 2 Tests erreicht und im CI-System ist alles „grün“ ▪ Recap: mind. 14 Unit-Tests für gute funktionale Testabdeckung! ▪ Was tun bei Fehlern im Code? ▪ Ist das nicht der Grund, warum wir Tests erstellen? - 31 - A > 10 & B < 5
  • 32. © Automated Software Testing GmbH www.devmate.software Mutation Scores als Lösung? ▪ Mutation Score ▪ Einfügen von Fehlern in bestehenden Testcode ▪ Wird Fehler von Test Suite erkannt? ▪ % gefundener Fehler = Mutation Score ▪ Aber: Einfügen von Mutanten dauert sehr lange ▪ Gesamte Test Suite muss für jeden Mutanten neu ausgeführt werden ▪ Conclusion ▪ Code Coverage schnell, aber ungenau ▪ Mutation Score genauer, aber langsam - 32 -
  • 33. © Automated Software Testing GmbH www.devmate.software Pain Point Test-Abdeckung - 33 - Code Unit-Test Code Anforderungen Abdeckung Genauigkeit VS Zeit
  • 34. © Automated Software Testing GmbH www.devmate.software „Billiger“ Nachbau von Mutation Score ▪ Verschiedene Metriken ▪ Jede einzelne Metrik „schlechte“ Repräsentation ▪ Aber was, wenn wir die Metriken kombinieren? ▪ Neuronales Netz zur Errechnung eines kombinierten Metrik-Wertes ▪ Korreliert zu 99 % mit Mutation Score - 34 - 0 10 20 30 40 50 60 Coverage Metrics Mutation Testing Test Smells
  • 35. © Automated Software Testing GmbH www.devmate.software Lösung Test-Abdeckung - 35 - Code Unit-Test Code Anforderungen Abdeckung Maschinelles Lernen (Neuronale Netze)
  • 36. © Automated Software Testing GmbH www.devmate.software Genauigkeit VS Zeit Lange Ausführungszeit Manueller Aufwand Manueller Aufwand Takeaway - 36 - Code Unit-Test Code Anforderungen Abdeckung Maschinelles Lernen (Neuronale Netze) Genetische Algorithmen Validierung Low-Code Automatisierung Low-Code Automatisierung Test-Erstellung Test-Erstellung Code-Erstellung
  • 37. © Automated Software Testing GmbH www.devmate.software ▪ Kontaktieren Sie uns ▪ JKU: daniel.lehner@jku.at ▪ Devmate: johannes.bergsmann@automated-software-testing.com ▪ Lesen Sie unseren Blog ▪ devmate.software/blog ▪ Weiteres Forschungsprojekt ▪ 3-Jähriges Projekt, 32 Partner aus 7 Ländern ▪ Verbindung KI, Digitale Zwillinge, und Software Testing Interessiert? - 37 -
  • 38. © Automated Software Testing GmbH www.devmate.software Fragen / Diskussion - 38 - Daniel Lehner daniel.lehner@jku.at http://derlehner.at/