Course Structure and Policies

Lloyd Decker & Steven Zeil

Last modified: Dec 27, 2023
Contents:

1 What This Course is About

  1. How developers collaborate in teams to produce projects that are too large or too complicated for a single developer.
  2. The tools and processes that facilitate that work.
  3. Best practices, as accepted by the programming community, that developers on a team expect from their peers.

2 This Class is Different

…from most of your prior CS courses.

2.1 Specifications

2.2 Testing

2.3 Process

3 Syllabus

All students are responsible for reading the course syllabus and abiding by the policies described there.

3.1 Course Pre-requisites

4 Course Structure

4.1 Sessions

4.1.1 Recitations

Recitations will be used for special topics and for meetings with teams once the semester project is underway.

5 Activities

Each module in the course outline contains a variety of activities.

5.1 Readings

All are online and available via the course Outline.

5.2 Assignments

Individual assignments will include:

  1. Clean Coding
  2. Unit Testing
  3. Version Control (git)
  4. Test-Driven Development
  5. Build Manager (gradle)
  6. Continuous Integration (Github Actions)

Most of these provide practice or actual infrastructure for use in the project.

5.3 Labs

There are a number of activities marked in the outline as “Labs”.

5.4 Semester Project

A moderately large program on which you will work in teams of 4-7 people.

Five phases:

  1. Writing Requirements
  2. Planning for construction: writing user stories
  3. Sprint 1: build management, version control, story tracking,
  4. Sprint 2: project website, documentation management
  5. Sprint 3: continuous integration, system testing

5.4.1 Project Teams

5.4.2 Project and Recitations

 

Phases 3 and 4 will be evaluated in part via a team review meeting with the instructor.

5.4.3 Expectations

The team project is a integral part of this course.

6 Exams

7 Communications

8 Important Policies

8.1 Late Submissions

Extensions to due dates will not be granted due to

8.2 Academic Honesty

ODU is governed by a student honor code.


Academic Honesty (cont)

8.3 Grading

Labs 5%
Assignments 20%
Semester Project 50%
Midterm Exam 10%
Final Exam 15%

I will drop the lowest assignment grade and the lowest project phase score before computing your overall score.

9 Course Themes

Questions

9.1 Goals

9.2 Areas of Emphasis

9.2.1 Teamwork

9.2.2 Test-Driven Development (TDD)

Exemplified by the philosophy of “write the tests first, then design and write the code.”

This is easily justified when fixing bugs. You need to have a test handy that shows the bug causing the program to fail, so that you can run it (again and again) while you try to fix the bug. How else will you know that you have it fixed?

But test-driven development is really about how to do the initial design. Programmers are often lazy. If they write the code first, they often skimp on the testing because that seems like too much work for code that they are “sure” is correct. (Remember, all programmers are optimists – they always believe that their code is going to work “as soon as I fix this one bug”. The combination of unjustified optimism and laziness can be deadly!)

But if the tests are already there, and if it’s easy to run them (or, even better, hard not to run them – I’ll talk about that in just a moment), then programmers will actually do the testing on a regular basis.

And thinking about tests for special/boundary cases, etc., often helps you remember those cases when later doing the design and coding.

9.2.3 Build Management

Making sure that you and others can build the system easily.

9.2.4 Version Control

The ability to track changes in the software.

9.2.5 Configuration Management

9.2.6 Documentation Management

9.2.7 Continuous Integration (CI)