As soon as we started programming, we found to our surprise that it wasn’t as easy to get programs right as we had thought. Debugging had to be discovered. I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs. – attributed to M. Wilkes, 1949
A product's quality is a function of how much it changes the world for the better. – T. DeMarco, “Management Can Make Quality (Im)possible”, Cutter IT Summit, 1999.
  1. Software Quality (read through Section 3):

    1. How would you define software “quality”? Does your definition match either of those notions listed in the introduction?
    2. Be familiar with Garvin’s five perspectives on quality.
    3. How are software quality and testing related?
    4. Do you have any affinity with DeMarco’s alternate definition of (software) quality?
  2. Software Testing (read Sections 1–5):

    1. What is the primary purpose of software testing?
    2. Be able to compare and contrast the definitions of the following sets of testing terms:
      1. Concepts: software fault, programmer error, defect, and failure.
      2. Methods: static vs dynamic tests and white vs black-box testing.
      3. Levels: unit, integration, system and acceptance testing.
      4. Types: regression vs. acceptance testing, alpha vs. beta testing, functional vs. non-functional testing and A/B testing.
    3. According to McConnell (i.e., the cost vs time table and reference 11), how costly is a defect introduced in the requirements phase and not found until the system testing phase?
    4. Software quality folk often use the phrase “V & V”. What does it mean?
  3. Project Management Tools & Practices — Familiarize yourself with the following.

    1. Martin Fowler’s Continuous Integration (just read the first section — the example):

      1. Why is software integration so hard?
      2. What is continuous integration?

      Note that we’ll use the tools listed below rather than CruiseControl.

    2. CI/CD
      1. What do CI and CD stand for?
      2. Which of the two have we implemented for your project already?
      We’ll use GitHub Actions and Workflows to implement CI.

    3. ESLint
      1. What does ESLint do?
      2. Where does the name lint come from?
      3. Does it run the program being analyzed to do its work?

    4. GitHub Issues
      1. For what are issue trackers commonly used?
      2. Make sure that you can find the issue tracker for your team’s server and client repos.
      3. How would you integrate Git issue tracking with Trello?
      We’ll use the GitHub issue tracker to record issues raised by external stakeholders during user testing.