A methodology is generally a guideline system for solving a problem, with specific components such as phases, tasks, methods, techniques and tools.
Software development methodologies include:
Agile Methodology is an incremental, repetitious means of managing projects; particularly in the field of software development. These iterations, or sprints, give project managers many opportunities to evaluate and change the project during its lifecycle as well as keeping the end user informed and involved in development.
The Agile Manifesto reads:
We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
While there is value in the items on the right, we value the items on the left more.
The Cleanroom software engineering process is a software development process intended to produce software with a certifiable level of reliability. The name Cleanroom was chosen to evoke the cleanrooms used in the electronics industry to prevent the introduction of defects during the fabrication of semiconductors.
The basic principles of the Cleanroom process are:
Software development based on formal methods
Cleanroom development makes use of the Box Structure Method to specify and design a software product. Verification that the design correctly implements the specification is performed through team review.
Incremental implementation under statistical quality control
Cleanroom development uses an iterative approach, in which the product is developed in increments that gradually increase the implemented functionality. The quality of each increment is measured against pre-established standards to verify that the development process is proceeding acceptably. A failure to meet quality standards results in the cessation of testing for the current increment, and a return to the design phase.
Statistically sound testing
Software testing in the Cleanroom process is carried out as a statistical experiment. Based on the formal specification, a representative subset of software input/output trajectories is selected and tested. This sample is then statistically analyzed to produce an estimate of the reliability of the software, and a level of confidence in that estimate.
Iterative and Incremental development is at the heart of a cyclic software development process developed in response to the weaknesses of the waterfall model. It starts with an initial planning and ends with deployment with the cyclic interactions in between.
Iterative and incremental development are essential parts of the Rational Unified Process, Extreme Programming and generally the various agile software development frameworks.
Lean software development is a translation of Lean manufacturing and Lean IT principles and practices to the software development domain. Adapted from the Toyota Production System, a pro-lean subculture is emerging from within the Agile community.
Lean development can be summarized by seven principles, very close in concept to lean manufacturing principles:
1) Eliminate waste
2) Amplify learning
3) Decide as late as possible
4) Deliver as fast as possible
5) Empower the team
6) Build integrity in
7) See the whole
Rapid application development (RAD) is a software development methodology that uses minimal planning in favor of rapid prototyping. The “planning” of software developed using RAD is interleaved with writing the software itself. The lack of extensive pre-planning generally allows software to be written much faster, and makes it easier to change requirements.
IBM Rational Unified Process® (RUP®) is a comprehensive process framework that provides industry-tested practices for software and systems delivery and implementation and for effective project management. It is one of many processes contained within the Rational Process Library, which offers best practices guidance suited to your particular development or project need. More information can be found at the Rational homepage.
In software engineering, Scrum is an iterative, incremental framework for project management often seen in agile software development.
Although the Scrum approach was originally suggested for managing product development projects, its use has focused on the management of software development projects, and it can be used to run software maintenance teams or as a general project/program management approach. Scrum is a process skeleton that contains sets of practices and predefined roles:
-the “ScrumMaster”, who maintains the processes (in lieu of a project manager)
-the “Product Owner”, who represents the stakeholders and the business
-the “Team”, a cross-functional group who do the actual analysis, design, implementation, testing, etc.
The spiral model is a software development process combining elements of both design and prototyping-in-stages, in an effort to combine advantages of top-down and bottom-up concepts. Also known as the spiral lifecycle model (or spiral development), it is a systems development method (SDM) used in information technology (IT). This model of development combines the features of the prototyping and the waterfall model. The spiral model is intended for large, expensive and complicated projects.
The spiral model combines the idea of iterative development (prototyping) with the systematic, controlled aspects of the waterfall model. It allows for incremental releases of the product, or incremental refinement through each time around the spiral. The spiral model also explicitly includes risk management within software development. Identifying major risks, both technical and managerial. Determining how to lessen the risk helps keep the software development process under control.
Test-driven development (TDD) is a software development process that relies on the repetition of a very short development cycle: first the developer writes a failing automated test case that defines a desired improvement or new function, then produces code to pass that test and finally refactors the new code to acceptable standards.
Test-driven development requires developers to create automated unit tests that define code requirements (immediately) before writing the code itself. The tests contain assertions that are either true or false. Passing the tests confirms correct behavior as developers evolve and refactor the code. Developers often use testing frameworks, such as xUnit, to create and automatically run sets of test cases.
The V-model represents a software development process (also applicable to hardware development) which may be considered an extension of the waterfall model. Instead of moving down in a linear way, the process steps are bent upwards after the coding phase, to form the typical V shape. The V-Model demonstrates the relationships between each phase of the development life cycle and its associated phase of testing. The horizontal and vertical axes represents time or project completeness (left-to-right) and level of abstraction (coarsest-grain abstraction uppermost), respectively.
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.
“Extreme Programming (XP)” is one of the several agile processes, it stresses more on customer satisfaction rather than project delivery deadlines. It empowers software developers to confidently respond to changing customer requirements, even late in the life cycle. As a type of agile software process, it aims at dividing the entire software development project into smaller parts, which helps in reducing the cost of change or modification.
Extreme Programming methodology takes its name from the idea that the beneficial elements of traditional software engineering practices are taken to “extreme” levels. This methodology is best suited for large size projects wherein the project requirements may change over a period of time.