Testing
CS-160: Software Engineering
Instructor: Rob Bruce
Fall 2016

SLIDE 1: Ranking Bug and Prioritization

  • How do you determine which bugs to fix and which to ignore?
  • Ways to rank bugs:
    "Severity: How painful is the bug for the users?" (p. 179)
    "Work-arounds: Are there work-arounds?" (p. 179)
    "Frequency: How often does the bug occur?" (p. 179)
    "Difficulty: How hard would it be to fix the bug?" (p. 179)
    "Riskiness: How risky would it be to fix the bug?" (p. 179)

Source: Rod Stephens, Beginning Software Engineering

SLIDE 2: Testing Categories

  • Unit testing: "verifies the correctness of a specific piece of code" (p. 179).
  • Integration testing: "verifies that the new method works and plays well with others" (p. 181).
  • Automated testing: "You define the tests and the results they should produce" (p. 182).
  • Component Interface testing: "studies the interactions between components" (p. 183).
  • System testing: "an end-to-end run-through of the whole system" (p. 184).
  • Acceptance testing: "to determine whether the finished application meets the customers’ requirements" (p. 185).

Source: Rod Stephens, Beginning Software Engineering

SLIDE 3: Additional Testing Categories

  • "Accessibility test: Tests the application for accessibility by those with visual, hearing, or other impairments" (p. 185).
  • "Alpha test: First round testing by selected customers or independent testers" (p. 185).
  • "Beta test: Second round testing after alpha test" (p. 186).
  • "Compatibility test: Focuses on compatibility with different environments such as computers running older operating system versions" (p. 186).
  • "Destructive test: Makes the application fail so that you can study its behavior when the worst happens" (p. 186).
  • "Function test: Deals with features the application provides" (p. 186).
  • "Installation test: Makes sure you can successful inst all the system on a fresh computer" (p. 186).
  • "Internationalization test: Tests the application on computers localized for different parts of the world" (p. 186).
  • "Non-functional test: Studies application characteristics that aren’t related to specific functions the users will perform" (p. 186). Example: determining minimal hardware configurations to run the software.
  • "Performance test: Studies the application’s performance under various conditions such as normal usage, heavy user load, limited resources (such as disk space), and time of day" (p. 186).
  • "Security test: Studies the application’s security" (p. 186)
  • "Usability test: Determines whether the user interface is intuitive and easy to use" (p. 186).

Source: Rod Stephens, Beginning Software Engineering

SLIDE 4: Testing Methods

  • Exhaustive testing: "test a method with every possible input" (p. 186).
  • Black-box testing: You don’t know how the software internals work but you can observe the behavior based on feedback (p. 187).
  • White-box testing: Having access to the software source and the knowledge of how it works, create test cases that break the system to identify vulnerabilities and/or weaknesses (p. 188).
  • Gray-box testing: "a combination of white-box and black-box testing" (p. 188).

Source: Rod Stephens, Beginning Software Engineering

SLIDE 5: "Testing Habits"

  • "Test and debug when alert" (p. 189)
  • "Test your own code" (p. 189)
  • "Have someone else test your code" (p. 190)

Source: Rod Stephens, Beginning Software Engineering

SLIDE 6: "Rules of Egoless Programming"

  1. "Understand and accept that you will make mistakes" (p. 190)
  2. "You are not your code" (p. 191)
  3. "Now matter how much ‘Karate’ you know, someone else will always know more" (p. 191)
  4. "Don’t rewrite code without consultation" (p. 191)
  5. "Treat people who know less than you with respect, deference, and patience" (p. 191)
  6. "The only constant in the world is change" (p. 191)
  7. "The only true authority stems from knowledge, not from position" (p. 191)
  8. "Fight for what you believe, but gracefully accept defeat" (p. 192)
  9. "Don’t be ‘the guy in the room’" (p. 192)
  10. "Critique code instead of people - be kind to the coder, not to the code" (p. 192)

Source: Rod Stephens, Beginning Software Engineering