Course Description

Swe02

Description

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 (1)"

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

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.

Literature

The literature for this course consists of a bundle of articles (Reader) 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 schedule page.

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.

Prerequisites

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.

Lecturers

The course is thaught by Eelco Visser, AtzeDijkstra, and EelcoDolstra.