Columbia, Maryland - Summer 2011 Introduction to Agile Principles, Practices, and Processes Steve Bohlen Senior Software Engineer SpringSource/VMware.

Slides:



Advertisements
Similar presentations
Iteration Planning.
Advertisements

Extreme Programming Alexander Kanavin Lappeenranta University of Technology.
St Louis Day of.NET 2011 Refactoring to a SOLID Foundation Steve Bohlen Senior Software Engineer SpringSource/VMware Blog:
AgileMan Consulting So what the heck is Agile? It came about as a response to the high failure rate of software projects (> 60%), where failure means late,
Taking a Waterfall Project Agile REF: Paul Geberth GCSS-J Project Manager Establishment of an Agile Project.
Copyright  2002, Medical Present Value, Inc. All rights reserved. Copyright © 2010 Texas Education Agency. All rights reserved. TEA confidential and proprietary.
Agile Architecture Prabhu Venkatesan for COMP-684.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 17 Slide 1 Rapid software development.
Alternate Software Development Methodologies
Intro to Scrum. What is Scrum? An answer to traditional “fixed cost / strict requirements” contracts which had very high rates of failure Recognizes the.
Non-Coding Activities a Development Team Needs a.k.a ”I don’t code, am I no longer useful?” Maaret Pyhäjärvi| | Twitter: maaretp Test Granlund.
St Louis Day of.NET 2011 Taming Dependency Chaos with Inversion of Control Containers Steve Bohlen Senior Software Engineer SpringSource/VMware
Agile development By Sam Chamberlain. First a bit of history..
Roadmap to Continuous Integration Testing and Benefits Gowri Selka, Walgreens Natalie Koltun, Walgreens May 20th, 2014 ©2013 Walgreen Co. All rights reserved.
Extreme Programming Team Members Gowri Devi Yalamanchi Sandhya Ravi.
EXtreme Programming Quick Introduction Daniel Arraes Pereira Eduardo Lourenço Apolinário Ricardo de Oliveira Cavalcanti.
Computer Engineering 203 R Smith Agile Development 1/ Agile Methods What are Agile Methods? – Extreme Programming is the best known example – SCRUM.
Kansas City Developer Conference 2011 Unit Testing Patterns and Anti-Patterns Steve Bohlen Blog:
COMP 350: Object Oriented Analysis and Design Lecture 2
Xtreme Programming. Software Life Cycle The activities that take place between the time software program is first conceived and the time it is finally.
St Louis Day of.NET 2011 Unit Testing Patterns and Anti-Patterns Steve Bohlen Senior Software Engineer SpringSource/VMware Blog:
Introduction to Agile Methodologies and Concepts Roy Osherove Principal, Team Agile Blog : ISerializable.com.
Introduction to Agile.
By John Boal  Continuous Integration [CI] ◦ Automating the build process ◦ Build the entire system each time any new.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 17 Slide 1 Extreme Programming.
Chapter 3 – Agile Software Development 1Chapter 3 Agile software development.
University of Palestine software engineering department Testing of Software Systems Fundamentals of testing instructor: Tasneem Darwish.
Software Development Landscape
Agile Software Development Brian Link
IS2210: Systems Analysis and Systems Design and Change Twitter:
Craig Berntson
Current Trends in Systems Develpment
Agile and XP Development Dan Fleck 2008 Dan Fleck 2008.
資工 4A 陳怡秀 Microsoft Visual Studio’s Journey to Continuous Delivery.
CS 360 Lecture 3.  The software process is a structured set of activities required to develop a software system.  Fundamental Assumption:  Good software.
Extreme/Agile Programming Prabhaker Mateti. ACK These slides are collected from many authors along with a few of mine. Many thanks to all these authors.
Object-oriented Analysis and Design Stages in a Software Project Requirements Writing Analysis Design Implementation System Integration and Testing Maintenance.
Agile Concepts - II “Agile” Estimating & Planning Nupul Kukreja 5 th November, 2014.
Rapid software development 1. Topics covered Agile methods Extreme programming Rapid application development Software prototyping 2.
Extreme Programming (XP). Agile Software Development Paradigm Values individuals and interactions over processes and tools. Values working software over.
From Quality Control to Quality Assurance…and Beyond Alan Page Microsoft.
AP-1 5. Project Management. AP-2 Software Failure Software fails at a significant rate What is failure? Not delivering it on time is an estimation failure.
CS3100 Software Project Management Agile Approaches.
AP-1 4. Agile Processes. AP-2 Agile Processes Focus on creating a working system Different attitude on measuring progress XP Scrum.
WATERFALL DEVELOPMENT MODEL. Waterfall model is LINEAR development lifecycle. This means each phase must be completed before moving onto the next!!! WHAT.
Virtually Agile Astro Sabre (Matt Ganis) IBM, Senior Technical Staff Member Hawthorne, NY - September 20, 2007.
Agile Metrics It’s Not All That Complicated. © 2011 VersionOne 2 Welcome – About your Trainer, Katia Sullivan VersionOne Product Trainer and Agile Coach.
Requirements Engineering Requirements Engineering in Agile Methods Lecture-28.
Extreme Programming. Extreme Programming (XP) Formulated in 1999 by Kent Beck, Ward Cunningham and Ron Jeffries Agile software development methodology.
Stephen Forte Chief Strategy Officer Telerik Session Code: DEV317.
Agenda: Overview of Agile testing Difference between Agile and traditional Methodology Agile Development Methodologies Extreme Programming Test Driven.
10 key principles of agile software development
Software Development Process CS 360 Lecture 3. Software Process The software process is a structured set of activities required to develop a software.
Agile Development Chapter 10 - part 2. Agile Philosophy  A guiding philosophy and set of guidelines for : developing information systems in an unknown,
CS223: Software Engineering Lecture 18: The XP. Recap Introduction to Agile Methodology Customer centric approach Issues of Agile methodology Where to.
AGILE PROJECT MANAGEMENT WITH TEAM FOUNDATION SERVER 2010 Brian Keller Microsoft.
Extreme programming (XP) Advanced Software Engineering Dr Nuha El-Khalili.
Testing under the Agile Method CSCI 521 Software Project Management based on the book Testing Extreme Programming by Lisa Crispin and Tip House.
Software Development. The Software Life Cycle Encompasses all activities from initial analysis until obsolescence Analysis of problem or request Analysis.
Chapter 3 Agile software development 1 Chapter 3 – Agile Software Development.
Agile Project Management and the yin & yang of
COMP 350: Object Oriented Analysis and Design Lecture 2
Teaching slides Chapter 1.
Introducing ISTQB Agile Foundation Extending the ISTQB Program’s Support Further Presented by Rex Black, CTAL Copyright © 2014 ASTQB 1.
Introduction to Agile Blue Ocean Workshops.
Extreme Programming.
Adapting Agile in Pharmaceutical Industries
Jamie Cool Program Manager Microsoft
Presentation transcript:

Columbia, Maryland - Summer 2011 Introduction to Agile Principles, Practices, and Processes Steve Bohlen Senior Software Engineer SpringSource/VMware

Columbia, Maryland - Summer 2011 Do I suck? Let me (and the world) know!

Columbia, Maryland - Summer 2011 Who am I? …and why should you care? Steve Bohlen I Read Books + Write Software vs. “Read Software + Write Books” Blog, Screencast, Speak, Share, Learn

Columbia, Maryland - Summer 2011 Steve Bohlen Nearly 20 years developing software LISP, Delphi, C/C++, VB, VB.NET, C# Senior Engineer Springsource/VMware Co-Founder, NYC Alt.Net User Group Co-Organizer, NYC DDD User Group Contributor: various OSS projects NHibernate NDbUnit Spring.NET blog:

Columbia, Maryland - Summer 2011 RAD Controls for ASP.NET AJAX RAD Controls for Silverlight RAD Controls for Windows Phone RAD Controls for Winforms RAD Controls for WPF Telerik Reporting Telerik OpenAccess ORM Telerik JustCode Telerik JustMock Telerik Extensions for ASP.NET MVC Test Studio Express Telerik TeamPulse Telerik Test Studio Sitefinity CMS Telerik JustDecompile C#/VB.NET Converter ASPX to Razor Converter

Columbia, Maryland - Summer 2011

Agenda What is Agile (and why Should I Care)? Estimation in the Age of Agile You Test, I Test, we all Test Continuous Integration as Transparency Tool

Columbia, Maryland - Summer 2011 What is Agile (and Why)?

Columbia, Maryland - Summer 2011 “Courage is the power to let go of the familiar.” -Raymond Lindquist

Columbia, Maryland - Summer 2011 The Agile Manifesto 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 That is, while there is value in the items on the right, we value the items on the left more.

Columbia, Maryland - Summer 2011 Thanks for Coming Out Tonight Don’t forget to complete an evaluation on your way out the door! (kidding!)

Columbia, Maryland - Summer 2011 Iteration 1 Iteration 2 Iteration 3 Iteration 4 Iteration 5 Traditional Building of an Application Database Data Access Layer Business Logic Layer User Interface Layer (whatever) BV = 0% BV = 100% 0% VALUE

Columbia, Maryland - Summer 2011 Iteration 2Iteration 3Iteration 4Iteration 5Iteration 1 Database Data Access Layer Business Logic Layer UI (whatever) BV = 20% Database Data Access Layer Business Logic Layer UI (whatever) BV = 40% Database Data Access Layer Business Logic Layer UI (whatever) BV = 60% Database Data Access Layer Business Logic Layer UI (whatever) BV = 80% Database Data Access Layer Business Logic Layer UI (whatever) BV = 100% 60% VALUE Agile Building of an Application

Columbia, Maryland - Summer 2011 Business Value of Work Executed Over Time Another way to Visualize this Relationship

Columbia, Maryland - Summer 2011 Traditional Application Development Horizontal Layers of Functionality Build from the Ground Up Lower Layers ‘Baked’ Expensive to Change Later No Penalty for Tight- Coupling

Columbia, Maryland - Summer 2011 Much Work Remains to Be Done Before We Can Announce Our Total Failure to Make Any Progress Traditional Application Development

Columbia, Maryland - Summer 2011 Complexity Traditional Application Development

Columbia, Maryland - Summer 2011 Business Value Traditional Application Development

Columbia, Maryland - Summer 2011 Traditional Component Stability during Project Lifecycle Percent Stability over the Life of the Project (100% = totally stable component) Done This model is an unattainable hypothetical that isn’t borne out by experience

Columbia, Maryland - Summer 2011 Traditional Component Stability during Project Lifecycle Percent Stability over the Life of the Project (100% = totally stable component) Done Something always happens here …or here… …or here! The Point: This model is an unattainable hypothetical that isn’t borne out by experience The Point: This model is an unattainable hypothetical that isn’t borne out by experience

Columbia, Maryland - Summer 2011 Agile Application Development Vertical Slices of Functionality

Columbia, Maryland - Summer 2011 Agile Application Development Penalty for Tight Coupling

Columbia, Maryland - Summer 2011 Agile Application Development No BDUF Required

Columbia, Maryland - Summer 2011 Agile Application Development

Columbia, Maryland - Summer 2011 Agile Component Stability during Project Lifecycle Percent Stability over the Life of the Project (100% = totally stable component) Done Everything maintains a similar level of stability until the end of the project Nothing is inviolate for change Solution can adapt to changing conditions as needed

Columbia, Maryland - Summer 2011 Agile vs. Traditional Methodologies Chaos is BAD!

Columbia, Maryland - Summer 2011 Agile vs. Traditional Methodologies Cowboy Coders!

Columbia, Maryland - Summer 2011 Agile vs. Traditional Methodologies Tools to Manage Chaos

Columbia, Maryland - Summer 2011 Agile vs. Traditional Methodologies Perfect Scope

Columbia, Maryland - Summer 2011 Agile vs. Traditional Methodologies Building the Thing Right…

Columbia, Maryland - Summer 2011 Agile vs. Traditional Methodologies …Building the Right Thing! Building the Thing Right…

Columbia, Maryland - Summer 2011 Why the Focus on Tests? Iteration 5Iteration 1 Database Data Access Layer Business Logic Layer UI (whatever) BV = 20% Database Data Access Layer Business Logic Layer UI (whatever) BV = 100% High rate of Change to all components always (until done!) High rate of Change to all components always (until done!)

Columbia, Maryland - Summer 2011 Surviving the Chaos: Feedback Loops

Columbia, Maryland - Summer 2011 Feedback Loops: Examples Unit Tests – Rapid feedback on the impact of my own changes If manual testing is req’d to validate every change, then the cost of change becomes too high to consider making it Continuous Integration – Rapid feedback on the impact of everyone else’s changes Duration between breaking changes and awareness of issue is zero! Iterations/Sprints/Intervals/Whatever – Stakeholder feedback on the impact of changes Confirm/Verify/Validate direction of solution

Columbia, Maryland - Summer 2011 Different Solutions to The Same Problem: Change Traditional Software Development Approach – Assumes change is avoidable – Tries to manage change by sufficient pre-planning and design to avoid change altogether BDUF approach – Treats the process of constructing software as if it’s a building construction project Wrong metaphor Agile Software Development Approach – Assumes change is inevitable and unavoidable – Assumes its impossible (or at least impractical) to attempt to plan-around or design-around change – Tries to manage change by ensuring that the software remains flexible enough to respond to the change – Ensures that sufficient tooling, process, and methods are in place to allow response to change within the context of an incredibly tight feedback loop

Columbia, Maryland - Summer 2011 Software Development

Columbia, Maryland - Summer 2011 Estimation During our Journey of Discovery

Columbia, Maryland - Summer 2011 Estimation Wikipedia: Estimation is the calculated approximation of a result which is usable even if input data may be incomplete or uncertain. Problem is that estimates become a unbreakable schedule, where any deviation is considered bad

Columbia, Maryland - Summer 2011 Problem #1 with Estimates Estimate for our project: – 1 month for design and architecture – 4 months for development – 1 month for testing Scenario: – Your first estimate is wrong by 1 week (design) – What do you do???

Columbia, Maryland - Summer 2011 The Estimation Problem When you come up with a project idea, your first estimate is off by +/ 4x – Not enough details are known Traditionally too much time is spent on building a specification which is not complete – Again, not enough details are known As time progresses, more details emerge about the system and its details – The cone of uncertainty

Columbia, Maryland - Summer 2011 Cone of Uncertainty

Columbia, Maryland - Summer 2011 Agile Estimation Wikipedia: Estimation is the calculated approximation of a result which is usable even if input data may be incomplete or uncertain. – Problem is that estimates become a unbreakable schedule, where any deviation is considered bad Agile Estimation throws this logic away and always re-estimates a project after each iteration – Different value system: deviations are not deviations, they are more accurate estimations – Uses the cone of uncertainty to your advantage

Columbia, Maryland - Summer 2011 How to Estimate User Stories Story Points Product Backlog Velocity Re-estimation

Columbia, Maryland - Summer 2011 User Stories Users break down the functionality into “User Stories” User Stories are kept small User Stories include acceptance criteria Mike Cohn suggests: – As a (role) I want (something) so that (benefit).

Columbia, Maryland - Summer 2011 User Story Modeling Narrative: (Who) wants (what) so that (why) A story is a conversation starter, and gets more detailed over time

Columbia, Maryland - Summer 2011 User Story Modeling GOOD: Billing wants to see a summary page of all unpaid accounts, so that they can collect payments. BAD: Users want rounded corners on the search button. Our company wants a new website to increase sales. Good stories satisfy INVEST: – Independent – Negotiable – Valuable – Estimable – Small – Testable

Columbia, Maryland - Summer 2011 Story Points Break down user stories to units of relative size – So you can compare features – Alternative to time Story Points are not a measurement of duration, but rather a measurement of size/complexity Start with 1 standard feature and then other features are either 1x, 2x, etc larger or smaller than that relative feature in size/complexity

Columbia, Maryland - Summer 2011 Product Backlog All User Stories are put into a bucket This represents all of the tasks for the project (work items) Backlog items have estimates! – Remember this estimate is not time based, but point based Backlog can also contain the item priority

Columbia, Maryland - Summer 2011 Iteration 1 Developers will commit to ## story points Warning, they will usually over commit! After the end of Iteration 1, you have your first Velocity measurement

Columbia, Maryland - Summer 2011 Team Velocity Velocity is the number of story points per iteration completed You calculate velocity to predict how much work to commit to in an iteration Velocity only works if you estimate your story points consistency Over time you will know: team has a velocity of 32 story points per iteration – Over time this will self-correct – Over time you will be able to predict the project schedule (and release)

Columbia, Maryland - Summer 2011 Calculating Team Velocity Select a regular time period (iteration length) over which to measure Velocity Add up the story points of the stories 100% completed At the end of the iteration, the figure you have is your Velocity You can then use your Velocity as a basis for your future commitments

Columbia, Maryland - Summer 2011 Re-estimation As you complete more iterations, your velocity will change – Velocity changes because of minor inconsistencies in the story point estimates – Team velocity will typically stabilize between 3 and 6 iterations Re-estimation of the entire project happens after each sprint – New Velocity – New story points added and removed (completed) – Use the cone!

Columbia, Maryland - Summer 2011 Bites at the Apple

Columbia, Maryland - Summer 2011 Test-Driven Development A Feedback Loop for the State of My Code

Columbia, Maryland - Summer 2011 The Rationale for Unit Tests 99 little bugs in the code, 99 bugs in the code — We fixed a bug, compiled it again, 101 little bugs in the code ♫

Columbia, Maryland - Summer 2011 The Rationale for Unit Tests Debatable Software Engineering ‘Facts’ (Agile/XP/SCRUM/etc.) is better than (Agile/XP/SCRUM/etc.) Test-first (TDD?) is better than Test-After Non-Debatable Software Engineering Facts: There will always be bugs Complex programs have more bugs than simple programs Code is more maintainable when its divided into bite-sized chunks The cost of fixing a bug escalates non-linearly over time as the project progresses

Columbia, Maryland - Summer 2011 ‘Code Complete’ Defect Cost Graph

Columbia, Maryland - Summer 2011 Allocation of Developer Effort

Columbia, Maryland - Summer 2011 What is Test-Driven Development? Testing while coding not before or after

Columbia, Maryland - Summer 2011 What is Test-Driven Development? Think “Test-Driven Design” or “Specification-Driven-Development” Consider your design from the perspective of the consumers of your methods, classes, etc. Outside-in design instead of Inside-Out design

Columbia, Maryland - Summer 2011 What is Test-Driven Development? “How-Do-I-Use-This-Driven-Development” For every line of code you write, ask yourself a simple (but powerful) question: “HOW WILL I TEST THAT?”

Columbia, Maryland - Summer 2011 What about… Costs Additional time spent on code that isn’t part of delivery.

Columbia, Maryland - Summer 2011 What about… Costs We are programmers, not testers! We should concentrate on developing features, not testing!

Columbia, Maryland - Summer 2011 What about… Benefits Every class and method immediately has at least TWO consumers: Your APP and your TEST!

Columbia, Maryland - Summer 2011 What about… Benefits Better-isolated code leads to easier to extend, enhance, replace, maintain (lifecycle costs)

Columbia, Maryland - Summer 2011 What about… Benefits Waiting until code is written to write the tests often means hard (impossible?) to test code!

Columbia, Maryland - Summer 2011 What about… Benefits Less likely to write code that you eventually don’t need Write nothing that you think you will need (YAGNI – You Ain’t Gonna Need It!)

Columbia, Maryland - Summer 2011 Of course you can't count on tests to find everything. As it's often been said: tests don't prove the absence of bugs. However perfection isn't the only point at which you get payback for a self-testing build. Imperfect tests, run frequently, are much better than perfect tests that are never written at all. - Martin Fowler

Continuous Integration A Feedback Loop for the State of my Whole Development Team

Columbia, Maryland - Summer 2011 Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly. --Martin Fowler

Benefits of Continuous Integration Broken build Failed tests Can’t deploy Shorten feedback loop Exercise whole build and deployment process Reduce risks Unit, integration, functional testing Code metrics Code conformance Provide confidence of quality

Columbia, Maryland - Summer 2011 Components Background process Web site Notification ( , system tray, RSS, etc.) CI Server Compile Deploy Run tests Build Scripts

Columbia, Maryland - Summer 2011 Manage Dependencies Consider adding 3 rd party tools to SCC Add 3 rd party libraries to SCC – Commit binaries so that you don’t need to build these every time. – Prefer a public release. Avoid custom changes. – Document clearly which version you use.

Columbia, Maryland - Summer 2011 Oops, Steve Broke the Build again! Build status must be visible Use the systray app for your CI server Consider adding the Build Dashboard to an “Information Radiator” Some have used ambient lights, lava lamps, or even songs to let the whole team know when a build breaks

Columbia, Maryland - Summer 2011 Notifications sSystem Tray utilities (CCTray, CCMenu, etc.)RSS feedText Message

Columbia, Maryland - Summer 2011 Notifications – Lava Lamps

Columbia, Maryland - Summer 2011 Notifications – iPhone app

Columbia, Maryland - Summer 2011 Getting Started with CI Compile-Only builds can work as “training wheels” for a team that is new to CI. Add metrics early so that you can measure your progress as you add automated testing. Add automated tests ASAP. Make a clear distinction between automated Unit Tests and Functional Tests. Automate deployment.

Columbia, Maryland - Summer 2011 Quality in Depth Compilation Unit Testing Functional/UI Testing Code Metrics Deployment

Columbia, Maryland - Summer 2011 Extending the Value of the Build NUnit, MbUnit, xUnit.NET, MSTest PartCover, NCover, OpenCover, Clover.NET NDepend, Structure101 Simian, FxCop StyleCop

Columbia, Maryland - Summer 2011 Wrap Up (I thought we’d never get here!)

Columbia, Maryland - Summer 2011 Software Development

Columbia, Maryland - Summer 2011

Introduction to Agile Principles, Practices, and Processes fini