Hide menu

TDDD30 Advanced Software Engineering

Course information

TDDD30 Information


News for 2012

The course focus has shifted towards and is now more focused on empirical knowledge in Software Engineering. We wil also discuss the notion of a System Anatomy - a very practical, and informal concept that can be useful for both large and agile projects. Earlier the seminar work was only about presenting articles. Now we will open also for your own data collection.


The goal of the course is that the student shall be able to explain concepts and methods over the entire field of Software Engineering. We will put special emphasis on topics that are not dealt with in the first course, such as, TDDC93 or TDDC88. Furthermore, the students shall be able to read, present and summarize software engineering research as presented in scientific literature.

This means that you will spend much time reading and reflecting about aticles you find from the library's scientific databases, but you will also write your own term paper and create a seminar.


In the lecturing seminars the course leader talks you through the different parts of the Guide to the Software Engineering Body of Knowledge. (See under contents below) We will also give some introduction and instruction on finding articles, making presentation and writing term papers.


In the seminars we assume that the participants are very active and prepare well. You will organize yourselves in 8 groups, each with the responsibility for a speicifc topic.

There are two different kinds of seminars:

  1. General rehersals. At the general rehersal the individual group and the course leader meet to go through the presentation. It is important that all group members are present to help in improving the presentation. This will take about 25 minutes for each group.
  2. Eight special topic seminars. Where all course participants should be present. These seminars consist of three parts:
    1. A presentation of an article and optionally some own results. 25 minutes is budgted for the presentation that shall focus on contributions and positive results of the material. The presenting group is expected to have made improvements after the general rehersal.
    2. An oppistion prepared by another group. The opposition consists of a 2-3 minutes feed-back on the presentation given by the first group. Then there are 7-10 minutes of criticism of the paper and the investigation, also accounting for negative results.
    3. The rest of the time is open for general discussions amongst all participants in the seminar. In total each topic is covered during 45 minutes.

Course contents

General topics


A large IEEE-project in defining the body of knowledge resulted in the Guide to the Software Engineering Body of Knowledge, published 2004. The guide consists of 10 major Knowledge Areas, which in turn are decomposed in 2-4 levels. In addition, the guide lists 8 related disciplines that you also have to be acquainted with to a varying degree. The course participants are probably already acquainted with much of the content so we will cover the entire document to make sure that we share a common understanding about scope and terminology in Software Engineering.

Professionalism and ethics

Professionalism and ethics become more and more important to our profession. The magic around software is gone and customers demand more and more complex solutions without much knowledge about what they are buying. In the course we will spend a seminar on reflecting what constitutes good professionalism in Software Engineering. We will also do a self-assessment issued by ACM.

System Anatomies

System Anatomies helps keeping a common understanding about the most sailent capabilities of a software system. Experience has shown that anatomies help a lot when regards communication, testing and planning. In the course we will make a practical seminar where we try to build an anatomy toghether.

Experiments in Software Engineering

Software Engineering is an experimental science, but amazingly many research papers refrain from doing any kind of evaluation of the concepts they propose. One good reason for this is that Software Engineers are badly trained in experimental methods. In the course we will continue on our findings for metrics to establish some basic techniques in how at least partial validations can be done experimentally. We will also provide a teaser for the large area of qualitative research methods.

Special topics

Software metrics

According to its IEEE definition, Software Engineering is a quantifiable approach. As a consequence we want to state metrics about product and process properties. Metrics has been part of mainstream Software Engineering research for decades, and it can always be debated what a metric is really telling us. In the course we will be more constructive looking for opportunities rather than problems with metrics.

Software cost and quality prediction

Once we have some metrics we can start correlating them to build models of how cost and benefits of decisions made in software development will affect the resulting software. Many papers have been published on this, but only little unanimous knowledge has been collected; one of the rare exceptions is software inspections. We will study the creation and validation of models with experiments and case studies, and also discuss industrially applicable cost estimation methods, such as COCOMO, Function Points and the Lichtenberg method.


Many people associate reuse with component-based software engineering and programming with class libraries. In the course we will take a broader perspective and study potential costs and benefits with different architectural solutions, such as, product lines, frameworks and issues in domain-dependent software engineering. We will also study the organizational consequences and economics by developing for reuse and with reuse, for instance, on deciding weather to buy and adapt or to make a software component.


A well-known survey concluded that 70% of the life-cycle for software are accounted to maintenance, that is activities following the first official release. The are many challenges in maintenance, such as, program comprehension, localization of changes, change impact analysis, testing changed software and configuration management. We will study benefits and costs with techniques such as traceability, design for maintainance and reverse engineering. In practice most of these activities involves a human user using some kind of tool support, and researchers are aiming for increasing the level of automation.

Market-driven software development

In the first courses in Software Engineering the typical situation is bespoke development, that is a customer calls the software engineer and they formulate a requirements specification for the system which is developed with some method allowing for customer involvement. However, in many industrial situations you develop for a market, which imposes both technical as well as product management challenges. We will study how a software engineer can work in this context with market segmentation, competitor analysis, product portfolio planning, branding, release planning etc.

Page responsible: Kristian Sandahl
Last updated: 2008-08-11