COMP 6905: Introduction to Software Engineering

The following are my notes for COMP 6905, "Introduction to Software Engineering." It starts with a lot of copying from slides verbatim, and then tapers off as I start getting very bored and disillusioned with the course material.

Notes

The term "Software Engineering" originated with Anthony Oettinger, in "The hardware-software complentarity". Communications of the ACM, 1967.

The first software engineering conference was in 1968.

The discipline was created to get projects exceeding time and budget under control. In the 1960s, 84% of projects ran behind schedule. They were over-budget, on average, by 189%. 30% of them were cancelled.

The cost of owning and maintaining software in the 1980s was twice as expensive as developing it.

During the 1990s, this increased by 30%.

An engineering project proceeds along clearly defined phases.

Fundamental principles:

  1. Systems should be developed using a managed and understood development process. Of course, different processes are used for different types of software.
  2. Dependability and performance are important for all types of system.
  3. Understanding and managing the software specification and requirements are important.
  4. Where appropriate, reuse software that has already been developed rather than write new software.

Main software engineering activities:

These can be boiled down to:

Requirement/Specification

The process of establishing what services are required and the contraints on the system's operation and development.

The process:

Design and Implementation

The process of converting the specification into an executable system.

Design Activities

System Implementation

Validation/Testing

Software Evolution

Development process types

The code-and-fix model

  1. Write code
  2. Fix code

Waterfall

  1. Requirements definition
  2. System and software design
  3. Implementation and unit testing
  4. Integration and system testing
  5. Operations and maintenance

Waterfall is document-driven. Documents from each step are needed for the next step.

It only really works for embedded systems and safety-critical systems where the cost of errors is high.

V-Model

The V-model just includes validation/testing for every component of the design process, not just software development. E.g., validating the requirements. It's otherwise a variant of Waterfall.

Incremental Development

  1. Initial description
  2. Specification <-> Implementation <-> Validation

Basically, just iteration.

Agile

Minimal documentation, focus is on working code.

Types of Agile