Software Quality, CSU Chico, Buffardi

From Foss2Serve
(Difference between revisions)
Jump to: navigation, search
m (fixed unit test activity link)
m
 
(8 intermediate revisions by 2 users 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.
  
==Before the Term==
+
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 ==
 +
 
 
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 20: 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 28: 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 41: 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 51: 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 57: 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.
+
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]]
+
* [[Unit Test With GoogleTest Activity]] (1-2 hours)
* [[Introduction to Test Driven Development]]
+
* [[Introduction to Test Driven Development]] (1-2 hours)
* [[Introduction to Static Analysis]]
+
* [[Introduction to Static Analysis]] (1-2 hours)
* [[Branch Test Coverage]]
+
* [[Examine Branch Test Coverage (Activity)]] (1-2 hours)
* [[Testing And Coverage Assignment]]
+
* [[Testing And Coverage Assignment]] (1 week)
* [[Regression Test Assignment]]
+
* [[Regression Test Assignment]] (1 week)
  
  
 
--------------------
 
--------------------
This work by [[User:Scrain|Steven P. Crain]] ([http://www.google.com/recaptcha/mailhide/d?k=01kQLVRud4_G4fLVvieRmptw==&c=xzrJ5nOx65OjeB8B5xOwSUCBUqxRQDpU96mG9Bes_GQ= ...@plattsburgh.edu]) is licensed under a
+
{{License CC BY NC SA}}
[http://creativecommons.org/licenses/by-nc-sa/4.0/ Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License]
+
 
+
[[File:Creativecommons-by-nc-sa-40.png]]
+
  
[[Category: Learning_Activity]]
+
[[Category:Courses]]
[[Category: OpenMRS]]
+
[[Category:OpenMRS]]
[[Category: Privacy_and_Security]]
+
[[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

  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

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.



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

Creativecommons-by-nc-sa-40.png

Personal tools
Namespaces
Variants
Actions
Events
Learning Resources
HFOSS Projects
Evaluation
Navigation
Toolbox