Notes for Trip 4 - Lyle School of Engineering

advertisement
CSE 7314
Software Testing and Reliability
Robert
Oshana
oshana@airmail.net
Trip 3 class notes
Agenda
•
•
•
•
Administrative
Famous software failures
Overview of testing techniques
Black box testing techniques
– Black box science
– Black box art
• White box testing techniques
– Static white box techniques
– Dynamic white box techniques
Infamous software failures
• Disney’s “Lion King”
• 1st multimedia CD-ROM
• Just in time for Christmas – sales
expectations very huge
• CS phones began to ring
• Failure to properly test SW on many
different PC models
– Worked well on the models that Disney
programmers used to create the game !!
“Software Testing” by Ron Patton
Intel bug
• Try this on your PC:
• (4195835 / 3145727) * 3145727 – 4195835
• If answer is 0, your computer is fine
• Anything else => you have the
Pentium bug !!
“Software Testing” by Ron Patton
NASA Mars Polar Lander
“Software Testing”
1999
by Ron Patton
• Lander disappeared Dec 3rd 1999
• Failure to set a single data bit
• NASA tried to save $ by replacing radar
with contact switch
• During testing vibration caused switch to
trip (like it had landed)
• Lander tested by multiple teams
– Leg fold down procedure (never looked to see
if touch down bit set)
– Landing process (always reset computer,
clearing bit, before starting testing
What goes into a SW
product?
“Software Testing”
by Ron Patton
What parts make up a SW
product?
“Software Testing”
by Ron Patton
Optimal test effort
“Software Testing” by Ron Patton
Precision vs accuracy
• Testing a simulation game like a
flight simulator..
– Should you test precision or accuracy?
• How about a calculator?
• Depends on what the product is and
what the development team is aiming
at !!
Neither accurate nor precise
“Software Testing” by Ron Patton
Precise, but not accurate
“Software Testing” by Ron Patton
Accurate, but not precise
“Software Testing” by Ron Patton
Accurate and precise
“Software Testing” by Ron Patton
Try this
• Start the Windows Calculator
program
• Type 5,000-5 (comma is important)
• Look at result
• Is it a bug or not??
Quiz
• Q: Given that its impossible to test a program
completely, what information do you think should
be considered when declaring whether its time to
stop testing?
• A: There is no correct answer when to stop
testing. Each project is different. Things to
consider would be, Are lots of bugs being found?,
Is the team satisfied with the number and types of
tests that have been run?, Has the product been
validated against the users requirements?
Quiz
• Q: If you were testing a flight simulator, what
would be more important, accuracy or precision?
• A: Simulator should look and feel like flying a real
plane. What’s more important is how accurately
the simulator reflects reality, precision can follow.
This is exactly what has happened with
simulation games over the years.
Quiz
• Q: Is it possible to have a high-quality and low
reliability product? What might an example be?
• A: Yes, but it depends on the customers
expectations for quality. Example is a high
performance sports car that has high quality (fast
acceleration, style, etc) but are notoriously
unreliable (often breaking down and expensive to
repair)
Quiz
• Q: Why is it impossible to test a program
completely?
• A: There are too many inputs, too many outputs,
and too many path combinations to fully test.
Also, software specs can be subjective and be
interpreted in different ways (bug is in the eye of
the beholder!!)
Quiz
• Q: If you were testing a feature of your software
on Monday and finding a new bug every hour, at
what rate would you expect to find bugs on
Tuesday?
• A: Two axioms: The number of bugs remaining is
proportional to the number of bugs already found
(won’t come in Tuesday and find the SW perfect!).
Pesticide paradox; continuing to run the same
tests over and over again means you won’t find
more bugs until you start adding more tests!!
Result: you’ll continue to find bugs at the same
rate or slightly less
Part 2
Black box vs White box
BB and WB testing
• White box or black box testing
improves quality by 40%. Together
they improve quality by 60%
Black box science techniques
•
•
•
•
•
•
•
Equivalence partitioning
Data testing
Orthogonal arrays
Decision tables
Other techniques
Quiz
Black box art
Test to pass and test to fail
• Test-to-pass; assume SW minimally
works
– Don’t push capabilities
– Don’t try to break it
– Simple and straightforward test cases
• Would you drive a brand new car
model at top speed right off the line?
• Run these first
Test to pass vs Test to Fail
“Software Testing” by Ron Patton
Equivalence partitioning
Equivalence partitioning
• A group of tests forms an
equivalence class if you believe that:
– They all test the same thing
– Of one catches a bug, the others
probably will too
– If one doesn’t catch a bug, the others
probably won’t either
Example
• How would you test the “Save as”
function?
• Valid characters except \ / : * ? “ < >
and |
• 1 to 255 characters
Example
• Equivalence partitions
– Valid characters
– Invalid characters
– Valid length names
– Names that are too short
– Names that are too long
Data testing
Data testing
• Simple view of software is to divide
into two domains
– Data (or its domain)
– Program
• Examples of data Divide testing up along the
– Keyboard input
– Mouse clicks
– Disk files
– printouts
same lines!!
Data testing
• The amount of data can be
overwhelming even for a simple
program
• Must intelligently reduce test cases
by equivalence partitioning
– Boundary conditions
– Sub-boundary conditions
– Nulls
– Bad data
Boundary conditions
Boundary value analysis
• Boundaries are often prone to failure
• Does it make sense to also test in the
middle?
• Procedure
– Test exact boundaries
– Value immediately above upper
boundary
– Value immediately below lower
boundary
Simple program with bug
1: Rem Create a 10 element integer array
2: Rem Initialize each element to –1
3: Dim data(10) As Integer
4: Dim i As Integer
5: For i = 1 To 10
6:
data(i) = -1
7:
Next i
8: End
“Software Testing” by Ron Patton
Simple program with bug
data(0) = 0
data(1) = -1
data(2) = -1
data(3) = -1
data(4) = -1
data(5) = -1
data(6) = -1
data(7) = -1
data(8) = -1
data(9) = -1
data(10) = -1
“Software Testing” by Ron Patton
Types of boundary
conditions
•
•
•
•
•
•
•
Numeric
Character
Position
Quantity
Speed
Location
Size
Characteristics of those
types
•
•
•
•
•
•
First/last
Start/finish
Empty/full
Slowest/fastest
Largest/smallest
Next to/farthest
from
• Min/max
•
•
•
•
Over/under
Shortest/longest
Soonest/latest
Highest/lowest
Testing the boundary
conditions
• First-1/Last+1
• Start-1/Finish+1
• Less then
empty/More than
full
• Even slower/Even
faster
• Largest+1/Smallest
-1
• Min-1/Max+1
• Just over/Just
under
• Even
shorter/Longer
• Even sooner/later
• Highest+1/Lowest1
Example
•
•
•
•
•
•
Test entry field that allows 1 to 255
Try entering 1 character
Enter 255 characters
Try 254
Enter 0
Enter 256
Program that reads and
writes a floppy
• Try saving a file with one entry
• Try saving a file at the limits of what
a floppy disk holds
• Try saving an empty file
• Try saving a file that is too big for the
floppy
Program to print multiple
pages onto a single page
• Try printing one page (the standard
case)
• Try printing the most pages allowed
• Try printing zero pages
• Try printing more than it allows
Flight simulator
•
•
•
•
•
Try flying at ground level
Try flying at maximum height
Try flying below ground level
Below sea level
Outer space
Sub-boundary conditions
• Some boundary conditions are
internal to the software and not user
apparent
• Powers of two
– Bit (0-1), nibble (0-15), byte (0-255),
word, kilo, mega, giga, etc
• ASCII table
– Not nice and contiguous
Default, empty, blank, null,
zero, and none
• Rather than type wrong information
for example, no data is entered (just
press return)
• Forgotten in spec and overlooked by
programmer
• Happens in real life!
• SW should default to lowest value or
some reasonable value
Default, empty, blank, null,
zero, and none
• Always have an equivalence partition
for these values
Invalid, wrong, incorrect,
and garbage data
• Test-to-fail
• See if the SW can handle whatever a
user can do
• Reasonable to think that some
percentage of people will handle SW
incorrectly
• If any data lost, for whatever reason,
user will blame SW (bug!)
Invalid, wrong, incorrect,
and garbage data
• If SW wants numbers, give it letters
• If SW expects positive numbers, give
it negative numbers
• Fat fingers
• How many windows can you have
open
• No real rules, be creative, have fun!
State testing
• A software state is a condition or
mode that the SW is in
• Other side of testing looks at
programs logic flow
– States
– Transitions between them
• Same type of complexity required
partitioning this space as well
Create a state transition
map
“Software Testing” by Ron Patton
State diagram parts
• Each unique state that the SW can be
in
• Input or condition that takes it from
one state to the next
• Set conditions and produced output
when a state is entered or exited
Reducing the number of
states
• Covering all paths is a traveling
salesman problem. Instead;
• Visit each state once
• Test common state-to-state
transitions
• Test least common state transitions
• Test error states and returning from
error states
What to specifically test
• Check all state variables
– Static conditions, values, functionality
associated with being in that state or
moving to and from the state
• May be something visible like a
window or dialog box
• May be invisible such as a part of a
communication program of financial
package
Example – “dirty document
flag”
Testing state to fail
• Race conditions and bad timing
– Saving and loading the same document
at the same time with two different
programs
– Sharing the same printer, com port, or
peripheral
– Using different programs to
simultaneously access a common DB
Testing state to fail
• Repetition, stress, and load (not
handling the worst case scenario)
– Repetition; same operation over and
over (looking for memory leaks)
– Stress; running SW under less than
ideal situations (low memory, low disk
space, slow CPUs, etc)
• Analyze SW for external resource needs
• Test by limiting these to bare minimum
• Goal is to starve SW (one type of boundary)
Testing state to fail
– Load testing; opposite of stress testing
– Instead of starving, you force feed (more
than it can handle)
– Largest possible data files
– Connect as many printers,peripherals as
possible
– Time (running over long periods) is
another form of load testing
Issues
• Others may not be receptive to
efforts to break SW this way
– “no customer will use this way…”
• Test automation is required to make
some of this practical
CSE 7314
Software Testing and Reliability
Robert
Oshana
oshana@airmail.net
Orthogonal Arrays
Topic for this lecture
• Orthogonal array testing
• Reference; Orthogonal Array Test
Strategy (OATS) Technique, by
Jeremy M. Harrell
Orthogonal array testing
• A systematic and statistical approach
for testing pair-wise interactions
• Provides representative coverage of
variable combinations
• Good for integration testing of OO
components
• Testing combinations of objects
Orthogonal array testing
• Taguchi methods use these for
experimental design
• Two dimensional arrays of numbers
– Choosing any two columns provides an
even distribution of all pair wise
combinations of values
• Used in many applications for
planning experiments
– Rows represent the experiments to be
run
Orthogonal array testing
• Runs; number of rows which
translates to test cases
– Since the rows represent an experiment
(test) to be run, it is a goal to minimize
the number of row as much as possible
• Factors; number of columns which is
the number of variables
• Levels; max number of values for a
factor ( 0 – levels-1 )
• Named as LRUNS (Levels**Factors)
Fault model
• Interactions are a major source of
defects
• Most defects arise from pairwise
interactions (not more complex)
• Easy to miss one of these with so
many combinations
• Random selection is not effective
What does OATS do ?
• Guarantees testing pair wise
combinations of all selected
variables
• Creates an efficient test suite with
fewer tests than all combos of all
variables
• Even distribution of all variables
• Simple to generate, less error prone
4
L9(3 )
Factors
R
U
N
S
0
0
0
1
1
1
2
2
2
0
1
2
0
1
2
0
1
2
0
1
2
1
2
0
2
0
1
0
2
1
1
0
2
2
1
0
Example
• Consider a system that has 4 options
and each option has 3 possible
values
• Exhaustive approach; 3 x 3 x 3 x 3 =
81 test cases
• OATS approach uses 9 test cases
where each test tests a pair wise
interaction
• 9/81 = 11%
Technique
• First, determine how many
independent variables you need to
test for interaction (factors)
• Second, determine how many values
(levels) each of these variables will
have
• Next, find an orthogonal array that
maps to this requirement
– At least as many factors from step 1
– At least as many levels from step 2
Technique
• Next, map the factors and levels on
to the array
• Choose values for the “left over”
levels
• Create test cases for each run
Example
• Web page
– Three sections
– Hidden or visible
• Three independent variables (sections of
the page)
• Two levels (invisible, hidden)
• L4(2^3) array will work here
– Two levels
– Three factors
– Number of runs is not necessary
Example
• Map values to array
– 0 = hidden
– 1 = visible
• No left over values (value mapped to
every level in array)
• Create test cases
Example
Orthogonal array before mapping factors
Factor 1
Factor 2
Factor 3
Run 1
0
0
0
Run 2
0
1
1
Run 3
1
0
1
Run 4
1
1
0
Example
Orthogonal array after mapping factors
Top
Middle
Bottom
Test 1
Hidden
Hidden
Hidden
Test 2
Hidden
Visible
Visible
Test 3
Visible
Hidden
Visible
Test 4
Visible
Visible
Hidden
Example
• Test cases
– Display home page and hide all sections
– Display home page and show all but the
Top section
– Display home page and show all but the
Middle section
– Display home page and show all but the
Bottom section
Another example
foo (M1 )
C1
C2
C3
S1
S2
M1
M2
M3
S3
Another example
• To test all combinations
– 3 x 3 x 3 (three clients sending three
messages to three servers)
• Assumes foo( ) can be tested with a
single test case (not realistic)
Another example
• Three independent variables
– Client
– Server
– Message class
• Each variable has three values
– Message 1
– Message 2
– Message 3
Another example
• The ideal array is L?(3^3)
• No published array exists
• Look for the smallest array that will
do the job
• L9(3^4) orthogonal works in this case
– Three levels for the values
– Four factors for the three variables
Another example
• Mapping
– Client; C1=0, C2=1, C3=2
– Server; S1=0, S2=1, S3=2
– Message; M1=0, M2=1, M3=2
Example
Orthogonal array before mapping factors
Run 1
Run 2
Run 3
Run 4
Run 5
Run 6
Run 7
Run 8
Run 9
Factor 1
0
0
0
1
1
1
2
2
2
Factor 2
0
1
2
0
1
2
0
1
2
Factor 3
0
1
2
1
2
0
2
0
1
Factor 4
0
2
1
1
0
2
2
1
0
Example
Orthogonal array after mapping factors
Test 1
Test 2
Client
C1
C1
Server
S1
S2
Test 3
Test 4
Test 5
Test 6
Test 7
Test 8
Test 9
C1
C2
C2
C2
C3
C3
C3
S3
S1
S2
S3
S1
S2
S3
Message
M1
M2
M3
M2
M3
M1
M3
M1
M2
Example
• No left over levels
• One extra factor in original array
• This can be ignored
– Still get even distribution
• This created 9 test cases
Complex multi-level cases
• Consider the following system
– 5 independent variables (A, B, C, D, E)
– A and B have two different values (1,2)
– C and D have three different values
(1,2,3)
– E has 6 different values
• Total number of test cases = 2 x 2 x 3
x 3 x 6 = 216
Complex multi-level cases
• To find a suitable OA, look in a catalog of
arrays for an OA with
– At least 6 levels
– At least 5 factors
• Smallest is L49(7^8)
– 49 test cases instead of 216
• Possible to find another array with fewer
test cases
– L18(3^6 6^1) => 18 runs
Complex multi-level cases
• Mapping
– A, A1=0, A2=1
– B, B1=0, B2=1
– C, C1=0, C2=1, C3=2
– D, D1=0, D2=1, D3=2
– E, E1=0, E2=1, E3=2, E4=3, E5=4, E6=5
Complex multi-level cases
OA before mapping
Factor Factor Factor Factor Factor Factor Factor
1
2
3
4
5
6
7
Run 1
0
0
0
0
0
0
0
Run 2
0
1
2
2
0
1
1
Run 3
0
2
1
2
1
0
2
Complex multi-level cases
OA after mapping
A
B
C
D
E
Test 1
A1
B1
C1
D1
E1
Test 2
A1
B2
C3
D3
E2
Test 3
A1
2
C2
D3
E3
Complex multi-level cases
• Extra factors can be ignored
• Left over levels are opportunities to
add extra test cases
• A and B only have two levels, but
three specified in array
• Must provide a value to have a useful
test case
Complex multi-level cases
• Choice is arbitrary, but should
choose wisely to add the most
variety
Complex multi-level cases
OA after mapping
A
B
C
D
E
Test 1
A1
B1
C1
D1
E1
Test 2
A1
B2
C3
D3
E2
Test 3
A1
B1
C2
D3
E3
Web site for OA selection
and information
• http://www.research.att.com/~njas/oa
dir/
• Good book on OA “Orthogonal
Arrays, Theory and Applications, by
A.S.Hedayat, N.J.A Sloane, and John
Stufken
Lessons learned from
industry application
•
•
•
•
•
Manual application
Focusing on wrong area
Using OATS for minimal efforts
OATS for high risk applications
Picking wrong parameters to
combine
• “Orthogonally speaking” by Elfriede
Dustin
Decision tables
• List all possible conditions (inputs)
and all possible actions (outputs)
• Useful for describing critical
components of a system that can be
defined by a set of rules
Decision table
Test cases for payroll
example
Other BB techniques
• Behave like a dumb user (Ron
Manning test)
• Look for bugs where you’ve already
found them
– If bugs being found in upper
boundaries, keep looking there!
– Programmers tend to fix only bug
reported – nothing more!
• Follow experience, intuition, hunches
State transition diagrams
• Old but effective method for
describing a system design and
guiding our testing
• Functionality dependent on current
input and also its past input (state
and transitions)
• Transition mapped to requirement
• State are expected output
opportunities
Quiz
• Q: T/F, You can perform dynamic black box
testing w/o a product specification or
requirements document
• A: True. The technique is called exploratory
testing and you essentially use the SW as
thought it’s the product spec. Risk is that you
will not know if a feature is missing.
Quiz
• Q: If you are testing a programs ability to print to
a printer, what generic test-to-fail test cases
might be appropriate?
• A: Attempt to print with no paper and with
jammed paper. Take printer offline, unplug the
power, disconnect printer cable, printing with low
ink or toner or with a missing cartridge. Look in
the manual and see what errors its supposed to
provide and attempt to produce them
Quiz
• Q: What boundary conditions exist for the Print
Range?
Quiz
• A: Slides option (0 – large number)
• Maybe try internal boundaries (254,255,256,1023,
1024, 1025)
• Try printing pages 1-8 of a 6 page document (SW
must stop printing at page 6 because its out of
data, not because it was told to stop – this is a bit
different)
Quiz
• Q: What equivalence partitions would you create
for a 10 character zip code in the form of 000000000?
Quiz
• A: valid 5 digit zip codes (numeric, not actually in
use)
• Valid 9 digit ZIP codes (with a dash)
• Short 5 digit (only for digits)
• Short 9 digit
• Long 5 digit (8 w/o a dash)
• Long 9 digit
• 10 digits with no dash
• Dash in wrong place
• More than one dash
Final comments
• Not a lot of industry experience
reports (yet)
• OAs with strength greater than 2
require more columns
• Number of pair-wise combinations
are much smaller than the cartesian
product
• Catalogs of OAs can be found in
statistics books and Taguchi books
Black box art
Ad hoc testing
• Based on experience
• Pareto analysis approach
• Risk analysis (importance to the
user)
• Problematic situations (boundaries,
etc)
• Make sure problem can be replicated
Random testing
• Creating tests where the data is in
the format of real data but all of the
fields are generated randomly, often
using a tool
• Minimally defined parameters
– “Monkeys”
– “intelligent monkeys”
Random testing
weaknesses
•
•
•
•
•
Test often not realistic
No gauge of actual coverage
No measure of risk
Many become redundant
Lots of time to developed expected
results
• Hard to recreate
Semi-random testing
• Refined random testing
• Equivalence partitioning
• Little added confidence to systematic
techniques
• May explode if not careful
• “intelligent” monkey
Exploratory testing
• Test design and execution are
conducted concurrently
• Results prompt tester to delve
deeper
• Not the same as ad-hoc testing
• Good alternative to structured
testing techniques
White box testing techniques
• Reviews and inspections
• Checklists
• Dynamic techniques
White box testing
• Look inside a component and create
tests based on implementation
Cyclomatic complexity
• From mathematical graph theory
• C = e – n + 2p
– e = number of edges in the graph
(number of arrows)
– n = number of nodes (basic blocks)
– p = number of independent procedures
Example
C=7–6+2(1)=3
Code coverage
• Design test cases using techniques
discussed
• Measure code coverage
• Examine unexecuted code
• Create test cases to exercise
uncovered code (if time permits)
Structure of a test
procedure specification
Specification for a typical
system-level test
Examining the code: White
Box techniques
Why white box techniques?
• Find bugs early
• Find bugs that are hard to find with
BB techniques
• Provides good ideas to BB testers
Formal reviews
• Identify problems (wrong and
missing)
• Follow rules
• Prepare
• Write a report
Indirect results
•
•
•
•
Communications
Quality
Team camaraderie
Solutions
Peer reviews
•
•
•
•
Least formal method
Programmer and one or two others
Looks for problems and oversights
Follow basic rules (scaled back)
Walkthroughs
•
•
•
•
•
Next step up in formality
Formal presentation to small group
One senior programmer is key
Question things that are suspicious
Report written summarizing meeting
Inspections
• Most formal and structured
• Presenter is not original programmer
• Participants (inspectors) look at code
from different perspectives
• Other roles (moderator, recorder)
• Re-inspect if necessary
• Good for code and design docs
Coding standards
• Code may operate properly but not
adhere to a standard or guideline
• Standards; established, fixed, have
to follow rules
• Guidelines; suggested best practices
• Required for;
– Reliability
– Readability/maintainability
– portability
Where to find
• ANSI www.ansi.org
• International Engineering
Consortium www.iec.org
• ISO www.iso.ch
• National Committee for Information
Technology Standards www.ncits.org
Code checklists
•
•
•
•
•
•
•
Data reference errors
Data declaration errors
Computation errors
Comparison errors
Control flow errors
Subroutine parameter errors
I/O errors
Data reference errors
• Is an uninitialized variable
referenced?
• Is a variable used where a constant
would work better? (checking the
boundary of an array)
• Is a variable ever assigned a value
that is different than variable type?
• Is memory allocated for referenced
pointers?
Data declaration errors
• Are all variables assigned a correct length,
type, storage class? (should a variable be
declared as a string instead of an array of
characters?)
• Are there any variables with similar
names? (not a bug)
• Are variables declared within its own
module, or is it understood that it is
shared with higher module?
Computation errors
• Do any calculations that use variables
have different data types, such as adding
an integer to a floating point number?
• Do any calculations that use variables
have the same data types but are different
lengths such as adding a byte to a word?
• Order of evaluation and operator
precedence
Comparison errors
• Are comparisons correct? These are
very susceptible to boundary
condition problems
• Comparisons between fractional and
floating point values?
• Does each Boolean expression state
what it should?
Control flow errors
• If the language contains statement groups
(begin…end, do…while), are the ends
explicit and do they match the appropriate
groups
• Is there a possibility of a premature loop
exit?
• Is it possible that a loop never executes?
It is acceptable if it doesn’t?
Subroutine parameter errors
• Does a subroutine alter a parameter
that intended only as an input value?
• Do the units of each parameter
match the units of each
corresponding argument – English
vs metric for example
• Proper use of global variables
I/O errors
• Does the SW strictly adhere to the
specified format of the data being
read or written by the external
device?
• If the file or peripheral is not ready or
present, is that error condition
handled correctly?
Quiz
• Q: T/F Static white box testing can find
missing items as well as problems
• A: True, missing items are probably more
important than “normal” problems
Quiz
• Q: Besides being more formal, whats the
big difference between inspections and
other types of reviews?
• A: With inspections, a person other than
the original author is the presenter – they
must fully understand the software and is
much more effective
Dynamic white box testing
Area covered
• Directly testing low level functions
(APIs)
• Testing SW at the top level and
adjusting test cases based on
knowledge of SW’s operation
• Gaining access to read variables and
state information to determine if the
SW is doing what you think
• Measuring how much of the code is
covered and making adjustments
Dynamic white box testing
vs debugging
“Software Testing” by Ron Patton
Against testing the whole
program
• Difficult and sometimes impossible
to find out what caused the problem
• Some bugs hide others
• Your experiences ..?
Unit and integration testing
“Software Testing” by Ron Patton
Drivers used to more
effectively test lower level
modules
“Software Testing” by Ron Patton
Test stubs
“Software Testing” by Ron Patton
How would you unit test
this?
Sample unit test cases
Input string
“1”
“-1”
“+1”
“0”
“-0”
“+0”
“1,2”
“abc”
“a123”
Output integer value
1
-1
1
0
0
0
1
2
0
Data coverage
• Involves looking at variables,
constants, arrays, data structures,
keyboard and mouse input, file,
screen input and output, I/O to other
devices like modems
– Data flow
– Sub boundaries
– Formulas and equations
– Error forcing
– Code coverage
Data flow
• Tracking a piece of data completely
through the SW
• Use a debugger and watch variables
to view data as program runs
– As opposed to BB where you only know
the variable at the beginning and at the
end
Sub-boundaries – data
examples
• A module that computes taxes might
switch from using a data table to
using a formula at a certain financial
cut-off point
• OS running low on RAM may start
moving data to a temporary storage
on hard drive
– Boundary may change depending on
how much space remains on disk
Formulas and equations
• Financial program to compute compound
interest
• A = P(1+r/n)^nt
•
•
•
•
•
P = principal amount
r = annual interest rate
n = # times interest compounded yearly
t = number of years
A = amount after time t
• White box tester must know to check for
n=0 (is n result of another computation?
Any way to make n=0?)
Error forcing
• Using a debugger/watch window
gives the ability to “force” variables
to certain values
• Make sure what you are doing is
realistic?
– Don’t set n=0 if its already checked at
the top of the loop!!
• Try to force all error messages
– Some errors difficult to reproduce, but
error forcing can allow you to check for
error message
Code coverage
• Program statement and line coverage
• Branch coverage
• Condition coverage
Quiz
• Q: How does knowing how the software
works influence how and what you should
test?
• A: If you test only with a black-box view of
the software, you won’t know if your test
cases adequately cover all parts of the
software nor if some of the test cases are
redundant
Quiz
• Q: T/F Always design you black box tests
first
• A: True. Design your test cases based on
what you believe the software is supposed
to do. Then use white-box techniques to
check them and make them most efficient
Test implementation
Chapter 6
Test implementation
process
•
•
•
•
Acquiring test data
Developing test procedures
Preparing the test environment
Selecting and implementing the tools
used to facilitate process
Test environment
• Collection of various pieces
– Data
– Hardware configurations
– People (testers)
– Interfaces
– Operating systems
– Manuals
– Facilities
People
• Not just execution of tests
• Design and creation
• Should be done by people who
understand the environment at at
certain level
– Unit testing by developers
– Integration testing by systems people
Test environment
• Collection of various pieces
– Data
– Hardware configurations
– People (testers)
– Interfaces
– Operating systems
– Manuals
– Facilities
People
• Not just execution of tests
• Design and creation
• Should be done by people who
understand the environment at at
certain level
– Unit testing by developers
– Integration testing by systems people
Hardware configuration
• Each customer could have different
configurations
• Develop “profiles” of customers
• Valuable when customer calls with a
problem
• If cost limited, create a “typical”
environment
Co-habitating software
• Applications that are installed on a
PC will have other apps running on
them as well
• Do they share common files?
• Is there competition for resources
between the applications?
• Inventory and profile
Interfaces
• Difficult to do and a common source
of problems once the system is
delivered
• Systems may not have been built to
work together
– Different standards and technology
• Many tests have to be simulated
which adds to the difficulty
Source of test data
• Goal should be to create the most
realistic data possible
• Real data is desirable
• Challenges
– Different data formats
– Sensitive
– Classified (military)
• Adds to the overall cost
Data source characteristics
Volume of test data
• In many cases a limited volume of
data is sufficient
• Volume, however, can have a
significant impact on performance
• Mix is also important
Repetitive and tedious tasks
Test tooling traps
•
•
•
•
•
•
•
•
No clear strategy
Great expectations
Lack of buy-in
Poor training
Automating the wrong thing
Choosing the wrong tool
Ease of use
Choosing the wrong vendor
Test tooling traps
•
•
•
•
Unstable software
Doing too much, too soon
Underestimating time/resources
Inadequate or unique testing
environment
• Poor timing
• Cost of tools
Evaluating testware
•
•
•
•
QA group
Reviews
Dry runs
Traceability
Defect seeding
• Developed to estimate the number of
bugs resident in a piece of software
• Software seeded with bugs and then
tests run to determine how many
bugs were found
• Can predict the number of bugs
remaining
Defect
Seeding
Mutation analysis
• Used as a method for auditing the
quality of unit testing
• Insert a mutant statement (bug) into
code
• Run unit tests
• Result determines if unit testing was
comprehensive or not
Steps in mutation analysis
Configuration testing
Download