2 Software Engineering Methods and Practices

The goal of this chapter is to present how the way of working to develop software is organized and to some extent which additional means are needed (e.g. notations for specifications). Thus, the goals are for the reader to attain the ability to

  • identify the challenges in software engineering covering a wide range of aspects like how to proceed step by step, involving people and methods;
  • identify various key concepts of some commonly used software engineering methods created during the last four decades (i.e., waterfall methods, iterative lifecycle methods, structured methods, component methods, agile methods); and
  • explain the motivation behind the initiative to create the Essence standard as a basic and extendable foundation for software engineering.

This will also take the reader briefly through the development of software engineering.

After studying this chapter, you should be able to:

  • explain the meaning of a method (as providing guidance for all the things
    you need to do when developing and sustaining software);
  • explain the meaning of a practice and its types (i.e., solution-related practices, endeavor-related practices, customer-related practices);
  • explain the meaning of waterfall methods and their role in the history of software engineering;
  • explain the iterative lifecycle methods, structured methods, component methods, and agile methods, as well as their characteristics;
  • give examples of some practices (e.g., self-organizing teams, pair programming, and daily standups as examples of agile practices);
  • explain the "method prison" issue discussed in the chapter; and
  • explain the SEMAT initiative and the motivation behind the Essence standard.