Software Engineering Ch.8
5 TDD Process Activities
1. Identify increments of required functionality, 2. Write a test, 3. Run test (will fail because no code), 4. Write code, run test, 5. If all successful, move on to next step
Performance testing
A part of release testing that tests the profile of use for a system; stress testing, performance, reliability
Software component
Several interacting objects
Component testing
Should focus on showing the component interface behaves according to its specification (already have to have unit testing completed.)
Program testing
Show that it does what it should do and show defects.
Software inspections
Static verification; analysis of static system representation to discover problems; tool-based document and code analysis
Defect testing
Unintended use, discover faults
Guideline-based testing
Use testing guidelines
User testing
Users/customers provide input and advice.
Equivalence partitions
When the program behaves in an equivalent way for each class member
3 Differences between system and release testing
1. A separate team is testing in release testing, 2. System testing is focused on discovering bugs (defect testing), 3. Release testing focuses on validation testing (good enough for normal use)
3 Steps of User testing
1. Alpha (users work with dev team), 2. Beta (release is made available to users), 3. Acceptance (customers test to see if it is ready for full use)
5 General testing guidelines
1. Choose inputs that force system to generate all error messages, 2. Design inputs to cause overflow, 3. Repeat the same input, 4. Force invalid inputs, 5. Force computation results to be too small/large
4 Benefits of TDD
1. Code coverage (every part has a test), 2. Regression testing (regressing test suite is developed incrementally as program is developed), 3. Simplified debugging (easy to identify problems in small chunks), 4. System documentation (tests are a form of documentation that describe what the code should be doing).
3 Stages of testing
1. Development, 2. Release, 3. By users
3 Interface Errors
1. Misuse (calling component calls another component and makes an error, i.e. parameters in wrong order), 2. Misunderstanding (calling component embeds assumptions which are incorrect), 3. Timing errors (called and calling components operate at different speeds and out-of-date information is accessed).
4 Interface Types
1. Parameter(data passed from one method to another), 2. Shared memory(block of memory is shared between two methods), 3. Procedural(sub-system encapsulates a set of procedures to be called by other sub-systems), 4. Message passing(sub-systems request services from other sub-systems).
5 Interface testing guidelines
1. Parameters are at the extreme range, 2. Test pointers with null pointers, 3. Cause component to fail, 4. Stress testing in message passing systems, 5. Shared memory - vary order of which components are activated
3 Automated test components
1. Set up test cases(inputs and expected outputs), 2. Call object or method, 3. Assertion (AssertEquals/True).
4 Testing Guidelines(Sequences)
1. Test software with sequences of only a single value, 2. Use different sized sequences, 3. Derive tests so that the first, middle, and last elements of sequence of accessed, 4. Test with sequences of zero length
4 parts of acceptance testing in agile development
1. User is part of the dev team, 2. Tests are defined by user, 3. There is no separate acceptance testing process, 4. Main problem is that the user is "typical" and represents all interests of all stakeholders
Two Testing goals
1. Validation (software meets requirements), 2. Defects (find failures)
Verification
Answers the question, "does our product conform to specifications?"
Validation
Answers the question, "does the product do what the user requires?"
Goal of release testing
Convince the supplier that it's good enough for use (shows that it delivers its specified functionality, performance and dependability, and does not fail during normal use)
Interface testing
Detect faults due to interface errors or invalid assumptions
Software testing
Dynamic verification; exercise software behavior
Stress testing
Form of performance testing where system is deliberately overloaded to test failure behavior
Software purpose
How critical the software is
Partition testing
Identify groups of inputs that have common characteristics and should be processed the same way.
Development Testing
Includes unit testing, component testing, system testing
System testing
Integrate components to create a version of the full product and test it fully. Checks that components are compatible.
Validation testing
Intended use, confirm system works
Test-Driven Development(TDD)
Interleaves testing and code development; tests are developed before code. Used in mainly agile development but can be plan-driven.
Scenario testing
Invent a typical usage scenario and use this to derive test cases.
Two main types of unit tests
Normal Operation and Abnormal Operation
Regression testing
Testing the system to check that changes have not broken previous code
Unit testing
Tests individual methods within an object
Why is it hard to test inherited objects?
The information to be tested is not localized
Release Testing
The process of testing a particular release of a system, a form of system testing