Software Development is a complex and often difficult process requiring the synthesis of many disciplines. From modeling and design to code generation, project management, testing, deployment, change management and beyond. A software development process or life cycle is a structure imposed on the development of a software product. There are several models for such processes, each describing approaches to a variety of tasks or activities that take place during the process.
Software Engineering processes are composed of many different activities, notably the following:
A decades-long goal has been to find repeatable, predictable processes or methodologies that improve productivity and quality. Without project management, software projects can easily be delivered late or over budget. With large numbers of software projects not meeting their expectations in terms of functionality, cost, or delivery schedule, effective project management is proving difficult.
The best-known and oldest process is the waterfall model, where developers follow these steps in order. The waterfall model is a sequential design process, often used in software development processes, in which progress is seen as flowing steadily downwards (like a waterfall) through the phases of Conception, Initiation, Analysis, Design, Construction, Testing, Production/Implementation, and Maintenance. The waterfall development model originates in the manufacturing and construction industries; highly structured physical environments in which after-the-fact changes are prohibitively costly, if not impossible. Since no formal software development methodologies existed at the time, this hardware-oriented model was simply adapted for software development.