Software Development Lifecycle.
In order to understand what is Software Development Lifecycle (SDLC) let us break these words into two parts: Software Development , and LifeCycle.
Software Development.
Software Development is A PROCESS to create software.At first glance to a developer - this is the coding process. This is when you sit down with the computer and start to write codes that later processed (compiled,linked etc.) become the actual software that is used by the end user. This is might be the case for beginners or novice developer who are working on "garage" project.
In a small one person project its common for developers to go directly into coding and then testing their code. They are using common divide and conquer, then trial and error testing.But for a significant size software development trial and error method will be expensive.This is because large size project normally involved few developers. Any change in any part of the codes might requires other developers to change their code also.
Larger software development also requires better way to communicate, between the developers.The communication is to make sure developers understand what to be developed, when to start the development, when the other part of the software that they dependence to will be developed, when to test these parts together, what is considered pass..etc.etc. Lot of issues to synchronized the developers.
The larger the group, the harder it is to communicate to all the team members.
This can be worst if the team members are not located in the same place - which are common these day. The team that I am part of have people working in 4 different continents in different time zone.
To make it easier, a concept of "Lifecycle" is introduced.
Lifecycle
Common concept of lifecycle is communicated to a development team to synchronized all the team members - so that every one knows when are the important milestones.
Milestones are dates when certain important criteria or requirement has to be met.
Concept of lifecycle is not exclusive to software development.
For example a human being also has lifecycle. Start from the day a human being is born.
Then s/he grows become baby,teenager,adult, old and died. This lifecycle also can be traced differently based on different view -example if look from education lifecycle (of the same human being) it can start from pre-school,junior high, high school,college undergrad, and graduate.
To software lifecycle is look like normal products (cars,computers,furnitures) creation lifecycle.It can be splitted into 5 phases:
+ Requirement
+ Design
+ Implementation
+ Final test
+ Delivery
This phases actually applicable to the final product, or even into the individual component that make up the product. For example if you are creating a chair, then you have components such as the arm rest, legs,cushions, and back rest. Once the "high level" requirements (description, specification - lot of different names of the same thing) is defined the developer of each component should be able to continue on their own to produce the components. Each of the components will go through the same 5 phases lifecycle also.
This concept of "component" developement is that not far off from what is happening in software development. If you have been in the industry long enough I bet you have heard of "component based" development. The idea is to introduce generic requirement on how components can be handled, then as long as a component is developped in conformant to this standard it can be "plugged in" into another software that understand this standard with very little effort.
Even a lot of people say that software development should be the same as other product developement -- such as car and building constructions, but experience has proven that this is not true. The normal discipline that is used in building construction does not really work in software development.
>From what the expert observation this is because in normal product construction such as a freeway, ideas and creativity are injected to the project only in very specific part of the phase -- early phase. In building construction creativity can come from the architect and also the civil engineers who has to figure out how to build what is envisioned by the architect. This is done in early stage (design) of the development phase. Once it is fixed the implementation, testing and delivery just need to follow the instructions.
In software development on the other hand, the injection of ideas is hard to controlled since its actually needed in every phase. From the high level architecture, down to low level programming, ingenuity and creativity is needed. Most software development actually depending on in development discoveries to come up with innovative products. New way of coding, new algorithm, new component can make the difference between on software to the other in term of feature offered,resource usage and performance.
Because of this software development process is normally "less rigid" compare to car or buiding construction. The side effect is that this can also caused two major problems:
+ project delay
+ low quality -- more bugs, untested code/features.