EE461L - Software Design Lab

Short URL:

This course focuses on providing hands-on experience in designing and developing large-scale software systems.  

Specifically, the course studies tools and techniques that enable large-scale software development. Specific topics include version control systems, the UNIX shell, design and modeling tools, build automation, testing tools, tools for debugging and finding bugs, object-oriented design and analysis, design patterns, and refactoring.

Pre-requisite: EE422C (or EE322C) or Computer Science 336 with a grade of at least C-; credit with a grade of at least C- or registration for EE 360C or Computer Science 357. (Students may take 360C concurrently with 461L.)






HW & Project

Week 1

Overview, Collaborative Development

No lab

HW: version control

Due Th 1/24

Week 2


Exercise: Subversion Version Control

Exercise: Saros Distributed Pair Programming

Week 3

Unix Commands

Exercise: UML, Exercise: WebApp

Week 4

Unix Shell Scripting

Class Project, Part A

Exercise: UNIX commands, bash scripting, Exercise: Objectify

HW: Unix

Due Tu 2/12

Week 5

Design Patterns - based on GOF’s DP, and Head First DP. Notes linked from Blackboard. Also see also EJ 1, 2.

Exercise: UNIX quiz

Solution:, threshold.c

Week 6

Class Presentations

No lab

Marketing and Design Documents

Week 7

Design Patterns

Exercise: Patterns: Observer and Factories

HW: patterns and refactoring Due Tu 3/19

(Max 3 students per HW team)

Week 8

Refactoring, Midterm

Midterm review

Week 9

Refactoring, Testing: overview and unit testing

Exercise: Refactoring

HW: testing Due Th 4/4 (Max 3 students per HW team)

Week 10

Building with Make and ANT,

Exercise: Unit and system testing

Week 11

Documentation, Debugging (examples)

Exercise: build management

Week 12

Class presentations

Project: implementation progress

Guidelines for presentation

Week 13

Effective Java: Creating and Destroying Objects, Method Common To All Objects

Exercise: Eclipse debugger

Exercise: Bug Finding and FindBugs

Week 14

JSON to Java

Effective Java: Classes and Interfaces, Exceptions, Generics.


Project work

Week 15

Class Presentations

Hands on project demo

In class presentation via video/screenshots. Key findings. Future work.

Much of this class is based on material created by Dr Miryung Kim in our department. Here’s a link to her class. Here’s her version of the lectures: Collaborative Software Development, UML Diagrams, Unix, Information Hiding, Design Patterns, Refactoring, Testing, Build Management & Documentation, Debugging 


Exercises and HW will be graded on a 0-3 scale, where 0 = not done, 1 = means attempted superficially, 2 = completed, but missing some deliverables, 3 = completed and meets all deliverables. (This is not a linear scale.)

Late submissions will not be accepted barring verifiable medical/personal emergencies.

Online forum

We’ll use Piazza for discussions:


Homeworks will be due in class, at the start of lecture. They will be collected by the appropriate TA, and returned in class the following week. Late submissions will not be accepted. Put your name, your EID, and instructor on each page.

You may work on HW in groups - turn in a single solution for the group, and list all the students in the group. Each student will get equal credit.

On request, the TAs will show you the solution, but you cannot copy it in any way or take it away from the lab.

TA Information

Google calendar showing sections and office hours in ENS 307



Mehmet E Yesin

Wei-Lun Hung

Recommended Texts

  1. Essential Open Source Toolset
  2. Effective Java
  3. Code Complete: A Practical Handbook of Software Construction
  4. Linux Pocket Guide
  5. UML 2.0 Pocket Reference


This document defines policies around add-drop, cheating, students with disabilities, emergency procedures, etc.