COP701: Software Systems Laboratory

Semester I, 2022-23

Course Description

The course will involve three large programming projects done in groups of two to three students. These project assignments will be announced at the start of the semester with definite submission deadlines. The set of assignments will be designed to develop skills and familarity with a majority of the following: make, configuration management tools, installation of software, archiving and creation of libraries, version control systems, documentation and literate programming systems, GUI creation, distributed state maintenance over a network, programming in different environments like desktop and handhelds, program parsing and compilation including usage of standard libraries like pthreads, numerical packages, XML and semi-structured data, simulation environments, testing and validation tools.

Books

I suggest reading Part 1 (i.e. Chapter 1 and 2) of Beautiful Architecture first, then reading Head First Design Patterns over the course of the semester. The rest of Beautiful Architecture is a mixed bag, but all the remaining chapters are standalone articles so you can pick and choose any which catch your interest.

Assignments

  1. Local Markdown wiki and editor (due date: 5 6 September)
  2. Real-time network multiplayer game (due date: 7 14 October)
  3. Working on existing software systems (due dates: 20 October, 10 November)

More details about each of these assignments will be provided as the semester proceeds.

Requirements

The objective of these assignments is to give you experience with building large software systems as part of a team. Each assignment is a moderately large piece of software with several components, which will take careful planning, design, and implementation to carry out successfully. As such, you should start planning the system architecture and the work division between your group members early on, and not try to start and finish in a couple of days before the deadline.

You are also expected to use these assignments as an opportunity to learn and practice various tools and techniques for effective software development, as described below. You will be evaluated not just on the functionality of your program(s) but also on its design, modularity, maintanability, and your use of good development practices. Specifically, each of your assignments should follow these two guidelines:

In addition, you should incorporate the following four requirements incrementally. The first assignment should include at least two (any two) of the four, the second should have at least three out of four, and the third should have all four.

There is one more requirement, not tied to any assignment:

Lecture Slides

  1. Fri, 5 Aug
  2. Tue, 6 Sep
  3. Mon, 10 Oct

Collaboration Policy

Adapted from Dan Weld’s guidelines, via Mausam:

Collaboration is a very good thing. On the other hand, cheating is considered a very serious offense. Please don’t do it! Concern about cheating creates an unpleasant environment for everyone. If you cheat, you get a zero in the assignment, and additionally you risk losing your position as a student in the department and the institute. The department’s policy on cheating is to report any cases to the disciplinary committee. What follows afterwards is not fun.

So how do you draw the line between collaboration and cheating? Here’s a reasonable set of ground rules. Failure to understand and follow these rules will constitute cheating, and will be dealt with as per institute guidelines.