me
Research Publications
Teaching Students CV Software Funding Activities

EE 461L Software Engineering and Design Laboratory

Instructor: Professor Miryung Kim


Miryung Kim Photo Lecture (#17050). TTH 12:30PM to 2PM in ENS 116.
Labs: Tue 6:30 PM to 9:30 PM in ENS 307 or Wed 6:30-9:30PM in ENS 307
Office Hours: TTH 2:00 PM-3:00 PM in ACES 5.118
Teaching Assistant: TBD

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; unit testing & regression testing; program verification; static and dynamic program analysis.   
 
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

Grading

Grading Scheme

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.

Lectures (T/TH)
Laboratory (T or W)
Assignments, Quiz, Project, and Exams
Week 1 (8/30)
Lecture 1. Overview


Week 2
(9/4,
9/6)

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
(9/11, 9/13)
Lecture 3. Requirements Analysis using UML Use Cases and Statecharts
Lecture 4. Object-Oriented Design and Analysis using UML Class Diagram and Message Sequence Charts

Exercise 2: UML
Quiz 1. Subversion and Version Merging (Thursday)
Week 3
(9/18,
9/20)
Lecture 5. UnixCommands Part 1
Lecture 6. Unix Commands and Shell Scripting Part 2

Exercise 3: Unix Environment and Command-line Utilities and Shell Scripting Quiz 2. Unix Commands and Shell Scripting (Thursday)
Week 4
(9/25, 9/27)
Class Presentations.

Project Part A. New Feature Proposal. Maximum 5 Slides in PPT/PDF.
Maximum 5 pages report in Word/PDF (Due: Tuesday, 12:29PM)
  • Motivation and User Benefits, Feature Description and Requirements, Identification of Relevant Classes, Mock-Up Screenshots.
  • Use Case Diagram in UML
  • Preliminary Class Diagram in UML
Submit a hard copy report in class. Please also submit an electronic copy to Blackboard.   
Week 5
(10/2, 10/4)

Lecture 7. Information Hiding Principle
Lecture 8. Design Patterns Part 1
Abstract Factory, Factory Method, Singleton, Adapter,
Flyweight, Bridge, Observer, Mediator, Strategy, Visitor
Exercise 4: UML
Assignment 1. Paper Review Report (Max 500 words due in class Tuesday 12:29PM)
On the criteria to be used in decomposing systems into modules, DL Parnas

Week 6
(10/9,
10/11)
Lecture 10. Design Patterns Part 2
Lecture 11. Design Patterns Part 3
Exercise 5: Improving Design
Design Pattern and Refactoring


Quiz 3. Design Patterns (Thursday)
Week 7
(10/16, 10/18)
Lecture 12. Design Patterns Part 4
Lecture 12. Refactoring


Assignment 2. Investigation and Analysis of Design Patterns (Maximum 5 pages report due in class Thursday 12:29PM)
ek 9
(10/23, 10/25)
Lecture 13. Testing, Statement, Branch, and Path Coverage, JUNIT
Lecture 14. Continuation on Test Coverage, Test Generation, and Regression Test Selection
Exercise 6:jUnit Testing
Assignment 3. Paper Review Report
(Max 500 words due in class Thursday 12:29 PM)
Regression test selection for Java software, Harrold et al.

Week 10
(10/30, 11/1)
Continuation on Test Coverage, Test Generation, and Regression Test Selection


Quiz 4. Test Coverage/ Generation (Thursday)

Week 11 (11/6, 11/8)
Lecture 15. Build Management and Documentation, ANT, JAVADOC
Lecture 16. Debugging and Eclipse Debugger, GDB, DDD, Delta Debugging
Lecture 17. Software  Inspection, Hoare Logic
Exercise 8: Eclipse Debugger
Exercise 9: Bug Finding & FindBug


Assignment 4.
Paper Review Report (Max 500 words due in class Thursday 12:29 PM) Yesterday, my program worked. Today, it does not. Why?
Week 12 (11/13, 11/15)
Class Presentations and Demo

Project Part B. New Feature Implementation Progress. Maximum 5 Slides in PPT/PDF.
Maximum 5 pages report in Word/PDF (Due: Tuesday, 12:29PM)
  • User Interfaces: Current Snapshots
  • Description of Important APIs
  • Test Scenarios and Test cases in JUnit
Submit a hard copy report in class. Please also submit an electronic copy and code to Blackboard. 
Week 13
(11/20, 11/22)
Lecture 18. Hoare Logic, Loop Invariant,
Lecture 19.
Data Flow Analysis, Program Slicing
Exercise 10: Program Understanding Assignment 5. Test Generation (Both test programs and hard copy report report due in class Thursday 12:29 PM)
 
Week 14
(11/27, 11/29)
Lecture 19. Dynamic Program Analysis, Profiler, and Runtime Verification
Lecture 20. Software Visualization

Assignment 6. Assertions based on Weakest Preconditions (Both program and hard copy report due in class Thursday 12:29PM)
Week 15
(12/4, 12/6)
Class Presentations and Demo 

Project Part C. New Feature Implementation Final Demonstration. Maximum 5 Slides in PPT/PDF. Maximum 5 pages report in Word/PDF (Due: Tuesday, 12:29PM)
  • Motivation and User Benefits, Feature Description and Requirements
  • User Interfaces: Current Snapshots
  • Design in UML and Description of Important APIs
  • Test Scenarios and Test cases in JUnit
Submit a hard copy report in class. Please also submit an electronic copy and code to Blackboard. 

Laboratory Assignments and Quizzes

The main focus of the laboratory assignments will be exercising the concepts, techniques, and tools covered in class and labs. Quizzes are to test the concepts, techniques, and tools covered in both class and labs. All assignments are done individually. Collaboration is not permitted in any circumstance. 

Projects

The main focus of the project is to learn how to extend a large scale system. Students will propose a new feature, identify relevant parts of the system for extension through reverse engineering and extend its current design, implement and test the changes, and demo their working implementation in class. The project assignments are done in teams of four students. If a team implements a feature that already exists or is very similar to an existing feature, it will be considered as plagiarism. It is each team's responsibility to demonstrate that the proposed feature is new, does not exist in any version of the project base, and a unique creation of the team.    

Class Policy

Software Environments

Students are encouraged to use their personal laptops. It is a student's responsibility to install required software and ensure that it is working correctly. Students are strongly encouraged to install all necessary software systems and environments in the beginning of the class to ensure timely progress of weekly labs, assignments, and projects. If a student chooses to use software systems that are not endorsed by the teaching team and, and as a result, if this makes it inconvenient or unable for the teaching team to grade his or her assignments, the student may not receive any score for the assignments. 

Unix or Linux installation for BASH shell scripting and running Unix commands, or MacOS with X11 or Terminal, or Cygwin installation for Windows OS; Subversion Client installation or Subclipse Eclipse plug-in; Account creation in Assembla and Piazza; Eclipse Classic 3.7.1 or later or Eclipse versions of Eclipse for Plug-In development; ArgoUML or other UML diagram software systems; JUnit; Ant; Eclipse debugger; gdb; FindBug and Java 6 or later versions.

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.

Textbooks

Essential Open Source Toolset
(Required) Essential Open Source Toolset (ISBN-10: 0470844450,  ISBN-13: 978-0470844458)
(Required) Design Patterns: Elements of Reusable Object-Oriented Software

Useful References:
Code Complete: A Practical Handbook of Software Construction (ISBN-10: 0735619670, ISBN-13: 978-0735619678)
Linux Pocket Guide (ISBN-10: 0596006284, ISBN-13: 978-0596006280)
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.