Monday, August 2, 2010

Software Development Methodology

"A Software Development Methodology is the concept / best practices or guidelines for managers to streamline the process, instructing them how to plan, control, estimate, involving team members and quickly delivers quality software by minimizing risks, cost and failures."

A software / system development methodology in software engineering has various meanings to various audiences.
  • As a noun, a software development methodology is a framework that is used to structure, plan, and control the process of developing an information system.
    • Rational Unified Process: - since 1998
    • Agile Unified Process: since 2005
    • Integrated Unified Process: since 2007
  • As a verb, the software development methodology is an approach to be used by an organization or project team to apply the software development methodology framework
    • Waterfall Approach (linear): Waterfall approach is a sequential development approach, in which development is seen as flowing steadily downwards (like a waterfall) through the phases of requirement analysis, design, implementation, testing (validation), integration and maintenance.
    • Protyping Approach (iterative): Software prototyping is the development approach of activities during software development the creating of prototypes, i.e. incomplete versions of the software program being developed.
    • Incremental Approach (combination of linear and iterative): Various methods are acceptable for combining linear and iterative systems development methodology approaches, with the primary objective of each being to reduce inherent project risk by breaking a project into smaller segments and providing more ease-of-change during the development process.
    • Spiral Approach (combination of linear and iterative): The spiral model approach 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.
    • Rapid Application Development (RAD) Approach (Iterative): Rapid Application Development (RAD) is a software development methodology approach, which involves iterative development and the construction of prototypes.
    • Extreme Programming Approach:
  • Waterfall Approach: Basic Principle of Waterfall approach is:
    • Project is divided into sequential phases, with some overlap and spash back acceptable between phases.
    • Emphasis is on planning, time schedules, target dates, budgets and implementation of an entire system at one time.
    • Tight control is maintained over the life of the project through the use of extensive written documentation, as well as through formal reviews and approval/signoff by the user and information technology management occurring at the end of most phases before beginning the next phase.
  • Protyping Approach: Basic principles of the Prototyping Approach are:
    • Not a standalone, complete development methodology approach, but rather an approach to handling selected portions of a larger, more traditional development methodology (i.e. incremental, Spiral or Rapid Application Development (RAD)) approaches.
    • Attempts to reduce inherent project risk by breaking a project into smaller segments and providing more ease-of-change during the development process.
    • User is involved throughout the development process, which increases the likelihood of user acceptance of the final implementation.
    • Small-scale mock-ups of the system are developed following an iterative modification process until the prototype evolves to meet the user’s requirements.
    • While most prototypes are developed with the expectation that they will be discarded, it is possible in some cases to evolve from prototype to working system.
    • A basic understanding of the fundamental business problem is necessary to avoid solving the wrong problem.
    • Mainframes have a lot to do with this sort of thing.
  • Incremental Apprach: Basic principles of the incremental development approach are:
    • A series of mini-Waterfalls are performed, where all phases of the Waterfall development approach are completed for a small part of the systems, before proceeding to the next incremental, or
    • Overall requirements are defined before proceeding to evolutionary, mini-Waterfall development approaches of individual increments of the system, or
    • The initial software concept, requirements analysis, and design of architecture and system core are defined using the Waterfall approach, followed by iterative Prototyping approach, which culminates in installation of the final prototype (i.e., working system).
  • Spiral Approach - basic principles.
    • Focus is on risk assessment and on minimizing project risk by breaking a project into smaller segments and providing more ease-of-change during the development process, as well as providing the opportunity to evaluate risks and weigh consideration of project continuation throughout the life cycle.
    • Each cycle involves a progression through the same sequence of steps, for each portion of the product and for each of its levels of elaboration, from an overall concept-of-operation document down to the coding of each individual program.
    • Each trip around the spiral approach traverses four basic quadrants: 
      • determine objectives, 
      • alternatives, and constraints of the iteration; 
      • Evaluate alternatives; Identify and resolve risks; 
      • develop and verify deliverables from the iteration; 
      • Plan the next iteration.
    • Begin each cycle with an identification of stakeholders and their win conditions, and end each cycle with review and commitment.
  • Rapid Application Development (RAD) Approach – Basic Principles.
    • Key objective is for fast development and delivery of a high quality system at a relatively low investment cost.
    • Attempts to reduce inherent project risk by breaking a project into smaller segments and providing more ease-of-change during the development process.
    • Aims to produce high quality systems quickly, primarily through the use of iterative Prototyping (at any stage of development), active user involvement, and computerized development tools. These tools may include Graphical User Interface (GUI) builders, Computer Aided Software Engineering (CASE) tools, Database Management Systems (DBMS), fourth-generation programming languages, code generators, and object-oriented techniques.
    • Key emphasis is on fulfilling the business need, while technological or engineering excellence is of lesser importance.
    • Project control involves prioritizing development and defining delivery deadlines or “timeboxes”. If the project starts to slip, emphasis is on reducing requirements to fit the timebox, not in increasing the deadline.
    • Generally includes Joint Application Development (JAD), where users are intensely involved in system design, either through consensus building in structured workshops, or through electronically facilitated interaction.
    • Active user involvement is imperative.
    • Iteratively produces production software, as opposed to a throwaway prototype.
    • Produces documentation necessary to facilitate future development and maintenance.
    • Standard systems analysis and design techniques can be fitted into this framework.
  • Agile Unified Process (AUP): Agile describes a simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP. The AUP applies agile techniques including test driven development (TDD), Agile Modelling, agile change management and database refactoring to improve productivity.
Agile SCRUM

    • Unlike RUP, the AUP has only seven disciplines.
      • Model. Understand the business of the organization, the problem domain being addressed by the project, and identify a viable solution to address the problem domain.
      • Implementation. Transform model(s) into executable code and perform a basic level of testing, in particular unit testing.
      • Test. Perform an objective evaluation to ensure quality. This includes finding defects, validating that the system works as designed, and verifying that the requirements are met.
        Deployment. Plan for the delivery of the system and to execute the plan to make the system available to end users.
      • Configuration Management. Manage access to project artifacts. This includes not only tracking artifact versions over time but also controlling and managing changes to them.
      • Project Management. Direct the activities that takes place within the project. This includes managing risks, directing people (assigning tasks, tracking progress, etc.), and coordinating with people and systems outside the scope of the project to be sure that it is delivered on time and within budget.
      • Environment. Support the rest of the effort by ensuring that the proper process, guidance (standards and guidelines), and tools (hardware, software, etc.) are available for the team as needed.
    • Agile Philosphies: The Agile UP is based on the following philosophies:
      • Your staff knows what they're doing. People are not going to read detailed process documentation, but they will want some high-level guidance and/or training from time to time. The AUP product provides links to many of the details, if you are interested, but doesn't force them upon you.Simplicity. Everything is described concisely using a handful of pages, not thousands of them.
      • Agility. The Agile UP conforms to the values and principles of the agile software development and the Agile Alliance.
      • Focus on high-value activities. The focus is on the activities which actually count, not every possible thing that could happen to you on a project.
      • Tool independence. You can use any toolset that you want with the Agile UP. The recommendation is that you use the tools which are best suited for the job, which are often simple tools.
      • You'll want to tailor the AUP to meet your own needs.
Agile Software Development LifeCycle

    • Releases: The Agile Unified Process distinguishes between two types of iterations. A Development Release Iteration results in a deployment to the Quality Assurance and/or Demo area. A Production Release Iteration results in a deployment to the Production area. This is a significant refinement to the Rational Unified Process.

No comments:

Post a Comment