BDD: Økonomisystemet, som vil forandre verden som vi kender den
For at holde fokus med mine indlæg om BDD, har jeg startet et lille økonomisystemsprojekt, som jeg kalder EconomyDeluxe. Det kan virke som en fuldstændig uoverskuelig opgave - men det er netop den slags projekter, som kan få allermest ud af BDD, fordi vi kan dele projektet op i User Stories (opgaver, som en given bruger gerne vil kunne løse med applikationen) og Acceptance Criteria (hvornår løser applikationen lige netop den User Story vi beskæftiger os med i tilstrækkelig grad).
Det første skridt på vejen er at få skabt et Ubiquitous Language, UL (ikke-tolkbart sprog, dvs. alle ord har én og kun en betydning i denne kontekst). Her løber vi ind i første hurdle - skal man lave UL på dansk eller engelsk? Der er ikke et entydigt svar, og det ville række for vidt at tage den store diskussion her, så jeg har valgt engelsk. Det kan virke mærkeligt eftersom denne blog er på dansk, men mine læsere bør kunne engelsk til husbehov eftersom de er programmører - og da jeg ikke har en kunde i den anden ende (endnu), er jeg kun en om at skulle være enig om hvad de forskellige termer betyder. Desuden, hvis jeg skulle få den ide på et tidspunkt at oversætte denne artikelrække til engelsk, ville det lette opgaven betydeligt. Som et sidste (og dårligt) argument, kræver min æstetiske sans, at jeg programmerer på engelsk…
Eksempler på UL-termer for et simpelt økonomisystem kunne være:
- Bogholder (Accountant). En typisk bruger af applikationen, som sørger for indtastning.
- KontoPlan/Balance (GeneralLedger). En liste af FinansKonti, som giver et overblik over summen af FinansPosteringer på alle FinansKonti over BogføringsPeriode.
- FinansKonto (LedgerAccount). En gruppering af FinansPosteringer med et fælles formål.
- FinansPosteringer (LedgerEntry). En postering, som viser den beløbsmæssige påvirkning en disposition forårsager. Af revisions- og skattemæssige årsager, er FinansPosteringer ikke redigerbare efter de er dannet.
- FinansKladde (LedgerDraft). En midlertidig samling af FinansKladdeLinjer, som efter at de er gemt bliver til et antal FinansTransaktioner.
- FinansKladdeLinjer (LedgerEntryDraft). En midlertidig representation af en redigerbar FinansPostering.
- FinansTransaktion (FinancialTransaction). En samling af posteringer, som til sammen giver en debet/kredit påvirkning på 0 (det dobbelte bogholderis princip).
- BogføringsPeriode (BookKeepingPeriods). En arbitrær tidsperiode, der typisk strækker sig over et antal måneder.
Som det ses, har jeg gjort en del ud af at gøre sproget så præcist som muligt. Hvis der havde været flere om projektet, ville jeg have uddybet det yderligere og arbejdet meget med at gøre de valgte ord tydelige nok, til at alle var klar over den entydige betydning af termerne. Jeg har samlet mit UL på en statisk side (linket er også vist under “Navigation”), så det er muligt at få et samlet overblik over projektet, som det udvikler sig. Det vil ændre sig efterhånden som projektet skrider frem.