BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015...

89
BEI UNS TESTEN LAUTER AFFEN! BED-CON 2015 DAS ENDE DER BANANENSOFTWARE! Dr. Jeremias Rößler

Transcript of BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015...

Page 1: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

BEI UNS TESTENLAUTER AFFEN!

BED-CON 2015

DAS ENDE DER BANANENSOFTWARE!

Dr. Jeremias Rößler

Page 2: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Änderung

Fehler

Testen

Page 3: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Wer hat manuell regressionsgetestet?

Wer hat manuell getestet?

Wem hat das Spaß gemacht?

UMFRAGE

Page 4: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Automatisierung

keine Zeit

keine

automatische

Automatisierung!

Page 5: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Infinite-Monkey-Theorem:Wenn eine Affe nur lange genug auf einer

Schreibmaschine tippt,schreibt er irgendwann alle Werke von Shakespeare.

Page 6: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Wir ersetzen die Schreibmaschine mit einem Computer...

Page 7: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

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.

Page 8: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Infinite Monkey

DEMO

Page 9: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 10: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Aufwand pro Fehler

Qualität

100% = 0 Fehler

Page 11: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Dummer Affe

Page 12: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Intelligenter Affe

Page 13: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

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.

Page 14: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Intelligenter Affe

DEMO

Page 15: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 16: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Intelligenter Affe

Page 17: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

gremlins.js

Open Source Produkte

UI/Application Exerciser Monkey

NetFlix Chaos Monkey

Page 18: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Intelligenter Affe

?

Page 19: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 20: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 21: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 22: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Problemraum

Problem raum

Page 23: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 24: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 25: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 26: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 27: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Intelligenter Affe

Page 28: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Intelligenter Affe

Page 29: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Türme von Hanoi

© André Karwath aka Aka

Quelle: http://en.wikipedia.org/wiki/File:Tower_of_Hanoi_4.gif

Page 30: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Türme von Hanoi !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))!! ! !

Page 31: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

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')!! ! ! ! ! ! ! ! ! ! !

Page 32: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

!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]! !!19.! 'tuerme.CtoB()',!\!#[61][5][432]!N>![61][52][43]! !

Türme von Hanoi Manuell

Page 33: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Türme von Hanoi Möglichkeiten

63>2

Page 34: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

9.223.372.036.854.775.808

Türme von Hanoi Möglichkeiten

Page 35: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Türme von Hanoi Möglichkeiten

292.471.208 Jahre

Page 36: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Türme von Hanoi Automatisch?

Page 37: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Türme von Hanoi Zielfunktion

1.!def!min_zielfunktion(tuerme):!return!(21!N!sum(tuerme.C))

Page 38: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

while (min_zielfunktion(loesung) > 0)neue_loesung = addNextStep(loesung)if (better(neue_loesung, loesung))loesung = neue_loesung

Türme von Hanoi Stochastischer Bergsteigeralgorithmus

Page 39: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

DEMO

Türme von Hanoi Stochastischer Bergsteigeralgorithmus

Page 40: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Türme von Hanoi Stochastischer Bergsteigeralgorithmus

['tuerme.AtoC()']!N>![65432][][1],!Anzahl!Schritte:!1,!Zielwert:!20

Page 41: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

while (min_zielfunktion(loesung) > 0)neue_loesung = addNextStep(loesung)if (better(neue_loesung, loesung))loesung = neue_loesung

Türme von Hanoi Zufalls-Neustart Stochastischer

Bergsteigeralgorithmus

nach_1000_versuchen_neustarten:

Page 42: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Türme von Hanoi Suchraumlandschaft

Page 43: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

while (min_zielfunktion(loesung) > 0)neue_loesung = addNextStep(loesung)if (better(neue_loesung, loesung)

loesung = neue_loesung

Türme von Hanoi Zufallsbewegung

or 50/50_chance)

Page 44: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

DEMO

Türme von Hanoi Zufallsbewegung

Page 45: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

[tuerme.AtoB(),!tuerme.BtoC(),!tuerme.CtoB(),!tuerme.BtoA(),!!!!!!!!!!!!tuerme.AtoB(),!...]!N>![51][][6432],!Anzahl!Schritte:!2018,!Zielwert:!6

Türme von Hanoi Zufallsbewegung

Page 46: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Türme von Hanoi Simulierte Abkühlung

while (min_zielfunktion(loesung) > 0)neue_loesung = addNextStep(loesung)if (better(neue_loesung, loesung)

loesung = neue_loesungor decreasing_chance)

Page 47: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Quelle: http://www.flickr.com/photos/51035774131@N01/27145468/in/photostream/

© crowbert

Türme von Hanoi Simulierte Abkühlung

Page 48: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Mehrere Suchen gleichzeitig?

Page 49: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

loesungen = []beste = get_beste(loesungen)while (min_zielfunktion(beste) > 0)

neue_loesungen = addNextSteps(loesungen)loesungen = getXBest(neue_loesungen)beste = get_beste(loesungen)

Türme von Hanoi Balkensuche

Page 50: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 51: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

loesungen = []beste = get_beste(loesungen)while (min_zielfunktion(beste) > 0)

neue_loesungen = addNextSteps(loesungen)loesungen = getXBest(neue_loesungen)beste = get_beste(loesungen)

Türme von Hanoi Balkensuche

Page 52: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Türme von Hanoi Genetischer Algorithmus

Page 53: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Türme von Hanoi Genetischer Algorithmus

Quelle: http://cnx.org/content/m47304/latest/

© Robert Bear and David Rintoul

Page 54: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Türme von Hanoi Genetischer Algorithmus

Gen

Exon

Intron

Exon

Page 55: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

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)

Türme von Hanoi Genetischer Algorithmus

Page 56: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

DEMO

Türme von Hanoi Genetischer Algorithmus

Page 57: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

[tuerme.AtoB(),!tuerme.AtoC(),!tuerme.BtoA(),!tuerme.AtoB(),!tuerme.BtoA(),!...]!N>![][][654321],!Anzahl!Schritte:!1727,!Zielwert:!0! ! ! ! ! ! ! ! ! ! ! !

Türme von Hanoi Genetischer Algorithmus

Page 58: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Genetischer Algorithmus Effizienz

66 Sekunden

statt 150 Mio. Jahre

Page 59: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 60: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Welche Fehler kann der Affe finden?

Page 61: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

When is a bug not a bug?

When it’s a feature!

Page 62: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

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

Page 63: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

1. if (name[0] == '.') continue;

Is it a bug?

.

.. text.c other.files

Page 64: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Is it a bug?

Page 65: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Is it a bug?

Page 66: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

What is a bug?

Without specification, there are no bugs — only surprises.

Brian Kernighan“

Page 67: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

What is a bug?

Spezifikation Code

Nutzererwartung Code

Modell Code

Page 68: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Monkey Testing

Nutzererwartung Code

Page 69: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Wozu testen wir?

Nach Implementierung?

Page 70: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 71: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Wozu testen wir?

Nach Implementierung?

Nach Änderung?

Page 72: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 73: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Wenn man nur einen Hammer hat

sieht alles aus wie ein Nagel…

Page 74: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

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());

}

Page 75: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 76: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 77: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 78: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Ausführung Wiederholbar?

Page 79: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Separate Testumgebung mit voller Kontrolle

Page 80: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 81: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 82: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 83: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 84: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

GENETISCHER ALGORITHMUS

20 %

80 %

Coverage

Page 85: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

festes Set an Tests

Page 86: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler
Page 87: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Monkey-Testing/ Genetischer Algorithmus

Testing/ Behavioral Diff

Page 88: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Intelligenter Affe

Summary

Monkey-Testing:

billiger schneller besser multipliziert manuelle Tests

Behavioral Diff

kein Pflegeaufwand kein wasteful testing trotzdem “vollständiges “ Testen

Page 89: BEI UNS TESTEN LAUTER AFFEN! - BED-Con 2015-ReTest.pdf · bei uns testen lauter affen! bed-con 2015 das ende der bananensoftware! dr. jeremias rößler

Machen Sie den Test!

www.retest.de