© OPITZ CONSULTING GmbH 2013 Seite 1Zum Beispiel ein TestZum Beispiel ein TestBeispiele als Grundlage fürAnforderungsanaly...
© OPITZ CONSULTING GmbH 2013 Seite 2Zum Beispiel ein TestZu meiner PersonTorsten MandrySolution ArchitectOPITZ CONSULTING ...
© OPITZ CONSULTING GmbH 2013 Seite 3Zum Beispiel ein TestMärkteJavaSOAORACLEBI/DWHOuttaskingKundenBranchen-übergreif...
© OPITZ CONSULTING GmbH 2013 Seite 4Zum Beispiel ein TestAgenda• Erfahrungen undErkenntnisse• Verwendung vonBeispielen• Vo...
© OPITZ CONSULTING GmbH 2013 Seite 5Zum Beispiel ein TestFoto: Brady Withers@FlickrErfahrungen und Erkenntnisse
© OPITZ CONSULTING GmbH 2013 Seite 6Zum Beispiel ein TestEntwicklung eines neuen FeaturesAnalystAuftraggeber EntwicklerAnf...
© OPITZ CONSULTING GmbH 2013 Seite 7Zum Beispiel ein TestHäufiges ErgebnisBild: dullhunk@Flickr
© OPITZ CONSULTING GmbH 2013 Seite 8Zum Beispiel ein TestSpezifikation wird interpretiertAuftraggeber Analyst Entwickler
© OPITZ CONSULTING GmbH 2013 Seite 9Zum Beispiel ein TestWas läuft schief?Wir spezifizierenmissverständlichWir verstehen „...
© OPITZ CONSULTING GmbH 2013 Seite 10Zum Beispiel ein TestBeispieleFoto: jonny goldstein@Flickr
© OPITZ CONSULTING GmbH 2013 Seite 11Zum Beispiel ein TestFoto: bridgells@photobucket.com???Eine übliche AnforderungDie Af...
© OPITZ CONSULTING GmbH 2013 Seite 12Zum Beispiel ein TestKönnen Sie uns dazu ein Beispiel nennen?Wenn wir eine Investitio...
© OPITZ CONSULTING GmbH 2013 Seite 13Zum Beispiel ein TestEtwas anders formuliert…dann folgt darauseine monatliche AfAin H...
© OPITZ CONSULTING GmbH 2013 Seite 14Zum Beispiel ein TestBeispiele helfen… veranschaulichen / verdeutlichen decken Frag...
© OPITZ CONSULTING GmbH 2013 Seite 15Zum Beispiel ein Test…können aber schwierig sein ungewohnt / erfordern Übung komple...
© OPITZ CONSULTING GmbH 2013 Seite 16Zum Beispiel ein Test„Nachspezifikation“„Das haben wir doch alles schon mal besproche...
© OPITZ CONSULTING GmbH 2013 Seite 17Zum Beispiel ein TestFoto: anieto2k@FlickrSpezifikation wird durch Beispielenicht ein...
© OPITZ CONSULTING GmbH 2013 Seite 18Zum Beispiel ein TestSpecification by ExampleBeispiele als alleinige Spezifikation a...
© OPITZ CONSULTING GmbH 2013 Seite 19Zum Beispiel ein Test„sanfter“ MittelwegBeispiele als Ergänzungzur Prosa-Spezifikatio...
© OPITZ CONSULTING GmbH 2013 Seite 20Zum Beispiel ein TestBeispiele als „Definition of Done“Wenn alle definierten Beispiel...
© OPITZ CONSULTING GmbH 2013 Seite 21Zum Beispiel ein TestVom Beispiel zum Test
© OPITZ CONSULTING GmbH 2013 Seite 22Zum Beispiel ein Testpublic class InvestmentPosition extends Position {…public void c...
© OPITZ CONSULTING GmbH 2013 Seite 23Zum Beispiel ein TestUnser Beispiel von ebendann folgt darauseine monatliche AfAin Hö...
© OPITZ CONSULTING GmbH 2013 Seite 24Zum Beispiel ein TestJUnit Test@Testpublic void calculateArmortisationTest() {// Gege...
© OPITZ CONSULTING GmbH 2013 Seite 25Zum Beispiel ein TestJUnit Test@Testpublic void calculateArmortisationTest() {// Gege...
© OPITZ CONSULTING GmbH 2013 Seite 26Zum Beispiel ein TestJUnit Test@Testpublic void calculateArmortisationTest() {// Gege...
© OPITZ CONSULTING GmbH 2013 Seite 27Zum Beispiel ein TestJUnit Test@Testpublic void calculateArmortisationTest() {// Gege...
© OPITZ CONSULTING GmbH 2013 Seite 28Zum Beispiel ein TestJUnit Test@Testpublic void calculateArmortisationTest() {// Gege...
© OPITZ CONSULTING GmbH 2013 Seite 29Zum Beispiel ein TestTestdata Factoryerzeugt Domänen-Objektegefüllt mit Default-Daten...
© OPITZ CONSULTING GmbH 2013 Seite 30Zum Beispiel ein TestConfigurable Entitypublic class ConfigurableInvestmentPosition e...
© OPITZ CONSULTING GmbH 2013 Seite 31Zum Beispiel ein TestTestdata Factorypublic class InvestmentPositionFactory {private ...
© OPITZ CONSULTING GmbH 2013 Seite 32Zum Beispiel ein TestBesserer JUnit Test@Testpublic void betterCalculateArmortisation...
© OPITZ CONSULTING GmbH 2013 Seite 33Zum Beispiel ein TestAkzeptanztest Frameworkshttp://jbehave.org/ http://cukes.info/ht...
© OPITZ CONSULTING GmbH 2013 Seite 34Zum Beispiel ein TestAkzeptanztest Frameworkshttp://jbehave.org/
© OPITZ CONSULTING GmbH 2013 Seite 35Zum Beispiel ein TestUser Storycalculate_armortisation_of_an_investment_position.stor...
© OPITZ CONSULTING GmbH 2013 Seite 36Zum Beispiel ein TestMapped Stepspublic class CalculateArmortisationSteps {private In...
© OPITZ CONSULTING GmbH 2013 Seite 37Zum Beispiel ein TestTestergebnis
© OPITZ CONSULTING GmbH 2013 Seite 38Zum Beispiel ein TestFehlerfall
© OPITZ CONSULTING GmbH 2013 Seite 39Zum Beispiel ein TestAkzeptanztest Frameworkshttp://www.concordion.org/
© OPITZ CONSULTING GmbH 2013 Seite 40Zum Beispiel ein TestSpezifikation<html xmlns:concordion="http://www.concordion.org/2...
© OPITZ CONSULTING GmbH 2013 Seite 41Zum Beispiel ein TestFixture@RunWith(ConcordionRunner.class)public class CalculateArm...
© OPITZ CONSULTING GmbH 2013 Seite 42Zum Beispiel ein TestFixturepublic String armortisationStart(InvestmentPosition inves...
© OPITZ CONSULTING GmbH 2013 Seite 43Zum Beispiel ein TestTestergebnis
© OPITZ CONSULTING GmbH 2013 Seite 44Zum Beispiel ein TestFehlerfall
© OPITZ CONSULTING GmbH 2013 Seite 45Zum Beispiel ein TestFehlerfall
© OPITZ CONSULTING GmbH 2013 Seite 46Zum Beispiel ein TestLebende Spezifikation Beschreibung der vollständigen Funktional...
© OPITZ CONSULTING GmbH 2013 Seite 47Zum Beispiel ein TestReferenzen Code-Beispiele:https://github.com/torstenmandry/test...
© OPITZ CONSULTING GmbH 2013 Seite 48Zum Beispiel ein TestDanke für Ihre Aufmerksamkeit
Nächste SlideShare
Wird geladen in …5
×

Zum Beispiel ein Test

912 Aufrufe

Veröffentlicht am

Beispiele als Grundlage für Anforderungsanalyse, Spezifikation und Implementierung

Beispiele helfen in der Analysephase die Kundenanforderungen zu verstehen und zu diskutieren. Später können diese dann als Basis für automatisierte Akzeptanztests verwendet werden. Klingt ganz einfach? In der Praxis kann es jedoch einige Hürden geben, insbesondere wenn es um die Erweiterung einer existierenden Anwendung geht. Im Vortrag werden Erfahrungen aus einem Kundenprojekt geschildert und unterschiedliche Möglichkeiten aufgezeigt um aus definierten Beispielen automatisierte Akzeptanztests abzuleiten.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
912
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
236
Aktionen
Geteilt
0
Downloads
0
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Zum Beispiel ein Test

  1. 1. © OPITZ CONSULTING GmbH 2013 Seite 1Zum Beispiel ein TestZum Beispiel ein TestBeispiele als Grundlage fürAnforderungsanalyse, Spezifikation und Implementierung
  2. 2. © OPITZ CONSULTING GmbH 2013 Seite 2Zum Beispiel ein TestZu meiner PersonTorsten MandrySolution ArchitectOPITZ CONSULTING Deutschland GmbHEntwurf und Entwicklung vonEnterprise Java AnwendungenAnforderungsanalyse undautomatisiertes TestenE-Mail: torsten.mandry@opitz-consulting.comTwitter: @torstenmandryGoogle: +torsten.mandry
  3. 3. © OPITZ CONSULTING GmbH 2013 Seite 3Zum Beispiel ein TestMärkteJavaSOAORACLEBI/DWHOuttaskingKundenBranchen-übergreifendÜber 600KundenLeistungs-angebotIT-StrategieBeratungImplementierungBetriebTrainingFaktenGründung 1990400 Mitarbeiter8 Standorte inD/PLIndustrie / Versorger /Telekommunikation29%Handel / Logistik /Dienstleistungen29%42%Öffentliche Auftraggeber /Banken & Versicherungen /Vereine & Verbände© OPITZ CONSULTING GmbH 2011
  4. 4. © OPITZ CONSULTING GmbH 2013 Seite 4Zum Beispiel ein TestAgenda• Erfahrungen undErkenntnisse• Verwendung vonBeispielen• Vom Beispielzum Test• AkzeptanztestFrameworksFoto: arquera@Flickr
  5. 5. © OPITZ CONSULTING GmbH 2013 Seite 5Zum Beispiel ein TestFoto: Brady Withers@FlickrErfahrungen und Erkenntnisse
  6. 6. © OPITZ CONSULTING GmbH 2013 Seite 6Zum Beispiel ein TestEntwicklung eines neuen FeaturesAnalystAuftraggeber EntwicklerAnforderung(en) Spezifikation Implementierung
  7. 7. © OPITZ CONSULTING GmbH 2013 Seite 7Zum Beispiel ein TestHäufiges ErgebnisBild: dullhunk@Flickr
  8. 8. © OPITZ CONSULTING GmbH 2013 Seite 8Zum Beispiel ein TestSpezifikation wird interpretiertAuftraggeber Analyst Entwickler
  9. 9. © OPITZ CONSULTING GmbH 2013 Seite 9Zum Beispiel ein TestWas läuft schief?Wir spezifizierenmissverständlichWir verstehen „Problem“des Kunden nichtWir kennen die Kriteriendes Kunden nichtWir haben keingemeinsamesVerständnisFoto: Horia Varlan@Flickr
  10. 10. © OPITZ CONSULTING GmbH 2013 Seite 10Zum Beispiel ein TestBeispieleFoto: jonny goldstein@Flickr
  11. 11. © OPITZ CONSULTING GmbH 2013 Seite 11Zum Beispiel ein TestFoto: bridgells@photobucket.com???Eine übliche AnforderungDie Afa einer Investition ergibt sich aus demInvestitionswert, linear verteilt über denAbschreibungszeitraum, beginnend mit demMonat der Aktivierung!
  12. 12. © OPITZ CONSULTING GmbH 2013 Seite 12Zum Beispiel ein TestKönnen Sie uns dazu ein Beispiel nennen?Wenn wir eine Investition im Wert von 600 TEURgetätigt haben, die am 01.01.2012 aktiviert wurde,dann folgt daraus, bei einer Abschreibungsdauervon 60 Monaten, eine monatliche AfA in Höhe von10 TEUR und zwar von Jan/2012 bis Dez/2016.
  13. 13. © OPITZ CONSULTING GmbH 2013 Seite 13Zum Beispiel ein TestEtwas anders formuliert…dann folgt darauseine monatliche AfAin Höhe von 10 TEURin der Zeit von Jan/2012 bis Dez/2016.Wenn wir die Afa berechnenWir haben eine Investitionim Wert von 600 TEURaktiviert am 01.01.2012und eine Abschreibungsdauer von 60 MonatenAusgangssituation / -zustandAktion / EreignisErwartetes Ergebnis
  14. 14. © OPITZ CONSULTING GmbH 2013 Seite 14Zum Beispiel ein TestBeispiele helfen… veranschaulichen / verdeutlichen decken Fragen / Lücken auf zwingen zum Nachdenken führen zu weiteren / detaillierteren Beispielen können nachgestellt werdenFoto: therichbrooks@Flickr
  15. 15. © OPITZ CONSULTING GmbH 2013 Seite 15Zum Beispiel ein Test…können aber schwierig sein ungewohnt / erfordern Übung komplexe Zusammenhänge viele Einflussfaktoren / Vorbedingungen was ist relevant, was nicht? Auf das Wesentliche KonzentrierenFoto: andrewrennie@Flickr
  16. 16. © OPITZ CONSULTING GmbH 2013 Seite 16Zum Beispiel ein Test„Nachspezifikation“„Das haben wir doch alles schon mal besprochen!“„Alles wie bisher, nur...“ GrundlegendeBeispiele als BasisFoto: electricnerve@Flickr
  17. 17. © OPITZ CONSULTING GmbH 2013 Seite 17Zum Beispiel ein TestFoto: anieto2k@FlickrSpezifikation wird durch Beispielenicht einfacher……sondern besser!
  18. 18. © OPITZ CONSULTING GmbH 2013 Seite 18Zum Beispiel ein TestSpecification by ExampleBeispiele als alleinige Spezifikation alle relevante Funktionalität vollständig mit Beispielen beschrieben keine „Prosa“-Spezifikation mehr notwendigFoto: VickyvS@flickr.com
  19. 19. © OPITZ CONSULTING GmbH 2013 Seite 19Zum Beispiel ein Test„sanfter“ MittelwegBeispiele als Ergänzungzur Prosa-Spezifikation Prosa Problemstellung / Motivation Rahmenbedingungen Hintergründe Beispiele Verdeutlichung / Detaillierung Sonder- / Randfälle KonkretisierungFoto: tinyfroglet@Flickr
  20. 20. © OPITZ CONSULTING GmbH 2013 Seite 20Zum Beispiel ein TestBeispiele als „Definition of Done“Wenn alle definierten Beispieleerfolgreich durchlaufen werdenist das Feature fertigFoto: jayneandd@flickr.com
  21. 21. © OPITZ CONSULTING GmbH 2013 Seite 21Zum Beispiel ein TestVom Beispiel zum Test
  22. 22. © OPITZ CONSULTING GmbH 2013 Seite 22Zum Beispiel ein Testpublic class InvestmentPosition extends Position {…public void calculateArmortisation() {if (initiationDate == null)throw new IllegalStateException("initiation date not set");if (amount == null)throw new IllegalStateException("amount not set");if (project == null)throw new IllegalStateException("project not set");if (project.getStartDate() == null || project.getEndDate() == null)throw new IllegalStateException("project start/end date not set");armortisation.clear();int armortisationMonths = ProjectManagementApp.getInstance().getArmortisationMonths();BigDecimal monthlyAmount = amount.divide(BigDecimal.valueOf(armortisationMonths));for (int i = 0; i < armortisationMonths; i++) {Calendar monthYear = new GregorianCalendar();monthYear.setTime(initiationDate);monthYear.add(Calendar.MONTH, i);int month = monthYear.get(Calendar.MONTH) + 1;int year = monthYear.get(Calendar.YEAR);armortisation.add(new PositionValue(this, month, year, monthlyAmount));}}…}Code Beispiel
  23. 23. © OPITZ CONSULTING GmbH 2013 Seite 23Zum Beispiel ein TestUnser Beispiel von ebendann folgt darauseine monatliche AfAin Höhe von 10 TEURin der Zeit von Jan/2012 bis Dez/2016.Wenn wir die Afa berechnenWir haben eine Investitionim Wert von 600 TEURaktiviert am 01.01.2012und eine Abschreibungsdauer von 60 MonatenAusgangssituation / -zustandAktion / EreignisErwartetes Ergebnis
  24. 24. © OPITZ CONSULTING GmbH 2013 Seite 24Zum Beispiel ein TestJUnit Test@Testpublic void calculateArmortisationTest() {// Gegeben sei eine InvestitionInvestmentPosition investment = new InvestmentPosition("any position name");// im Wert von 600 TEURinvestment.setAmount(BigDecimal.valueOf(600000));// aktiviert am 01.01.2012investment.setInitiationDate(new GregorianCalendar(2012, 1 - 1, 1).getTime());// und eine Abschreibungsdauer von 60 MonatenProjectManagementApp.getInstance().setArmortisationMonths(60);// und noch einiges mehr...Project project = new Project("any project name");project.addPosition(investment);project.setStartDate(new GregorianCalendar(2012, 1 - 1, 1).getTime());project.setEndDate(new GregorianCalendar(2013, 12 - 1, 31).getTime());// wenn die Abschreibung berechnet wirdinvestment.calculateArmortisation();// dann folgt daraus eine monatliche Abschreibung in Höhe von 10 TEUR// in der Zeit von 01/2012 bis 12/2016assertEquals("number of armortisation values", 60, investment.getArmortisation().size());for (int i = 0; i < 60; i++) {PositionValue value = investment.getArmortisation().get(i);Calendar expectedMonthYear = new GregorianCalendar(2012, 1 - 1, 1);expectedMonthYear.add(Calendar.MONTH, i);assertEquals(format("value %d - month", i), expectedMonthYear.get(Calendar.MONTH) + 1, value.getMonth());assertEquals(format("value %d - year", i), expectedMonthYear.get(Calendar.YEAR), value.getYear());assertEquals(format("value %d - amount", i), BigDecimal.valueOf(10000), value.getAmount());}}
  25. 25. © OPITZ CONSULTING GmbH 2013 Seite 25Zum Beispiel ein TestJUnit Test@Testpublic void calculateArmortisationTest() {// Gegeben sei eine InvestitionInvestmentPosition investment = new InvestmentPosition("any position name");// im Wert von 600 TEURinvestment.setAmount(BigDecimal.valueOf(600000));// aktiviert am 01.01.2012investment.setInitiationDate(new GregorianCalendar(2012, 1 - 1, 1).getTime());// und eine Abschreibungsdauer von 60 MonatenProjectManagementApp.getInstance().setArmortisationMonths(60);// und noch einiges mehr...Project project = new Project("any project name");project.addPosition(investment);project.setStartDate(new GregorianCalendar(2012, 1 - 1, 1).getTime());project.setEndDate(new GregorianCalendar(2013, 12 - 1, 31).getTime());// wenn die Abschreibung berechnet wirdinvestment.calculateArmortisation();// dann folgt daraus eine monatliche Abschreibung in Höhe von 10 TEUR// in der Zeit von 01/2012 bis 12/2016assertEquals("number of armortisation values", 60, investment.getArmortisation().size());for (int i = 0; i < 60; i++) {PositionValue value = investment.getArmortisation().get(i);Calendar expectedMonthYear = new GregorianCalendar(2012, 1 - 1, 1);expectedMonthYear.add(Calendar.MONTH, i);assertEquals(format("value %d - month", i), expectedMonthYear.get(Calendar.MONTH) + 1, value.getMonth());assertEquals(format("value %d - year", i), expectedMonthYear.get(Calendar.YEAR), value.getYear());assertEquals(format("value %d - amount", i), BigDecimal.valueOf(10000), value.getAmount());}}// Gegeben sei eine InvestitionInvestmentPosition investment = new InvestmentPosition("any position name");// im Wert von 600 TEURinvestment.setAmount(BigDecimal.valueOf(600000));// aktiviert am 01.01.2012investment.setInitiationDate(new GregorianCalendar(2012, 1 - 1, 1).getTime());// und eine Abschreibungsdauer von 60 MonatenProjectManagementApp.getInstance().setArmortisationMonths(60);
  26. 26. © OPITZ CONSULTING GmbH 2013 Seite 26Zum Beispiel ein TestJUnit Test@Testpublic void calculateArmortisationTest() {// Gegeben sei eine InvestitionInvestmentPosition investment = new InvestmentPosition("any position name");// im Wert von 600 TEURinvestment.setAmount(BigDecimal.valueOf(600000));// aktiviert am 01.01.2012investment.setInitiationDate(new GregorianCalendar(2012, 1 - 1, 1).getTime());// und eine Abschreibungsdauer von 60 MonatenProjectManagementApp.getInstance().setArmortisationMonths(60);// und noch einiges mehr...Project project = new Project("any project name");project.addPosition(investment);project.setStartDate(new GregorianCalendar(2012, 1 - 1, 1).getTime());project.setEndDate(new GregorianCalendar(2013, 12 - 1, 31).getTime());// wenn die Abschreibung berechnet wirdinvestment.calculateArmortisation();// dann folgt daraus eine monatliche Abschreibung in Höhe von 10 TEUR// in der Zeit von 01/2012 bis 12/2016assertEquals("number of armortisation values", 60, investment.getArmortisation().size());for (int i = 0; i < 60; i++) {PositionValue value = investment.getArmortisation().get(i);Calendar expectedMonthYear = new GregorianCalendar(2012, 1 - 1, 1);expectedMonthYear.add(Calendar.MONTH, i);assertEquals(format("value %d - month", i), expectedMonthYear.get(Calendar.MONTH) + 1, value.getMonth());assertEquals(format("value %d - year", i), expectedMonthYear.get(Calendar.YEAR), value.getYear());assertEquals(format("value %d - amount", i), BigDecimal.valueOf(10000), value.getAmount());}}// und noch einiges mehr...Project project = new Project("any project name");project.addPosition(investment);project.setStartDate(new GregorianCalendar(2012, 1 - 1, 1).getTime());project.setEndDate(new GregorianCalendar(2013, 12 - 1, 31).getTime());
  27. 27. © OPITZ CONSULTING GmbH 2013 Seite 27Zum Beispiel ein TestJUnit Test@Testpublic void calculateArmortisationTest() {// Gegeben sei eine InvestitionInvestmentPosition investment = new InvestmentPosition("any position name");// im Wert von 600 TEURinvestment.setAmount(BigDecimal.valueOf(600000));// aktiviert am 01.01.2012investment.setInitiationDate(new GregorianCalendar(2012, 1 - 1, 1).getTime());// und eine Abschreibungsdauer von 60 MonatenProjectManagementApp.getInstance().setArmortisationMonths(60);// und noch einiges mehr...Project project = new Project("any project name");project.addPosition(investment);project.setStartDate(new GregorianCalendar(2012, 1 - 1, 1).getTime());project.setEndDate(new GregorianCalendar(2013, 12 - 1, 31).getTime());// wenn die Abschreibung berechnet wirdinvestment.calculateArmortisation();// dann folgt daraus eine monatliche Abschreibung in Höhe von 10 TEUR// in der Zeit von 01/2012 bis 12/2016assertEquals("number of armortisation values", 60, investment.getArmortisation().size());for (int i = 0; i < 60; i++) {PositionValue value = investment.getArmortisation().get(i);Calendar expectedMonthYear = new GregorianCalendar(2012, 1 - 1, 1);expectedMonthYear.add(Calendar.MONTH, i);assertEquals(format("value %d - month", i), expectedMonthYear.get(Calendar.MONTH) + 1, value.getMonth());assertEquals(format("value %d - year", i), expectedMonthYear.get(Calendar.YEAR), value.getYear());assertEquals(format("value %d - amount", i), BigDecimal.valueOf(10000), value.getAmount());}}// wenn die Abschreibung berechnet wirdinvestment.calculateArmortisation();
  28. 28. © OPITZ CONSULTING GmbH 2013 Seite 28Zum Beispiel ein TestJUnit Test@Testpublic void calculateArmortisationTest() {// Gegeben sei eine InvestitionInvestmentPosition investment = new InvestmentPosition("any position name");// im Wert von 600 TEURinvestment.setAmount(BigDecimal.valueOf(600000));// aktiviert am 01.01.2012investment.setInitiationDate(new GregorianCalendar(2012, 1 - 1, 1).getTime());// und eine Abschreibungsdauer von 60 MonatenProjectManagementApp.getInstance().setArmortisationMonths(60);// und noch einiges mehr...Project project = new Project("any project name");project.addPosition(investment);project.setStartDate(new GregorianCalendar(2012, 1 - 1, 1).getTime());project.setEndDate(new GregorianCalendar(2013, 12 - 1, 31).getTime());// wenn die Abschreibung berechnet wirdinvestment.calculateArmortisation();// dann folgt daraus eine monatliche Abschreibung in Höhe von 10 TEUR// in der Zeit von 01/2012 bis 12/2016assertEquals("number of armortisation values", 60, investment.getArmortisation().size());for (int i = 0; i < 60; i++) {PositionValue value = investment.getArmortisation().get(i);Calendar expectedMonthYear = new GregorianCalendar(2012, 1 - 1, 1);expectedMonthYear.add(Calendar.MONTH, i);assertEquals(format("value %d - month", i), expectedMonthYear.get(Calendar.MONTH) + 1, value.getMonth());assertEquals(format("value %d - year", i), expectedMonthYear.get(Calendar.YEAR), value.getYear());assertEquals(format("value %d - amount", i), BigDecimal.valueOf(10000), value.getAmount());}}// dann folgt daraus eine monatliche Abschreibung in Höhe von 10 TEUR// in der Zeit von 01/2012 bis 12/2016assertEquals("number of armortisation values", 60,investment.getArmortisation().size());for (int i = 0; i < 60; i++) {PositionValue value = investment.getArmortisation().get(i);Calendar expectedMonthYear = new GregorianCalendar(2012, 1 - 1, 1);expectedMonthYear.add(Calendar.MONTH, i);assertEquals(format("value %d - month", i),expectedMonthYear.get(Calendar.MONTH) + 1, value.getMonth());assertEquals(format("value %d - year", i),expectedMonthYear.get(Calendar.YEAR), value.getYear());assertEquals(format("value %d - amount", i), BigDecimal.valueOf(10000),value.getAmount());}
  29. 29. © OPITZ CONSULTING GmbH 2013 Seite 29Zum Beispiel ein TestTestdata Factoryerzeugt Domänen-Objektegefüllt mit Default-Datenvollständig valideZwei nützliche HelferConfigurable Entityermöglich konfigurierenFluent InterfaceFoto: florianric@Flickr
  30. 30. © OPITZ CONSULTING GmbH 2013 Seite 30Zum Beispiel ein TestConfigurable Entitypublic class ConfigurableInvestmentPosition extends InvestmentPosition {public ConfigurableInvestmentPosition(String name) {super(name);}public ConfigurableInvestmentPosition withAmount(double amount) {this.setAmount(BigDecimal.valueOf(amount));return this;}public ConfigurableInvestmentPosition withInitiationDate(Date initiationDate) {this.setInitiationDate(initiationDate);return this;}public ConfigurableInvestmentPosition withInitiationDate(int day,int month, int year) {this.setInitiationDate(DateBuilder.givenDate(day, month, year).toDate();return this;}…}
  31. 31. © OPITZ CONSULTING GmbH 2013 Seite 31Zum Beispiel ein TestTestdata Factorypublic class InvestmentPositionFactory {private static final String DEFAULT_NAME = "any position name";private static final double DEFAULT_AMOUNT = 100000;private static final Date DEFAULT_INITIATION_DATE =DateBuilder.givenDate(1, 1, 2012).toDate();private static final String DEFAULT_COST_CENTER = "66666";public static ConfigurableInvestmentPosition createDefault() {ConfigurableInvestmentPosition investmentPosition =new ConfigurableInvestmentPosition(DEFAULT_NAME).withAmount(DEFAULT_AMOUNT).withInitiationDate(DEFAULT_INITIATION_DATE).withCostCenter(DEFAULT_COST_CENTER);Project project = ProjectFactory.createDefault();project.addPosition(investmentPosition);return investmentPosition;}}
  32. 32. © OPITZ CONSULTING GmbH 2013 Seite 32Zum Beispiel ein TestBesserer JUnit Test@Testpublic void betterCalculateArmortisationTest() {// Gegeben sei eine Investition// im Wert von 600 TEUR// aktiviert am 01.01.2012InvestmentPosition investment = InvestmentPositionFactory.createDefault().withAmount(600000).withInitiationDate(1, 1, 2012);// und eine Abschreibungsdauer von 60 MonatenProjectManagementApp.getInstance().setArmortisationMonths(60);// wenn die Abschreibung berechnet wirdinvestment.calculateArmortisation();// dann folgt daraus eine monatliche Abschreibung in Höhe von 10 TEUR// in der Zeit von 01/2012 bis 12/2016assertThat(investment.getArmortisation(), hasConstantAmount(10000));assertThat(investment.getArmortisation(), containsMonthsFromTo( 1, 2012,12, 2016));}HamcrestMatchers
  33. 33. © OPITZ CONSULTING GmbH 2013 Seite 33Zum Beispiel ein TestAkzeptanztest Frameworkshttp://jbehave.org/ http://cukes.info/http://www.concordion.org/
  34. 34. © OPITZ CONSULTING GmbH 2013 Seite 34Zum Beispiel ein TestAkzeptanztest Frameworkshttp://jbehave.org/
  35. 35. © OPITZ CONSULTING GmbH 2013 Seite 35Zum Beispiel ein TestUser Storycalculate_armortisation_of_an_investment_position.storyNarrative:As a userI want to calculate the armortisation of an investment positionSo that I can see the monthly armortisation amountsScenario: calculate armortisation for 600000 EUR and 60 monthsGiven an investment position with amount 600000 EUR initiated on 01.01.2012And an armortisation time of 60 monthsWhen I calculate the armortisation of the investment positionThen the monthly armortisation amount is 10000 EURAnd the armortisation runs from 01/2012 to 12/2016Scenario: calculate armortisation for 30000 EUR and 24 monthsGiven an investment position with amount 30000 EUR initiated on 01.01.2012And an armortisation time of 24 monthsWhen I calculate the armortisation of the investment positionThen the monthly armortisation amount is 1250 EURAnd the armortisation runs from 01/2012 to 12/2013
  36. 36. © OPITZ CONSULTING GmbH 2013 Seite 36Zum Beispiel ein TestMapped Stepspublic class CalculateArmortisationSteps {private InvestmentPosition investment;@Given("an investment position with amount $amount EUR initiated on $initiationDate")public void setupInvestmentPosition(double amount, String initiationDate) {investment = InvestmentPositionFactory.createDefault().withAmount(amount).withInitiationDate(initiationDate);}@Given("an armortisation time of $months months")public void setupArmortisationPeriod(int months) {ProjectManagementApp.getInstance().setArmortisationMonths(months);}@When("I calculate the armortisation of the investment position")public void calculateArmortisation() {investment.calculateArmortisation();}@Then("the monthly armortisation amount is $amount EUR")public void assertMonthlyArmortisationAmount(double amount) {assertThat(investment.getArmortisation(), hasConstantAmount(amount));}…}
  37. 37. © OPITZ CONSULTING GmbH 2013 Seite 37Zum Beispiel ein TestTestergebnis
  38. 38. © OPITZ CONSULTING GmbH 2013 Seite 38Zum Beispiel ein TestFehlerfall
  39. 39. © OPITZ CONSULTING GmbH 2013 Seite 39Zum Beispiel ein TestAkzeptanztest Frameworkshttp://www.concordion.org/
  40. 40. © OPITZ CONSULTING GmbH 2013 Seite 40Zum Beispiel ein TestSpezifikation<html xmlns:concordion="http://www.concordion.org/2007/concordion"><body><h1>Calculate armortisation of an investment position</h1>…<div class="example"><h3>Scenario: calculate armortisation for 600000 EUR and 60 months</h3><p concordion:execute="#investment = setupInvestmentPosition(#amount, #initiationDate)">Given an investment positionwith amount <strong concordion:set="#amount">600000</strong> EURinitiated on <strong concordion:set="#initiationDate">01.01.2012</strong></p><p concordion:execute="setupArmortisationTime(#months)">And an armortisation time of <strong concordion:set="#months">60</strong> months</p><p>When I <strong concordion:execute="calculateArmortisation(#investment)">calculatethe armortisation of the investment position</strong></p><p>Then the monthly armortisation amount is <strong concordion:assertEquals="monthlyArmortisationAmount(#investment)">10000,00</strong> EUR</p><p>And the armortisation runsfrom <strong concordion:assertEquals="armortisationStart(#investment)">01/2012</strong>to <strong concordion:assertEquals="armortisationEnd(#investment)">12/2016</strong>…
  41. 41. © OPITZ CONSULTING GmbH 2013 Seite 41Zum Beispiel ein TestFixture@RunWith(ConcordionRunner.class)public class CalculateArmortisationOfAnInvestmentPositionFixture {public InvestmentPosition setupInvestmentPosition(double amount,String initiationDate) {return InvestmentPositionFactory.createDefault().withAmount(amount).withInitiationDate(initiationDate);}public void setupArmortisationTime(int months) {ProjectManagementApp.getInstance().setArmortisationMonths(months);}public void calculateArmortisation(InvestmentPosition investment) {investment.calculateArmortisation();}…
  42. 42. © OPITZ CONSULTING GmbH 2013 Seite 42Zum Beispiel ein TestFixturepublic String armortisationStart(InvestmentPosition investment) {PositionValue firstValue = getSortedPositionValues(investment).get(0);return format("%02d/%4d", firstValue.getMonth(), firstValue.getYear());}public String armortisationEnd(InvestmentPosition investment) {List<PositionValue> values = getSortedPositionValues(investment);PositionValue lastValue = values.get(values.size() - 1);return format("%02d/%4d", lastValue.getMonth(), lastValue.getYear());}public boolean isContinousArmortisation(InvestmentPosition investment) {return containsMonthsFromTo(armortisationStart(investment),armortisationEnd(investment)).matches(investment.getArmortisation());}…
  43. 43. © OPITZ CONSULTING GmbH 2013 Seite 43Zum Beispiel ein TestTestergebnis
  44. 44. © OPITZ CONSULTING GmbH 2013 Seite 44Zum Beispiel ein TestFehlerfall
  45. 45. © OPITZ CONSULTING GmbH 2013 Seite 45Zum Beispiel ein TestFehlerfall
  46. 46. © OPITZ CONSULTING GmbH 2013 Seite 46Zum Beispiel ein TestLebende Spezifikation Beschreibung der vollständigen Funktionalität in Form von automatisierten Akzeptanztests
  47. 47. © OPITZ CONSULTING GmbH 2013 Seite 47Zum Beispiel ein TestReferenzen Code-Beispiele:https://github.com/torstenmandry/testing-samples Torsten Mandry: “Configurable entities with fluentinterface”, http://javandry.blogspot.de/2012/11/configurable-entities-with-fluent.html, 2012 Gojko Adzic: „Bridging the Communication Gap –Specification by Example and Agile Acceptance Testing”,Neuri Limited, 2011 JBehave: http://jbehave.org/ Cucumber: http://cukes.info/ Concordion: http://www.concordion.org/
  48. 48. © OPITZ CONSULTING GmbH 2013 Seite 48Zum Beispiel ein TestDanke für Ihre Aufmerksamkeit

×