ECS 260: Software Engineering

ECS 260
Software Engineering
Effective Term
2016 Fall Quarter
Learning Activities
Lecture: 3 hours
Project (Term Project): 3 hours
Advanced techniques for domain-specific software reuse.
ECS 142; ECS 160 recommended.
Enrollment Restrictions
Pass One and Pass Two open to Graduate Students in Computer Science only.

Summary of Course Content

This course will address the issues involved in software development for reuse. The course will expose
students to technical topics relating to software reuse: design patterns, component-based development,
domain-specific languages, and code generation techniques such as: syntactic and scoping hygene,
partial evaluation, de-forestation. Concepts will be re-enforced via the case-study of specific languages
and systems.

Students will undertake 2 assignments and a project. The project, which will carry the bulk of the credit,
will involve implementing a domain-specific platform which enables the rapid development of a class of
applications for a specific domain.

Design Statement

ECS 260 students will undertake a significant project, counting for 50% of the credit of the course, where
they will design a domain-specific language (or extensions thereof) and an implementation of the
language by writing a compiler. This project will require the students to exercise design judgement,
balancing such goals as ease-of-use, evolvability, and performance. Examples from the past include: a
policy language for security policies, and compiler that generates wrappers to enforce such policies; a
language to specify curriculum requirements and a compiler that generates a checker to validate an
individual student's academic plans.

ABET Category Content

Engineering Science: 1 unit
Engineering Design: 2 units

Illustrative Reading

A collection of papers and notes that will be distributed by the instructor.

Potential Course Overlap
The course does not have a significant overlap with any other course. It does however, complement the
material in 240, since we describe the use of high-level programming languages to improve software
productivity in narrow domains. The primary focus of the course is on techniques to achieve higher
levels of software reuse in narrow application domains: techniques include design patterns, distributed
object systems, software architectures, and domain-specific and other transformational techniques.

Course Category