Course Structure and Policies

Thomas J. Kennedy

Last modified: May 11, 2022
Contents:

1 Syllabus

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

1.1 Course Pre-requisites

2 Course Structure

2.1 Sessions

2.1.1 Recitations

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

2.2 Review Recordings

 

I provide recorded Reviews on the course site. These are, in general, condensed versions of what would traditionally be live lectures. This includes:

As a general policy I make all three sets of reviews available to CS 350 and CS 330 students. You will find direct links to CS 350 Review Recordings throughout the outline. I will update these reviews throughout the semester (as necessary).

3 Activities

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

3.1 Readings

3.2 Assignments

Individual assignments (3 attempts each). Assignments will include:

  1. Environment Set up (e.g., Installing compilers and Eclipse)
  2. Unit Testing (two parts)
  3. Version Control (git)
  4. Build Manager (gradle)
  5. Report Deployment
  6. Continuous Integration (AWS?)

3.3 Labs

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

3.4 Semester Project

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

Four phases:

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

3.4.1 Project Teams

 

3.4.2 Project and Recitations

 

The construction phases (starting with Phase 3) will be evaluated in part via one or more team meetings with the instructor.

3.4.3 Expectations

The team project is a integral part of this course.

4 Exams

5 Communications

Contact Info

Instructor Office Phone # Email Home Page & Office Hours
Thomas J. Kennedy Dragas 1100D 757.683.7725 tkennedy@cs.odu.edu http://www.cs.odu.edu/~tkennedy

Important: The course name “CS350” should appear in the subject line of all course-related email.

 

I try to respond to all (properly marked) messages before I leave campus each day (Monday through Friday). On weekends and holidays within 48 on weekends & holidays.

Forums are also available on Canvas for general discussions.

5.1 Office Hours

My general office hours are available at https://www.cs.odu.edu/~tkennedy/. Instructions for scheduling a formal appointment are listed here. Note that my office hours include web-conference based appointments.

5.2 Course Forums

6 Changes

What we used to do This semester
Dept VPN required
SSH Keys introduced in CS350 introduced in CS252
git & GitGub introduced in CS350 introduced in CS252
IDE Eclipse required Eclipse recommended
Version Control CS350 GitLab server GitHub
Agile boards CS350 Open Project server Trello
CI runners created by CS350 instructor AWS(?) or GitHub

7 Important Policies

7.1 Late Submissions

… are not normally accepted. Exceptions may be made in cases of

Extensions to due dates will not be granted due to

7.2 Academic Honesty

ODU is governed by a student honor code.


Academic Honesty (cont)

7.3 Grading

Assignments 15%
Semester Project 50%
Midterm Exam 15%
Final Exam 20%

8 Course Themes

Questions

8.1 Goals

8.2 Areas of Emphasis

8.2.1 Teamwork

8.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.

8.2.3 Build Management

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

8.2.4 Version Control

The ability to track changes in the software.

8.2.5 Configuration Management

8.2.6 Documentation Management

8.2.7 Continuous Integration (CI)