The Artima Developer Community
Sponsored Link

Weblogs Forum
Stages of Software Development

24 replies on 2 pages. Most recent reply: Aug 7, 2008 7:20 AM by adam Jaylin

Welcome Guest
  Sign In

Go back to the topic listing  Back to Topic List Click to reply to this topic  Reply to this Topic Click to search messages in this forum  Search Forum Click for a threaded view of the topic  Threaded View   
Previous Topic   Next Topic
Flat View: This topic has 24 replies on 2 pages [ 1 2 | » ]
Christopher Diggins

Posts: 1215
Nickname: cdiggins
Registered: Feb, 2004

Stages of Software Development (View in Weblogs)
Posted: Feb 4, 2007 8:24 PM
Reply to this message Reply
Summary
What specifically are the phases of software development? I was taught there were about 4 or 5, but I believe I have identified a few more.
Advertisement
I was taught (back in '94 by my software engineering professor) that the stages of software development were something like (my memory is hazy, so I am not probably giving her full justice):
  • gather requirements
  • design
  • implementation
  • debugging
  • testing
I believe that it is important to consider a more fine-grained and less linear view of the stages of software development. I consider the following to be important interleaved phases for the development of most non-trivial commercial software:
  • scheduling - Self explanatory.
  • research - Learning more about the problems the software attempts to solve, and what the competing software does.
  • technology selection - Choosing what tools, languages, and technologies to use to build and devleop the software.
  • reuse - Identifying code libraries and tools internally and externally that can be leveraged
  • prototyping - An important step which is often overlooked (often-times the first version is really a prototype).
  • code documentation
  • product documentation
  • refactoring - Change in the code to changes in implementation design.
  • extending - This refers to when more features are added during development, after prototyping, or after a release
  • revising - Related to refactoring, this refers to when the product requirement are significantly changed in some-way
  • internationalization - It is is usually the case the software will be released in different locales with different langauges and cultural conventions.
  • optimizing - It is rare that software doesn't have some areas where better performance could significantly improve the product.
  • static analysis - Static analysis tools are an important part of detecting defects
  • reviewing code - Code reviews are an important supplement to testing
  • releasing - Getting the internal versions to various teams, and external versions to customers in a smooth and timely manner
  • recycling code - The code in a successful project will almost invariable be reused in some other project.
  • porting - Porting software to new operating systems and platforms is almost always inevitable in a successful product
  • support - Customer support is easily overlooked, but when taken into consideration will affect design decisions, and profitability.
By being aware of, and giving proper consideration to, these stages of software development I believe software projects increase their chances of success.

So what do you think, are any of these superflous or am I missing some?


Michel Parisien

Posts: 25
Nickname: kriggs
Registered: Jul, 2005

Re: Stages of Software Development Posted: Feb 4, 2007 9:57 PM
Reply to this message Reply
I've been compiling tons of info about the components of the software process. I greatly appreciate this article!

Bruno RJ

Posts: 1
Nickname: brunorj
Registered: Feb, 2007

Re: Stages of Software Development Posted: Feb 4, 2007 11:35 PM
Reply to this message Reply
While working I had identified 5 stages at *every* project:

- whole happiness;
- big trouble;
- searching guilties;
- punishment of innocents;
- promotion of the non-participants.

:)

Cleo Saulnier

Posts: 77
Nickname: vorlath
Registered: Dec, 2005

Re: Stages of Software Development Posted: Feb 5, 2007 12:32 AM
Reply to this message Reply
So true. I think just getting to the stages Christopher mentions is a battle in itself. Never mind doing them.

Raji Gogulapati

Posts: 5
Nickname: rajig
Registered: Nov, 2005

Re: Stages of Software Development Posted: Feb 5, 2007 1:47 AM
Reply to this message Reply
I would say “educate the decision makers and the development teams about the nature of software development”. That is the first and only step needed!

This is the shortest possible tutorial I could come up with to distribute to anyone who never “participated” in software development contributing to the effort, if it helps!
And if they are decision makers – it is more important to test and grade them after!

I also recommend some simple reading if it is not asking too much!

Why Big Software Projects Fail: The 12 key questions by Watts S. Humphrey, The software engineering institute , Carnegie Mellon University (published in Quality Assurance Institute, October 2005).
The nature of software development and many interesting inferences are discussed in the form of questions and answers in this paper.

Software industry professionals (anyone who has anything to do with the business of software) need to be aware of the System Development Life cycle methodologies adopted by Software Engineering divisions in organizations.
The goal of a Software Engineering division is to ensure the needed processes at least at a high level for delivering quality products / applications to stake holders.

At a high level, there are really 4 main stages of software system development. This is the way we were taught in higher education by people who were not experienced with large scale software development.

I repeat those stages as learnt in schools. They are planning, analysis, development, implementation.
The answers to WHY (planning - why is the software system built?)
WHO will use the system, WHAT will the system do?
And WHERE and WHEN it will be used ? (analysis constitutes these)
HOW the system operates is decided in the design phase.
Implementation can be seen how the software system is acquired (built or purchased).

There are several development approaches taken to ensure the best suitable approaches for developing the software according to the context. And the initial step should be to ensure that the best suitable approaches are followed for the project under consideration. Decision makers need to be aware of this fundamental point.

It is a recognized fact among the “experienced software professionals” that any considerable software development effort is “evolutionary” and complex. Such an effort cannot afford to “freeze ” / “stop thinking ” about several aspects of development. - at any of the 5 main stages.

However, during an “iteration”, “adding requirements” can be avoided. This will allow software development proceed until the next iteration. This will let the development teams maintain their sanity and ensure stable environments to a certain extent.

What could be the end of the software evolution?
The end could be due to the following reasons.
Software entered “maintenance” stage (no longer actively developed) OR
it is decided that there be no development OR
the code is in a “decay” stage – it is not feasible to develop with that code anymore.

The life cycle ends with these phasing out stages. So the initial development which we call Software Development phase among the 4 main phases is really part of an “iteration” of the software evolution. It takes time and effort for “software” to mature.

The knowledge that one can look for is popularly called SWEBOK (Software Engineering Body of knowledge). This knowledge is compiled through the efforts of experienced Software professionals and educators for about 25 years.

The question is – is the knowledge being applied in the industry with care and attention to the issues of software evolution? Do people responsible for complex projects care to understand the nature of software evolution and development?

Erik Engbrecht

Posts: 210
Nickname: eengbrec
Registered: Apr, 2006

What about problem definition? Posted: Feb 5, 2007 2:22 PM
Reply to this message Reply
Far too often people launch off on gathering requirements prior to defining the problem that they are trying to solve. Somebody important enough just says "I think we should have an application that does X" and people run off to build or buy something that does an elaborated version of X (that elaboration is what passes for requirements development) without ever considering whether having an application that does X serves any useful purpose.

Steve Loughran

Posts: 9
Nickname: stevel
Registered: Feb, 2006

Re: Stages of Software Development Posted: Feb 5, 2007 2:41 PM
Reply to this message Reply
> - big trouble;
> - searching guilties;
> - punishment of innocents;

that's blame assignment. The blame goes downwards, always :(

Actually a good postmortem is always worthwhile. Not only does it achieve some kind of closure, but organisations do need to learn from their past mistakes. If everyone gets blamed or management pretends nothing went wrong, you are doomed to repeat the same disaster.

-steve

Rajiv Narula

Posts: 165
Nickname: rajivn
Registered: Feb, 2007

Re: Stages of Software Development Posted: Feb 5, 2007 4:12 PM
Reply to this message Reply
Pretty neat...
I would like to add one more- if I may

"Ensuring backward compatability with previous versions and interoperability with other software"

I guess you had these implied in "Research"- but I like to have this as a seperate identifiable task

Tim LS

Posts: 37
Nickname: parchandri
Registered: Jul, 2005

Re: Stages of Software Development Posted: Feb 5, 2007 4:53 PM
Reply to this message Reply
* gather requirements
* design
* implementation
* debugging
* testing

In any large project, I would say that if you aren't debugging, testing, and refactoring code from the earliest stages of implementation, you're crazy. I truly believe it impossible to do software engineering in distinct phases as described, unless you are talking about very small chunks of software (e.g. one or two functions). Maybe you agree with this, since you suggest starting with a prototype, and refactoring and revising it.

Also, I notice that the more experienced programmers become, the less value static analysis tools have. Through experience you learn to fear the same constructs as the static analyzer.

Christopher Diggins

Posts: 1215
Nickname: cdiggins
Registered: Feb, 2004

Re: Stages of Software Development Posted: Feb 5, 2007 5:00 PM
Reply to this message Reply
> I truly believe it
> impossible to do software engineering in distinct
> phases as described, unless you are talking about very
> small chunks of software (e.g. one or two functions).

Yes I completely agree. I should not have said distinct. I edited the line to now read:

"I consider the following to be important interleaved phases for the development of most non-trivial commercial software:"

nebiyu yohannes

Posts: 4
Nickname: neb
Registered: Jan, 2007

Re: Stages of Software Development Posted: Feb 5, 2007 8:00 PM
Reply to this message Reply
The only disagreement I have, and it's a small one (mostly a matter of vocabulary), is localizing as a distinct step.

I would consider internationalization as the step needed instead of localization. Using an architecture that is internationalized you can choose to implement specific locales as those features are prioritized.

Christopher Diggins

Posts: 1215
Nickname: cdiggins
Registered: Feb, 2004

Re: Stages of Software Development Posted: Feb 5, 2007 8:23 PM
Reply to this message Reply
> The only disagreement I have, and it's a small one (mostly
> a matter of vocabulary), is localizing as a distinct
> step.
>
> I would consider internationalization as the step needed
> instead of localization. Using an architecture that is
> internationalized you can choose to implement specific
> locales as those features are prioritized.

I made this change, thanks!

Todd Blanchard

Posts: 316
Nickname: tblanchard
Registered: May, 2003

Depends on scale Posted: Feb 5, 2007 9:10 PM
Reply to this message Reply
I am solely responsible for an important little data management application used in academia. So for single person work - a lot of coordination noise just goes away. My process is:

1) Empathize with your user. Understand his problem.
2) Prototype a solution.
3) If prototype capability < useful, go to 1.
4) Deploy solution
5) Support the solution - be responsive.
6) Deploy fixes.
7) As time permits - expand scope - goto 1.

Leo Lipelis

Posts: 111
Nickname: aeoo
Registered: Apr, 2006

Re: Stages of Software Development Posted: Feb 5, 2007 10:35 PM
Reply to this message Reply
Interesting topic. I'd like to tentatively add to that list

* Complexity management

This is where you throw the book back at your client, once in a while, and tell them that if it's really that complex to implement, perhaps the problem is with their business model?

Should software cater to every whim? I think software is a service industry, but it's strange, because if a software engineer is too client-oriented, there is a good chance to bury the quality of service alive under the rubble of complexity.

Maybe trying to please the client too hard leads to ultimate a complete and total failure for both client and developer?

Software world has it's own rules. Software is very flexible, but it's not as flexible as air or as accommodating as space.

I think sometimes engineers are too conservative with what they tell their clients they can do. And then at other times they are too liberal. How to know which situation is which?

And even if we do know the situation today, can we please be allowed to change our minds tomorrow, or should we be hanged by the noose of out own yesterday's insight?

When the business rules in a project go insanely out of whack, such that no person even knows them all, and there is no document that covers all of them, and often the code is the only document you have, what phase of development is that?

Leo Lipelis

Posts: 111
Nickname: aeoo
Registered: Apr, 2006

Re: Stages of Software Development Posted: Feb 5, 2007 10:42 PM
Reply to this message Reply
I'm talking about business rules so complicated, that even when a document is available, a person needs a little mental warm up to get into the proper frame of mind to discuss them.

Is such complexity a necessity of modern life, or are we just punishing ourselves masochistically for no good reason?

Is change something that only people at the bottom of the organizational hierarchy do? Should the top of the organization be required to change with the times and conditions, is this solely the job of the so-called "worker bee"?

Flat View: This topic has 24 replies on 2 pages [ 1  2 | » ]
Topic: Metaclasses in Python 3.0 [2 of 2] Previous Topic   Next Topic Topic: Layers, Levels, and DIP


Sponsored Links



Google
  Web Artima.com   

Copyright © 1996-2014 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use - Advertise with Us