Software Quality, CSU Chico, Buffardi
Contents |
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
Overview
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%
Project
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
- Team collaboration using Git and GitHub
- Free and Open Source Software: Licensing, Principles, Projects; Assign students to FOSS projects
- Review of Agile methodology: Principles, Scrum, incremental development, product backlogs
- Quiz on software engineering and collaboration; review quiz
- Setting up testing framework and how to write a unit test; Unit Test With GoogleTest Activity
- Test-Driven Development; Introduction to Test Driven Development
- Quiz on unit testing; review quiz
- Static Analysis
- Introduction to using coverage tools; Branch Test Coverage
- Line coverage / condition coverage / Conditional coverage (atomic decisions/branches); Testing And Coverage Assignment
- Overview of advanced testing topics: Mutation Testing, Integration Testing
- Quiz on test coverage; review quiz; Regression Test Assignment
- Review FOSS contributions
Assignments
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.
- Unit Test With GoogleTest Activity (1-2 hours)
- Introduction to Test Driven Development (1-2 hours)
- Introduction to Static Analysis (1-2 hours)
- Branch Test Coverage (1-2 hours)
- Testing And Coverage Assignment (1 week)
- Regression Test Assignment (1 week)
This work by Kevin Buffardi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License