Lecture 10.ppt


Published on

  • Be the first to comment

  • Be the first to like this

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Lecture 10.ppt

  1. 1. COSC 4406 Software Engineering Haibin Zhu, Ph.D. Dept. of Computer Science and mathematics, Nipissing University, 100 College Dr., North Bay, ON P1B 8L7, Canada, [email_address] , http://www.nipissingu.ca/faculty/haibinz
  2. 2. Lecture 10 Software Testing Strategies
  3. 3. Software Testing Testing is the process of exercising a program with the specific intent of finding errors prior to delivery to the end user. Verification: refers to the set of activities that ensure that software correctly implements a specific function. Validation: refers to a different set of activities that ensure that software that has been built is traceable to customer requirements.
  4. 4. What Testing Shows errors requirements conformance performance an indication of quality
  5. 5. Who Tests the Software? developer independent tester Understands the system but, will test "gently" and, is driven by "delivery" Must learn about the system, but, will attempt to break it and, is driven by quality
  6. 6. Testing Strategy unit test integration test validation test system test
  7. 7. Testing and SLDC
  8. 8. Testing Strategy <ul><li>We begin by ‘ testing-in-the-small’ and move toward ‘ testing-in-the-large’ </li></ul><ul><li>For conventional software </li></ul><ul><ul><li>The module (component) is our initial focus </li></ul></ul><ul><ul><li>Integration of modules follows </li></ul></ul><ul><li>For OO software </li></ul><ul><ul><li>our focus when “testing in the small” changes from an individual module (the conventional view) to an OO class that encompasses attributes and operations and implies communication and collaboration </li></ul></ul>
  9. 9. Strategic Issues <ul><li>Specify product requirements in a quantifiable manner long before testing commences. </li></ul><ul><li>State testing objectives explicitly. </li></ul><ul><li>Understand the users of the software and develop a profile for each user category. </li></ul><ul><li>Develop a testing plan that emphasizes “rapid cycle testing.” </li></ul><ul><li>Build “robust” software that is designed to test itself </li></ul><ul><li>Use effective formal technical reviews as a filter prior to testing </li></ul><ul><li>Conduct formal technical reviews to assess the test strategy and test cases themselves. </li></ul><ul><li>Develop a continuous improvement approach for the testing process. </li></ul>
  10. 10. Test Steps
  11. 11. Unit Testing module to be tested test cases results software engineer
  12. 12. Unit Testing interface local data structures boundary conditions independent paths error handling paths module to be tested test cases
  13. 13. Selective Testing <ul><li>Common errors: </li></ul><ul><ul><li>Misunderstood or incorrect arithmetic precedence </li></ul></ul><ul><ul><li>Mixed mode operations </li></ul></ul><ul><ul><li>Incorrect initializations </li></ul></ul><ul><ul><li>Precision inaccuracy </li></ul></ul><ul><ul><li>Incorrect symbolic representation of an expression </li></ul></ul><ul><li>The errors that should be uncovered </li></ul><ul><ul><li>Comparison of different data types </li></ul></ul><ul><ul><li>Incorrect operators or precedence </li></ul></ul><ul><ul><li>Expectation of equality when precision error makes equality unlikely </li></ul></ul><ul><ul><li>Incorrect comparison of variables </li></ul></ul><ul><ul><li>Proper or nonexistent loop termination </li></ul></ul><ul><ul><li>Failure to exit when divergent iteration is encountered </li></ul></ul><ul><ul><li>Improperly modified loop variables </li></ul></ul>
  14. 14. Unit Test Environment Module stub stub driver RESULTS interface local data structures boundary conditions independent paths error handling paths test cases
  15. 15. Integration Testing Strategies <ul><li>Integration testing is a systematic technique for constructing the software architecture while at the same time conducting tests to uncover errors associated with interfacing. </li></ul><ul><li>Options: </li></ul><ul><ul><li>• the “big bang” approach </li></ul></ul><ul><ul><li>• an incremental construction strategy </li></ul></ul>
  16. 16. Top Down Integration top module is tested with stubs stubs are replaced one at a time, &quot;depth first&quot; as new modules are integrated, some subset of tests is re-run A B C D E F G
  17. 17. Bottom-Up Integration drivers are replaced one at a time, &quot;depth first&quot; worker modules are grouped into builds and integrated A B C D E F G cluster
  18. 18. Sandwich Testing Top modules are tested with stubs Worker modules are grouped into builds and integrated A B C D E F G cluster
  19. 19. Regression Testing <ul><li>It is the re-execution of some subset of tests that have already been conducted to ensure that changes have not propagated unintended side effects. </li></ul><ul><li>It is the activity that helps to ensure that changes do not introduce unintended behaviors or additional errors. </li></ul>
  20. 20. Smoke Testing <ul><li>A common approach for creating “daily builds” for product software </li></ul><ul><li>Smoke testing steps: </li></ul><ul><ul><li>Software components that have been translated into code are integrated into a “build.” </li></ul></ul><ul><ul><ul><li>A build includes all data files, libraries, reusable modules, and engineered components that are required to implement one or more product functions. </li></ul></ul></ul><ul><ul><li>A series of tests is designed to expose errors that will keep the build from properly performing its function. </li></ul></ul><ul><ul><ul><li>The intent should be to uncover “show stopper” errors that have the highest likelihood of throwing the software project behind schedule. </li></ul></ul></ul><ul><ul><li>The build is integrated with other builds and the entire product (in its current form) is smoke tested daily. </li></ul></ul><ul><ul><ul><li>The integration approach may be top down or bottom up. </li></ul></ul></ul>
  21. 21. Object-Oriented Testing <ul><li>begins by evaluating the correctness and consistency of the OOA and OOD models </li></ul><ul><li>testing strategy changes </li></ul><ul><ul><li>the concept of the ‘unit’ broadens due to encapsulation </li></ul></ul><ul><ul><li>integration focuses on classes and their execution across a ‘thread’ or in the context of a usage scenario </li></ul></ul><ul><ul><li>validation uses conventional black box methods </li></ul></ul><ul><li>test case design draws on conventional methods, but also encompasses special features </li></ul>
  22. 22. Broadening the View of “Testing” It can be argued that the review of OO analysis and design models is especially useful because the same semantic constructs (e.g., classes, attributes, operations, messages) appear at the analysis, design, and code level. Therefore, a problem in the definition of class attributes that is uncovered during analysis will circumvent side effects that might occur if the problem were not discovered until design or code (or even the next iteration of analysis).
  23. 23. OOT Strategy <ul><li>class testing is the equivalent of unit testing </li></ul><ul><ul><li>operations within the class are tested </li></ul></ul><ul><ul><li>the state behavior of the class is examined </li></ul></ul><ul><li>integration applied three different strategies </li></ul><ul><ul><li>thread-based testing—integrates the set of classes required to respond to one input or event </li></ul></ul><ul><ul><li>use-based testing—integrates the set of classes required to respond to one use case </li></ul></ul><ul><ul><li>cluster testing—integrates the set of classes required to demonstrate one collaboration </li></ul></ul>
  24. 24. Validation testing <ul><li>Focus is on software requirements </li></ul><ul><li>Test if the product is the right one </li></ul><ul><ul><li>The function or performance characteristics conforms to specification. </li></ul></ul><ul><ul><li>A deviation from specification is uncovered and a deficiency list is created. </li></ul></ul><ul><li>Configuration review </li></ul><ul><ul><li>To ensure that all elements of the software configuration have been properly developed </li></ul></ul><ul><li>Alpha/Beta testing </li></ul><ul><ul><li>Focus is on customer usage </li></ul></ul><ul><ul><li>Alpha test is conducted at the developer’s site. </li></ul></ul><ul><ul><li>Beta test is conducted at the end-user’s site. </li></ul></ul>
  25. 25. System testing <ul><li>System testing focuses on system integration </li></ul><ul><ul><li>It is a series of different test whose primary purpose is to fully exercise the computer-based system. </li></ul></ul><ul><li>Recovery testing </li></ul><ul><ul><li>forces the software to fail in a variety of ways and verifies that recovery is properly performed, MTTR is evaluated. </li></ul></ul><ul><li>Security testing </li></ul><ul><ul><li>verifies that protection mechanisms built into a system will, in fact, protect it from improper penetration </li></ul></ul><ul><li>Stress testing </li></ul><ul><ul><li>executes a system in a manner that demands resources in abnormal quantity, frequency, or volume </li></ul></ul><ul><li>Performance Testing </li></ul><ul><ul><li>test the run-time performance of software within the context of an integrated system </li></ul></ul>
  26. 26. Debugging: A Diagnostic Process
  27. 27. Debugging processes
  28. 28. Debugging Effort time required to diagnose the symptom and determine the cause time required to correct the error and conduct regression tests
  29. 29. Symptoms & Causes symptom cause symptom and cause may be geographically separated symptom may disappear when another problem is fixed cause may be due to a combination of non-errors cause may be due to a system or compiler error cause may be due to assumptions that everyone believes symptom may be intermittent
  30. 30. Consequences of Bugs damage mild annoying disturbing serious extreme catastrophic infectious Bug Type Bug Categories: function-related bugs, system-related bugs, data bugs, coding bugs, design bugs, documentation bugs, standards violations, etc.
  31. 31. Debugging Techniques brute force / testing backtracking induction deduction
  32. 32. Debugging: Final Thoughts Don't run off half-cocked, think about the symptom you're seeing. Use tools (e.g., dynamic debugger) to gain more insight. If at an impasse, get help from someone else. Be absolutely sure to conduct regression tests when you do &quot;fix&quot; the bug. 1. 2. 3. 4.
  33. 33. Summary <ul><li>Software Test </li></ul><ul><ul><li>To uncover errors that were made inadvertently. </li></ul></ul><ul><li>Strategic Issues </li></ul><ul><li>Test Strategies for conventional software </li></ul><ul><li>Test Strategies for OO software </li></ul><ul><li>Validation testing </li></ul><ul><li>System testing </li></ul><ul><li>Debugging </li></ul>