Software Quality, CSU Chico, Buffardi
(Added assignment duration and github course link) |
m |
||
(6 intermediate revisions by one user not shown) | |||
Line 1: | Line 1: | ||
− | =Software Quality Advanced Course= | + | === Overview === |
+ | |||
+ | {{Course Overview | ||
+ | |course= | ||
+ | Software Quality (advanced course) | ||
+ | |institution= | ||
+ | CSU Chico | ||
+ | |instructors= | ||
+ | Kevin Buffardi | ||
+ | |offerings= | ||
+ | |overview= | ||
+ | |students= | ||
+ | |prerequisites= | ||
+ | |infrastructure= | ||
+ | }} | ||
+ | |||
+ | = 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. | 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. | ||
Line 5: | Line 21: | ||
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 [https://github.com/ChicoState/SoftwareEngineering on the course GitHub page and are available under open source licensing]. | 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 [https://github.com/ChicoState/SoftwareEngineering on the course GitHub page and are available under open source licensing]. | ||
− | ==Before the Term== | + | == 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 [http://junit.org/ jUnit] testing framework and [http://www.eclemma.org/jacoco/ JaCoCo coverage tool] instead of GoogleTest and gcov. | 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 [http://junit.org/ jUnit] testing framework and [http://www.eclemma.org/jacoco/ 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: [https://gcc.gnu.org/ gcc], [http://clang.llvm.org/ Clang], [http://llvm.org/ LLVM], and [https://gcc.gnu.org/onlinedocs/gcc/Gcov.html 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: [https://gcc.gnu.org/ gcc], [http://clang.llvm.org/ Clang], [http://llvm.org/ LLVM], and [https://gcc.gnu.org/onlinedocs/gcc/Gcov.html gcov]. | ||
− | ==Course Syllabus== | + | == Course Syllabus == |
− | ===Overview=== | + | === 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. | 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 | Prerequisites: Undergraduate Software Engineering course or equivalent; Advanced programming experience necessary | ||
− | ===Required Materials=== | + | === Required Materials === |
No textbook required. | No textbook required. | ||
Line 22: | Line 40: | ||
A laptop computer will be needed for all course meetings. | A laptop computer will be needed for all course meetings. | ||
− | ===Course Grades=== | + | === Course Grades === |
Each assignment is graded on an 100 point scale and then weighted according to the following distribution: | Each assignment is graded on an 100 point scale and then weighted according to the following distribution: | ||
Line 30: | Line 48: | ||
* Exercises 10% | * Exercises 10% | ||
− | ===Project=== | + | === 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: | 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: | ||
Line 43: | Line 62: | ||
* What I am going to do next week | * What I am going to do next week | ||
− | ==Course Schedule== | + | == Course Schedule == |
# Team collaboration using Git and GitHub | # Team collaboration using Git and GitHub | ||
Line 53: | Line 72: | ||
# Quiz on unit testing; review quiz | # Quiz on unit testing; review quiz | ||
# Static Analysis | # Static Analysis | ||
− | # Introduction to using coverage tools; [[Branch Test Coverage]] | + | # Introduction to using coverage tools; [[Examine Branch Test Coverage (Activity)]] |
# Line coverage / condition coverage / Conditional coverage (atomic decisions/branches); [[Testing And Coverage Assignment]] | # Line coverage / condition coverage / Conditional coverage (atomic decisions/branches); [[Testing And Coverage Assignment]] | ||
# Overview of advanced testing topics: Mutation Testing, Integration Testing | # Overview of advanced testing topics: Mutation Testing, Integration Testing | ||
Line 59: | Line 78: | ||
# Review FOSS contributions | # Review FOSS contributions | ||
− | ==Assignments== | + | == 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. | 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. | ||
Line 66: | Line 85: | ||
* [[Introduction to Test Driven Development]] (1-2 hours) | * [[Introduction to Test Driven Development]] (1-2 hours) | ||
* [[Introduction to Static Analysis]] (1-2 hours) | * [[Introduction to Static Analysis]] (1-2 hours) | ||
− | * [[Branch Test Coverage]] (1-2 hours) | + | * [[Examine Branch Test Coverage (Activity)]] (1-2 hours) |
* [[Testing And Coverage Assignment]] (1 week) | * [[Testing And Coverage Assignment]] (1 week) | ||
* [[Regression Test Assignment]] (1 week) | * [[Regression Test Assignment]] (1 week) | ||
Line 72: | Line 91: | ||
-------------------- | -------------------- | ||
− | + | {{License CC BY NC SA}} | |
− | + | ||
− | + | ||
− | + | ||
− | [[Category: | + | [[Category:Courses]] |
− | [[Category: OpenMRS]] | + | [[Category:OpenMRS]] |
− | [[Category: | + | [[Category:Privacy and Security]] |
Latest revision as of 17:09, 27 February 2017
Contents |
Overview
Course | Software Quality (advanced course) |
---|---|
Institution | CSU Chico |
Instructor(s) | Kevin Buffardi |
Term | |
Course Overview | |
Course Length | {{{courselength}}} |
Student Characteristics | |
Prerequisites | |
Infrastructure |
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; Examine Branch Test Coverage (Activity)
- 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)
- Examine Branch Test Coverage (Activity) (1-2 hours)
- Testing And Coverage Assignment (1 week)
- Regression Test Assignment (1 week)
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License