CS 372 Spring 2016: Software Construction


CS 372 Spring 2016
Software Construction

Department: Computer Science, UAF
Instructor: Glenn G. Chappell
Office: 201B Chapman
Office Hours: 11–1 MWF, 11:30–1 T on spring 2016 class days, or by appointment
Office phone: (474-)5736
E-mail: ggchappell@alaska.edu
Paper mailbox: Inside the Computer Science Department office, 202 Chapman

Announcements

Course Materials

Materials are listed with the most recent at the top.

Week Class Meetings Readings & Homework Handouts & Code
See Git repository for code
Week 15
& Finals
5/2–5/6
  • 5/5: Final Exam 3:15–5:15 pm in the classroom
  • 5/2: General review
   
Week 14
4/25–4/29
  • 4/29: Refactoring (cont’d)
  • 4/27: Antipatterns (cont’d); refactoring
  • 4/25: OOD: Wrap-Up; antipatterns
 
Week 13
4/18–4/21
  • 4/22: No class (SpringFest)
  • 4/20: Presentations; OOD (cont’d)
  • 4/18: OOD (cont’d)
   
Week 12
4/11–4/15
  • 4/15: Presentations; OOD (cont’d)
  • 4/13: Object-oriented design: the Visitor pattern
  • 4/11: Project 2 work session
 
  • visit.cpp [C++ source]
    Visitor pattern
Week 11
4/4–4/8
  • 4/8: Presentations; web development
  • 4/6: Software-engineering principles (cont’d)
  • 4/4: Software-engineering principles
 
Week 10
3/28–4/1
  • 4/1: Object-oriented design: the Factory pattern
  • 3/30: Group Project 2: introduction
  • 3/28: Object-oriented design: the Decorator pattern
  • decorate.cpp [C++ source]
    Decorator & Factory patterns
Week 9
3/21–3/25
  • 3/25: Object-oriented design: the Observer pattern (cont’d)
  • 3/23: Object-oriented design: patterns; object-oriented design: the Observer pattern
  • 3/21: Group Project 2: group assignments; object-oriented design: design & UML
 
  • observe.cpp [C++ source]
    Observer pattern
Spring
Break
 
Week 8
3/7–3/11
  • 3/11: Presentations
  • 3/9: Object-oriented design: C++ features
  • 3/7: Profiling & optimization
 
  • oop1.cpp [C++ source]
    Object-oriented programming in C++
Week 7
2/29–3/4
  • 3/4: Presentations; debugging (cont’d)
  • 3/2: Debugging
  • 2/29: Code review (cont’d)
    Notes
 
  • In-Class Activity: Code Review [PDF]
    Distributed in class Mon 2/29
  • lowpos_test.cpp [C++ source]
    Unit tests for function lowPostiive
    Uses the “Catch” C++ unit-testing framework
    Requires lowpos.h, catch.hpp
  • lowpos.h [C++ header]
    Header for function lowPostiive
    There is no associated source file
    Example code for code review
Week 6
2/22–2/26
  • 2/26: Presentations; code review
    Notes
  • 2/24: Build tools (cont’d); pair-programming session
    Notes: see the 2/22 lecture notes
  • 2/22: Build tools
    Notes
   
Week 5
2/15–2/19
  • 2/19: Presentations; clean code (cont’d)
    Notes
  • 2/17: Clean code (cont’d); pair-programming session
    Notes
  • 2/15: Clean code
    Notes
   
Week 4
2/8–2/12
  • 2/12: Presentations; testing (cont’d)
    Notes: see the 2/10 lecture notes
  • 2/10: Testing
    Notes
  • 2/8: The software development process (cont’d); group session: stories & points
    Notes
  • Assignment 2
    Due 5 pm Tue 2/16
    Posted Wed 2/10
    Revised Fri 2/12
  • fa2_test.cpp [C++ source]
    Unit tests for Assignment 2, Exercises A, B, C
    Uses the “Catch” C++ unit-testing framework
    Requires fa2.h, catch.hpp
  • euclid.py [Python 3.x source]
    Euclid’s Algorithm: computing the GCD
    Example of unit testing in Python using doctest
  • fibo_test.cpp [C++ source]
    Unit tests for function fibo
    Example use of “Catch” C++ unit-testing framework
    Requires fibo.h, catch.hpp
  • fibo_main.cpp [C++ source]
    Main program for function fibo
    Requires fibo.h
  • fibo.h [C++ header]
    Header for function fibo
Week 3
2/1–2/5
  • 2/5: The software development process (cont’d); Group Project 1: introduction
    Notes
  • 2/3: The software development process
    Notes
  • 2/1: Modern C++: Standard Library additions
  • Group Project 1
    Final version due noon Fri 3/11
    Earlier due dates for incomplete documents TBA
    Posted Fri 2/5
    Revised Mon 2/8
  • random.cpp [C++ source]
    Demo C++11 pseudorandom number generation
  • time_example2.cpp [C++ source]
    Demo #2 of C++11 time functionality
  • time_example1.cpp [C++ source]
    Demo of C++11 time functionality
Week 2
1/25–1/29
  • 1/29: Modern C++: rvalue references
  • 1/27: Modern C++: function objects
  • 1/25: Modern C++: history; modern C++: various features
    Notes
 
  • move_time.cpp [C++ source]
    Demonstrate effect of move semantics on running time
  • function_object.cpp [C++ source]
    Demo of C++11 function objects
  • constexpr2.cpp [C++ source]
    constexpr demo #2
  • constexpr1.cpp [C++ source]
    constexpr demo #1
  • usehash.cpp [C++ source]
    C++11 hash table examples
Week 1
1/19–1/22
  • 1/22: Version control: git (cont’d)
    Notes: see the 1/20 lecture notes
  • 1/20: Version control: background; version control: git
    Notes
  • 1/18: No class (AK Civil Rights Day)
 
Week 0
1/14–1/15
  • 1/15: Course overview
    Notes
 
  • Syllabus
    Distributed in class Fri 1/15

External links last checked February 10, 2016.
Git
Git is the the version-control software used in this class. This site includes downloads and a helpful tutorial.
CS 372 Class Git Repository
Source code for the class will be kept in this repository.
cppreference.com
A comprehensive, up-to-date reference for the C & C++ programming languages and their standard libraries. I have found this site to be very helpful; I use it often.
cplusplus.com
Another good C++ reference site, with ambitions of being the everything-about-C++, one-stop-shopping website. I prefer the format of cppreference.com just a bit, but maybe you will like this site better (?).
Catch: A C++ Unit-Testing Framework
This is the webite (on GitHub) for Catch, the C++ unit-testing framework demonstrated in class. Catch is simple and easy to use, it comprises only a single header file, and it is available as a free download distributed under a FLOSS license.
doctest—Documentation
This is the documentation for the Python 3.x Standard Library doctest module, the Python unit-testing framework demonstrated in class. This module allows unit tests to be combined with automatically generated documentation.
A First Guide to PostScript
A very nice introduction to the PostScript programming language, by Peter Weingartner. Executable examples are included.