Software Quality, CSU Chico, Buffardi

From Foss2Serve
Jump to: navigation, search



Course Software Quality (advanced course)
Institution CSU Chico
Instructor(s) Kevin Buffardi
Course Overview
Course Length {{{courselength}}}
Student Characteristics

Software Quality Advanced Course

This page includes the description of an advanced (graduate or upper-division) level course that concentrates on software quality with a particular emphasis on unit testing. It includes an overview of the course as well as a series of assignments that walk through installing a testing framework, writing unit tests, and evaluating the quality of testing thoroughness.

The materials in this page are based on a graduate-level software engineering class offered as part of a MS in Computer Science program. Almost all of the course's materials are available on the course GitHub page and are available under open source licensing.

Before the Term

The materials of this course are designed for tools that support development in C++ on a *nix-based operating system. However, similar tools exist for other languages and development environments. For example, students with more experience with Java would use jUnit testing framework and JaCoCo coverage tool instead of GoogleTest and gcov.

If students do not all have the same operating systems, it is highly recommended that the necessary compiler and development tools are pre-installed on a virtual machine or in a computer lab that students are given access to. For example, for a class using C++ in *nix, one should install and configure: gcc, Clang, LLVM, and gcov.

Course Syllabus


In an advanced study of software engineering, students will refine skills including version control, software testing, and evaluating software quality using modern technologies. Students will collaborate in a distributed software development environment and establish online portfolios by contributing to open source projects and interacting with popular software engineering communities.

Prerequisites: Undergraduate Software Engineering course or equivalent; Advanced programming experience necessary

Required Materials

No textbook required.

A laptop computer will be needed for all course meetings.

Course Grades

Each assignment is graded on an 100 point scale and then weighted according to the following distribution:

  • Project 75%
  • Quizzes 15%
  • Exercises 10%


For the entire semester, each student will be assigned to a specific open source project. Students are expected to learn about the existing project and become a meaningful contributor to it. This will involve communicating with the existing community and contributions can include:

  • Code maintenance and updating
  • Documentation
  • Bug logging
  • Fixing bugs
  • Development environment maintenance and updating
  • Multiple students will contribute to the same project. However, each student will be expected to make (and demonstrate) individual contributions. Each week, every student should create a work log entry that includes one-sentence summaries for:
* What I've done
* What "blockers" I have
* What I am going to do next week

Course Schedule

  1. Team collaboration using Git and GitHub
  2. Free and Open Source Software: Licensing, Principles, Projects; Assign students to FOSS projects
  3. Review of Agile methodology: Principles, Scrum, incremental development, product backlogs
  4. Quiz on software engineering and collaboration; review quiz
  5. Setting up testing framework and how to write a unit test; Unit Test With GoogleTest Activity
  6. Test-Driven Development; Introduction to Test Driven Development
  7. Quiz on unit testing; review quiz
  8. Static Analysis
  9. Introduction to using coverage tools; Examine Branch Test Coverage (Activity)
  10. Line coverage / condition coverage / Conditional coverage (atomic decisions/branches); Testing And Coverage Assignment
  11. Overview of advanced testing topics: Mutation Testing, Integration Testing
  12. Quiz on test coverage; review quiz; Regression Test Assignment
  13. Review FOSS contributions


The following assignments should be completed in order and generally depend upon learning from the preceding assignments. See each assignment's page for specific prerequisites.

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License


Personal tools
Learning Resources
HFOSS Projects