Agile Development and Extreme ProgrammingCredit where Credit is DueGoals for this lectureOutlineAgile Development (I)Agile Development (II)Agile Development (III)Deliver Early and Often to Satisfy CustomerWelcome Changing RequirementsFace to Face Communication is BestMeasure Progress against Working SoftwareSimplicity is EssentialThe Other SevenSlide 14Extreme ProgrammingXP PracticesCustomer Team MemberUser Stories (I)User Stories (II)Short Cycles (I)Short Cycles (II)Acceptance TestsPair ProgrammingTest-Driven DevelopmentCollective OwnershipContinuous IntegrationSustainable PaceOpen WorkspaceThe Planning GameSimple DesignRefactoringMetaphor (I)Metaphor (II)Metaphor (III)Benefits of XPCriticisms of XPSlide 37Agile Methods: Perspective on DesignBad DesignGood Design PrinciplesSingle Responsibility PrincipleOpen-Closed PrincipleLiskov Substitution PrincipleExample (I)Example (II)Example (III)Example (IV)Dependency-Inversion PrincipleWhy “inversion”?Solution (I)Solution (II)Inversion of OwnershipDepend on AbstractionInterface Segregation PrincipleSlide 55Slide 56Slide 57Slide 58SummaryComing Up NextAgile Development and Extreme ProgrammingCSCI 5828: Foundations of Software EngineeringLecture 24Kenneth M. AndersonApril 12, 2007 © University of Colorado, 2007 2Credit where Credit is DueThe material for this lecture is based on content from “Agile Software Development: Principles, Patterns, and Practices” by Robert C. MartinAs such, some of this material is copyright © Prentice Hall, 2003April 12, 2007 © University of Colorado, 2007 3Goals for this lecture(Very) Briefly introduce the concepts of Agile Design and Extreme ProgrammingAgile Design is a design frameworkExtreme Programming is one way to “implement” agile designOther agile life cycles include SCRUM, Crystal, feature-driven development, and adaptive software developmentSee http://www.agilealliance.org/ for pointersApril 12, 2007 © University of Colorado, 2007 4OutlineBackground on Agile MethodsExtreme ProgrammingAgile Perspective on Software DesignApril 12, 2007 © University of Colorado, 2007 5Agile Development (I)Agile development is a response to the problems of traditional “heavyweight” software development processestoo many artifactstoo much documentationinflexible planslate, over budget, and buggy softwareApril 12, 2007 © University of Colorado, 2007 6Agile Development (II)A manifesto (from the Agile Alliance)“We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to valueindividuals and interactions over processes and toolsworking software over comprehensive documentationcustomer collaboration over contract negotiationresponding to change over following a planThat is, while there is value in the items on the right, we value the items on the left moreApril 12, 2007 © University of Colorado, 2007 7Agile Development (III)From this statement of values, agile development has identified twelve principles that distinguish agile practices from traditional software life cyclesLets look at five of themDeliver Early and Often to Satisfy CustomerWelcome Changing RequirementsFace to Face Communication is BestMeasure Progress against Working SoftwareSimplicity is EssentialApril 12, 2007 © University of Colorado, 2007 8Deliver Early and Often to Satisfy CustomerMIT Sloan Management Review published an analysis of software development practices in 2001Strong correlation between quality of software system and the early delivery of a partially functioning systemthe less functional the initial delivery the higher the quality of the final delivery!Strong correlation between final quality of software system and frequent deliveries of increasing functionalitythe more frequent the deliveries, the higher the final quality!Customers may choose to put initial/intermediate systems into production use; or they may simply review functionality and provide feedbackApril 12, 2007 © University of Colorado, 2007 9Welcome Changing RequirementsWelcome change, even late in the project!Statement of AttitudeDevelopers in agile projects are not afraid of change; changes are good since it means our understanding of the target domain has increasedPlus, agile development practices (such as refactoring) produce systems that are flexible and thus easy to changeApril 12, 2007 © University of Colorado, 2007 10Face to Face Communication is BestIn an agile project, people talk to each other!The primary mode of communication is conversationthere is no attempt to capture all project information in writingartifacts are still created but only if there is an immediate and significant need that they satisfythey may be discarded, after the need has passedApril 12, 2007 © University of Colorado, 2007 11Measure Progress against Working SoftwareAgile projects measure progress by the amount of software that is currently meeting customer needsThey are 30% done when 30% of required functionality is working AND deployedProgress is not measured in terms of phases or creating documentsApril 12, 2007 © University of Colorado, 2007 12Simplicity is EssentialThis refers to the art of maximizing the amount of work NOT doneAgile projects always take the simplest path consistent with their current goalsThey do not try to anticipate tomorrow’s problems; they only solve today’s problemsHigh-quality work today should provide a simple and flexible system that will be easy to change tomorrow if the need arisesApril 12, 2007 © University of Colorado, 2007 13The Other SevenThe other seven principles areDeliver working software frequentlyStakeholders and developers work together dailyBuild projects around motivated individualsAgile processes promote sustainable development Continuous attention to technical excellence and good design enhances agilityAgile team members work on all aspects of the projectAt regular intervals, the team reflects on how to become more effectiveApril 12, 2007 © University of Colorado, 2007 14OutlineBackground on Agile MethodsExtreme ProgrammingAgile Perspective on Software DesignApril 12, 2007 © University of Colorado, 2007 15Extreme ProgrammingExtreme Programming (XP) takes commonsense software engineering principles and practices to extreme levelsFor instance“Testing is
View Full Document