SlideShare a Scribd company logo
1 of 16
Download to read offline
TDD vs. TDD+M
Test Driven Development kontra Test Driven Development + Mutacje
Michał Mnich & Piotr Wawrzyniak
16-17.11.2017
PLAN PREZENTACJI
1. T.D.D. - Test Driven Development, definicje.
2. T.D.D. - Test Driven Development, wady i zalety.
3. T.D.D. - Test Driven Development + Mutacje, definicje, zalety oraz wady.
4. T.D.D. + M - Eksperyment testujący metodykę.
5. T.D.D. + M - Eksperyment Wyniki.
6. T.D.D. + M - Eksperyment omówienie wyników.
7. Podsumowanie.
8. Pytania.
T.D.D. - Test Driven Development
T.D.D. - Diagram Weryfikacji Poprawności
Kod
Testy
Testy testów???
T.D.D. - Test Driven Development
T.D.D. - Test Driven Development + Mutacje
Run Mutations
T.D.D. + M Eksperyment
● Jeden projekt.
● Jeden Java Doc.
● Dwa zespoły.
● Jeden zespół pracuje w technice TDD.
● Drugi zespół pracuje w technice TDD+M.
● Na koniec naprzemienne testy weryfikacyjne*.
*(Kod zespołu w samym TDD poddajemy mutacji następnie sprawdzamy jak radzą sobie ich testy. Przenosimy testy na
krzyż z TDD do TDD+M i sprawdzamy czy przechodzą. Sami piszemy testy i sprawdzamy czy nasze będą lepsze).
T.D.D. + M Eksperyment Wyniki
TDD
Reales CodeCoverage % MutationCoverage % Tests Mutants Methods Info
1 0 0 0 4 6 Puste metody
2 79,31034483 39,13043478 2 23 8
3 79,48717949 82,69230769 5 52 10
4 79,48717949 82,69230769 5 52 10 Poprawki w projekcie nie w kodzie
5 89,74358974 82,69230769 7 52 10 Agregacja żywych mutantów od wersji 3
6 66,66666667 63,23529412 8 68 16
Nowa niedokończona klasa brak testów stara bez
zmian
7 41,86046512 41,34615385 8 104 16
Klasa Matrix bez zmian, Math bez testów nowe
implementacje metod
8 60,46511628 64,42307692 11 104 16
Nowy test testMatrixSubtracting ubijamy dodatkowe
2 mutanty w Matrix. 2 nowe testy w math ubijają 22
mutanty
CROS
TEESTY z
TDDM
86,76470588 75,96153846 16 104 16
W matrix zabija 48 mutantów o 3 więcej w math zabija
31 o 9 więcej mamy 1 test na metodę. Wymagane było
komentowanie 2 testów które nie przechodziły wcale
więcej info w doc.
T.D.D. + M Eksperyment Wyniki
TDDM
Reales CodeCoverage MutationCoverage Tests Mutants Methods Info
1 43,90243902 30,3030303 3 33 16 Matrix zaimplementowana częściowo math wcale
2 36,11111111 34,32835821 4 134 16
Math zaimplementowana ale bez testów matrix pokrycie wzrosło o
35% Pokrycie mutantów o 41%
3 39,81481481 38,05970149 6 134 16 Math bez testów rośnie pokrycie Matrix
4 39,81481481 39,55223881 6 134 16 Matrix 1 mutant ubity (poprawiony test) Math bez zmian
5 39,81481481 38,80597015 6 134 16
Matrix 1 mutant ubity (poprawiony test dążą do 100% w klasie
matrix) Math bez zmian
6 47,22222222 44,02985075 7 134 16
Klasa matrix nowy test pokryta testami 96% mutanty ubite 100%.
Jedyna niepokryta metoda robi set na ( data[row][column] = value)
komurce w tablicy double Math brak testow nadal
7 49,07407407 44,02985075 8 134 16
Klasa matrix pokrycie 100% Mutacyjne 100% nowy test dla tego
seta doubla. Klasa Math nie ruszona
8 93,51851852 87,31343284 12 134 16 Implementacja testów dla Math 4 nowe testy
9 81,4516129 73,58490566 12 134 16
Implementacja 2 metod w math matrixSubtracting,
matrixTransposition brak nowych testów brak testów do nowych
nowych mutantów Koniec projektu z względów na Deadline dlatego
spadł scro nie pełny cykl w trakcie Development.
T.D.D. + M Eksperyment Wyniki
TDDM
Reales CodeCoverage % MutationCoverage %
Test
s Mutants Methods Info
CROSS TESTY z
TDD
39,51612903 40,25157233 12 134 16 Score dużo gorszy
Testy Piotra W. 90,32258065 82,38993711 18 134 16
Wniosek nawet doświadczony programista
nie był w stanie zrobić 100%
T.D.D. + M Wnioski
1. Łatwość popełniania błędów numerycznych
a. Mutacje są dobrym narzędziem do weryfikacji poprawności numerycznej
algorytmu.
b. Nawet najbardziej doświadczony programista popełnia błędy
c. Pisanie testów jednostkowych dla numeryki jest trudne i mało efektywne
T.D.D. + M Wnioski
1. Narzędzie do testowania dokumentacji.
2. Narzędzie do testowania spójności idei.
3. Wychwytywanie słabości projektowych.
4. Testowanie przepływów algorytmów.
T.D.D. + M Wnioski
1. Ubijanie mutantów dla samego ubijanie mutantów jest złe:
Uczestnicy eksperymentu jako słabo doświadczeni programiści mieli tendencję
do ubijanie mutantów nie patrząc czy dany mutant jest sensowny. Czasem
dawało to odwrotny efekt od zamierzonego czasem naprawiano test tak żeby
przechodził mimo że błąd nie był w teście a w kodzie.
T.D.D. + M Wnioski
2. Code review powinno analizować mutacje pod względem
kodu programu jak i kodu testu.
T.D.D. + M Wnioski
3. Same mutacje są wstępem do review.
Q&A
Q&A

More Related Content

More from Stowarzyszenie Jakości Systemów Informatycznych (SJSI)

[TestWarez 2017] Przychodzi tester na rozmowę...
[TestWarez 2017] Przychodzi tester na rozmowę...[TestWarez 2017] Przychodzi tester na rozmowę...
[TestWarez 2017] Przychodzi tester na rozmowę...
Stowarzyszenie Jakości Systemów Informatycznych (SJSI)
 
[TestWarez 2017] A proper gun makes testing fun
[TestWarez 2017] A proper gun makes testing fun[TestWarez 2017] A proper gun makes testing fun
[TestWarez 2017] A proper gun makes testing fun
Stowarzyszenie Jakości Systemów Informatycznych (SJSI)
 
[TestWarez 2017] Continuous Delivery and beyond
[TestWarez 2017] Continuous Delivery and beyond[TestWarez 2017] Continuous Delivery and beyond
[TestWarez 2017] Continuous Delivery and beyond
Stowarzyszenie Jakości Systemów Informatycznych (SJSI)
 
[TestWarez 2017] Framework testowy aplikacji mobilnej dla systemu iOS - czy ...
[TestWarez 2017]  Framework testowy aplikacji mobilnej dla systemu iOS - czy ...[TestWarez 2017]  Framework testowy aplikacji mobilnej dla systemu iOS - czy ...
[TestWarez 2017] Framework testowy aplikacji mobilnej dla systemu iOS - czy ...
Stowarzyszenie Jakości Systemów Informatycznych (SJSI)
 
[TestWarez 2017] Od testowania do monitoringu jakości – wyzwania Continuous ...
[TestWarez 2017]  Od testowania do monitoringu jakości – wyzwania Continuous ...[TestWarez 2017]  Od testowania do monitoringu jakości – wyzwania Continuous ...
[TestWarez 2017] Od testowania do monitoringu jakości – wyzwania Continuous ...
Stowarzyszenie Jakości Systemów Informatycznych (SJSI)
 

More from Stowarzyszenie Jakości Systemów Informatycznych (SJSI) (20)

Zagraj w zaangażowanie
Zagraj w zaangażowanieZagraj w zaangażowanie
Zagraj w zaangażowanie
 
Analiza prawdziwie biznesowa - skąd biorą się projekty
Analiza prawdziwie biznesowa - skąd biorą się projektyAnaliza prawdziwie biznesowa - skąd biorą się projekty
Analiza prawdziwie biznesowa - skąd biorą się projekty
 
Internet of Things loves data - analysis of Industry 4.0
Internet of Things loves data - analysis of Industry 4.0Internet of Things loves data - analysis of Industry 4.0
Internet of Things loves data - analysis of Industry 4.0
 
Start with Accessibility: Why, How and What
Start with Accessibility: Why, How and WhatStart with Accessibility: Why, How and What
Start with Accessibility: Why, How and What
 
Agile business analyst
Agile business analystAgile business analyst
Agile business analyst
 
Analityk i architekt w czasach automatyzacji i robotyzacji biznesu
Analityk i architekt w czasach automatyzacji i robotyzacji biznesuAnalityk i architekt w czasach automatyzacji i robotyzacji biznesu
Analityk i architekt w czasach automatyzacji i robotyzacji biznesu
 
Jak sprzedać swój pomysł w 5 minut, czyli pitch deck dla BA
Jak sprzedać swój pomysł w 5 minut, czyli pitch deck dla BAJak sprzedać swój pomysł w 5 minut, czyli pitch deck dla BA
Jak sprzedać swój pomysł w 5 minut, czyli pitch deck dla BA
 
7 Skills for highly effective teams
7 Skills for highly effective teams7 Skills for highly effective teams
7 Skills for highly effective teams
 
[TestWarez 2017] Skomplikowane testowanie, skomplikowane terminy. Testowanie ...
[TestWarez 2017] Skomplikowane testowanie, skomplikowane terminy. Testowanie ...[TestWarez 2017] Skomplikowane testowanie, skomplikowane terminy. Testowanie ...
[TestWarez 2017] Skomplikowane testowanie, skomplikowane terminy. Testowanie ...
 
[TestWarez 2017] Przychodzi tester na rozmowę...
[TestWarez 2017] Przychodzi tester na rozmowę...[TestWarez 2017] Przychodzi tester na rozmowę...
[TestWarez 2017] Przychodzi tester na rozmowę...
 
[TestWarez 2017] A proper gun makes testing fun
[TestWarez 2017] A proper gun makes testing fun[TestWarez 2017] A proper gun makes testing fun
[TestWarez 2017] A proper gun makes testing fun
 
[TestWarez 2017] Zen testów wydajnościowych
[TestWarez 2017] Zen testów wydajnościowych[TestWarez 2017] Zen testów wydajnościowych
[TestWarez 2017] Zen testów wydajnościowych
 
[TestWarez 2017] „Przypadek Testowy” a „Kliencki Przypadek Użycia”
[TestWarez 2017] „Przypadek Testowy” a „Kliencki Przypadek Użycia”[TestWarez 2017] „Przypadek Testowy” a „Kliencki Przypadek Użycia”
[TestWarez 2017] „Przypadek Testowy” a „Kliencki Przypadek Użycia”
 
[TestWarez 2017] Requirements for Performance Testing
[TestWarez 2017] Requirements for Performance Testing[TestWarez 2017] Requirements for Performance Testing
[TestWarez 2017] Requirements for Performance Testing
 
[TestWarez 2017] Continuous Delivery and beyond
[TestWarez 2017] Continuous Delivery and beyond[TestWarez 2017] Continuous Delivery and beyond
[TestWarez 2017] Continuous Delivery and beyond
 
[TestWarez 2017] Framework testowy aplikacji mobilnej dla systemu iOS - czy ...
[TestWarez 2017]  Framework testowy aplikacji mobilnej dla systemu iOS - czy ...[TestWarez 2017]  Framework testowy aplikacji mobilnej dla systemu iOS - czy ...
[TestWarez 2017] Framework testowy aplikacji mobilnej dla systemu iOS - czy ...
 
[TestWarez 2017] Od testowania do monitoringu jakości – wyzwania Continuous ...
[TestWarez 2017]  Od testowania do monitoringu jakości – wyzwania Continuous ...[TestWarez 2017]  Od testowania do monitoringu jakości – wyzwania Continuous ...
[TestWarez 2017] Od testowania do monitoringu jakości – wyzwania Continuous ...
 
[TestWarez 2017] Okiem testera – tam gdzie hardware łączy się z softwarem
[TestWarez 2017] Okiem testera – tam gdzie hardware łączy się z softwarem[TestWarez 2017] Okiem testera – tam gdzie hardware łączy się z softwarem
[TestWarez 2017] Okiem testera – tam gdzie hardware łączy się z softwarem
 
[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...
[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...
[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...
 
[TestWarez 2017] Jakoś(ć) w pracy testera
[TestWarez 2017] Jakoś(ć) w pracy testera[TestWarez 2017] Jakoś(ć) w pracy testera
[TestWarez 2017] Jakoś(ć) w pracy testera
 

[TestWarez 2017] Mutacyjne testowanie oprogramowania w aspekcie Test Driven Development

  • 1. TDD vs. TDD+M Test Driven Development kontra Test Driven Development + Mutacje Michał Mnich & Piotr Wawrzyniak 16-17.11.2017
  • 2. PLAN PREZENTACJI 1. T.D.D. - Test Driven Development, definicje. 2. T.D.D. - Test Driven Development, wady i zalety. 3. T.D.D. - Test Driven Development + Mutacje, definicje, zalety oraz wady. 4. T.D.D. + M - Eksperyment testujący metodykę. 5. T.D.D. + M - Eksperyment Wyniki. 6. T.D.D. + M - Eksperyment omówienie wyników. 7. Podsumowanie. 8. Pytania.
  • 3. T.D.D. - Test Driven Development
  • 4. T.D.D. - Diagram Weryfikacji Poprawności Kod Testy Testy testów???
  • 5. T.D.D. - Test Driven Development
  • 6. T.D.D. - Test Driven Development + Mutacje Run Mutations
  • 7. T.D.D. + M Eksperyment ● Jeden projekt. ● Jeden Java Doc. ● Dwa zespoły. ● Jeden zespół pracuje w technice TDD. ● Drugi zespół pracuje w technice TDD+M. ● Na koniec naprzemienne testy weryfikacyjne*. *(Kod zespołu w samym TDD poddajemy mutacji następnie sprawdzamy jak radzą sobie ich testy. Przenosimy testy na krzyż z TDD do TDD+M i sprawdzamy czy przechodzą. Sami piszemy testy i sprawdzamy czy nasze będą lepsze).
  • 8. T.D.D. + M Eksperyment Wyniki TDD Reales CodeCoverage % MutationCoverage % Tests Mutants Methods Info 1 0 0 0 4 6 Puste metody 2 79,31034483 39,13043478 2 23 8 3 79,48717949 82,69230769 5 52 10 4 79,48717949 82,69230769 5 52 10 Poprawki w projekcie nie w kodzie 5 89,74358974 82,69230769 7 52 10 Agregacja żywych mutantów od wersji 3 6 66,66666667 63,23529412 8 68 16 Nowa niedokończona klasa brak testów stara bez zmian 7 41,86046512 41,34615385 8 104 16 Klasa Matrix bez zmian, Math bez testów nowe implementacje metod 8 60,46511628 64,42307692 11 104 16 Nowy test testMatrixSubtracting ubijamy dodatkowe 2 mutanty w Matrix. 2 nowe testy w math ubijają 22 mutanty CROS TEESTY z TDDM 86,76470588 75,96153846 16 104 16 W matrix zabija 48 mutantów o 3 więcej w math zabija 31 o 9 więcej mamy 1 test na metodę. Wymagane było komentowanie 2 testów które nie przechodziły wcale więcej info w doc.
  • 9. T.D.D. + M Eksperyment Wyniki TDDM Reales CodeCoverage MutationCoverage Tests Mutants Methods Info 1 43,90243902 30,3030303 3 33 16 Matrix zaimplementowana częściowo math wcale 2 36,11111111 34,32835821 4 134 16 Math zaimplementowana ale bez testów matrix pokrycie wzrosło o 35% Pokrycie mutantów o 41% 3 39,81481481 38,05970149 6 134 16 Math bez testów rośnie pokrycie Matrix 4 39,81481481 39,55223881 6 134 16 Matrix 1 mutant ubity (poprawiony test) Math bez zmian 5 39,81481481 38,80597015 6 134 16 Matrix 1 mutant ubity (poprawiony test dążą do 100% w klasie matrix) Math bez zmian 6 47,22222222 44,02985075 7 134 16 Klasa matrix nowy test pokryta testami 96% mutanty ubite 100%. Jedyna niepokryta metoda robi set na ( data[row][column] = value) komurce w tablicy double Math brak testow nadal 7 49,07407407 44,02985075 8 134 16 Klasa matrix pokrycie 100% Mutacyjne 100% nowy test dla tego seta doubla. Klasa Math nie ruszona 8 93,51851852 87,31343284 12 134 16 Implementacja testów dla Math 4 nowe testy 9 81,4516129 73,58490566 12 134 16 Implementacja 2 metod w math matrixSubtracting, matrixTransposition brak nowych testów brak testów do nowych nowych mutantów Koniec projektu z względów na Deadline dlatego spadł scro nie pełny cykl w trakcie Development.
  • 10. T.D.D. + M Eksperyment Wyniki TDDM Reales CodeCoverage % MutationCoverage % Test s Mutants Methods Info CROSS TESTY z TDD 39,51612903 40,25157233 12 134 16 Score dużo gorszy Testy Piotra W. 90,32258065 82,38993711 18 134 16 Wniosek nawet doświadczony programista nie był w stanie zrobić 100%
  • 11. T.D.D. + M Wnioski 1. Łatwość popełniania błędów numerycznych a. Mutacje są dobrym narzędziem do weryfikacji poprawności numerycznej algorytmu. b. Nawet najbardziej doświadczony programista popełnia błędy c. Pisanie testów jednostkowych dla numeryki jest trudne i mało efektywne
  • 12. T.D.D. + M Wnioski 1. Narzędzie do testowania dokumentacji. 2. Narzędzie do testowania spójności idei. 3. Wychwytywanie słabości projektowych. 4. Testowanie przepływów algorytmów.
  • 13. T.D.D. + M Wnioski 1. Ubijanie mutantów dla samego ubijanie mutantów jest złe: Uczestnicy eksperymentu jako słabo doświadczeni programiści mieli tendencję do ubijanie mutantów nie patrząc czy dany mutant jest sensowny. Czasem dawało to odwrotny efekt od zamierzonego czasem naprawiano test tak żeby przechodził mimo że błąd nie był w teście a w kodzie.
  • 14. T.D.D. + M Wnioski 2. Code review powinno analizować mutacje pod względem kodu programu jak i kodu testu.
  • 15. T.D.D. + M Wnioski 3. Same mutacje są wstępem do review.