Overview

In this chapter, I'll provide a brief introduction to software development practices that you should adhere to throughout the term. While I have condensed the content to be concise, it is important to note that the subject matter of this chapter is extensive and could be the subject of an entire book.

Software Process Models

A software process is a set of related activities that lead to the production of a software product. At an abstract level, a software process involves activities related to specification, design, development, validation (testing), and evolution (maintenance) of software.

All process models can be categorized as one of the following:

  • Plan-driven
  • Agile

A plan-driven process is one where all process activities are planned in advance, and progress is measured against this plan. An example of a plan-driven process is the Waterfall model.

Depiction of the Waterfal model

An agile process is one where planning is incremental, and it is easier to change the process based on changing requirements.

Depiction of the Agile model

Agile software development, since its inception at the turn of the (21st) century, took the software industry by storm and quickly became the most popular (and fashionable) development style.

There are several reasons for the success of agile methodology, but perhaps the most important one is that development teams following plan-driven approaches were unable to rapidly and flexibly produce software systems in practice. The plan-driven process could be cumbersome and limiting, especially when requirements were constantly changing and not fully understood at the beginning of a software project.

Software development is often considered a "wicked problem," a problem that must be solved to be understood (refer to "Development is inherently wicked").

On the other hand, the agile process is rooted in the incremental development approach. This approach involves interleaving the activities of specification, development, and validation. The software is developed in a series of versions or increments, with each version adding functionality to the previous one. The underlying idea is to develop an initial version of the software, gather feedback, and then incrementally create newer versions based on this feedback.

This course doesn't cover this subject in greater detail. However, if you're interested, the Wikipedia article on Agile Software Development is a great starting point.

What is (and isn't) incremental development? The idea of iterative and incremental development is often misunderstood. I recommend viewing the following short video for a better understanding of the agile methodology.

OOSE's Software Process Model

We are following a hybrid model that is mostly based on the agile methodology, specifically drawing from the agile development methods of Extreme Programming and SCRUM.

The time allocated for your term project is divided into a sequence of four two-week iterations. During each iteration, your focus should be on delivering a few key functional requirements of your application. As the initial implementation takes shape, use it to refine both the requirements and design of your application. With each subsequent iteration, implement more features, continue to refine requirements and design, and provide ongoing releases of the working application.