Successful software development depends on an in-depth
understanding of how the phases and supporting activities of the software
development life cycle work together. Each phase of the life
cycle contributes to a reliable, maintainable product that satisfies user
requirements. The application of good engineering
practices throughout the cycle dramatically improves the likelihood of
delivering a quality software project on time, in scope and within budget. While there are many rigorous methodologies,
in fact most approaches and tools have a mixture of strengths and weaknesses. Traditional
development approaches result in models that are incomplete and quickly become
out-of-sync with the application source code. Many modeling approaches focus on
describing software designs, rather than solving business problems.

This course presents modern software
engineering techniques and examines the software life-cycle, including software
specification, design implementation, testing and maintenance. The course evaluates
past and current trends in software development practices including agile
software development methods such as Extreme Programming (XP), Agile Modeling
(AM), Scrum, ASD, DSDM, Crystal, Feature Driven Development (FDD), and
Incremental Funding Method (IFM). Agile software processes are a recent trend
in the software industry and promise strong productivity improvements,
increased software quality, higher customer satisfaction and reduced developer
turnover. Agile development techniques empower teams to overcome time-to-market
pressures and volatile requirements. According to Giga Information Group Inc.,
more than two-thirds of all corporate IT organizations will use some form of
agile software development process within next 18 months. The course gives an
overview of methods and techniques used in agile software processes, contrasts
agile approaches with traditional software development methods, and discuss the
sweet spots of both methodologies. Other non-agile
approaches that are widely used in industry such as the Rational Unified
Process (RUP) and the Open Process Framework (OPF) will also be covered.
Process improvement initiatives such as the Capability Maturity Model (CMM) and
Personal Software Process (PSP) will be discussed.

This course is designed for anyone interested in learning how
to understand requirements, specify solutions for complex systems, and deploy
scalable, portable, and robust enterprise applications. The course will present
a variety of tools, in the context of team production of publicly releasable
software. The goal will be for each student to have had a hand in building complete
and useful applications that could be released for real-world use. This course
is a highly
interactive course, in which students are expected to fully participate
in class-based activities and discussions. Students will be encouraged to
bring their own experiences to the discussion, as most of the topics being
covered in this course are still considered open research topics. More than 50%
of the course will be spend on student presentations, hands-on exercises, and practical
software development as part of a team project.

COURSE OBJECTIVES

The objectives of the
course are as follows:

1.Describe and compare various software development methods and understand
the context in which each approach might be applicable.

2.Develop students’
critical skills to distinguish
sound development practices from ad hoc practices, judge which technique
would be most appropriate for solving large-scale software problems, and articulate the benefits of
applying sound practices.

Students
enrolling in this class are expected to have taken G22.2110 (i.e., Programming
Languages) and G22.2250 (i.e., Design of Operating Systems) and their
prerequisites.. Knowledge of UML or a specific programming language is not
required. For some of the practical aspects of
the course, a working knowledge of an object-oriented programming language
(e.g., Java) is recommended. Experience as a software development team member
in the role of business analyst, developer, or project manager is a plus.

TEAM PROJECT

All assignments (other than the individual
assessments) will correspond to milestones in the team project. Teams will pick their own projects, within
certain constraints: for instance, all projects should involve multiple
distributed sub-systems (e.g., Web-based electronic services projects including
client, application server, and database tiers). Students will need to come up
to speed on whatever programming languages and/or software technologies they
choose for their projects - which will not necessarily be covered in class.

Students will be required to form themselves
into "pairs" of exactly two (2) members each; if there is an odd
number of students in the class, then one (1) team of three (3) members will be
permitted. There may not be any "pairs" of only one
member! The instructor (and TA(s)) will then assist the pairs in forming
"teams", ideally each consisting of two (2) "pairs",
possibly three (3) pairs if necessary due to enrollment, but students are
encouraged to form their own 2-pair teams in advance. If some students drop the
course, any remaining pair or team members may be arbitrarily reassigned to
other pairs/teams at the discretion of the instructor (but are strongly
encouraged to reform pairs/teams on their own). Students will develop and test their project code together with
the other member of their programming pair.

Students
are encouraged to review the references provided on the course Web site,
subscribe to Application Development Trends, Software Systems, and New
Architect.

COURSE
SESSIONS

1.SOFTWARE ENGINEERING FUNDAMENTALS

-
Course Logistics

-
Software Development Challenges

- Software Scope

- Software Engineering Discipline

- The Human Side of Software Development

- Introduction to Agile Software
Engineering

READINGS:Selected readings
assigned in class

Handouts
posted on the course Web site

2.SOFTWARE DEVELOPMENT LIFE CYCLES (SDLCs) – Part I

-
Life Cycle Phases

-
Traditional Life Cycle Models

- Waterfall

- V

- Phased

- Evolutionary

- Spiral

- CBSE

-
Alternative Techniques

- UP

- RAD

- JAD

- PSP/TSP

- Prototyping

READINGS:Selected readings
assigned in class

Handouts posted on the course Web site

3.SOFTWARE DEVELOPMENT LIFE CYCLES (SDLCs) – Part II

-
Extreme Programming

-
Agile Software Development

-
Roles and Types of Standards

-
ISO 12207: Life Cycle Standard

-
IEEE Standards for Software Engineering Processes and

Specifications

READINGS:Selected readings
assigned in class

Handouts posted on the course Web site

4. SOFTWARE ENGINEERING TOOLS PRIMER

-Build Tools (e.g., Ant)

-Continuous Build Process Frameworks (e.g.,
CruiseControl)

-Unit Testing Frameworks (e.g., jUnit)

-Refactoring Browsers (e.g., Borland Together
Designer 2005)

-Selecting Appropriate Tools

5.PLANNING AND MANAGING REQUIREMENTS

-
Requirements Development Methodology

-
Specifying Requirements

-
Eliciting Accurate Requirements

-
Documenting Business Requirements

-
Defining User Requirements

-
Validating Requirements

-
Achieving Requirements Traceability

-
Managing Changing Requirements

-
Reviews, Walkthroughs, and Inspections

-
Agile Requirements Engineering

READINGS:Selected readings
assigned in class

Handouts posted on the course Web site

6.INTRODUCTION TO SOFTWARE ANALYSIS AND DESIGN

-
Roles of Analysis and Design

-
Traditional Data and Process Modeling Approaches

-
Performing Requirements Analysis

-
Object-Oriented Modeling

-
Selecting and Combining Approaches

-
Creating a Data Model

READINGS:Selected readings
assigned in class

Handouts posted on the course web site

7.BUSINESS MODEL ENGINEERING

-
Business Model Capture Tools

-
Process Modeling

-
Capturing the Organization and Location Aspects

-
Developing a Process Model

READINGS:Selected readings
assigned in class

Handouts posted on the course web site

8.FROM ANALYSIS AND DESIGN TO SOFTWARE ARCHITECTURES

-
Building an Object Model using UML

-
Design Patterns

-
Architectural Patterns

-
Model Driven Architectures

-
Business Process Management

-
Achieving Optimum-Quality Results

-Selecting Kits and Frameworks (e.g., Eclipse, etc.)

-Using Open Source versus Commercial Infrastructures

READINGS:Selected readings
assigned in class

Handouts posted on the course web site

9.BUILDING SOFTWARE

-
Language and Platform Issues

-
Component Infrastructures

-
Pair Programming

-
Refactoring

-
Test Driven Development (TDD)

-
Distributed Development and Agile Methods Scalability

READINGS:Selected readings
assigned in class

Handouts
posted on the course web site

10.SOFTWARE VERIFICATION AND VALIDATION

-Integration and System Testing

-Static Confirmation

-Dynamic Testing

-Traceability Matrices

-Automated Testing

READINGS:Selected readings
assigned in class

Handouts posted on the course web site

11.SOFTWARE QUALITY

-
Configuration Management (CM)

-
Software Quality Assurance (SQA)

-
Project Measurements

- Software
Quality and Agile Methods

- Automated and Manual Functional Testing

- Acceptance testing

- Mock objects

- User interface testing (HTTPUnit, Canoo)

- Performance testing

-
Project Management Metrics

-
Quality and Process Standards and Guidelines

- ISO 9000

- SWEBOK

- ISO 15504

- SEI’s Capability Maturity Model (CMM)

- CMM Integration (CMMI)

READINGS:Selected readings
assigned in class

Handouts posted on the course web site

12.RISK MANAGEMENT IN SOFTWARE ENGINEERING
PROJECTS

-Project
Planning and Estimation

-Cooperative
roles of software engineering and project management

-Developing
risk response strategies

-Risk
Management in Agile Processes

-Agile
Project Planning

READINGS:Expert One-on-One: Introduction
(cont.)

Handouts posted on the course web site

13.QUANTIFYING SPECIFICATIONS USING FORMAL
METHODS

-
Using Set Theory and Logic

-
Verifying Requirements Mathematically

READINGS:Selected readings
assigned in class

Handouts posted on the course web site

14.OTHER PROJECT CONSIDERATIONS

-
Evaluating Agile Software Engineering

-
Software Engineering Ethics

-
Web Engineering Techniques

-
Measuring User Satisfaction

READINGS:Selected readings
assigned in class

Handouts posted on the course web site

READINGS

Assigned
readings for the course will be from the textbooks, various Software
Engineering-related Web sites, trade magazines, and recommended books listed on
the course Web site.

ASSIGNMENTS

Homework
and project assignments completion will be required.

Quizzes
will be administered.

The
final exam will be a take-home exam.

GRADING POLICY

25%
Assignments

35%
Projects

30%
Final Exam

10%
Attendance and Participation

Extra
credit will be granted periodically for particularly clever or creative
solutions.

Pair or team members who do not contribute
appropriately to an assignment will receive a significantly lower grade for
that assignment than the rest of that pair/team, possibly "zero", at
the discretion of the instructor. If there is lack of appropriate
contribution on any two or more group assignments, the non-participating
student(s) may be asked to withdraw from the course. If this occurs after drop
date, "unofficial withdrawal" grades may be given.