Vývoj clearingového systému CARDS EXCHANGE  a  aplikované nástroje  softwarového inženýra <ul>Jiří Mareš ČSAD SVT Praha s....
Něco o mě <ul><li>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 </li></ul>Něco o SVT <ul><li>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 </li></ul>
Clearingový systém CARDS EXCHANGE <ul><li>Motivace: umožnění křížového používání čipových karet mezi dopravci ve Středočes...
Nyní </li><ul><li>6 systémů
53 subjektů </li></ul></ul>
Clearing CARDS – princip <ul><li>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 </li></ul>
Clearing CARDS - architektura <ul><li>SaaS – Software as a Service
Webová aplikace
Žádné EJB
Upcoming SlideShare
Loading in …5
×

20091202 Aplikované nástroje SW inženýra

309
-1

Published on

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
309
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Na škole jsem se o vývoji moc nedozvěděl, naučil jsem se programovat Začínal jsem hekticky Dneska už máme řadu věcí pod plnou kontrolou
  • Dneska: děláme generování dokladů, jejich započtení a finanční vyrovnání Web pro vlastníky karet Statistická data na základě linek a spojů A chystají se dokonce znalost linek a rekonstrukce cesty jednotlivých cestujících
  • Peněženky jsou jednoduché, ale hlídají se (zajímavé je přehazování pořadí transakcí díky špatnému času v zařízeních) Zařízení jsou offline – možná ztráta dat Různé aplikace, kupón – různé algoritmy rozúčtování Uzávěrka, bilance, faktury, grafy - ukázka
  • SaaS – pokud stačí webové rozhraní, pak je to ideální přístup - jednoduchá distribuce nových verzí, všichni používají nejposlednější verzi - v dnešní době Google a Amazon cloudu je vše ještě jednodušší Co nejjednodušší architektura – největším problémem velkých dlouhotrvajících projektů – overengineering Failover – DB máme - aplikační server - bude
  • Existuje již druhá revize, tj. Přepsání kódu, pomalu se chystáme na třetí, to už bude spíš evoluce než revoluce V 1614 java souborech je 342932 řádků kódu V 988 xml souborech je 188210 řádků V 180 jsp souborech je 14080 řádků Ošklivé slovo, ale používáme Javu, groovy, shellové skripty, XSLT, XSL-FO, Javascript … Testování má poměrně vysokou prioritu, navíc se jedná o výkladní skříň společnosti na spolehlivost klademe velkou váhu
  • Podstatné je, že se spustí triviální aplikace a nabaluje se funkcionalita, testy, průběžně se vytváří uživatelská dokumentace … Ve scrumu jde o zatáhnutí vývojářů do dění – jsou spoluzodpovědní, sami se rozhodují, sami určují co budou dělat, jak Navíc pokud je zákazník otevřený, pak se nechá domluvit, že kdykoliv bude mít pocit, že má vše co potřebuje, může projekt stopnout a dostat 70% neutracených peněz
  • Číslo je důležité, neseme jej napříč celým procesem vývoje Plánování je velmi jednoduché – každý vývojář má přehled co má řešit, co může řešit, co má jakou prioritu Reportování Ukázky 003 - 007
  • Podporuje distribuované buildy Automatizovaný build ant, gradle (i maven) - gradle – super jako maven, ale více deterministický - build script je v groovy, tj. Méně ukecaný než mavení XML Hudson – 008 - 013
  • Okamžitý přístup ke zdojákům, jak pro ostatní vývojáře, tak pro CI server – samozřejmostí je vzdálený přístup Historie změn – hodně důležité, víte kdy se co, jak změnilo a kdo změnu udělal Větvení – zkoušení nových věcí, opravy chyb do starších verzí Tagování – dokážete se jednoznačně odkázat na stav projektu v určitou dobu
  • Test – co nejjednodušší Refactoring – bez testu nemozny (jak refactorovat když nejsou testy) Ukázat použití DI – transaction DAO Guice je hezčí, protože není řízem XML, ale kódem … Junit 3 měl problém s pamětí -&gt; přechod k TestNG - data provider DisjointIntervalComparatorTest – postaru … VatTest .. realVat_scale .. data provider Jde jednoduse kombinovat vice komparatoru Mock objekt – easy mock podporuje refactoring - DeviceFacadeTest
  • - testy se naklikat dají, ale musí se opravit, protože změna UI vyžaduje změnu testu, vhodné správně volit výběr elementů stránky, opět se musí stránka vyvíjet s ohledem na testovatelnost - pouštíme testy oproti VMWARE serveru, automatizovaně - IE má problém s XPath (pomalé)
  • Vše to běží na Hudsonu, tj. Automaticky - ukázat coverage CardsExchange
  • Proč? Něco jako pair programming, 2 lidé přemýšlejí nad každým řádkem Ukázka jak děláme review 015-019
  • 020 – ukázka Contract4j PMD pracuje na zdrojákem, duplicitni kod Checkstyle opet pracuje nad zdrojakem Máme vrstvit (Model, DAO, Facade, UI) - ne, není to objektové, ale funkcionální programování - objektové je – metoda tam kde jsou data - problém je s DAO vrstvou – různé implementace a model nezajímá, která je použitá??
  • Ukázka javadoc v Utilu UML ukázka Ukázka DB Ukázka unit testu, který říká jak věc použít
  • - multilingual – zvětšuje přehled a vylepšuje kódování, protože dobré prvky z jednoho jazyka zanášíme do druhého
  • 20091202 Aplikované nástroje SW inženýra

    1. 1. Vývoj clearingového systému CARDS EXCHANGE a aplikované nástroje softwarového inženýra <ul>Jiří Mareš ČSAD SVT Praha s.r.o. </ul>2.12.2009
    2. 2. Něco o mě <ul><li>Vystudoval jsem FEL ČVUT
    3. 3. 14 let vyvíjím software
    4. 4. Posledních 7 let v SVT
    5. 5. V SVT jsem se hodně zaměřil na kvalitu kódu </li></ul>Něco o SVT <ul><li>Existuje 30 let, od 1991 s.r.o.
    6. 6. Více než 25 let zkušeností s AMS
    7. 7. Od roku 2006 držitelem ISO 9001:2000 </li></ul>
    8. 8. Clearingový systém CARDS EXCHANGE <ul><li>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
    9. 9. Nyní </li><ul><li>6 systémů
    10. 10. 53 subjektů </li></ul></ul>
    11. 11. Clearing CARDS – princip <ul><li>Cestující má kartu vydanou subjektem A
    12. 12. Používá ji u různých subjektů (včetně A)
    13. 13. Jedná se o platby (el. peněženka) i o kupóny
    14. 14. Za měsíc vytvoříme závěrku
    15. 15. Započteme toky peněz
    16. 16. Zajistíme převod peněz </li></ul>
    17. 17. Clearing CARDS - architektura <ul><li>SaaS – Software as a Service
    18. 18. Webová aplikace
    19. 19. Žádné EJB
    20. 20. OS SUSE Linux Enterprise Server
    21. 21. Aplikační server Apache Tomcat
    22. 22. Databázový server IBM DB2
    23. 23. Failover </li></ul>
    24. 24. Clearing CARDS jaký je to SW projekt <ul><li>Dlouhodobý – trvá již 6 let
    25. 25. Velký – 1614 java, 988 xml, 180 jsp, 134 groovy souborů – cca. 8000 testů
    26. 26. Multi-technologický
    27. 27. Počítáme peníze – spolehlivost má vysokou prioritu </li></ul>
    28. 28. Nástroje SI – metodika vývoje <ul><li>Agile (Scrum) - jenom ne vodopád </li><ul><li>Kritické věci se řeší nejdřív
    29. 29. Zákazník stále vidí kam se vývoj ubírá
    30. 30. Častá integrace
    31. 31. Agile & Iterative Developmen / Larman </li></ul><li>U nás </li><ul><li>Hlavní release každý měsíc
    32. 32. Až 2 další opravné </li></ul></ul>
    33. 33. Nástroje SI – evidence požadavků <ul><li>Systém JIRA ( www.atlassian.com ) </li><ul><li>Každý požadavek má číslo
    34. 34. Evidují se podpožadavky a jiné závislosti
    35. 35. Plánujeme – kdo, v jakém releasu, s jakou prioritou
    36. 36. Víme v jakém stavu každý požadavek je
    37. 37. Tento přehled má kdokoliv z firmy
    38. 38. Máme k dispozici různé reporty </li></ul></ul>
    39. 39. Nástroje SI – continuous integration <ul><li>CI server – u nás Hudson ( hudson.dev.java.net )
    40. 40. Automatizovaný build
    41. 41. Gradle ( gradle.org ), Ant ( ant.apache.org )
    42. 42. Nutný version control repository – u nás Subversion ( subversion.tigris.org )
    43. 43. Často commitovat
    44. 44. Okamžitě máme binárky na deploy
    45. 45. Automatizovaný deployment
    46. 46. Testování </li></ul>
    47. 47. Nástroje SI version control system <ul><li>Přístup ke kódu pro všechny
    48. 48. Historie změn
    49. 49. Větvení zdrojového kódu
    50. 50. Tagování - release
    51. 51. Lepší než CVS (transakční, verzuje i adresáře) </li></ul>
    52. 52. Nástroje SI – unit testy <ul><li>Automatizované testování, refactoring
    53. 53. Návrh kódu s ohledem na otestovatelnost </li><ul><li>Rozumné rozložení kódu
    54. 54. Dependency Injection </li><ul><li>Guice ( code.google.com/p/google-guice/ )
    55. 55. Spring ( www.springsource.org ) </li></ul></ul><li>Používáme TestNG ( testng.org ) </li><ul><li>ne jUnit ( www.junit.org ) </li></ul><li>Mock objekty – easymock ( www.easymock.org ) </li></ul>
    56. 56. Nástroje SI – integrační testy <ul><li>Webová aplikace – Selenium ( seleniumhq.org )
    57. 57. Testy se dají de facto naklikat (SeleniumIDE) – problém se selektory
    58. 58. 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) </li></ul>
    59. 59. Nástroje SI – code coverage <ul><li>Použitelné pro kontrolu testů
    60. 60. Představa, jak moc je otestováno
    61. 61. 100% coverage není záruka </li></ul>
    62. 62. Nástroje SI – code review <ul><li>Proč? </li><ul><li>Víc očí víc vidí
    63. 63. Víc mozků tomu rozumí
    64. 64. Předávání zkušeností
    65. 65. Neopakovat se </li></ul><li>Záruka kvality
    66. 66. Děláme review každého nového kódu podle požadavků v systému JIRA </li></ul>
    67. 67. Nástroje SI – kvalita kódu <ul><li>Design by Contract – Contract4j ( www.contract4j.org )
    68. 68. FindBugs ( findbugs.sourceforge.net )
    69. 69. PMD ( pmd.sourceforge.net )
    70. 70. Checkstyle ( checkstyle.sourceforge.net )
    71. 71. Vrstvení aplikace vs. kód je tam kde jsou data </li></ul>
    72. 72. Nástroje SI - dokumentace <ul><li>Dokumentace neodpovídá skutečnosti
    73. 73. Kód je dokumentace - generování dokumentace z kódu </li><ul><li>Javadoc
    74. 74. GraphUML
    75. 75. SchemaSPY
    76. 76. Unit testy </li></ul></ul>
    77. 77. Nástroje SI to celé nejenom v Javě <ul><li>Používáme HTML, CSS
    78. 78. XML + XSLT + XSL-FO </li><ul><li>Fop ( xmlgraphics.apache.org/fop/ )
    79. 79. iText ( www.lowagie.com/iText/ ) </li></ul><li>Groovy
    80. 80. JavaScript </li></ul>
    81. 81. Nástroje SI – proč opensource <ul><li>Mám zdrojáky </li><ul><li>Mohu zjistit jak funguje
    82. 82. Mohu fungování změnit (opravit) </li></ul><li>Neplatím, ale občas problém s licencí </li></ul>
    83. 83. Děkuji za pozornost <ul><li>The Pragmatic Programmer / Hunt, Thomas
    84. 84. Design Patterns </li></ul>Jiří Mareš ( [email_address] , jirablog.blogspot.com ) ČSAD SVT Praha s.r.o. ( www.svt.cz )
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×