Courses based on the book

I have completely re-organized the book to collect together chapters that may be used in a one-semester software engineering course. There are a range of different courses that you may design, based on the 4 parts of the book and those suggested here are only a few of the possible options.

The principal dependencies are between the chapters in Parts 2 and 3 and the chapters in Part 1. The later chapters assume familiarity with the material in the introductory part. Part 4. which covers management topics, has no dependencies as such but I don't think these chapters are really understandable without covering the introductory material first.

I have based the course descriptions below on the assumption that you cover approximately 1 chapter per week in a 1-semester course but that you have a 1-week mid-semester break, leaving 11 teaching weeks. I also assume that the final week is used for recap and revision so I suggest either 9 or 10 chapters may be covered in a semester.

In many cases, this requires quite rapid assimilation of material and depending on the background, experience and ability of your students, you may wish to slow this down a little. If you do this, I suggest that you cut out entire topics (e.g. evolution) rather than try and leave out parts of chapters.

Introduction to software engineering

This course is most suitable for students who have completed a programming course. Students are most likely to be in their 2nd (sophomore) year of a computer science or related course but it could be taken later in the course if this is the only software engineering module.

The first part of the book (Chapters 1-9) is intended to serve as a stand-alone introductory course in software engineering delivered over 1 semester which has 11 teaching weeks. This is simply a question of covering the topics in order.

I assume that there will be some project work associated with the course and I recommend that you try and use agile methods for any group project work. The size of student projects is such that the students do not appreciate the need for plan-based approaches.

Critical systems engineering

This course expects students to know the fundamentals of software engineering.

I use the book in teaching a course called 'Critical Systems Engineering', which focuses on dependability and security. Alternative titles might be something like 'Dependable Systems' or 'Safety-critical Software Engineering'.This may cover techniques for the development of safety, mission or business critical systems.

Part 2 of the book specifically focuses on dependability and security so all of the chapters in that section are relevant. I start with the notion of socio-technical systems (because it is really systems and not just software that have to be dependable). I then introduce real-time systems (Chapter 20) because so many critical systems are real-time control systems. I then go on to introduce the fundamental of dependability and security (Chapter 11) followed by coverage of dependability and security specification (Chapter 12), dependability and security engineering (chapters 13 and 14) and dependability assurance (Chapter 15). The last few weeks of the course focus on management issues because management is so important for critical systems. I introduce management in general (Chapter 22), discuss costing and estimating (Chapter 23) and configuration management (Chapter 25).

Alternatively, you could include some of the chapters from Part 3 in such a course - reuse is certainly appropriate, supplemented with a discussion on reuse and dependability as is distributed system architectures and service-oriented architectures.

Advanced software engineering

Here you could have a course that has either a technical orientation (I have taught such a course focused around reuse and distributed systems) or a management orientation. For a course with a technical orientation, you could use all of the chapters in Part 3 plus chapters 13 and 14, covering dependability and security engineering and Chapter 25 (Configuration management). For a management focused course, you might use all of the chapters in Part 4 plus Chapter 10 (Sociotechnical systems), Chapter 14 (Security engineering) an Chapter 15 (Dependability and security assurance).