Agile Tool Hacking - Taking Your Agile Development Tools To The Next Level, presented by Craig Smith & Paul King at the Agile 2009 conference in Chicago
Strategies for Landing an Oracle DBA Job as a Fresher
Agile Tool Hacking - Taking Your Agile Development Tools To The Next Level
1. Agile Tool Hacking:
Taking Your Agile Development
Tools To The Next Level
Craig Smith Dr Paul King
Suncorp ASERT
2. Overview
Welcome
Images: http://1.bp.blogspot.com/_FNT-_PKRcfs/R-uigRW64pI/AAAAAAAAA7M/iLGM-vOzlRM/s400/vegemite.jpg
http://www.sciencenews.net.au/images/kangaroo-and-baby-joey1.jpg http://www.vtxpress.com/tripleheader-fluke-rigs/knife.jpg I
http://www.sail-world.com/photos/Alt_AustraliaII.jpg http://geology.com/world/map/map-of-australia.gif
3. According to the
Compact Oxford
Dictionary:
Tool (noun)
1. a device or
implement used to
carry out a
particular function.
2. a thing used to help
perform a job.
3. a person used by
another.
Image: http://i.ehow.com/images/GlobalPhoto/Articles/2065416/dictionary_Full.jpg
13. Stories
&
Iterations
The
Manual
Way
Images http://www.selfishprogramming.com/wp-content/uploads/2008/10/building-kanban-board.jpg
http://ssmirnov.files.wordpress.com/2009/02/still-life.jpg
34. Development
Environments
The Manual
Way
Image http://www.xtrasens.com/support/manual/install%20flow.png
http://img.dailymail.co.uk/i/pix/2007/07_01/hammerDM0607_468x584.jpg
36. Environment Tool Maturity
Beginner Intermediate Advanced
Instructions for Automated builds for Automated build for
application environments developer machines
building environments
manually / consistently
Automated environment Testers, team members
tests on demand using similar environment
Plan for pragmatic
programmer techniques
Required hardware / Consider cloud
software computing opportunities
Manual tests for
checking environments
Physical environment Zero cubicles, pairing
renovations stations, breakout /
Co-located team team area
42. Development Tools
Developers:
Craftsmanship / clean code
Quality non-negotiable
Tool Types:
Integrated Development
Environment (IDE)
Database SQL clients
Version control
Web Service / SOAP tools
File & operating system tools
Image http://www.cornetdesign.com/images/bowling_all2s.jpg
Metrics
http://cybernetnews.com/wp-content/uploads/2007/07/hacker.jpg
43. Development
Environments
The Manual
Way
Image http://www.domainlanguage.com/_library/images_people_working/designing_at_whiteboard.jpg
http://4.bp.blogspot.com/_9kQQgQD35rY/SaV5p8YBGhI/AAAAAAAAAkg/HOvlhIo7yGI/s1600-
h/06_Red_Green_Refactor.JPG
44. Example Development Tools
Open Source / Free:
IDE’s (multiple language support)
Eclipse: http://www.eclipse.org
NetBeans: http://www.netbeans.org
SharpDevelop: http://www.icsharpcode.net
RadRails: http://www.aptana.com/rails
Visual Studio Express:
http://www.microsoft.com/express/
Database Clients
DBVisualizer: http://www.dbvis.com/
SQuirreL: http://squirrel-sql.sourceforge.net
Web Service / SOAP Tools
soapUI: http://www.soapui.org
45. Example Development Tools
Open Source / Free:
Version Control Systems
Subversion: http://subversion.tigris.org
Git: http://git-scm.com
Bazaar: http://bazaar-vcs.org
Mercurial: http://mercurial.selenic.com
File & operating system tools
PowerShell: http://www.microsoft.com/
windowsserver2003/technologies/
management/powershell/default.mspx fish:
http://fishshell.org
Cygwin: http://www.cygwin.com
Miscellaneous OS tools
47. Example Development Tools
Commercial:
IDE’s (multiple language support)
IntelliJ IDEA / RubyMine / ReSharper:
http://www.jetbrains.com/
Visual Studio:
http://www.microsoft.com/visualstudio
Web Service / SOAP Tools
Oxygen: http://www.oxygenxml.com/
Metrics
Clover: http://www.atlassian.com/software/
clover
Simian: http://www.redhillconsulting.com.au
Profilers
YourKit: http://www.yourkit.com
48. Development Tool Maturity
Beginner Intermediate Advanced
Usage of IDE with team Mastery of IDE Mastery of advanced
agreed setup keystrokes / features / IDE features / plugin
plugins development
Awareness / use of Usage of advanced
basic tools / metrics Team commitment to
react to metrics output metrics tools & features
Use of version control Usage of distributed
Usage of advanced
version control features version control
Team understanding of
quality Advanced clean code /
Quality non-negotiable /
software craftsman
clean code
55. Testing Tools
Testers:
Automate
Continuous feedback
Bridge communication gaps
Tool types:
Test specification generation
Test execution / record / log
Test user interfaces
Performance test
Test / incident management
Reporting
Image http://blogs.msdn.com/blogfiles/willy-
peter_schaub/WindowsLiveWriter/VSTSRangersProjectsWCFLoadTestToo.0Sh
ips_7D80/CLIPART_OF_13165_SM_2.jpg
http://2.bp.blogspot.com/_U08AbEz5lx4/Ra9UkCi4EeI/AAAAAAAAAAY/vLpsqL
3uqE0/s320/swisstoolcsopen.jpg
56. Testing
The Manual
Way
Image http://tell.fll.purdue.edu/JapanProj/FLClipart/Verbs/understand.gif
http://thedailystandup.com/wp-content/uploads/2008/12/istock_000004776276xsmall.jpg
57. Example Testing Tools
Open Source / Free:
Test Specification – xUnit Tools
JUnit: http://www.junit.org
Nunit: http://www.nunit.org
Test Specification Tools – Expressive/BDD
Spock: http://code.google.com/p/spock/
FitNesse: http://fitnesse.org
Concordion: http://www.concordion.org
Cucumber: http://cukes.info
easyb: http://www.easyb.org
Test Specification Tools – Mocking
NMock: http://www.nmock.org
EasyMock: http://easymock.org
58. Example Testing Tools
Open Source / Free:
Test Execution / Record / Log / UI
Selenium: http://seleniumhq.org
Watir: http://wtr.rubyforge.org
Tellurium: http://kenai.com/projects/tellurium
WebTest: http://webtest.canoo.com
Performance Test
JMeter: http://jakarta.apache.org/jmeter/
Grinder: http://grinder.sourceforge.net/
Test Management
Radi: http://radi-testdir.sourceforge.net
RTH: http://sourceforge.net/projects/rth/
59. Example Testing Tools
Commercial:
Test Execution / Record / Log / UI
Twist: http://studios.thoughtworks.com/
twist-agile-test-automation
GreenPepper:
http://www.greenpeppersoftware.com/en/
Squish: http://www.froglogic.com
Integrated
HP Quality Center / QTP / LoadRunner:
https://h10078.www1.hp.com/cda/hpms/
display/main/hpms_home.jsp
?zn=bto&cp=1_4011_100__
SpiraTest: http://www.inflectra.com/SpiraTest/
60. Testing Tool Maturity
Beginner Intermediate Advanced
Automated developer Test driven 100% test coverage
unit tests development (unit / acceptance /
functional)
Some automated BDD / mock testing
acceptance / functional Developer / tester
tests Automated regression pair programming
tests – new / legacy
Developers / testers Automated performance
working together plus All tests run in CI build testing with functional
combined definition of (unit / acceptance / test reuse
done functional)
Risk based testing
Usage of GUI test Usage of expressive /
robots DSL testing
Based on Elements of Enterprise CI
http://www.anthillpro.com/html/resources/elements_of_ci_A4.pdf
67. Continuous Integration
Advantages:
Early warning
Consistent test / integrate
Centrepiece for quality
Practices:
Version control / automated
build / automated test
Commit early & often
Fast feedback
Visible / audible results
Artefacts
Image http://www.michaelfransen.com/wp-
content/uploads/2008/02/wheresthebuild-small.jpg
68. Continuous
Integration
The Manual
Way
Image http://farm4.static.flickr.com/3122/3121915858_06a783e594.jpg?v=0
http://www.michaelfransen.com/wp-content/uploads/2008/02/wheresthebuild-small.jpg
71. Continuous Integration Maturity
Beginner Intermediate Advanced
Implementation of Implementation of Usage of build clusters /
core build steps continuous integration slaves / VM snapshots
server to auto-run build
Frequent check-in to Dependency management
version control system Dedicated build & internal repository
machine
Adequate hardware
to run build Advanced / refactored / High frequency check-in
multiple builds to version control
Team commitment to system
fixing broken builds Broken build alerts &
team procedures Builds for environment /
project impediments
78. Deployment Tools
Advantages:
Repeatable from development
to Production
No “fight night” surprises
Practices:
Automated deployment script
Environment management
Environment tokens
Automated & manual steps
Smoke test / confirmation
Image http://www.serena.com/images/products/dimensions-deploy/deploy-
illustration2-286-23.jpg
http://ciadvantage.com/cs/photos/storage/ctd.gif
79. Deployment
The Manual
Way
Image http://www.thekua.com/rant/wp-content/uploads/2006/03/RetrospectiveTimelineEvents.jpg
http://farm4.static.flickr.com/3645/3340381990_fa9f004e5b.jpg
80. Example Deployment Tools
Open Source / Free:
Roll your own (scripts / build / CI server)
Cargo: http://cargo.codehaus.org
Capistrano: http://www.capify.org
SmartFrog: http://www.smartfrog.org
Commercial:
Tableaux: http://www.incanica.com
IBM Rational Suite:
http://www-01.ibm.com/software/rational/
BMC BladeLogic: http://www.bmc.com/
products/offering/bmc-bladelogic-application-
release-manager.html
81. Deployment Tool Maturity
Beginner Intermediate Advanced
Documented manual Fully scripted Usage of deployment
deployment & rollback deployment & rollback tool (roll your own /
process / checklist where applicable open source /
commercial)
Documented manual Roll your own basic
smoke tests deployment to test Repeatable deployment
environments using to all environments
Automated helper CI server (tokenized)
scripts
Repeatable build for Automated production
“go-live” processes deployment (push
button or automatic)
Based on Elements of Enterprise CI
http://www.anthillpro.com/html/resources/elements_of_ci_A4.pdf
87. Cucumber Feature
Feature: Deployment
In order to use the latest version of testApp
A support officer should be able to
Check that testApp.war has been deployed to the remote machine
Scenario: User deploys
Given app testApp
When I deploy
Then the testApp.war file should be deployed to remote
Cucumber / Capistrano Step Definition
[...]
When /^I deploy$/ do
Dir.chdir(@app_dir) do
system "cap deploy:setup"
system "cap deploy"
end
end
Then /^ the testApp.war file should be deployed
to remote$/ do
[...]
Hacking Deployment Tests
89. Monitoring
The Manual
Way
Image http://upload.wikimedia.org/wikipedia/commons/5/52/Unix-process-list.png
http://www.petri.co.il/images/virtual_vmware_files_explained_03.jpg
http://trubke.net/_nw/1/17916.png
90. Example Monitoring Tools
Open Source / Free:
Roll your own (scripts / CI server)
Cacti: http://www.cacti.net
Zabbix: http://www.zabbix.com
Nagios: http://www.nagios.org
Monit: http://mmonit.com/monit/
Commercial:
Splunk: http://www.splunk.com
IBM Tivoli: http://www.ibm.com/software/tivoli
Hyperic: http://www.hyperic.com
NetIQ: http://www.netiq.com
91. Monitoring Tool Maturity
Beginner Intermediate Advanced
Base level / centralised Roll your own basic Usage of monitoring
monitoring on critical monitoring for tools at all levels
components processes / logs / including application
(eg. hardware, operating environments at level
system, web server, application level
database) Monitoring alert process
Refactored logs
Useful logs (logging (central location, Visual display of
levels, log rolling, known redundant details monitoring tool / status
support procedures) fixed / removed)
Monitoring of advanced
Ad-hoc usage of tools / Ad-hoc usage of tools / items (eg. configuration,
procedures for procedures for accounting)
reactive support proactive support
96. 2009-07-14 17:10:00,028 [ERROR,au.com.suncorp.ldocs.web.AbstractAction] Unhandled exception caught in action: null
java.lang.NullPointerException
at au.com.suncorp.ldocs.web.RetrieveSADSAction.retrieveRtf(RetrieveSADSAction.java:98)
at au.com.suncorp.ldocs.web.RetrieveSADSAction.executePost(RetrieveSADSAction.java:59)
at au.com.suncorp.ldocs.web.AbstractAction.performIt(AbstractAction.java:66)
at au.com.suncorp.ldocs.web.AbstractAction.performPost(AbstractAction.java:60)
at com.thoughtworks.web.AbstractAction.execute(AbstractAction.java:58)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at com.thoughtworks.web.struts.CustomRequestProcessor.process(CustomRequestProcessor.java:159)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:402)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6356)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
2009-07-14 17:10:00,028 [INFO ,com.thoughtworks.web.struts.CustomRequestProcessor] END REQUEST
2009-07-14 17:10:02,841 [INFO ,com.thoughtworks.web.struts.CustomRequestProcessor] Processing a 'GET' for path '/ChibaSADS'
2009-07-14 17:10:02,841 [INFO ,com.thoughtworks.web.struts.CustomRequestProcessor] BEGIN REQUEST
2009-07-14 17:10:02,841 [INFO ,com.thoughtworks.command.Command] BEGIN COMMAND
au.com.suncorp.ldocs.command.DocumentGenerationServiceCommand
2009-07-14 17:10:02,856 [INFO ,com.thoughtworks.dgs.server.dbaccess.DatabaseQueryManager] [START] FETCH EFFECTIVE TEMPLATE
2009-07-14 17:10:02,856 [INFO ,com.thoughtworks.dgs.server.dbaccess.DatabaseQueryManager] [START] FETCH TEMPLATE VERSION
2009-07-14 17:10:03,544 [INFO ,com.thoughtworks.dgs.server.dbaccess.DatabaseQueryManager] [END] FETCH TEMPLATE VERSION
2009-07-14 17:10:03,544 [INFO ,com.thoughtworks.dgs.server.dbaccess.DatabaseQueryManager] [END] FETCH EFFECTIVE TEMPLATE
2009-07-14 17:10:03,544 [INFO ,com.thoughtworks.dgs.server.dbaccess.DatabaseQueryManager] [START] DEEPEN THE QUERY
Hacking Log Files
97. Wrap Up:
Plan your
tools &
approach
Image http://jenn98.com/bugs/images/bugs-elmer-daffy.jpg
98. Wrap Up:
Manual
first
Image http://jellyflux.files.wordpress.com/2008/11/woman-surrounded-by-robots.jpg
103. Wrap Up:
Think
like
Macgyver
Image http://jira.atlassian.com/secure/attachment/16943/macgyver.gif
104. Wrap Up:
Act like
an A-
Team
Image http://www.popartuk.com/g/l/lgpp31670+i-love-it-when-a-plan-comes-together-weenicons-a-team-poster.jpg
105. Want More Information?
Craig Smith
http://www.suncorp.com.au
http://www.agileacademy.com.au
craig.smith@suncorp.com.au
@smithcdau
Dr. Paul King
http://www.asert.com.au
paulk@asert.com.au
@paulk_asert
Download this presentation at:
http://www.agile2009.org/node/2840
http://www.slideshare.net/smithcdau
106. Acknowledgments
Suncorp is one of Australia and New Zealand's largest
diversified financial services providers, supplying banking,
insurance and wealth management products to around 7
million customers through well-established and recognised
brands such as AAMI, Australian Pensioners Insurance
Agency, Shannons, Vero, Asteron and Tyndall, as well as
Suncorp and GIO. Today, Suncorp is Australia's fifth
largest bank and second largest domestic general
insurance group, with over 16,000 staff. Suncorp has
representation in 450 offices, branches and agencies
throughout Australia and New Zealand.
ASERT is one of Australia’s leading suppliers of
development services, mentoring and training in Agile,
Web Services, Web Applications, Java, Groovy and Grails.