testing interfaces in multi-program systems ecen5043 software engineering of multiprogram systems...

63
Testing Interfaces in Multi- Program Systems ECEN5043 Software Engineering of Multiprogram Systems University of Colorado, Boulder

Upload: primrose-fowler

Post on 23-Dec-2015

214 views

Category:

Documents


0 download

TRANSCRIPT

Testing Interfaces in Multi-Program Systems

ECEN5043 Software Engineering of Multiprogram Systems

University of Colorado, Boulder

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

2

Topics• Computational Models• Implications of nondeterminism• Model Testing

– Class Testing extended– UML for state diagrams, concurrency,

components– Timing and Time-outs -- UML and testing– Threads & synchronization

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

3

Topics (cont. 2)

• Dynamic Testing– Definition of component– Component Interactions

• Identifying -- nonprimitive classes• Specifying

– Testing Interactions• Collections • Collaborations• One-way pass along• Interaction between Testing & Design

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

4

Topics (cont. 3)

• Sampling Test Cases -- OATS revisited• Testing Off-The-Shelf Components• Protocol Testing• Test Patterns -- McGregor & Sykes; Binder• Testing Interactions at the System Level• Testing Exceptions

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

5

Computational Models

• Sequential processing -- default– Model testing: straightforward inspections– Dynamic testing: see course #1

• Concurrency– Multiple things that appear to be happening at the

same time.– Central issue -- nondeterminism of interleaved

statement execution– Preliminary thoughts on implications for testing?

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

6

Computational Models (cont.)

• Distributed – Characterized by: multiple processes to support

a flexible architecture in which the number of participating objects can change

– Can be distributed across multiple processes on the same machine -- we’re postponing this to course #3 when we focus on distributed architectures (on one or more processors).

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

7

Implications of Nondeterminism

• Nondeterminism– Difficult (impossible) to replicate a test run when

the software contains multiple threads or concurrent processes

– Ordering determined by the scheduler– Changes in programs NOT associated with the

system under test can affect the order in which threads of the system under test are executed

– If a failure is encountered and the defect is isolated and repaired, the fact that the program passes test execution is ... ?

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

8

Nondeterminism and Static Testing

• More thorough model testing at the class level

– Design (and review) should investigate whether there is

• a need

• an appropriate provision for synchronization

• During model testing,

– Ensure test cases require execution of critical sections

– Consider impact of different orderings with respect to

• starvation

• mutual exclusion

• deadlock

• synchronization

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

9

But how??

• Three kinds of model testing

1. Is the code for one process correct by itself (are the sequential statements correct) assuming its interactions are correct

2. If a propos, inspect with multiple copies of same process in parallel

3. For shared data, different processes, have copies of each

• For the critical sections

– “What would starvation require in this context?” Is it possible?

– Similarly for mutual exclusion, deadlock, and necessary synchronization

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

10

Testing Multi-program Systems

• Methods -- review the class testing described in previous course– state transition coverage– code coverage– pre & post condition coverage

• Extend notion of state diagram to that of interacting components (programs/processes)

• Extend state transition coverage similarly– Recall notion of state transition pairs coverage

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

11

Sample State Transition Diagram - Gomaa

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

12

Time-Outs for Testing

• It’s possible that a process/program will make a request of another process that never responds

• The requester must be able to detect that and abandon the request

• Design should explicitly define correct behavior for – when the request is answered– and also when it is not – the behavior may be very different in those two cases.

• Model testing should verify these• Dynamic testing should also.

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

13

Expressing Time on Interaction Diagrams

• Interaction diagrams are collaboration diagrams and sequence diagrams

• time expression -- resolves to a relative or absolute value of time when evaluated

• timing mark -- time-related name or label on a message

• timing constraint -- condition that must be satisfied with regard to time. – usually contains a time expression– may also contain a timing mark

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

14

Sample from Collaboration Diagram

Reminder: A sequence or collaboration diagram focuses on the time ordering of the messages that go back and forth between objects.

;Login Page ;Accountv:validateLogin(userID, password)

{v.executionTime < 3 sec}

v is the timing mark. The timing mark makes it easier to refer to that message elsewhere on the sequence diagram.

The expression between { } is the constraint.

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

15

Types of Timing

• balking message -- synchronous message but the sending object gives up on the message if the receiving object is not ready to accept it.– timing constraint {wait = 0}

• timeout message -- synchronous message but the sender waits only for a specified period for the receiver to get ready to accept the message– timing constraint {wait = 50 ms}

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

16

Threads & Concurrent Processes

• Working definition: a thread is a unit of computation that can be scheduled

• During design and design review, should explicitly consider the number of threads– Increasing it

• Can simplify certain algorithms/techniques• Increase the risk of sequencing problems

– Reducing it• Reduces sequencing problems• Makes software more rigid and maybe

inefficient

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

17

Concurrent Processes, Synchronization, & Notation

• During design inspections, verify presence of the helpful clauses in the UML state diagram

• Some languages provide a language keyword to automatically add the mechanism to prevent simultaneous access -- be sure it works as expected– In Java, the keyword synchronized is used on the

signature of a method to specify the need for a synchronization mechanism (see later slide)

• C++ requires explicit structures that each individual developer must construct

• In C++, creation of an instance of a monitor object indicates the location at which synchronization is needed

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

18

Java sample

public synchronized int get( ) {

while (available == false) {

try {

wait ( );

} catch (InterruptedException e) { }

}

available = false;

notifyAll( );

return contents;

}

public synchronized void put (int value) {

while (available == true) {

try {

wait ( );

} catch (InterruptedException e) { }

}

contents = value;

available = true;

notify ( );

}

Example from The Java Tutorial, Addison Wesley, Lesson 15, Threads of Control, pp. 285-325.

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

19

Dynamic TestingConcerns

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

20

Collections & Collaborators

Collections:Classes that maintain

associations with instances of other classes but never actually interact with those instances

Hold the objects they are handed and return them in specific orders or find them based on specific criteria

Test with techniques for primitive classes

Collaborators:

may be addressed directly (name)

or by a pointer or a reference

dynamic type of object may be different from static type associated

Pointers & references are polymorphic

Bound to an instance of any number of classes

pre & post conditions refer to states or values of collaborating objects

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

21

Testing Collection Classes• Test driver

– create instances passed as parameters in messages to collection being tested

– Ensure those instances are correctly built into and removed from the collection.

• Address capacity limitations– Test behavior under circumstances where it cannot

allocate memory to add the new item to itself• If defensive, use negative tests also

– If the collection class uses a structure (array, etc.), include test cases to fill it completely and attempt to add one more.

• Test sequences of operations

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

22

Collaborators at Program Interfaces

• Collaborating class– Post condition in a class’ interface refers to the

state of an instance and/or specifies that some attribute of that object is used or modified

• We assume operations are specified by pre-, post condition and class invariants

• Need to know if defensive design or design by contract– Changes how senders and receivers interact

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

23

Nondeterminism & Dynamic Testing

• There is no perfect way to do this but the following will help:• Begin dynamic testing with as “clean” a machine as possible

– document the environment– identify apps that must run while items-under-test are running– add basic set of typical unrelated apps

• For each test case (set of programs/ thread-generating processes)– Describe any modifications made to this “standard

environment”– Note the order in which processes are started– Include a debugger that allows verification of order in which

threads are created, executed, and deleted

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

24

Orthogonal array testing applied to OO

• Orthogonal array testing is a sampling technique to limit the explosion of test cases

• Define pair-wise combinations of a set of interacting objects because most faults result from interactions due to two-way interactions

• An orthogonal array is an array of values in which each column represents a factor.

• A factor is a variable in an experiment; in our case, a specific class family in the software sys

• Each variable takes on a certain set of values called levels; in our case, a specific class

• Each cell has an instance of the class, that is, a specific state of an object

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

25

OATS – orthogonal array testing system

• The factors (columns) are combined pair-wise rather than representing all possible combinations of the levels for the factors.

• Suppose we have three factors – A, B, C – and each has three levels – 1, 2, and 3

• How many possible combinations of these values are there?

• How many pair-wise combinations? That is, how many combinations where a given level appears exactly twice?

factor=class family; level=class; cell=instance

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

26

array factor:

class family

factor:

class family

level:

specific class

an instance of the specific class

an instance of the specific class

level:

specific class

an instance of the specific class

an instance of the specific class

level:

specific class

an instance of the specific class

an instance of the specific class

a specific state

a specific state

a specific state

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

27

Excerpt from Fig. 6.16, M&S, 21 x 37

1 2 3 4 5 6

1 1 1 1 1 1 1

2 1 1 2 2 2 2

3 1 1 3 3 3 3

4 1 2 1 1 2 2

5 1 2 2 2 3 3

6 1 2 3 3 1 1

7 1 3 1 2 1 3

8 1 3 2 3 2 1

9 1 3 3 1 3 2

10 2 1 1 3 3 2

11 2 1 2 1 1 3

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

28

OATS – uses a balanced design

• Every level of a factor appears exactly the same number of times as every other level of that factor

• Think of the rows of a table as test cases (In example, 18 of the possible 27 are not being conducted.

• This is a systematic way of reducing the number of test cases.

• If we decide to add more later, we know which ones have not been run.

• Also logical – most errors are between pairs of objects rather than among several objects

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

29

OATS adequacy criteria

• Ability to vary how completely the software under test is covered

• Exhaustive – all combinations of all factors

• Minimal – only interactions between the base classes from each hierarchy are tested

• Random – tester haphazardly selects cases from several of the classes; not statistically random

• Representative – uniform sample ensures every class is tested to some level

• Weighted representative – adds cases to the representative approach based on relative importance or risk associated with the class

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

30

Testing off-the-shelf components –

• Investigate the limits of whatever specification for it that is available– Create one if none is available– Developers will need it in order to properly use the

component• Begin with extreme boundary values -- even incorrect• Do stress tests next• If worth continuing

– Treat as a class interacting with rest of your product– There is usually a main class that presents itself to

the user or other products. Base tests on that class.

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

31

Protocol testing –

• Protocols: – Sequences of method invocations*– Identify them by combining a method whose post

condition enables the precondition of another method

– Easier to see from a state diagram than from written pre- and post conditions.

• Investigates whether the implementation of a class satisfies its specification.

• Abstract to state diagram with interacting components

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

32

Protocol Interaction Test Suite

• Consider as the “class under test” the component’s class that presents an interface to the other components

• Each protocol represents a life cycle for objects from that class in combination with instances of classes in the interacting components.– Begin with initial states of a given two objects as

denoted in the state diagrams of the two corresponding classes

– A sequence of states for each object – Ending with the terminal states– A test case takes the two objects through one complete

sequence of methods

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

33

Protocol between two components

• The sequence of messages exchanged between them.

• A component should advertise – the services it provides (through its interface)– what it requires (through its preconditions)

• Should also describe the sequence in which these interactions are expected

• One set of test cases defined from the protocols should exercise the integration of two components through the complete protocol.

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

34

Example of protocol between two components

• Note: can be described using sequence diagram• “user” component sends asynchronous message to the

“hardware” component to start the action• Eventually hw that services multiple clients sends an

asynchronous message back that the action has been started• “User” wants hw to stop -- similar exchange• No notational convention but these four occur as a group

although 2 for one component and 2 for the other– Tester class plays role of the other component in a protocol– Java -- Tester object can pass itself as a parameter to the

component under test and then invoke the services specified in the protocol

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

35

Example: Timer Protocol – diagram on next slide• Trace through the state diagram to create a life cycle test.• Create the object• Send one or more attach (...) messages • Followed by enable ( ), disable ( ), and• delete ( )• This is a simple example.• A life cycle test case provides a test of the object in the

ways that it will interact with its client objects• When the object is one that interfaces with client objects

in another program, this provides a realistic test sequence.

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

36

McGregor & Sykes Timer

Disabled Enabled

Timing

notify( )

attach(TimerObserver)

enable( )

disable( )

detach(TimerObserver)

isEnabled( ) limit( ) size( )

notify()/observers->forAll(notify())

delete ( )

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

37

Test Patterns –

• Test patterns are design patterns for test software.– The pattern description explains the context

within which the pattern should be considered– Provides a set of forces that guide a trade-off

analysis– Explains how to construct the objects.

• When developer uses a certain design pattern, tester can use a certain test pattern to structure the test code.

• Binder gives several examples in some detail.

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

38

Test Design Patterns Presented in Binder

• Test Design Patterns are for designing test suites• Robert Binder presents test design patterns for over

30 architectures

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

39

Exceptions

• An alternative route for returning from a method that does not necessarily move to the next statement after the method is invoked.– The exceptional return value is an object and can

be arbitrarily complex– Where the exception is thrown varies based on

the depth of the aggregation hierarchy

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

40

Testing Exceptions -- class• Class level testing: verify that each of the methods

does throw the exceptions it claims to throw in the appropriate circumstance.– Coverage criteria – class throws every exception

contained in the specifications of the methods– At least one test case per exception– Handled in normal class testing because each

potential throw should be a postcondition clause

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

41

Role of test driver of exceptions -- class

• Test driver sets up conditions to create exception event.– Provides try block

• inside that is a stimulus that invokes the method that throws the specific exception.

– Exception caught by test driver• verifies correct exception

• Exceptions are objects and belong to classes– catch statements can use typing system to

verify that it is of the correct typeS

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

42

Testing Exceptions – integration

• Integration level -- test they are being – thrown at correct time – caught at the correct place

• During inspection of system-level design model– every user-defined exception instantiated

• should be traced to an object that will catch the exception

• using the sequence diagram for the scenario that throws the exception

• Exception handling can be model tested early

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

43

Testing interactions at system level

• Components can be so complex it’s easier to test them in the context of the application itself

• Which interactions are tested at system level?– Those that can also be verified at the system level– That is, can see the direct results of the tests– There must be a direct relationship between user

interface and the ability to view test results• By these criteria, many multi-program interactions

must be tested as class vs. program or class vs. class because program vs. program interactions may not be visible at the system level.

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

44

Books

• McGregor & Sykes, A Practical Guide to Testing Object-Oriented Software, Addison Wesley, 2001. ISBN 0-201-32564-0

• Scott, Kendall, UML Explained, Addison Wesley, 2001. ISBN 0-201-72182-1

• Binder, Robert V., Testing Object-Oriented Systems: Models, Patterns, and Tools, Addison Wesley 2000. ISBN 0-201-80938-9

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

45

Orthogonal array testing applied to OO

• Orthogonal array testing is a sampling technique to limit the explosion of test cases

• Define pair-wise combinations of a set of interacting objects because most faults result from interactions due to two-way interactions

• An orthogonal array is an array of values in which each column represents a factor.

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

46

Orthogonal array testing applied to OO

• An orthogonal array is an array of values in which each column represents a factor.

• A factor is – a variable in an experiment; in our case, a

specific class family in the software system– Or states of that class family

• Each variable takes on a certain set of values called levels (rows); in our case, specific classes or states of those classes

• Each cell is an instance of the class, that is, a specific object or a particular state

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

47

OATS – orthogonal array testing system

• The factors (columns) are combined pair-wise rather than representing all possible combinations of the levels for the factors.

• Suppose we have three factors – A, B, C – and each has three levels

• How many possible combinations of these values are there? 3 x 3 x 3

• How many pair-wise combinations? That is, how many combinations where a given level appears exactly twice?

factor=class family; level=class; cell=instance

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

48

How many pair-wise combinations?

• A B C• 1 1 1 3• 2 1 2 2• 3 1 3 1• 4 2 1 2• 5 2 2 1• 6 2 3 3• 7 3 1 1• 8 3 2 3• 9 3 3 2

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

49

Mapping the terms of OATS to OO sw

array factor:

class family

factor:

class family state

level:

specific class

an instance of the specific class

A state of that instance

level:

specific class

an instance of the specific class

A state of that instance

level:

specific class

an instance of the specific class

A state of that instance

A state of that nstance

A state of that nstance

A state of that nstance

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

50

OATS – uses a balanced design

• Every level of a factor appears exactly the same number of times as every other level of that factor

• Think of the rows of a table as test cases • This is a systematic way of reducing the number of

test cases.• If we decide to add more later, we know which ones

have not been run.• Also logical – most errors are between pairs of

objects rather than among several objects

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

51

Look at elevator example (M&S, p. 230)

• Want to test interactions between elevator controller, elevator, and wall button-panel

• Suppose:

– Elevator can be basic, hi-speed, or express

– Elevator Controller can control basic, hi-speed, or express

– Wall button-panel can be one-button panel or two-button panel

• Elevator states: Moving to a floor, stopped, idle

• Elevator Controller states: idle, scheduling, dispatching

• Wall button-panel states?

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

52

Steps from M & S, p. 230-232

1. Identify all factors (class families in this case)

2. Determine levels for each factor (states)

3. Locate a standard orthogonal array that fits the problem

1. We have 2 class families that each have 3 levels and three states

2. We have one class family that has _a_ levels and _b_ states

That’s how many possible test cases? 3 x 3 x 3 x 3 x a x b

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

53

Excerpt from Fig. 6.16, M&S, 21 x 37

1 2 3 4 5 6

1 1 1 1 1 1 1

2 1 1 2 2 2 2

3 1 1 3 3 3 3

4 1 2 1 1 2 2

5 1 2 2 2 3 3

6 1 2 3 3 1 1

7 1 3 1 2 1 3

8 1 3 2 3 2 1

9 1 3 3 1 3 2

10 2 1 1 3 3 2

11 2 1 2 1 1 3

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

54

Need a way to map Fig 6.16 to this

Elevator ElevatorState

Elev Ctrl Elev Ctrl State

Wall Button Panl

Wall Button PnlStte

1

2

3

4

5

6

7

8

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

55

Mapping classes and states

• The class family with two levels (Wall Button Panel) maps to Column 1

• Its states map to Column 2• Column 3 can have a class family with three levels;

either elevator or elevator controller will do;– Map Elevator Controller family to column 3– Map its states to column 4

• What’s left?– Map Elevator family to column 5– Map its states to column 6

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

56

Mapping levels – Wall Button Panel

• For Wall Button Panel– 1 = 1-button panel – 2 = 2-button panel

• One-button Panel states (column 2)– 1 = off– 2 = on

• For two-button panel (column 2)– 1 = both off– 2 = 1 requesting– 3 = both requesting

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

57

Mapping levels – Elevator Controller

• Column 3 – elevator controller class family– 1 = basic– 2 = hi-speed– 3 = express

• Column 4 – elevator controller class states– 1 = idle– 2 = scheduling– 3 = dispatching

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

58

Mapping levels -- Elevator

• Column 5 = elevator class family– 1 = basic– 2 = hi-speed– 3 = express

• Column 6 = elevator class states– 1 = Moving to a floor– 2 = stopped– 3 = idle

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

59

Label Fig 6.16 with headers that “fit”

Wall-Button Panel

Wall-Button Pnl stte

Elev Ctrlr

Elev Ctrlr State

Elevator ElevatorState

1 1 1 1 1 1 1

2 1 1 2 2 2 2

3 1 1 3 3 3 3

4 1 2 1 1 2 2

5 1 2 2 2 3 3

6 1 2 3 3 1 1

7 1 3 1 2 1 3

8 1 3 2 3 2 1

9 1 3 3 1 3 2

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

60

When mapped to all of Fig 6.16

• Each row becomes a test case• Decode the level numbers for a row in the array

back to the individual lists for each factor• In Fig 6.16, there are actually two more columns.

– We can ignore them because we don’t need them.– Or we may decide we can include one more class

family and its states in the future

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

61

What about mismatches?

• When there is a difference in the number of levels, we can use a column that matches or exceeds the maximum

• What about the Wall-Button Panel at level 1 where there is only one button?

– That only has two states but there can be a 3 in column 2 associated with the 1 in the column 1

– We interpret the 3 as if it were either 1 or 2. What do you want to emphasize in the testing?

• Arbitrary assignment

• High frequency

• High risk

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

62

Other what-ifs?

• See M & S, p. 232

April 17, 2007 ECEN5043 University of Colorado Testing Interfaces

63

OATS adequacy criteria

• Ability to vary how completely the software under test is covered

• Exhaustive – all combinations of all factors

• Minimal – only interactions between the base classes from each hierarchy are tested

• Random – tester haphazardly selects cases from several of the classes; not statistically random

• Representative – uniform sample ensures every class is tested to some level

• Weighted representative – adds cases to the representative approach based on relative importance or risk associated with the class