Enviar búsqueda
Cargar
Dr. Jeremias Rößler - Wenn Affen Testen - Das Ende der Bananensoftware - code.talks 2015
•
1 recomendación
•
1,561 vistas
AboutYouGmbH
Seguir
code.talks 2015 hosted by ABOUT YOU
Leer menos
Leer más
Internet
Vista de diapositivas
Denunciar
Compartir
Vista de diapositivas
Denunciar
Compartir
1 de 89
Descargar ahora
Descargar para leer sin conexión
Recomendados
Regular Expressions - eine Einführung
Regular Expressions - eine Einführung
Brigitte Jellinek
Zeljko Kvesic - Scrum in verteilten Teams / Agil über die Landesgrenzen - cod...
Zeljko Kvesic - Scrum in verteilten Teams / Agil über die Landesgrenzen - cod...
AboutYouGmbH
Tarek Müller - Talentday Präsentation zum Unternehmertum
Tarek Müller - Talentday Präsentation zum Unternehmertum
Tarek Müller
Lars Jankowfsky - Learn or Die - code.talks 2015
Lars Jankowfsky - Learn or Die - code.talks 2015
AboutYouGmbH
Carina Bittihn & Linda Dettmann - Same Same but Different - code.talks 2015
Carina Bittihn & Linda Dettmann - Same Same but Different - code.talks 2015
AboutYouGmbH
Lush Final
Lush Final
Susie Cretan
Marcel Hild - Spryker (e)commerce framework als Alternative zu traditioneller...
Marcel Hild - Spryker (e)commerce framework als Alternative zu traditioneller...
AboutYouGmbH
How to Use a Webinar to Launch Your Digital Product
How to Use a Webinar to Launch Your Digital Product
Leslie Samuel
Recomendados
Regular Expressions - eine Einführung
Regular Expressions - eine Einführung
Brigitte Jellinek
Zeljko Kvesic - Scrum in verteilten Teams / Agil über die Landesgrenzen - cod...
Zeljko Kvesic - Scrum in verteilten Teams / Agil über die Landesgrenzen - cod...
AboutYouGmbH
Tarek Müller - Talentday Präsentation zum Unternehmertum
Tarek Müller - Talentday Präsentation zum Unternehmertum
Tarek Müller
Lars Jankowfsky - Learn or Die - code.talks 2015
Lars Jankowfsky - Learn or Die - code.talks 2015
AboutYouGmbH
Carina Bittihn & Linda Dettmann - Same Same but Different - code.talks 2015
Carina Bittihn & Linda Dettmann - Same Same but Different - code.talks 2015
AboutYouGmbH
Lush Final
Lush Final
Susie Cretan
Marcel Hild - Spryker (e)commerce framework als Alternative zu traditioneller...
Marcel Hild - Spryker (e)commerce framework als Alternative zu traditioneller...
AboutYouGmbH
How to Use a Webinar to Launch Your Digital Product
How to Use a Webinar to Launch Your Digital Product
Leslie Samuel
Dr. Florian Krause - Der Kunde im Fokus: Personalisierte Aussteuerung von Inh...
Dr. Florian Krause - Der Kunde im Fokus: Personalisierte Aussteuerung von Inh...
AboutYouGmbH
Dennis Benkert & Matthias Lübken - Patterns in a containerized world? - code....
Dennis Benkert & Matthias Lübken - Patterns in a containerized world? - code....
AboutYouGmbH
How to Build a Membership Site: a Comprehensive Guide
How to Build a Membership Site: a Comprehensive Guide
Leslie Samuel
ABOUT YOU get on board
ABOUT YOU get on board
AboutYouGmbH
The Guide to Kickstarter and Crowdfunding
The Guide to Kickstarter and Crowdfunding
DashBurst
LUSH
LUSH
Ecaterina Tescari
Attending Conferences: How it Can Make a Difference for Your Business
Attending Conferences: How it Can Make a Difference for Your Business
Leslie Samuel
Lush presentation
Lush presentation
tdenman
Lush presentation FINAL
Lush presentation FINAL
Maria Calugareanu
ABOUT YOU komm an Bord
ABOUT YOU komm an Bord
AboutYouGmbH
Case study: Lush
Case study: Lush
Mara Dalmazzo
Lush marketing project
Lush marketing project
Manali Thakkar
How to Stream to Facebook Live Like a Pro
How to Stream to Facebook Live Like a Pro
Leslie Samuel
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
Leslie Samuel
Tech talk 01.06.2017
Tech talk 01.06.2017
AboutYouGmbH
Retention Strategies in Mobile E-Commerce
Retention Strategies in Mobile E-Commerce
AboutYouGmbH
Rethinking Fashion E-Commerce
Rethinking Fashion E-Commerce
AboutYouGmbH
Niels Leenheer - Weird browsers - code.talks 2015
Niels Leenheer - Weird browsers - code.talks 2015
AboutYouGmbH
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
AboutYouGmbH
Uwe Friedrichsen - CRDT und mehr - über extreme Verfügbarkeit und selbstheile...
Uwe Friedrichsen - CRDT und mehr - über extreme Verfügbarkeit und selbstheile...
AboutYouGmbH
Kai Voigt - Big Data zum Anfassen - code.talks 2015
Kai Voigt - Big Data zum Anfassen - code.talks 2015
AboutYouGmbH
Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...
Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...
AboutYouGmbH
Más contenido relacionado
Destacado
Dr. Florian Krause - Der Kunde im Fokus: Personalisierte Aussteuerung von Inh...
Dr. Florian Krause - Der Kunde im Fokus: Personalisierte Aussteuerung von Inh...
AboutYouGmbH
Dennis Benkert & Matthias Lübken - Patterns in a containerized world? - code....
Dennis Benkert & Matthias Lübken - Patterns in a containerized world? - code....
AboutYouGmbH
How to Build a Membership Site: a Comprehensive Guide
How to Build a Membership Site: a Comprehensive Guide
Leslie Samuel
ABOUT YOU get on board
ABOUT YOU get on board
AboutYouGmbH
The Guide to Kickstarter and Crowdfunding
The Guide to Kickstarter and Crowdfunding
DashBurst
LUSH
LUSH
Ecaterina Tescari
Attending Conferences: How it Can Make a Difference for Your Business
Attending Conferences: How it Can Make a Difference for Your Business
Leslie Samuel
Lush presentation
Lush presentation
tdenman
Lush presentation FINAL
Lush presentation FINAL
Maria Calugareanu
ABOUT YOU komm an Bord
ABOUT YOU komm an Bord
AboutYouGmbH
Case study: Lush
Case study: Lush
Mara Dalmazzo
Lush marketing project
Lush marketing project
Manali Thakkar
How to Stream to Facebook Live Like a Pro
How to Stream to Facebook Live Like a Pro
Leslie Samuel
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
Leslie Samuel
Destacado
(14)
Dr. Florian Krause - Der Kunde im Fokus: Personalisierte Aussteuerung von Inh...
Dr. Florian Krause - Der Kunde im Fokus: Personalisierte Aussteuerung von Inh...
Dennis Benkert & Matthias Lübken - Patterns in a containerized world? - code....
Dennis Benkert & Matthias Lübken - Patterns in a containerized world? - code....
How to Build a Membership Site: a Comprehensive Guide
How to Build a Membership Site: a Comprehensive Guide
ABOUT YOU get on board
ABOUT YOU get on board
The Guide to Kickstarter and Crowdfunding
The Guide to Kickstarter and Crowdfunding
LUSH
LUSH
Attending Conferences: How it Can Make a Difference for Your Business
Attending Conferences: How it Can Make a Difference for Your Business
Lush presentation
Lush presentation
Lush presentation FINAL
Lush presentation FINAL
ABOUT YOU komm an Bord
ABOUT YOU komm an Bord
Case study: Lush
Case study: Lush
Lush marketing project
Lush marketing project
How to Stream to Facebook Live Like a Pro
How to Stream to Facebook Live Like a Pro
How to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
Más de AboutYouGmbH
Tech talk 01.06.2017
Tech talk 01.06.2017
AboutYouGmbH
Retention Strategies in Mobile E-Commerce
Retention Strategies in Mobile E-Commerce
AboutYouGmbH
Rethinking Fashion E-Commerce
Rethinking Fashion E-Commerce
AboutYouGmbH
Niels Leenheer - Weird browsers - code.talks 2015
Niels Leenheer - Weird browsers - code.talks 2015
AboutYouGmbH
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
AboutYouGmbH
Uwe Friedrichsen - CRDT und mehr - über extreme Verfügbarkeit und selbstheile...
Uwe Friedrichsen - CRDT und mehr - über extreme Verfügbarkeit und selbstheile...
AboutYouGmbH
Kai Voigt - Big Data zum Anfassen - code.talks 2015
Kai Voigt - Big Data zum Anfassen - code.talks 2015
AboutYouGmbH
Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...
Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...
AboutYouGmbH
Wolfram Kriesing - EcmaScript6 for real - code.talks 2015
Wolfram Kriesing - EcmaScript6 for real - code.talks 2015
AboutYouGmbH
Stefanie Grewenig & Johannes Thönes - Internet ausdrucken mit JavaScript - c...
Stefanie Grewenig & Johannes Thönes - Internet ausdrucken mit JavaScript - c...
AboutYouGmbH
Alex Korotkikh - From 0 to N: Lessons Learned - code.talks 2015
Alex Korotkikh - From 0 to N: Lessons Learned - code.talks 2015
AboutYouGmbH
Christian Haider & Helge Nowak - Mehr Demokratie durch Haushaltstransparenz ...
Christian Haider & Helge Nowak - Mehr Demokratie durch Haushaltstransparenz ...
AboutYouGmbH
Bernhard Wick - appserver.io - code.talks 2015
Bernhard Wick - appserver.io - code.talks 2015
AboutYouGmbH
Moritz Siuts & Robert von Massow - Data Pipeline mit Apache Kafka - code.tal...
Moritz Siuts & Robert von Massow - Data Pipeline mit Apache Kafka - code.tal...
AboutYouGmbH
Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t...
Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t...
AboutYouGmbH
Thilo Horstmann - 50000 Lines Of Code to Brew a Coffee - code.talks 2015
Thilo Horstmann - 50000 Lines Of Code to Brew a Coffee - code.talks 2015
AboutYouGmbH
Freya Oehle - The bare necessities - improvised ingenuity - code.talks 2015
Freya Oehle - The bare necessities - improvised ingenuity - code.talks 2015
AboutYouGmbH
Artur Borycki - Beyond Lambda - how to get from logical to physical - code.ta...
Artur Borycki - Beyond Lambda - how to get from logical to physical - code.ta...
AboutYouGmbH
Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015
Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015
AboutYouGmbH
Robert Reiz - How to Build a Tech Startup - code.talks 2015
Robert Reiz - How to Build a Tech Startup - code.talks 2015
AboutYouGmbH
Más de AboutYouGmbH
(20)
Tech talk 01.06.2017
Tech talk 01.06.2017
Retention Strategies in Mobile E-Commerce
Retention Strategies in Mobile E-Commerce
Rethinking Fashion E-Commerce
Rethinking Fashion E-Commerce
Niels Leenheer - Weird browsers - code.talks 2015
Niels Leenheer - Weird browsers - code.talks 2015
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
Uwe Friedrichsen - CRDT und mehr - über extreme Verfügbarkeit und selbstheile...
Uwe Friedrichsen - CRDT und mehr - über extreme Verfügbarkeit und selbstheile...
Kai Voigt - Big Data zum Anfassen - code.talks 2015
Kai Voigt - Big Data zum Anfassen - code.talks 2015
Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...
Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...
Wolfram Kriesing - EcmaScript6 for real - code.talks 2015
Wolfram Kriesing - EcmaScript6 for real - code.talks 2015
Stefanie Grewenig & Johannes Thönes - Internet ausdrucken mit JavaScript - c...
Stefanie Grewenig & Johannes Thönes - Internet ausdrucken mit JavaScript - c...
Alex Korotkikh - From 0 to N: Lessons Learned - code.talks 2015
Alex Korotkikh - From 0 to N: Lessons Learned - code.talks 2015
Christian Haider & Helge Nowak - Mehr Demokratie durch Haushaltstransparenz ...
Christian Haider & Helge Nowak - Mehr Demokratie durch Haushaltstransparenz ...
Bernhard Wick - appserver.io - code.talks 2015
Bernhard Wick - appserver.io - code.talks 2015
Moritz Siuts & Robert von Massow - Data Pipeline mit Apache Kafka - code.tal...
Moritz Siuts & Robert von Massow - Data Pipeline mit Apache Kafka - code.tal...
Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t...
Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t...
Thilo Horstmann - 50000 Lines Of Code to Brew a Coffee - code.talks 2015
Thilo Horstmann - 50000 Lines Of Code to Brew a Coffee - code.talks 2015
Freya Oehle - The bare necessities - improvised ingenuity - code.talks 2015
Freya Oehle - The bare necessities - improvised ingenuity - code.talks 2015
Artur Borycki - Beyond Lambda - how to get from logical to physical - code.ta...
Artur Borycki - Beyond Lambda - how to get from logical to physical - code.ta...
Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015
Etiene Dalcol - Web development with Lua Programming Language - code.talks 2015
Robert Reiz - How to Build a Tech Startup - code.talks 2015
Robert Reiz - How to Build a Tech Startup - code.talks 2015
Dr. Jeremias Rößler - Wenn Affen Testen - Das Ende der Bananensoftware - code.talks 2015
1.
WENN AFFENTESTEN… code.talks 2015 …DAS
ENDE DER BANANENSOFTWARE! Dr. Jeremias Rößler
2.
Änderung Fehler Testen
3.
Automatisierung keine Zeit keine automatische Automatisierung!
4.
Infinite-Monkey-Theorem: Wenn eine Affe
nur lange genug auf einer Schreibmaschine tippt, schreibt er irgendwann alle Werke von Shakespeare.
5.
Wir ersetzen die
Schreibmaschine mit einem Computer...
6.
Infinite Monkey public static
void main(String... args) throws Exception { Robot robot = new Robot(); while (true) { robot.mouseMove(random.nextInt(maxX), random.nextInt(maxY)); robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); robot.delay(200); for (char inputChar : randomString().toCharArray()) { robot.keyPress((int) inputChar); robot.keyRelease((int) inputChar); robot.delay(10); } robot.keyPress(KeyEvent.VK_ENTER); robot.keyRelease(KeyEvent.VK_ENTER); } } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
7.
Infinite Monkey DEMO
8.
9.
10.
Aufwand pro Fehler Qualität 100% = 0
Fehler
11.
12.
Intelligenter Affe public static
void main(String... args) throws Exception { WebDriver driver = new FirefoxDriver(); driver.get("http://www.retest.de"); while (true) { List<WebElement> links = driver.findElements(By.tagName("a")); links.get(random.nextInt(links.size())).click(); Thread.sleep(500); List<WebElement> fields = driver.findElements(By.xpath("//input[@type='text']")); WebElement field = fields.get(random.nextInt(fields.size())); field.sendKeys(randomString()); Thread.sleep(500); } } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
13.
Intelligenter Affe DEMO
14.
15.
Intelligenter Affe
16.
gremlins.js Open Source Produkte UI/Application
Exerciser Monkey NetFlix Chaos Monkey
17.
Intelligenter Affe ?
18.
19.
20.
21.
Problemraum Problem raum
22.
23.
24.
25.
26.
27.
28.
Türme von Hanoi ©
André Karwath aka Aka Quelle: http://en.wikipedia.org/wiki/File:Tower_of_Hanoi_4.gif
29.
!1.!class!TuermeVonHanoi():!! ! !
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !2.!!!!def!__init__(self):! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !3.!!!!!!!!self.A!=![6,!5,!4,!3,!2,!1]! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !4.!!!!!!!!self.B!=![]! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !5.!!!!!!!!self.C!=![]! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !6.!!!!!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !7.!!!!def!AtoB(self):!self.B.append(self.A.pop())! ! ! ! ! ! ! ! ! ! ! ! ! !8.!!!!!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !9.!!!!def!AtoC(self):!self.C.append(self.A.pop())! ! ! ! ! ! ! ! ! ! ! ! ! !10.! !!!!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !11.! def!BtoA(self):!self.A.append(self.B.pop())! ! ! ! ! ! ! ! ! ! ! ! ! !12.! !!!!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !13.! def!BtoC(self):!self.C.append(self.B.pop())! ! ! ! ! ! ! ! ! ! ! ! ! !14.! !!!!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !15.! def!CtoA(self):!self.A.append(self.C.pop())! ! ! ! ! ! ! ! ! ! ! ! ! !16.! !!!!!!!!!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !17.! def!CtoB(self):!self.B.append(self.C.pop())! ! ! ! ! ! ! ! ! ! ! ! ! !18.! !!!!!!!!!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !19.! def!valid(self):! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !20.! !!!!return!all(self.A[i!+!1]!<!self.A[i]!for!i!in!range(len(self.A)N1))!and!!! !21.! !!!!!!!!all(self.B[m!+!1]!<!self.B[m]!for!m!in!range(len(self.B)N1))!and!!! ! !22.! !!!!!!!!all(self.C[n!+!1]!<!self.C[n]!for!n!in!range(len(self.C)N1))!! ! !
30.
Türme von Hanoi Rekursiv !1.!
def!bewege(schritte,!i,!a_name,!b_name,!c_name):! ! ! ! ! ! ! !! !2.! !!!!if!(i!>!0):!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !! !3.! !!!!!!!!bewege(schritte,!iN1,!a_name,!c_name,!b_name)! ! ! ! ! !! !4.! !!!!!!!!schritte.append('tuerme.'!+!a_name!+!'to'!+!c_name!+!‘()')! !5.! !!!!!!!!bewege(schritte,!iN1,!b_name,!a_name,!c_name)! ! ! ! ! !! !6.! !!!!return!schritte! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !! !7.! !! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !! !8.! def!algorithmus():!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !! !9.! !!!!return!bewege([],!6,!'A',!'B',!'C')!! ! ! ! ! ! ! ! ! ! !
31.
!1.! schritte!=![!! !
! ! ! ! ! ! ! ! ! ! ! ! ! !2.! 'tuerme.AtoB()',!!#[654321][][]!N>![65432][1][]! ! !3.! 'tuerme.AtoC()',!!#[65432][1][]!N>![6543][1][2]! ! !4.! 'tuerme.BtoC()',!!#[6543][1][2]!N>![6543][][21]! ! !5.! 'tuerme.AtoB()',!!#[6543][][21]!N>![654][3][21]! ! !6.! 'tuerme.CtoA()',!!#[654][3][21]!N>![6541][3][2]! ! !7.! 'tuerme.CtoB()',!!#[6541][3][2]!N>![6541][32][]! ! !8.! 'tuerme.AtoB()',!!#[6541][32][]!N>![654][321][]! ! !9.! 'tuerme.AtoC()',!!#[654][321][]!N>![65][321][4]! ! !10.! 'tuerme.BtoC()',!!#[65][321][4]!N>![65][32][41]! ! !11.! 'tuerme.BtoA()',!!#[65][32][41]!N>![652][3][41]! ! !12.! 'tuerme.CtoA()',!!#[652][3][41]!N>![6521][3][4]! ! !13.! 'tuerme.BtoC()',!!#[6521][3][4]!N>![6521][][43]! ! !14.! 'tuerme.AtoB()',!!#[6521][][43]!N>![652][1][43]! ! !15.! 'tuerme.AtoC()',!!#[652][1][43]!N>![65][1][432]! ! !16.! 'tuerme.BtoC()',!!#[65][1][432]!N>![65][][4321]! ! !17.! 'tuerme.AtoB()',!!#[65][][4321]!N>![6][5][4321]! ! !18.! 'tuerme.CtoA()',!!#[6][5][4321]!N>![61][5][432]! ! Türme von Hanoi Manuell
32.
Türme von Hanoi Möglichkeiten 63 >2
33.
9.223.372.036.854.775.808 Türme von Hanoi Möglichkeiten
34.
Türme von Hanoi Möglichkeiten 292.471.208
Jahre
35.
Türme von Hanoi Automatisch?
36.
Türme von Hanoi Zielfunktion 1.!def!min_zielfunktion(tuerme):!return!(21!N!sum(tuerme.C))
37.
while (min_zielfunktion(loesung) >
0) neue_loesung = addNextStep(loesung) if (better(neue_loesung, loesung)) loesung = neue_loesung
38.
DEMO Türme von Hanoi Stochastischer
Bergsteigeralgorithmus
39.
Türme von Hanoi Stochastischer
Bergsteigeralgorithmus ['tuerme.AtoC()']!N>![65432][][1],!Anzahl!Schritte:!1,!Zielwert:!20
40.
while (min_zielfunktion(loesung) >
0) neue_loesung = addNextStep(loesung) if (better(neue_loesung, loesung)) loesung = neue_loesung nach_1000_versuchen_neustarten:
41.
Türme von Hanoi Suchraumlandschaft
42.
while (min_zielfunktion(loesung) >
0) neue_loesung = addNextStep(loesung) if (better(neue_loesung, loesung) loesung = neue_loesung or 50/50_chance)
43.
DEMO Türme von Hanoi Zufallsbewegung
44.
[tuerme.AtoB(),!tuerme.BtoC(),!tuerme.CtoB(),!tuerme.BtoA(),!!!!!!!!!!!! tuerme.AtoB(),!...]!N>![51][][6432],!Anzahl!Schritte:!2018,!Zielwert:!6 Türme von Hanoi Zufallsbewegung
45.
while (min_zielfunktion(loesung) >
0) neue_loesung = addNextStep(loesung) if (better(neue_loesung, loesung) loesung = neue_loesung or decreasing_chance)
46.
Quelle: http://www.flickr.com/photos/51035774131@N01/27145468/in/photostream/ © crowbert Türme
von Hanoi Simulierte Abkühlung
47.
Mehrere Suchen gleichzeitig?
48.
loesungen = [] beste
= get_beste(loesungen) while (min_zielfunktion(beste) > 0) neue_loesungen = addNextSteps(loesungen) loesungen = getXBest(neue_loesungen) beste = get_beste(loesungen)
49.
50.
loesungen = [] beste
= get_beste(loesungen) while (min_zielfunktion(beste) > 0) neue_loesungen = addNextSteps(loesungen) loesungen = getXBest(neue_loesungen) beste = get_beste(loesungen)
51.
52.
Quelle: http://cnx.org/content/m47304/latest/ © Robert
Bear and David Rintoul
53.
Gen Exon Intron Exon
54.
loesungen = [] beste
= get_beste(loesungen) while (min_zielfunktion(beste) > 0) neue_loesungen = crossover(loesungen) neue_loesungen = addNextSteps(neue_loesungen) loesungen = getXBest(neue_loesungen) beste = get_beste(loesungen)
55.
DEMO Türme von Hanoi Genetischer
Algorithmus
56.
[tuerme.AtoB(),!tuerme.AtoC(),!tuerme.BtoA(),!tuerme.AtoB(),!tuerme.BtoA(),!...]!N>! [][][654321],!Anzahl!Schritte:!1727,!Zielwert:!0! ! !
! ! ! ! ! ! ! ! ! Türme von Hanoi Genetischer Algorithmus
57.
Genetischer Algorithmus Effizienz 66 Sekunden statt 150
Mio. Jahre
58.
59.
60.
Welche Fehler kann
der Affe finden?
61.
When is a
bug not a bug? When it’s a feature!
62.
1. 2. 3. 4. 5. 6. Is it a
bug? def auth(username, password): if username == 'admin' and password == 'geheim': return True if hash(password + get_salt(username)) == get_pwd_hash(username): return True return False
63.
1. if (name[0]
== '.') continue; Is it a bug? . .. text.c other.files
64.
Is it a
bug?
65.
Is it a
bug?
66.
What is a
bug? Without specification, there are no bugs — only surprises. Brian Kernighan “
67.
What is a
bug? Spezifikation Code Nutzererwartung Code Modell Code
68.
MonkeyTesting Nutzererwartung Code
69.
Wozu testen wir? Nach Implementierung?
70.
71.
72.
Wozu testen wir? Nach Implementierung? Nach Änderung?
73.
74.
Wenn man nur
einen Hammer hat sieht alles aus wie ein Nagel…
75.
public void testSomething()
throws Exception { // here be some test code ... UIElement element = driver.getElement(“path/to/element”); assertEquals(null, element.getAction()); assertEquals(“action”, element.getActionCommand()); assertEquals(true, element.isEnabled()); assertEquals(true, element.isFocusable()); assertEquals(“Lucida Grande”, element.getFont().getName()); assertEquals(13, element.getFont().getSize()); assertEquals(0, element.getFont().getStyle()); assertEquals(23, element.getHeight()); assertEquals(null, element.getIcon()); assertEquals(0, element.getMnemonic()); assertEquals(null, element.getPressedIcon()); assertEquals(true, element.isSelected()); assertEquals(“label”, element.getText()); assertEquals(119, element.getWidth()); assertEquals(27, element.getX()); assertEquals(191, element.getY()); }
76.
77.
78.
79.
Ausführung Wiederholbar?
80.
SeparateTestumgebung mit voller Kontrolle
81.
82.
83.
84.
85.
GENETISCHER ALGORITHMUS 20 % 80 % Coverage
86.
festes Set anTests
87.
88.
Monkey-Testing/ Genetischer Algorithmus Testing/ Behavioral Diff
89.
Intelligenter Affe Summary Monkey-Testing: billiger schneller besser multipliziert manuelleTests Behavioral
Diff kein Pflegeaufwand kein wasteful testing trotzdem “vollständiges “Testen
Descargar ahora