Research Publications
Teaching Students CV Software Funding Activities

EE 461L Software Engineering and Design Laboratory

Instructor: Professor Miryung Kim

Miryung Kim Photo This course is a new undergraduate laboratory course to be offered from Spring 2012. Here's a flyer.

Lecture (#16645). TTH 9:30 to 11AM in ENS 116.
Labs (#16648) Tue 2-5PM in ENS 307 or (#16649) Tue 6:30-9:30PM in ENS 307
Office Hours: TTH 11AM-12PM in ACES 5.118
Teaching Assistants: Kevin Boos and Rui Qiu

Course Description

This course focuses on providing hands-on experience in designing and developing large-scale software systems with emphasis on the use of automated analysis tools and techniques that enable large-scale software development. Students will generate concrete software engineering artifacts at all stages of the software life-cycle. Design principles and methods for large-scale software system development; design and modeling tools; collaborative development environment; object-oriented design and analysis; design patterns and refactoring; integration and testing tools; debugger and bug-finder; program comprehension; software life-cycle and evolution.   
Three lecture hours and three laboratory hours a week for one semester.

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)

Course Objectives

The goal of this course is to teach practical software development methods and tools in the context of developing a software system with other students in collaboration.  Practical development tools include
Practical software design, construction, and evolution methods include

Course Organization

As a four credit laboratory course, the class time will be organized around three hours of lecture per week, used to introduce the software engineering techniques and tools central to the course.  An additional three hours of laboratory time per week will be used for introducing and executing the laboratory assignments.

Lecture Laboratory Materials Project and Exams
Week 1 Lecture 1. Overview
Lecture 2. Collaborative Software Development
Version Control System
Version Merging and Conflict Resolution
Problem Report Database
Exercise 1a: Subversion Version Control System
Exercise 1b: Project - Saros (Distributed Pair Programming)

Week 2 Lecture 3. Unix Commands Part 1
Lecture 4. Unix Commands and Shell Scripting Part 2
Exercise 2: Unix Environment and Command-line Utilities

Week 3 Lecture 5. Requirements Elicitation and Analysis
Lecture 6. Requirements Analysis using UML Use Cases and Statecharts
Exercise 3: Unix Commands and Bash Shell Scripting
Week 4 Lecture 7. Object-Oriented Design and Analysis
Lecture 8. Object-Oriented Design and Analysis using UML
Class Diagram and Message Sequence Charts

Exercise 4: UML
Week 5 Lecture 9. Design Patterns Part 1
Lecture 10. Design Patterns Part 2

Abstract Factory, Factory Method, Singleton, Adapter,
Flyweight, Bridge, Observer, Mediator, Strategy, Visitor
In-lab UML Quiz

Week 6 Continuation of Design Patterns Exercise 5: Improving Design
Design Pattern and Refactoring
Week 7 Lecture 11. Design Patterns Part 3
Lecture 12. Refactoring Part 1
Design Patterns Quiz
Week 8 Lecture 13. Refactoring Part 2

Spring Break
Week 9 Midterm Review
Lecture 14. Testing, Statement, Branch, and Path Coverage, JUNIT
Exercise 6: jUnit Testing  
Week 10
Continuation on Test Coverage, Test Generation and Regression Test Selection
Exercise 7: Ant Build System
SAROS Extension Part C. Implementation and Testing
SAROS Part C Starter

Week 11 Lecture 15. Build Management and Documentation, ANT, JAVADOC
Lecture 16. Debugging and Eclipse Debugger, GDB, DDD
SAROS Project part C Q&A sessions
Week 12  Continuation on Automated Debugging, Delta Debugging
Lecture 17. Software Inspection, Code Review, Pair Programming, Hoare Logic
Exercise 8: Eclipse Debugger
Exercise 9: Bug Finding & FindBug
Week 13 Lecture 18. Static Program Analysis, Hoare Logic, Loop Invariant, Data Flow Analysis, Program Slicing
Lecture 19. Dynamic Program Analysis, Profiler, and Runtime Verification
Exercise 10: Program Understanding
Week 14
Continuation of Static and Dynamic Analysis.
Lecture 21. Review of Lectures and Final Exam Practice Questions
Demo your project Part C solution during the lab session. SAROS Extension Part D. New Feature Proposal
- You can propose a new feature and justify your rationale.
- The assignment will be out on 4/24 during the lecture and will be due 4/30 11:59PM sharp. As I said in the class, no late policy applies to Part D.
- 10% of the project grade
Week 15 Class Presentations  (5/1 and 5/3)
In-class presentation of new features, why you think the features are necessary, etc. Mock-up screenshot. We will present 10 teams in each lecture. You will be given 4 minutes each. Two slides maximum per team.


The main focus of the assignments of the course will be an integrated series of software engineering projects exercising the tools and techniques covered in class.  The students will perform these both individually and in teams, with variations in teaming activities across the projects.  The course also has a midterm and a final.


Intended Benefits for Students

(1) Students will gain knowledge in objective-oriented design, analysis, and testing techniques.
(2) Students will gain hands-on learning experience in collaborative software design and development and also become familiar with practical tools that enable them to construct and evolve a large-scale software system; this course will make our undergraduate students attractive to software engineering industry.
(3) Students will learn about and gain experience in generating software engineering artifacts that can clearly and concisely communicate design intent and realization.
(4) Students will be naturally introduced to software engineering research, in particular automated analyses and development tools. This class will also discuss advances in development tools and analyses from a software engineering researcher's perspective.


Essential Open Source Toolset Code Complete Book Linux Pocket Guide Photo UML 2.0 Pocket Reference Guide
(Required) Essential Open Source Toolset (ISBN-10: 0470844450,  ISBN-13: 978-0470844458)

(Required) Code Complete: A Practical Handbook of Software Construction (ISBN-10: 0735619670, ISBN-13: 978-0735619678

(Optional) Linux Pocket Guide (ISBN-10: 0596006284, ISBN-13: 978-0596006280)

(Optional) UML 2.0 Pocket Reference (ISBN-10: 0596102089, ISBN-13: 978-0596102081)

Frequently Asked Questions

Q: How is this different from EE 360F (Introduction to Software Engineering)?
EE360F is an introduction to software engineering with focus on software engineering life cycle and process. This lab-based course extends these concepts to include instruction in practical design techniques and artifacts and hands-on experience in applying the tools and techniques discussed in other courses.

Q: Why do we need to teach development tools in universities?  Don't students already learn these methods and tools through an internship?
Students may encounter software development tools through an internship; however, when they do not understand how these tools work internally and what are strengths and limitations of these tools, they cannot use these tools effectively. 

Q: Don't we already have a senior capstone course? Why can't students take EE 464 instead?
EE464 is a capstone course designed for all students in electrical engineering and computer engineering. Thus, EE464 does not provide an opportunity to introduce software developments tools systematically in the context of collaborative software development.  In fact, the introduction of this advanced software engineering laboratory will better prepare our students for serious software engineering 464 projects.