SOFTWARE DEVELOPMENT LIFE CYCLE
	
		
			
				
					- 
					Software Elements Analysis: The most important task in 
					creating a software product is extracting the
					requirements. Customers typically know what they want, 
					but not what software should do, while incomplete, ambiguous 
					or contradictory requirements are recognized by skilled and 
					experienced software engineers. Frequently demonstrating 
					live code may help reduce the risk that the requirements are 
					incorrect. 
					
 
					- 
					Requirements (Requirements Specification): There is the task of precisely 
					describing the software to be written, possibly in a 
					rigorous way. In practice, most successful requirements 
					are written to understand and fine-tune applications that 
					were already well-developed, although safety-critical 
					software systems are often carefully specified prior to 
					application development. Requirements are most 
					important for external interfaces that must remain stable. 
					
 
					- 
					Software architecture: The architecture of a software 
					system refers to an abstract representation of that system. 
					Architecture is concerned with making sure the software 
					system will meet the requirements of the product, as well as 
					ensuring that future requirements can be addressed. The 
					architecture step also addresses interfaces between the 
					software system and other software products, as well as the 
					underlying hardware or the host operating system. 
					
 
					- 
					Implementation (or coding): Reducing a design to code 
					may be the most obvious part of the software engineering 
					job, but it is not necessarily the largest portion. 
					
 
					- 
					Testing: Testing of parts of software, especially where 
					code by two different engineers must work together, falls to 
					the software engineer. 
					
 
					- 
					Documentation: An important (and often overlooked) task 
					is documenting the internal design of software for the 
					purpose of future maintenance and enhancement. 
					Documentation is most important for external interfaces. 
					
 
					- Software Training and Support: A large percentage of 
					software projects fail because the developers fail to 
					realize that it doesn't matter how much time and planning a 
					development team puts into creating software if nobody in an 
					organization ends up using it. People are occasionally 
					resistant to change and avoid venturing into an unfamiliar 
					area, so as a part of the deployment phase, its very 
					important to have training classes for the most enthusiastic 
					software users (build excitement and confidence), shifting 
					the training towards the neutral users intermixed with the 
					avid supporters, and finally incorporate the rest of the 
					organization into adopting the new software. Users will have 
					lots of questions and software problems which leads to the 
					next phase of software. 
					
 
					- 
					Maintenance: Maintaining and enhancing software to cope 
					with newly discovered problems or new requirements can take 
					far more time than the initial development of the software. 
					Not only may it be necessary to add code that does not fit 
					the original design but just determining how software works 
					at some point after it is completed may require significant 
					effort by a software engineer. About ⅔ of all software 
					engineering work is maintenance, but this statistic can be 
					misleading. A small part of that is fixing bugs. Most 
					maintenance is extending systems to do new things, which in 
					many ways can be considered new work. In comparison, about ⅔ 
					of all civil engineering, architecture, and construction 
					work is maintenance in a similar way.