The IEEE Computer Society defines software engineering as "(1) The
application of a systematic, disciplined, quantifiable approach to the
development, operation, and maintenance of software; that is, the
application engineering to software. (2) The study of approaches as in
Thus software engineering comprises everything that is involved in
building and maintaining software systems. Clearly this is too much to
cover in a single course. Many aspects of software engineering are
adequately treated in the rest of the computer science curriculum,
e.g., algorithms, data structures, programming languages, and
programming methodology. Other aspects of software engineering such as
project management are better studied in a department with knowledge
of management. On the other hand, essential tools for software
engineers, such as version management, build management, software
deployment, and software testing, are neglected.
In this course we focus on the technical aspects of the software
engineering process, and in particular on the tools that support this
process. We will study the following topics:
The study of these topics as well as the accompanying lab work is
based on existing (Unix) tools.
The course starts with introductory lectures about each of these
topics in order to introduce the basic tools to be used in the
The practical exercises of the first half of the course allow you to
acquire the basic skills necessary to use the tools. These smaller
introductory exercises are followed by a larger exercise in which you
will reorganize an existing program to make it reusable, maintainable,
and portable using the tools covered by the course.
The tools covered in the first part are widely used and provide
solutions to common development problems, however, they are far from
perfect. In the second half of the course we examine the underlying
problems and study alternative solutions and tools for these
problems. You will further examine specific problems and tools by
writing a paper comparing a selection tools on their ability to solve
a particular development problem.
The literature for this course consists of a bundle of articles
) accompanied with pointers to further
resources on the website. The reader can be obtained at the student
desk. Slides of the lectures will be made available online at the
Lectures and Lab
There will be two weekly lectures and two lab sessions. Your are
expected to read literature accompanying the lectures, make lab
assignments, and write a tool comparison paper.
Students are expected to be mature programmers with some experience
with project work. Experience with Unix is helpful since lab work
will be done on Linux machines.
Examination and Deliverables
You have to hand in
- solutions to the lab exercises
- sources and documentation of the software reorganization project
- a tool comparison paper
The final mark will be based on these deliverables. The paper must
consist of approximately 10 pages of normal spaced, normal font text.
The course is thaught by Eelco Visser
, and EelcoDolstra