Your SlideShare is downloading. ×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

"Zum Beispiel ein Test" - Beispiele als Grundlage für Anforderungsanalyse, Spezifikation und Implementierung

975
views

Published on

http://www.opitz-consulting.com/go/3-4-894 …

http://www.opitz-consulting.com/go/3-4-894

Beispiele helfen in der Analysephase, 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.

In einem Vortrag bei der DOAG Development 2013 schilderte Torsten Mandry, Solution Architect bei OPITZ CONSULTING, seine Erfahrungen aus einem Kundenprojekt.

--
Über uns:
Als führender Projektspezialist für ganzheitliche IT-Lösungen tragen wir zur Wertsteigerung der Organisationen unserer Kunden bei und bringen IT und Business in Einklang. Mit OPITZ CONSULTING als zuverlässigem Partner können sich unsere Kunden auf ihr Kerngeschäft konzentrieren und ihre Wettbewerbsvorteile nachhaltig absichern und ausbauen.

Über unsere IT-Beratung: http://www.opitz-consulting.com/go/3-8-10
Unser Leistungsangebot: http://www.opitz-consulting.com/go/3-8-874
Karriere bei OPITZ CONSULTING: http://www.opitz-consulting.com/go/3-8-5

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
975
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. © OPITZ CONSULTING GmbH 2013 Seite 1Zum Beispiel ein TestZum Beispiel ein TestBeispiele als Grundlage fürAnforderungsanalyse, Spezifikation und Implementierung
  • 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. © 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. © OPITZ CONSULTING GmbH 2013 Seite 4Zum Beispiel ein TestAgenda• Erfahrungen undErkenntnisse• Verwendung vonBeispielen• Vom Beispielzum Test• AkzeptanztestFrameworksFoto: arquera@Flickr
  • 5. © OPITZ CONSULTING GmbH 2013 Seite 5Zum Beispiel ein TestFoto: Brady Withers@FlickrErfahrungen und Erkenntnisse
  • 6. © OPITZ CONSULTING GmbH 2013 Seite 6Zum Beispiel ein TestEntwicklung eines neuen FeaturesAnalystAuftraggeber EntwicklerAnforderung(en) Spezifikation Implementierung
  • 7. © OPITZ CONSULTING GmbH 2013 Seite 7Zum Beispiel ein TestHäufiges ErgebnisBild: dullhunk@Flickr
  • 8. © OPITZ CONSULTING GmbH 2013 Seite 8Zum Beispiel ein TestSpezifikation wird interpretiertAuftraggeber Analyst Entwickler
  • 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. © OPITZ CONSULTING GmbH 2013 Seite 10Zum Beispiel ein TestBeispieleFoto: jonny goldstein@Flickr
  • 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. © 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. © 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. © 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. © 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. © 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. © OPITZ CONSULTING GmbH 2013 Seite 17Zum Beispiel ein TestFoto: anieto2k@FlickrSpezifikation wird durch Beispielenicht einfacher……sondern besser!
  • 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. © 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. © 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. © OPITZ CONSULTING GmbH 2013 Seite 21Zum Beispiel ein TestVom Beispiel zum Test
  • 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. © 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. © 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. © 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. © 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. © 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. © 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. © 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. © 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. © 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. © 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. © OPITZ CONSULTING GmbH 2013 Seite 33Zum Beispiel ein TestAkzeptanztest Frameworkshttp://jbehave.org/ http://cukes.info/http://www.concordion.org/
  • 34. © OPITZ CONSULTING GmbH 2013 Seite 34Zum Beispiel ein TestAkzeptanztest Frameworkshttp://jbehave.org/
  • 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. © 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. © OPITZ CONSULTING GmbH 2013 Seite 37Zum Beispiel ein TestTestergebnis
  • 38. © OPITZ CONSULTING GmbH 2013 Seite 38Zum Beispiel ein TestFehlerfall
  • 39. © OPITZ CONSULTING GmbH 2013 Seite 39Zum Beispiel ein TestAkzeptanztest Frameworkshttp://www.concordion.org/
  • 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. © 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. © 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. © OPITZ CONSULTING GmbH 2013 Seite 43Zum Beispiel ein TestTestergebnis
  • 44. © OPITZ CONSULTING GmbH 2013 Seite 44Zum Beispiel ein TestFehlerfall
  • 45. © OPITZ CONSULTING GmbH 2013 Seite 45Zum Beispiel ein TestFehlerfall
  • 46. © OPITZ CONSULTING GmbH 2013 Seite 46Zum Beispiel ein TestLebende Spezifikation Beschreibung der vollständigen Funktionalität in Form von automatisierten Akzeptanztests
  • 47. © OPITZ CONSULTING GmbH 2013 Seite 47Zum Beispiel ein TestReferenzen Code-Beispiele:https://github.com/torstenmandry/testing-samples Torsten Mandry: “Configurable entities with fluent interface”,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. © OPITZ CONSULTING GmbH 2013 Seite 48Zum Beispiel ein TestDanke für Ihre Aufmerksamkeit

×