Vývoj clearingového systému CARDS EXCHANGE a aplikované nástroje softwarového inženýra Jiří Mareš ČSAD SVT Praha s.r.o
Něco o mě ● Vystudoval jsem FEL ČVUT ● 14 let vyvíjím software ● Posledních 7 let v SVT ● V SVT jsem se hodně zaměřil na kvalitu kódu Něco o SVT ● Existuje 30 let, od 1991 s.r.o. ● Více než 25 let zkušeností s AMS ● Od roku 2006 držitelem ISO 9001:2000
Clearingový systém CARDS EXCHANGE ● Motivace: umožnění křížového používání čipových karet mezi dopravci ve Středočeském kraji s vypočtením objemu plateb mezi dopravci ● Nyní – 6 systémů – 53 subjektů
Clearing CARDS – princip ● Cestující má kartu vydanou subjektem A ● Používá ji u různých subjektů (včetně A) ● Jedná se o platby (el. peněženka) i o kupóny ● Za měsíc vytvoříme závěrku ● Započteme toky peněz ● Zajistíme převod peněz
Clearing CARDS - architektura ● SaaS – Software as a Service ● Webová aplikace ● Žádné EJB ● OS SUSE Linux Enterprise Server ● Aplikační server Apache Tomcat ● Databázový server IBM DB2 ● Failover
Clearing CARDS jaký je to SW projekt ● Dlouhodobý – trvá již 6 let ● Velký – 1614 java, 988 xml, 180 jsp, 134 groovy souborů – cca testů ● Multi-technologický ● Počítáme peníze – spolehlivost má vysokou prioritu
Nástroje SI – metodika vývoje ● Agile (Scrum) - jenom ne vodopád – Kritické věci se řeší nejdřív – Zákazník stále vidí kam se vývoj ubírá – Častá integrace – Agile & Iterative Developmen / Larman ● U nás – Hlavní release každý měsíc – Až 2 další opravné
Nástroje SI – evidence požadavků ● Systém JIRA ( ) – Každý požadavek má číslo – Evidují se podpožadavky a jiné závislosti – Plánujeme – kdo, v jakém releasu, s jakou prioritou – Víme v jakém stavu každý požadavek je – Tento přehled má kdokoliv z firmy – Máme k dispozici různé reporty
Nástroje SI – continuous integration ● CI server – u nás Hudson ( hudson.dev.java.net ) ● Automatizovaný build ● Gradle ( gradle.org ), Ant ( ant.apache.org ) ● Nutný version control repository – u nás Subversion ( subversion.tigris.org ) ● Často commitovat ● Okamžitě máme binárky na deploy ● Automatizovaný deployment ● Testování
Nástroje SI version control system ● Přístup ke kódu pro všechny ● Historie změn ● Větvení zdrojového kódu ● Tagování - release ● Lepší než CVS (transakční, verzuje i adresáře)
Nástroje SI – unit testy ● Automatizované testování, refactoring ● Návrh kódu s ohledem na otestovatelnost – Rozumné rozložení kódu – Dependency Injection ● Guice ( code.google.com/p/google-guice/ ) ● Spring ( ) ● Používáme TestNG ( testng.org ) – ne jUnit ( ) ● Mock objekty – easymock ( )
Nástroje SI – integrační testy ● Webová aplikace – Selenium ( seleniumhq.org ) ● Testy se dají de facto naklikat (SeleniumIDE) – problém se selektory ● Testy se dají spustit na různých OS i v různých prohlížečích (díky VMWare pouštíme v noci oproti Firefoxu i IE)
Nástroje SI – code coverage ● Použitelné pro kontrolu testů ● Představa, jak moc je otestováno ● 100% coverage není záruka
Nástroje SI – code review ● Proč? – Víc očí víc vidí – Víc mozků tomu rozumí – Předávání zkušeností – Neopakovat se ● Záruka kvality ● Děláme review každého nového kódu podle požadavků v systému JIRA
Nástroje SI – kvalita kódu ● Design by Contract – Contract4j ( ) ● FindBugs ( findbugs.sourceforge.net ) ● PMD ( pmd.sourceforge.net ) ● Checkstyle ( checkstyle.sourceforge.net ) ● Vrstvení aplikace vs. kód je tam kde jsou data
Nástroje SI - dokumentace ● Dokumentace neodpovídá skutečnosti ● Kód je dokumentace - generování dokumentace z kódu – Javadoc – GraphUML – SchemaSPY – Unit testy
Nástroje SI to celé nejenom v Javě ● Používáme HTML, CSS ● XML + XSLT + XSL-FO – Fop ( xmlgraphics.apache.org/fop/ ) – iText ( ) ● Groovy ● JavaScript
Nástroje SI – proč opensource ● Mám zdrojáky – Mohu zjistit jak funguje – Mohu fungování změnit (opravit) ● Neplatím, ale občas problém s licencí
Děkuji za pozornost ● The Pragmatic Programmer / Hunt, Thomas ● Design Patterns Jiří Mareš ( jirablog.blogspot.com ) ČSAD SVT Praha s.r.o. ( )