CSC/ECE 517 Fall 2007/wiki3 10 10: Difference between revisions
Line 75: | Line 75: | ||
The problem may arise some times when the organizations are driven to achieve a maturity level only for its marketing value, process improvement goals are not set realistically, only some of the projects participate in the improvement effort & some of the projects get appraised, Insufficient resources (e.g., training, QA, metrics, consultants), Management doesn’t enforce the process hence benefits are not realized. | The problem may arise some times when the organizations are driven to achieve a maturity level only for its marketing value, process improvement goals are not set realistically, only some of the projects participate in the improvement effort & some of the projects get appraised, Insufficient resources (e.g., training, QA, metrics, consultants), Management doesn’t enforce the process hence benefits are not realized. | ||
The main problem of the waterfall model is the inflexible nature of the division of a project into separate stages, so that commitments are made early on, and it is difficult to react to changes in requirements. Iterations are expensive. This means that the waterfall model is likely to be unsuitable if requirements are not well understood or are likely to change radically in the course of the project. The problem with waterfall model is the dogmatic requirement of committing to one phase before proceeding to the next. Consequently, there was a strong shift to Iterative incremental development which later evolved into the more elaborate Rational Unified Process (RUP). This shift away from - big upfront design - relied on object-oriented (OO) analysis and design - has shifted the way in which software was modularized, changed. | |||
== Predictive methods == | == Predictive methods == |
Revision as of 19:23, 19 November 2007
The Agile debate. Perhaps the most prominent controversy in o-o design today is whether it is possible to do a robust design with as little advance planning as agile methodologies recommend. Research this issue, on the Web and in the ACM DL, and report (fairly) on the major arguments of both sides, and on the evidence for both positions.
Introduction
About every ten years give or take five, the software community redefines “the problem” by shifting its focus from product issues to process issues. Thus, we have embraced structured programming languages (product) followed by structured analysis methods (process) followed by data encapsulation (product) followed by the current emphasis on the Software Engineering Institutes Software Development Capability Maturity Model (process) followed by object-oriented methods, followed by agile software development.
Discipline vs Agility
No doubt the ideal system, if it were attainable, would be a code at once so flexible and minute, as to supply in advance for every conceivable situation a just and fitting rule. But life is too complex to bring the attainment of this idea within the compass of human power.
Discipline is the foundation for any successful endeavor. Athletes train, musicians practice, craftsmen perfect techniques, and engineers apply processes. Without these basic skills there may be an occasional success using natural talent, but professional consistency and long term prospects are limited. The strength and comfort which come from discipline support the endeavor when things are difficult, when the body or mind is under the weather, or when something new or unexpected arises and a response is required. Discipline creates well-organized memories, history, and experience.
Agility is the counterpart of discipline. Where discipline ingrains and strengthens, agility releases and invents. It allows the athlete to make the unexpected play, musicians to improvise and ornament, craftsmen to evolve their style, and engineers to adjust to changing technology and needs. Agility applies memory and history to adjust to new environments, react and adapt, take advantage of unexpected opportunities, and update the experience base for the future.
Agile Software development
Agile software development in general is characterized by the following attributes: incremental, cooperative, straightforward, and adaptive. Incremental refers to small software releases, with rapid development cycles. Cooperative refers to a close customer and developer interaction. Straightforward implies that the method itself is easy to learn and to modify and that it is sufficiently documented. Adaptive refers to the ability to make and react to last moment changes.
Menifesto
Value - Individuals and interactions over processes and tools, Working software over comprehensive documentation, Customer collaboration over contract negotiation and Responding to change over following a plan.
Principles
- Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
- Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
- Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
- Business people and developers must work together daily throughout the project.
- Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
- The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
- Working software is the primary measure of progress.
- Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
- Continuous attention to technical excellence and good design enhances agility.
- Simplicity--the art of maximizing the amount of work not done--is essential.
- The best architectures, requirements, and designs emerge from self-organizing teams.
- At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
Comparison
Adaptive methods
Adaptive software development It encourages incremental and iterative development, with constant prototyping. It provides a framework with enough guidance to prevent projects from falling into chaos, but not too much, which could suppress emergence and creativity.
Agile Modeling encourages developers to produce sufficiently advanced models to support acute design needs and documentation purposes. The aim is to keep the amount of models and documentation as low as possible. Cultural issues are addressed by depicting ways to encourage communication, and to organize team structures and ways of working.
The Crystal family of methodologies includes selection of the most suitable method for given individual project. It includes the principles for tailoring these methods to fit the varying circumstances of different projects. Each member of the Crystal family is marked with a color indicating the 'heaviness' of the method. Crystal suggests choosing the appropriate-colored method for a project based on its size and criticality. Larger projects are likely to ask for more coordination and heavier methods than smaller ones.
DSDM -Dynamic systems development method: The fundamental idea behind DSDM is that instead of fixing the amount of functionality in a product, and then adjusting time and resources to reach that fimctionality, it is preferred to fix time and resources, and then adjust the amount of functionality accordingly.
Extreme programming (XP) is a collection of well-known software engineering practices. XP aims at enabling successful software development despite vague or constantly changing software requirements. The novelty of XP is based on the way the individual practices are collected and lined up to function with each other. Some of the main characteristics of XP are short iterations with small releases and rapid feedback, close customer participation, constant communication and coordination, continuous refactoring, continuous integration and testing, collective code ownership, and pair programming.
Feature-driven development is a process-oriented software development method for developing business critical systems. The FDD approach focuses on the design and building phases. The FDD approach embodies iterative development with the practices believed to be effective in industry. It emphasizes quality aspects throughout the process and includes frequent and tangible deliveries, along with accurate monitoring of the progress of the project.
Pragmatic programming introduces a set of programming "best practices". The "method" itself is a collection of short tips that focus on day-to-day problems. These practices take a pragmatic perspective and place focus on incremental, iterative development, rigorous testing, and user-centered design.
Scrum approach has been developed for managing the software development process in a volatile environment. It is an empirical approach based on flexibility, adaptability and productivity. Serum leaves open for the developers to choose the specific software development techniques,methods, and practices for the implementation process. It involves frequent management activities aiming at consistently identifying any deficiencies or impediments in the development process as well as the in the practices that are used.
Criteria for evaluation
- Which stages of the software development life-cycle does the method cover
- Does the method support project management activities
- Does the method mainly rely on abstract principles or does it provide concrete guidance
- Is the method argued to fit per se in all agile development situations
- Does the method have empirical support for its claims
Benefits
The main benefits typically seen are:
- Improved predictability of project budgets and schedules
- Improved management awareness of problems
- Reduced re-work, which improves predictability, cost, and schedule
- Greater productivity & higher quality
- Increased customer satisfaction
Limitations
The problem may arise some times when the organizations are driven to achieve a maturity level only for its marketing value, process improvement goals are not set realistically, only some of the projects participate in the improvement effort & some of the projects get appraised, Insufficient resources (e.g., training, QA, metrics, consultants), Management doesn’t enforce the process hence benefits are not realized.
The main problem of the waterfall model is the inflexible nature of the division of a project into separate stages, so that commitments are made early on, and it is difficult to react to changes in requirements. Iterations are expensive. This means that the waterfall model is likely to be unsuitable if requirements are not well understood or are likely to change radically in the course of the project. The problem with waterfall model is the dogmatic requirement of committing to one phase before proceeding to the next. Consequently, there was a strong shift to Iterative incremental development which later evolved into the more elaborate Rational Unified Process (RUP). This shift away from - big upfront design - relied on object-oriented (OO) analysis and design - has shifted the way in which software was modularized, changed.
Predictive methods
The waterfall model is still in common use. The waterfall model is the most predictive of the methodologies, stepping through requirements capture, analysis, design, coding, and testing in a strict, pre-planned sequence. Progress is generally measured in terms of deliverable artifacts - requirement specifications, design documents, test plans, code reviews etc.
Capability Maturity Model Integration (CMMI) is a process improvement approach that provides organizations with the essential elements of effective processes. It can be used to guide process improvement across a project, a division, or an entire organization. CMMI helps integrate traditionally separate organizational functions, set process improvement goals and priorities, provide guidance for quality processes, and provide a point of reference for appraising current processes. Some of the benefits and business reasons for implementing process improvement are:
- The quality of a system is highly influenced by the quality of the process used to acquire, develop, and maintain it.
- Process improvement increases product and service quality as organizations apply it to achieve their business objectives.
- Process improvement objectives are aligned with business objectives.
RUP - The software life-cycle is broken into cycles, each cycle working on a new generation of the product. The Rational Unified Process divides one development cycle in four consecutive phases Inception phase: establish the business case for the system and delimit the project scope. Elaboration phase: analyze the problem domain, establish a sound architectural foundation, develop the project plan, and eliminate the highest risk elements of the project. Construction phase: All the components and application features are developed and integrated into the product, and all features are thoroughly tested. Transition phase: transition the software product to the user community.
Limitations
On the other hand, Agile criticisms include - lack of structure and necessary documentation, only works with senior-level developers, incorporates insufficient software design, requires too much cultural change to adopt, can lead to more difficult contractual negotiations. Agile methods did not provide true support for project management, and abstract principles appeared to dominate the current method literature and developers' minds. While universal solutions have a strong support in the respective literature, empirical evidence is currently very limited. The emerging new agile methods need to clarify their range of applicability and explain the interfaces to the software development life-cycle phases. The emphasis should be placed on method specialization than generalization.