CSE 401/501 Software Quality Assurance and Testing (3 credits)

(formerly CSE 321)

Catalog description:

Quality: how to assure it and verify it, and the need for a culture of quality. Avoidance of errors and other quality problems. Inspections and reviews. Testing, verification and validation techniques. Process assurance vs. Product assurance. Quality process standards. Product and process assurance.  Formal verification. Statistical testing.

Prerequisite:

CSE 302

Required topics (approximate weeks allocated):

  • Introduction to software quality assurance (1 week)
    • Terminology: verification, validation, testing
    • Psychology of testing
    • Coverage criteria
  • Inspections and reviews (1 week)
  • Testing Techniques: graph-based (4 weeks)
    • Graph coverage criteria: structural coverage
    • Graph coverage criteria: data flow coverage
    • Graph coverage of source code: structural and data flow
    • Graph coverage of design elements, specification, and use cases
  • Testing Techniques: logic-based (2 weeks)
  • Testing Techniques: input space partitioning (2 weeks)
  • Testing Techniques: syntax-based (2 weeks)
  • Regression testing (0.5 weeks)
  • Test plans (0.5 weeks)
  • Testing of object-oriented and web-based software (1 week)
  • Model checking (1 week)
    • State models
    • Properties: liveness, safety

Course Outcomes

  1. Design and implement Test Plans and Procedures
    • Students can design comprehensive test plans
    • Students can create test procedures
    • Students can evaluate the results of tests
    • Students can assess a software process to evaluate how effective it is at promoting quality
  2. Apply a wide variety of testing techniques at various testing levels
    • Students differentiate the purposes and applicable techniques among the various levels of testing: unit, integration, system, acceptance, usability, and regression testing
    • Students can conduct effective and efficient inspections
    • Students can explain and apply graph coverage criteria for structural coverage
    • Students can explain and apply data flow coverage and logic coverage
    • Students can explain and apply input space partitioning
    • Students can explain and apply mutation testing
  3. Use test tools to effectively test software
    • Students can use Junit
  4. Compute and use various testing metrics
    • Students can compute test coverage and yield, according to a variety of criteria
    • Students can use statistical techniques to evaluate the defect density and the likelihood of faults