views:

80

answers:

2

Hi, I am studying Software Engineering this year and I am little confused about the question in the title.

Both of my professor and the reference ("Software Engineering A Practitioner Approach") differentiates the three titles as different models. However, I can't see obvious difference as their methodologies look the same to me but using different statements to define them. I feel that practically they all represent the same process model.

Can anybody explain the different models better?

+1  A: 

These concepts are usually poorly explained.

Incremental is a property of the work products (documents, models, source code, etc.), and it means that they are created little by little rather than in a single go. For example, you create a first version of your class model during requirements analysis, then augment it after UI modelling, and then you even extend it more during detailed design.

Evolutionary is a property of deliverables, i.e. work products that are delivered to the users, and in this regard it is a particular kind of "incremental". It means that whatever is delivered it is delivered as early as possible in a initial form, not fully functional, and then re-delivered every so often, each time with more and more functionality. This often implies an iterative lifecycle.

[An iterative lifecycle, but the way, refers to the tasks that you carry out (as opposed to "incremental", which refers to the products; this is the view adopted by SEMAT), and it means that you perform tasks of the same type over and over. For example, in an iterative lifecycle you would find yourself doing design, then coding, then unit testing, then release, and then again the same things, over and over. Please note that iterative and incremental do not imply each other; any combination of both is possible.]

The spiral model for lifecycles is a model proposed by Barry Boehm that combines aspects of waterfall with innovative advances such as an iterative approach and built-in quality control.

For the concepts of "work product", "task", "lifecycle", etc. please see ISO/IEC 24744.

Hope this helps.

CesarGon
I understand incremental as a model not a property that looks like that http://1.bp.blogspot.com/__1WQBOnqoI8/S4S5Jn-kvzI/AAAAAAAAAgU/FyXUXFIMQh8/s400/incremental_model.jpg Where you do the same steps again and again, So I am more confused now .
Ahmed
Well, "incremental" is an adjective that you may apply to many things. In the context of software engineering, it is usually applied to methodologies, and it means that (as I said in my answer) the work products being generated are so in little increments, rather than in a big-bang fashion. Is this clearer now? The "incremental model" that you mention simply means "a way to design methods so that they are incremental".
CesarGon
By work products you mean the whole Software ? What is the difference between work products and deliverables ?
Ahmed
I explain that in my answer: a deliverable is a work product that is delivered to the users. Many other work products are never delivered; think of intermediate models, documents, diagrams, notes, unit tests, etc.
CesarGon
And work product means an artefact that is used or generated by the process being carried out. Usually this means documents, models, code, etc. I suggest you have a look at ISO/IEC 24744 for definitions of these terms.
CesarGon
It's clearer now and I see what you mean but I still don't see a difference between incremental mode and evolutionary model as they both have an iterative life cycle and are designed to be incremental .
Ahmed
Incremental and evolutionary are different because evolutionary only refers to deliverables, whereas incremental refers to any work product, including non-deliverables. In my example above, you construct a class model incrementall, and most likely a class model is not going to be delivered to the users. In addition, neither evolutionary nor incremental need an iterative lifecycle, although it is common that they have it. Strictly speaking, you can develop products incrementally *without* iterating; see my example about the class model above.
CesarGon
Thank you , this helped me a lot
Ahmed
+3  A: 

Craig Larman wrote extensively on this topic and I suggest his famous paper Iterative and Incremental Development: A Brief History (PDF) and his book Agile and Iterative Development: A Manager's Guide.

Here is how I would summarize things:

Incremental Development

Incremental Development is a practice where the system functionalities are sliced into increments (small portions). In each increment, a vertical slice of functionality is delivered by going through all the activities of the software development process, from the requirements to the deployment.

Incremental Development (adding) is often used together with Iterative Development (redo) in software development. This is referred to as Iterative and Incremental Development (IID).

Evolutionary method

The terms evolution and evolutionary have been introduced by Tom Gilb in his book Software Metrics published in 1976 where he wrote about EVO, his practice of IID (perhaps the oldest). Evolutionary development focuses on early delivery of high value to stakeholders and on obtaining and utilizing feedback from stakeholders.

In Software Development: Iterative & Evolutionary, Craig Larman puts it like this:

Evolutionary iterative development implies that the requirements, plan, estimates, and solution evolve or are refined over the course of the iterations, rather than fully defined and “frozen” in a major up-front specification effort before the development iterations begin. Evolutionary methods are consistent with the pattern of unpredictable discovery and change in new product development.

And then discusses further evolutionary requirements, evolutionary and adaptive planning, evolutionary delivery. Check the link.

Spiral model

The Spiral Model is another IID approach that has been formalized by Barry Boehm in the mid-1980s as an extension of the Waterfall to better support iterative development and puts a special emphasis on risk management (through iterative risk analysis).

Quoting Iterative and Incremental Development: A Brief History:

A 1985 landmark in IID publications was Barry Boehm’s “A Spiral Model of Software Development and Enhancement” (although the more frequent citation date is 1986). The spiral model was arguably not the first case in which a team prioritized development cycles by risk: Gilb and IBM FSD had previously applied or advocated variations of this idea, for example. However, the spiral model did formalize and make prominent the risk-driven-iterations concept and the need to use a discrete step of risk assessment in each iteration.

What now?

Agile Methods are a subset of IID and evolutionary methods and are preferred nowadays.

References

Pascal Thivent
Thank you , this is what I was looking for .
Ahmed
And the InformIt article by Craig Larman is very informative and easy to understand .
Ahmed
@Ahmed I'm glad you liked it too.
Pascal Thivent