Research Publications
Teaching Students CV Software Funding Activities

Fall 2013: EE 461L Software Engineering and Design Laboratory

Instructor: Professor Miryung Kim

Miryung Kim Photo Lecture (#16940, #16945, #16950, #16955). TTH 11AM to 12:30PM in BUR 108
Labs: Mon 9 to 12 PM, Mon 12 to 3PM, Tue 6:30-9:30 PM, or Wed 6:30-9:30PM in ENS 307
Office Hours: T 9:30 AM-11:00 AM in ACES 5.118. Please utilize office hours to ask questions and discuss class materials.
Phone: 512-232-1501
Email: myfirstname at ece utexas edu
Teaching Assistant: Wei Lun Hung and Tianyi Zhang

Course Description

We focus on providing hands-on experience in designing and developing large-scale software systems with emphasis on the use of automated analysis tools. You will generate concrete software engineering artifacts at all stages of the software life-cycle. You will learn systematic engineering methods for large-scale software development: design and modeling methods; collaborative development environment; object-oriented design and analysis; design patterns and refactoring; build & integration; unit testing & regression testing; bug finding; software inspection and verification.   
Three lecture hours and three laboratory hours a week for one semester.

Pre-requisite: EE 422C (or EE 322C) or CS 336 with a grade of at least C-; credit with a grade of at least C- for Math 325K.

Course Topics

My goal is to teach systematic software development methods and tools in the context of developing a software system in collaboration with other students.  Practical development tools include
Systematic design, construction, verification, and evolution methods include
In the beginning of the class, I will ask you to fill out a background survey on what you are hoping to learn from this class. In the subsequent lecture, I will discuss how your expectations are aligned with and/or different from what to be covered and emphasized in the class.

Intended Benefits for Students

(1) You will gain knowledge in objective-oriented design, analysis, and testing techniques.
(2) You will gain hands-on experience in collaborative software development and also become familiar with practical tools that enable you to construct and evolve a large-scale software system; my hope is that this course will make you attractive to the software engineering industry.
(3) You will acquire a theoretical foundation for systematic engineering and analysis methods.
(4) You will learn from industry guest speakers about how systematic engineering and design methods benefit your career. 


All course materials are available in the form of on-line lecture notes. 
The Design Patterns textbook is required for the lectures on Software Design only. This book is a reference book for widely used, object-oriented design patterns. In 461L, I cover the most important 10 patterns. While I think it is a good idea to read about other design patterns, only the patterns covered in this class will be in the scope of exams, quizzes, and assignments.
Design Patterns: Elements of Reusable Object-Oriented Software

Useful References:
Head First Design Patterns
Essential Open Source Toolset (ISBN-10: 0470844450,  ISBN-13: 978-0470844458)
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)

Course Organization

As a four credit course, the class time will be organized three hours of lecture per week, used to introduce the software engineering methods and theories. An additional three hours of laboratory time per week will be used for course projects and to learn about tools central to the course. Quizzes will be done in lectures.

Lectures (T/TH) Tool Tutorials and Projects Assignments, Readings, and Quizzes
Week 1

Lecture 1. Overview
Form Project Groups
Week 2
(9/3, 9/5)
Lecture 2. UML Diagrams Part 1.
Requirements Analysis, Use Case and Statecharts
Preview: Project Part A Expectation
Lecture 2. UML Diagrams Part 2.
Object Oriented Design, Class Diagrams, Sequence Diagrams
Form Project Groups
Tutorial 1a: Google App Engine
Tutorial 1b: Objectify 

Week 3
(9/10, 9/12)
Lecture 3. Collaborative Software Development Svn, GIT, Diff (Supplementary slides on GIT)
Tutorial 2: UML
Work on Project Part A

Week 4 (9/17, 9/20) Lecture 4. Unix Part 1. Unix Commands
Lecture 4. Unix Part 2. Shell Scripting
New! Shell Script Files Demonstrated in Class
Preview: Project Part B Expectation

Tutorial 3: Subversion Version Control System
Work on Project Part A
Quiz 1. Version Merging, Unix Commands, and UML (Thursday)
Week 5 (9/24, 9/26) Project Part A Presentations
Project Part A. New Feature Proposal.
  • 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
(See Part A Feedback Sheet)

Tutorial 4: Unix Environment and Command-line Utilities and Shell Scripting
Work on Project Part B

Links to Project Part A Presentation Videos:
Team 1, Team 2, Team 3, Team 4, Team 5,
Team 6, Team 7, Team 8, Team 9, Team 10,
Team 11, Team 12, Team 13.
Week 6
(10/1, 10/3)

Lecture 5. Information Hiding Principle
KWIC modularization 1 vs 2 source code

Lecture 6. Design Patterns Part 1. Abstract Factory, Factory Method
(Please read relevant chapters of the textbook before each class.)
Java Code examples of Head First Design Patterns
Work on Project Part B
Reading Assignment 1. Paper Review Report
Due in class on Tuesday
On the criteria to be used in decomposing systems into modules, DL Parnas
Week 7
(10/8, 10/10)
Lecture 6. Design Patterns Part 2. Singleton, Adapter, Flyweight, Bridge
Lecture 6. Design Patterns Part 3. Observer, Mediator, Strategy, Visitor
(Please read relevant chapters of the textbook before each class.)
Handout on design patterns.
New! Annotated Lecture Notes: FactoryMethod, Singleton, Adapter, Bridge, Flyweight, Strategy, Mediator, Observer,
Tutorial 4: Improving Design
Work on Project Part B
Supplementary Notes on Design Patterns made by Tianyi 

Quiz 2. Unix, Shell Scripting, Information Hiding, Design Patterns (Thursday)

Week 8
(10/15, 10/17)
Project Part B Presentations, Guest Speaker
Project Part B. New Feature Implementation Progress
  • Design in terms of UML
  • Description of Important APIs
  • User Interfaces: Current Snapshots
  • Test Scenarios
Guest Speaker: Chris Simoes, VP of Engineering at Lithium Technologies
(See Part B Feedback Sheet)

Tutorial 5: Design Pattern
Work on Project Part C
Guest Speaker Video: Chris Simoes, VP of Engineering@ Lithium Technologies.
Slides: Software Development after College

Project Presentations:
City Cyclist, ECE Hub, RubixCube, Who Has It All. ATSnax, Basedrive, CodeWithFriends, WomboCombo, MyFrontPage, PineCone, PuzzleMe, TapHead, WalletSaver.

Week 9
(10/22, 10/24)
Lecture 6. Design Patterns Part 4.
Design Patterns Handout: Summary
Lecture 7. Refactoring  +  Midpoint Course Survey
Refactoring Book Chapter: Replace Conditionals with Polymorphism
Midterm (Thursday)
Tutorial 6: Refactoring
Work on Project Part C
Homework 1. Analysis of Design Patterns and Shell Script Programming (Submit your report and code to the blackboard before Tuesday 11AM.)
Midterm Scope: All materials up to and including Design Patterns.
Week 10
(10/29, 10/31)
Lecture 8. Build Management and Documentation ANT, JAVADOC
Refactoring Recap Exercise:
(1) Refactoring Code Demonstrated in the Class
(2) Visitor Code Implemented in the Class
ANT Build File and Project Demonstrated in the Class

Lecture 9. Testing Part 1. Statement, Branch, and Path Coverage, JUNIT
Testing Part 1 Handout
JUnit and Test Code Demonstrated in the Class
Preview: Project Part C Expectation

Tutorial 7a: Build Management
Work on Project Part C

Week 11
(11/5, 11/7)
Lecture 9. Testing Part 2. Coverage, Bounded Iteration, and Infeasible Paths, Test Generation, Symbolic Execution
Testing Part 2 Handout and Lecture Notes
Guest Lecture: FaultTracer Regression Test Selection and Fault Localization (PhD Candidate, Lingming Zhang)
FaultTracer Website
Tutorial 8: JUnit Testing and Selenium
Work on Project Part C
Quiz 3. Design Patterns, Refactoring, Testing, Build Management (Thursday)
Week 12
Lecture 10. Effective Java Programming
Part 1 Creating and Destroying Objects
Part 2 Methods Common to All Objects
Part 3 Classes and Interfaces
Lecture 10. Effective Java Programming
Part 4 Exceptions (Optional)
Part 5 Generics
Effective Java Code Examples Demonstrated in Class
Tutorial 9a: Eclipse Debugger
Tutorial 9b: Bug Finding & FindBug

Week 13
(11/19, 11/21)
Project Part C Presentations and Demo
Project C. Final Demonstration
  • Motivation and User Benefits, Feature Description and Requirements
  • User Manual, User Interfaces, Screen Snapshots
  • Design in UML and Description of Important APIs
  • Test Scenarios and Test cases in JUnit

(Peer Evaluation Sheet)(See Part C Feedback Sheet)

Guest Speaker: Dr. Colin Dixon at IBM Research (Thursday 22nd)

Project Presentations:
Code With Friends
Wallet Saver
Week 14
(11/26, 11/28)
Lecture 11. Inspection and Verification
Part 1. Code Reviews and Hoare Logic
Code Inspection Hoare Logic Handout
Course Instructor Survey
No Lecture on Thanksgiving
No lab. Enjoy Thanksgiving!
Reading Assignment 2. Paper Review Report
Due in class on Tuesday 
Yesterday, my program worked. Today, it does not. Why?
Week 15
(12/3, 12/5)
Practice exams are posted here:
(1) Final Exam--Fall 2012
(2) Final Exam--Spring 2012
(3) Practice Final--Spring 2012

Lecture 11. Inspection and Verification
Part 2. Weakest Preconditions
Lecture 11. Inspection and Verification
Part 3. Loop Invariant
Optional If Time Permits:
Lecture 12. Debugging Eclipse Debugger and GDB commands, Delta Debugging
Verification Exercise: Hoare Logic

Homework 2. Testing, Debugging and Inspection, Due on Monday 12/9 11:59 PM


Grading Scheme

Homework, Quizzes, and Exams

Quizzes and exams are to test the theories, methods, and tools covered in both class and labs. All homework must be done individually. Collaboration is not permitted. 

Laboratory Projects

You will work in teams of four to five students. You should demonstrate that the proposed feature is new and a unique creation. If you implement a feature that already exists or is very similar to an existing feature in any past or later version, it will be considered as plagiarism. When proposing a project, you should investigate whether it is feasible to implement and test it.  You are expected to perform a live demonstration of your project in class.   

Class Policy

Feedback Statement

During this course, I will be asking you to give me feedback on your learning in both informal and formal ways, e.g., including anonymous midpoint survey about how my teaching strategies are helping or hindering your learning. It is very important for me to know your reaction to what we are doing in the class, so I encourage you to respond to these surveys, ensuring that we can create an environment effective for teaching and learning.  Occasionally, at the end of the lecture, I will hand out index cards to ask "what is the most important thing you have learned in this class session?" and "what questions do you still have?" This feedback will be anonymous and this is to check your understanding and promote Q&A.

Software Environment

If you can, please use your personal laptop during the labs. We recommend that you install all necessary software systems and environments in the beginning of the class to ensure timely progress of weekly tool tutorials, assignments, and projects.

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

Frequently Asked Questions

Q: Why aren't there many programming assignments? I want to improve my programming skill through this class.
My goal is to help you experience a software project life cycle by creating concrete artifacts in each stage. Thus, while software implementation is an important part of the life cycle, coding is not the main focus of this class. If you are excited about coding and want to practice more, please select a project with a significant implementation component or volunteer to play a key role in implementing your team project. I can also share pointers to open source projects, books, and references that could help you to practice your programming skills further.

Q: Why are we emphasizing theories (such as discrete math, logic, proof by induction, and program analysis) in a project-based software laboratory course?
I hope that you can not only get a good job as an entry level software engineer, but succeed in the future as a lead, principal engineer and architect. This requires you to have not only a solid coding skill but a theoretical foundation for systematic design, analysis, testing, and verification methods. In my opinion, these foundations cannot be easily attained while you are on the jobs; they are best taught at University.

Q: How is this different from EE 360F (Introduction to Software Engineering)?
EE360F is an introduction to software engineering with focus on life cycle and process. In this course, we extend these concepts to learn about practical design techniques and to gain hands-on experience in applying tools and techniques. We also emphasize theoretical foundations for systematic testing, debugging, and verification methods.

Q: Why do we need to teach development tools in universities?  Don't we already learn these tools through an internship?
You may have encountered some of software development tools already through your internships; however, my goal is to help you to understand how these tools work and what their strengths and limitations are, so that you can use them more effectively.

Q: Don't we already have a senior capstone course EE464?
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 fact, the introduction of this advanced software engineering laboratory will better prepare you for serious software engineering 464 projects.

Documented Disability Statement

Students with disabilities may request appropriate academic accommodations from the division of Diversity and Community Engagement, Services for Students with Disabilities at 471-6259 (voice) or 232-2937 (video phone) or

Religious Holiday

By UT Austin policy, you must notify me of your pending absence at least fourteen days (14) prior to the date of observance of a religious holy day.  If you must miss a class, an examination, a work assignment, or a project in order to observe a religious holy day, I will give you an opportunity to complete the missed work within a reasonable time after the absence.

Notice Regarding Academic Dishonesty

The University of Texas Honor Code:  The core values of The University of Texas at Austin are learning, discovery, freedom, leadership, individual opportunity, and responsibility.  Each member of the university is expected to uphold these values through integrity, honesty, trust, fairness, and respect toward peers and community.
To find out what constitutes plagiarism, please go to