Heron-Centric: Ruminations of a Language Designer Stages of Software Development by Christopher Diggins February 5, 2007
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.
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):
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).
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?
Have an opinion?
Readers have already posted
about this weblog entry. Why not
If you'd like to be notified whenever Christopher Diggins adds a new entry to his weblog, subscribe to his RSS feed.
Christopher Diggins is a software developer and freelance writer. Christopher loves programming, but is eternally frustrated by the shortcomings of modern programming languages. As would any reasonable person in his shoes, he decided to quit his day job to write his own ( www.heron-language.com ). Christopher is the co-author of the C++ Cookbook from O'Reilly. Christopher can be reached through his home page at www.cdiggins.com.