20110511 Vývoj software - produktivně, efektivně, kvalitně
1. Vývoj software
Produktivně
Efektivně
Kvalitně
http://www.slideshare.net/jiramares/20110511-matfyz
Jiří Mareš
ČSAD SVT Praha s.r.o.
11.5.11
2. O mě
vystudoval jsem FEL ČVUT
16 let se živím vývojem SW
používal jsem: Pascal, C, C++, Java, Groovy, Javascript,
Scala, Smalltalk, HTML, CSS, XML, XSLT, bash, ant,
gradle, maven
z metodologií: vodopád, agile, SCRUM
twitter - @jiramares
mail - jiri.mares@svt.cz, jiramares@gmail.com
blog - jirablog.blogspot.com
3. O SVT
http://www.svt.cz/
malá SW firma
vývoj software pro dopravu
existuje 30 let
25 let vyvíjíme a provozujeme AMS
9 let vyvíjíme CARDS EXCHANGE
5 let máme ISO
4. Clearing CARDS
sběr transakcí od dopravců
výpočet vzájemných závazků
vystavení faktur
řešení toku peněz
napojení na ERP
Software as a Service
webová aplikace
rozhraní pro držitele karet
5. Clearing CARDS - projekt
žádné EJB (pozor na over-engineering)
prostředí:
failover
OS linux
aplikační server Apache Tomcat
databáze IBM DB2
středně velký projekt:
1826 java souborů
668 xml souborů
194 jsp souborů
131 groovy souborů
9928 unit testů
230 selenium testů
6. Zefektivnění každodenní práce - I
koncentrovat se (nebýt rušen, více monitorů)
mít pro projekt jeden root adresář
mít používané aplikace po ruce
používat shell (command prompt)
klávesové zkratky
clipboard manager
vše co dělám podruhé zautomatizovat (scripty - bash,
groovy, ant, rake, gradle, selenium)
možná to trvá déle než ručně, ale hodně se naučím
používat lokální dokumentaci (wget)
7. Zefektivnění každodenní práce - II
minimalizovat potřebu lokálního zálohování
vše na serveru - Google Docs, VCS, WIKI
do VCS i scripty, nastavení (počítače, IDE), dokumentace
uchovávat binárky (svých aplikací i použitých knihoven)
nastavení prostředí (VMWare http://www.vmware.com/,
Genuitec Pulse http://www.poweredbypulse.com/)
DRY - Don't Repeat Yourself
používat generátory: O/R mapping z DB schéma, různé
verze dokumentace (online a ref. příručka)
více viz. Automatizace dokumentace kódu dále
8. Metodika vývoje
jednoznačně agile a iterativně
nejlepší je SCRUM
samostatný tým
samoorganizující tým
angažovaný jednotlivec
bohužel není aplikovatelný všude
na SCRUM máme velké procento studentů (nepracují na
plný úvazek)
malý team
hlavní release máme každý měsíc
9. Používáme OpenSource
veškeré zmiňované nástroje jsou opensource
až na dva (Atlassian JIRA a Fisheye)
pozor na licence
můžete:
produkt zlepšit a nebo přizpůsobit
pochopit jak je udělán a jak funguje
10. Evidence požadavků a plánování
používáme Atlassian JIRA http://www.atlassian.com/software/jira/
máme vše evidováno - požadavek ISO
požadavky mají priority
plánujeme sprinty
víme v jakém je požadavek stavu
propojení s VCS - co se pro splnění požadavku měnilo
existují i jiné:
trac http://trac.edgewall.org/
bugzilla http://www.bugzilla.org/
integrované v:
github https://github.com/
bitbucket https://bitbucket.org/
11. Verzovací software (VCS)
historie změn
větvení, tagování
klasické
CVS http://www.cvshome.org/
subversion http://subversion.tigris.org/
distribuované
git http://git-scm.com/
mercurial http://mercurial.selenic.com/
používáme subversion
plánujeme přechod na git
konkrétně na code hosting - github
12. Build & Continuous integration
build automation - vytvoří replikovatelný build
ant http://ant.apache.org/
gradle http://www.gradle.org/
maven http://maven.apache.org/
a další: sbt http://code.google.com/p/simple-build-tool/, rake http://rake.rubyforge.org/
artifactory http://www.jfrog.com/products.php
continuous integration
nutný VCS
okamžitě po commitu se pouští testy a máme binárky
automatizovaný deployment
jenkins http://jenkins-ci.org/ (dříve hudson)
cruise control http://cruisecontrol.sourceforge.net/
continuum http://continuum.apache.org/
13. Testování - unit testy
automatizuje testování
podporuje refactoring
nepoužívám Test Driven Development dogmaticky
programovat s ohledem na otestovatelnost
dependency injection - guice http://code.google.com/p/google-guice/,
spring http://www.springsource.org/
testovací frameworky - testng http://testng.org/, junit http://www.junit.org/
asserty - hamcrest http://code.google.com/p/hamcrest/
mock objecty - easymock http://easymock.org/, mockito http://mockito.org/,
jmock http://www.jmock.org/
14. Testování - code coverage a integrační
testy webových aplikací
code coverage
dává představu jak dobře je otestováno
100% pokrytí neznamená nic
testování webových aplikací - selenium http://seleniumhq.org/
testy se dají naklikat - seleniumIDE
nutno aplikaci psát s ohledem na otestovatelnost
testování aplikace na různých prohlížečích a OS
VMWare http://www.vmware.com/products/server/overview.html
selenium remote-control http://seleniumhq.org/projects/remote-control/
testujeme na Linuxu, Windows a IE, Firefox, Chrome
15. Code review
jediné co garantuje kvalitní kód napříč všemi zdrojáky
review svého vs. cizího kódu
často vede na refactoring (potřebujeme testy)
motivace:
odhalí se chyby dříve než v produkci
lidé se vzájemně od sebe učí (diskutují o kódu)
víc lidí kódu rozumí
děláme review každého nového či změněného řádku)
potřebný SW pro podporu code review:
používáme JIRA, fisheye http://www.atlassian.com/software/fisheye/
chceme používat pull request gitu
16. Automatizace - kontrola kvality kódu a
dokumentace
kvalita kódu:
FindBugs http://findbugs.sourceforge.net/
PMD http://pmd.sourceforge.net/
Checkstyle http://checkstyle.sourceforge.net/
dokumentace:
špatná horší než žádná
kód a jeho testy jsou dokumentace
Javadoc http://www.oracle.com/technetwork/java/javase/documentation/index-jsp-135444.html
UMLGraph http://www.umlgraph.org/
SchemaSPY http://schemaspy.sourceforge.net/
17. Neustálé vzdělávání
učit se:
nové jazyky (nová paradigmata)
nové technologie
nová použití technologií
konference (CZJUG http://www.java.cz/detail.do?articleId=2252)
hackathony
18. Literatura
The Pragmatic Programmer
Andrew Hunt, David Thomas
Agile & Iterative Development - A Manager's Guide
Craig Larman
The Productive Programmer
Neal Ford
19. Děkuji za pozornost
vývoj SW je kreativní činnost
vývojář je umělec
velmi často si jdeme za svou myšlenkou "proti všem"
hledejte insipraci kdekoliv, i tam kde ji nečekáte
odpočívejte, potřebujete múzu