7. Are there hidden assumptions?
Yes.
Methodology
People and Culture
Technology
8. Any other assumptions?
Project Preparation
Business Blueprint
Project Realization
Final Preparation
Go-live and Support
Technical Technical
Test Fix Transport Go Live
Design Build
Integration Live
Write and
& Regression
Write test scripts Training
run unit test Support
Test
9. The topic
Over the next hour and a half, we’ll talk about
how testing methodologies, techniques, and
technologies can help us
Change these underlying assumptions.
Enable modern project methodologies.
Control the basic project trade-off.
10. The focus
Project Preparation
Business Blueprint
Project Realization
Final Preparation
Go-live and Support
Technical Technical
Test Fix Transport Go Live
Design Build
Integration Live
Write and
& Regression
Write test scripts Training
run unit test Support
Test
18. Modern methodology
• Modern quality assurance and testing
– Leading practice in custom development, open
source, and agile projects
• Test driven development (TDD), behavior driven
development (BDD), readable tests, executable
requirements, continuous integration
– Overview of the SAP test automation technologies
– Road we're going to take through testing SAP
19. Leading Practice
• Context
• Questions and problems
• Approaches
• Tools
20. Leading Practice
• Context
• Questions and problems
• Approaches
• Tools
21. Context
The context of modern software development is
above all open, agile and decentralized.
Open source projects are usually the furthest
along this path, and as such these projects use
(or are forced to invent) tools that fit their
processes.
22. Openness
Requirements, specifications, issues reports, test
cases, source code, and project tools and
metrics are readily open and available to all
participants in the project.
(Not necessarily the same as “open source”.)
Open Collaboration within Corporations Using Software Forges -
http://www.riehle.org/publications/2009/open-collaboration-within-corporations-using-software-forges
23. Agility
The values of the Agile Manifesto:
– Individuals and interactions over processes and
tools
– Working software over comprehensive
documentation
– Customer collaboration over contract negotiation
– Responding to change over following a plan
http://agilemanifesto.org/
24. Decentralization
Open-source projects are decentralized by
nature, but most organizations today have
some element of decentralization
Challenges:
– Quality control
– Communication
– Maintaining commitment
25. Leading Practice
• Context
• Questions and problems
• Approaches
• Tools
26. Questions and problems
How do we track 100s
How do we or 1000s of bugs
enforce disciplined (including duplicates)?
testing?
How do we make
Do we use unit,
tests relevant?
functional, integration,
or acceptance testing? How does testing
Or all of them? integrate with
issue tracking?
How do we ensure that How do we
the build complies with determine the cause
Manual or
the tests? of test failure?
automatic
testing?
27. Leading Practice
• Context
• Questions and problems
• Approaches
• Tools
29. Test coverage
The percentage of code or development that is
tested.
In code, this might be measured by determining
if every branch of code can result in a failing
test condition (“Branch coverage”)
Wikipedia - http://en.wikipedia.org/wiki/Code_coverage
30. Test automation
• Accepted as gospel modern dev communities
– Regardless of how good they are at testing, accept
that they should automate as much as possible
– Can lead to ignoring non-automatable testing
• In the SAP world we haven’t even accepted
that full test coverage is desirable, much less
automation
Test automation pushback -
http://railspikes.com/2008/7/11/testing-is-overrated
http://michaelfeathers.typepad.com/michael_feathers_blog/2008/06/the-flawed-
theo.html
Automated testing story on SDN (never completed) -
https://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/4103
31. A note on the following slides
I’m using bowling as an example because I’m
copying from the internet. I don’t know much
about bowling, so the examples are probably
wrong. My assumption is that a game is
usually 10 frames of two balls per frame. If
the last frame is a spare or a strike, you get at
most two additional frames.
Or something like that.
32. Test Driven Development (TDD)
Build
Design Test
Design Build
• Technical • Run tests • Run tests
specification • Write tests • Write code
• Failure!
based on to address
specs test failures
Design Test Test
33. TDD Example
require ‘test/unit’
require ‘test/unit/assertions’
require ‘bowling’
class TC_Bowling < Test::Unit::TestCase
def setup
bowling = Bowling.new
end
def gutter_game
20.times { bowling.hit(0) }
assert bowling.score == 0
end
end
34. Behavior Driven Development (BDD)
• Focus on the external behavior of the code
• Abstract away implementation details
• Additionally, BDD libraries tend to codify the
best practices of unit testing and TDD
35. BDD example
require ‘spec’
require ‘bowling’
describe Bowling do
it quot;should score 0 for gutter gamequot; do
bowling = Bowling.new
20.times { bowling.hit(0) }
bowling.score.should == 0
end
end
36. “Spec as Test” – or writing features
• Recently, the Ruby community has begun
developing testing frameworks that are even
closer to natural language.
– Cucumber
• These frameworks wrap TDD and BDD
frameworks and allow for “business-writable”,
“business-readable”, executable test scripts.
37. Feature example
Feature (visible to the user) Implementation (not visible to user)
require ‘spec/expectations’
Scenario: Gutter game
require ‘bowling’
Given I have bowled 20 balls
and I have knocked over 0 pins per ball Given /I have knocked over (d+) pins per ball/ do |pins|
When I check the score @pins_per_ball = pins
end
Then I should have 0 points
Given /I have bowled (d+) balls/ do |balls|
@bowling = Bowling.new
balls.times { @bowling.hit( @pins_per_ball ) }
end
Then /I should have (d+) points/ do |points|
@bowling.score.should == points
end
38. Feature example cont.
Note that we can now implement many more
tests with no more code/implementation:
Scenario: Perfect game Scenario: Lots of spares
Given I have bowled 12 balls Given I have bowled 24 balls
and I have knocked over 10 pins per ball and I have knocked over 5 pins per ball
When I check the score When I check the score
Then I should have 300 points Then I should have ??? Points
Scenario: Bad game Or maybe I need something a little
Given I have bowled 20 balls different....
and I have knocked over 2 pins per ball
When I check the score Scenario: Too long a game
Then I should have 40 points Given I have bowled 30 balls
and I have knocked over 0 pins per ball
Then I should receive an error
39. Side-by-side
TDD BDD Spec as Test
require ‘test/unit’ require ‘spec/expectations’ Scenario: Gutter game
require ‘test/unit/assertions’ require ‘bowling’
require ‘bowling’ Given I have bowled 20 balls
describe Bowling do and I have knocked over 0 pins per ball
class TC_Bowling < Test::Unit::TestCase
it quot;should score 0 for gutter gamequot; do When I view the score
def setup
bowling = Bowling.new bowling = Bowling.new Then I should have 0 points
end 20.times { bowling.hit(0) }
bowling.score.should == 0
def gutter_game
20.times { bowling.hit(0) } end
assert bowling.score == 0 end
end
end
40. TDD, BDD, and Test-as-Spec References
• Test Driven Design/Development
– http://en.wikipedia.org/wiki/Test-
driven_development
– http://www.agiledata.org/essays/tdd.html
• Behavior Driven Development
– http://behaviour-driven.org/
• Spec as test
– Cucumber - http://cukes.info/
– Rspec - http://rspec.info/
– http://www.pragprog.com/titles/achbd/the-rspec-
book
41. Exploratory Testing
• The practice of trying to break things
– Career security for klutzes
• Exploratory testing appears informal, but can
be structured and is a very important aspect
of software testing.
– Probably the most neglected form of testing in
open source projects
http://www.kohl.ca/blog/archives/000185.html
http://www.kohl.ca/articles/ExploratoryTesting_MusicofInvestigation.pdf
42. Continuous Integration
• The practice of automating not only your tests
but your full commit-build-test cycle
1. A commit new or changed code
2. Triggers a full system build
3. And an execution of the entire test suite
Cruisecontrol.rb -
http://rubyforge.org/projects/cruisecontrolrb
http://cruisecontrolrb.thoughtworks.com/
Hudson -
https://hudson.dev.java.net/
http://www.softwarebloat.com/2008/11/19/continuous-integration-blueprints-how-
to-build-an-army-of-killer-robots-with-hudson-and-cucumber
43. Leading Practice
• Context
• Questions and problems
• Approaches
• Tools
45. Modern methodology
• Modern quality assurance and testing
– Leading practice in custom development, open
source, and agile projects
• Test driven development (TDD), behavior driven
development (BDD), readable tests, executable
requirements, continuous integration
– Overview of the SAP test automation
technologies
– Road we're going to take through testing SAP
46. The SAP World
• Manual
• Unit testing
– ABAP Unit
– Java
• Functional testing
– eCATT
47. ABAP Unit
• Modeled on Java Unit
• Excellent (if a bit unwieldy) for traditional unit
test automation or classes
– Works well for TDD
• ABAP Objects (object-oriented ABAP)
• TDD Demo – ZBOWLING & ZBOWLING_TEST
http://help.sap.com/saphelp_nw70ehp1/helpdata/en/a2/8a1b602e85
8645b8aac1559b638ea4/frameset.htm
48. Non-SAP
• We can use just about anything via RFCs
• For Web Dynpros, BSPs, or Portal applications,
there are a lot of options using web-drivers
that can automatically drive browsers
• Address in depth in future sessions
49. Modern methodology
• Modern quality assurance and testing
– Leading practice in custom development, open
source, and agile projects
• Test driven development (TDD), behavior driven
development (BDD), readable tests, executable
requirements, continuous integration
– Overview of the SAP test automation technologies
– Road we're going to take through testing SAP
50. The Road to the Future
• Developing techniques to support agile, open,
decentralized development in an SAP
landscape
• Using SAP tools and 3rd party tools
• Shorter, more focused and hands-on sessions
51. Start with this
http://en.wikipedia.org/wiki/File:V-model.JPG
52. Get more parallel, less repetitive
Spec = Test
http://en.wikipedia.org/wiki/File:V-model.JPG
53. Get faster
Test
Automation
http://en.wikipedia.org/wiki/File:V-model.JPG