250 likes | 269 Views
Object-Oriented Testing. CIS 375 Bruce R. Maxim UM-Dearborn. OO testing Activities. Review OOA and OOD models Class testing after code is written Integration testing within subsystems Integration testing as subsystems are added to the system Validation testing based on OOA use-cases.
E N D
Object-Oriented Testing CIS 375 Bruce R. Maxim UM-Dearborn
OO testing Activities • Review OOA and OOD models • Class testing after code is written • Integration testing within subsystems • Integration testing as subsystems are added to the system • Validation testing based on OOA use-cases
Correctness of OOA/OOA Models • syntactic correctness • judged by making sure proper modeling conventions and symbolism were used • semantic correctness • checking the model's conformance to the real world problem domain
Consistency of OOA/OOD Models - 1 • assess the class-responsibility-collaborator (CRC) model and object-relationship diagram • review system design • examine the object-behavior model to check mapping of system behavior to subsystems • review concurrency and task allocation • examine the use-case scenarios and exercise the user interface design
Consistency of OOA/OOD Models - 2 • test object model against the object relationship network to ensure that all design object contain necessary attributes and operations needed to implement the collaborations defined for each CRC card • review detailed specifications of algorithms used to implement operations using conventional inspection techniques
Class Model Assessment - 1 • Revisit the CRC model and the object-relationship model • Inspect the description of each CRC card to determine if a delegated responsibility is part of the collaborator's definition • Invert the connection to ensure that each collaborator that is asked for service is receiving requests from a responsible source
Class Model Assessment - 2 • Using the inverted connections from step 3, determine whether • other classes might be required • responsibilities are properly grouped among classes • Determine whether widely requested responsibilities might be combined into a single responsibility • Steps 1 to 5 are applied iteratively to each class and during OOA model evaluation
OO Unit Testing • smallest testable unit is the encapsulated class or object • similar to system testing of conventional software • do not test operations in isolation from one another • driven by class operations and state behavior, not algorithmic detail or data flow across module interface
OO Integration Testing - 1 • focuses on groups of classes that collaborate or communicate in some manner • integration of operations one at a time into classes is often meaningless • regression testing is important as each thread, cluster, or subsystem is added to the system
OO Integration Testing - 2 • thread-based testing • testing all classes required to respond to one system input or event • use-based testing • test independent classes first • test dependent classes making use of them next • cluster testing • groups of collaborating classes are tested for interaction errors
OO Validation Testing • focuses on visible user actions and user recognizable outputs from the system • validation tests are based on OOA • use-case scenarios • object-behavior model • event flow diagram • conventional black-box testing methods can be used to drive the validation tests
OO Test Case Design • Each test case should be uniquely identified and be explicitly associated with a class to be tested • State the purpose of each test • List the testing details for each test
OO Test Case Detail • states to examine for each object involved • messages and operations to exercised as a consequence of the test • exceptions that may occur when the object is tested • external conditions needed to be changed for the test • supplementary information required to understand or implement the test
OO Test Design Issues • White-box testing methods can be applied to testing the code used to implement class operations, but not much else • Black-box testing methods are appropriate for testing OO systems
OOP Testing Concerns • classes may contain operations that are inherited from super classes • subclasses may contain operations that were redefined rather than inherited • all classes derived from an previously tested base class need to be thoroughly tested
Fault-Base Testing • best reserved for operations and the class level • uses the inheritance structure • tester examines the OOA model and hypothesizes a set of plausible defects that may be encountered in operation calls and message connections and builds appropriate test cases • misses incorrect specification and errors in subsystem interactions
Scenario-Based Testing • using the user tasks described in the use-cases and building the test cases from the tasks and their variants • uncovers errors that occur when any actor interacts with the OO software • concentrates on what the user does, not what the product does • you are better off spending more time on reviewing the use-cases as they are created and less time on use-case testing
Testing Surface Structure and Deep Structure • Testing surface structure • exercising the structure observable by end-user • often involves observing and interviewing users as they manipulate system objects • Testing deep structure • exercising internal program structure established as part of the system and object design • dependencies • behaviors • communications mechanisms
Random Class Testing • Requires large numbers data permutations and combinations • Can be very inefficient • Using partition testing can reduce the number of test cases required
Partitioned Class Testing - 1 • state-based partitioning • tests designed in way so that operations that cause state changes are tested separately from those that do not • attribute-based partitioning • for each class attribute, operations are classified according to those that • use the attribute • modify the attribute • do not use or modify the attribute
Partitioned Class Testing - 2 • category-based partitioning • operations are categorized according to the function they perform: • Initialization • Computation • Query • Termination
Interclass Test Case DesignMultiple Class Testing • for each client class use the list of class operators to generate random test sequences that send messages to other server classes • for each message generated determine the collaborator class and the corresponding server object operator • for each server class operator (invoked by a client object message) determine the message it transmits • for each message, determine the next level of operators that are invoked and incorporate them into the test sequence
Interclass Test Case DesignBehavior Model Testing • test cases must cover all states in the state transition diagram • breadth first traversal of the state model can be used (test one transition at a time and only make use of previously tested transitions when testing a new transition) • test cases can also be derived to ensure that all behaviors for the class have been adequately exercised