Agile Development in .NET

54
AGILE DEVELOPMENT IN .NET Dan Hermes

description

The is from the book Agile Development in .NET by Dan Hermes. Most Agile methodologies used in .NET shops nationwide are variations of Scrum and Extreme Programming(XP). This booklet covers these tools and techniques: Test-driven Development (TDD), Behavior-driven Development (BDD), Continuous Integration (CI), and Refactoring to Patterns. The QuickNotes series covers relevant topics in software development to provide the reader with a swift overview of important trends, terms, and concepts. This book is available at Amazon.com.

Transcript of Agile Development in .NET

Page 1: Agile Development in .NET

AGILE DEVELOPMENT

IN .NET

Dan Hermes

Page 2: Agile Development in .NET

Waterfall

Page 3: Agile Development in .NET

Waterfall

Analysis

Design

Development

Deployment

Page 4: Agile Development in .NET

Waterfall

Why didn’t it work?

Page 5: Agile Development in .NET

CHANGE

Design changes New requirements Code rewrites Versioning test plans and docs Release Rescheduling

Page 6: Agile Development in .NET

Agile Manifesto

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan

Page 7: Agile Development in .NET

How do we…

Keep a team in sync at high speed? Keep up with testing? Implement super-fast releases? Keep the code from becoming a mess?

Page 8: Agile Development in .NET

XP – the Dominant Agile Approach Scrum Test-driven Development (TDD) Behavior-driven Development (BDD) Continuous Integration (CI) Refactoring to Design Patterns Code Reviews

Page 9: Agile Development in .NET

Scrum

Scrum Master Product Owner Product Backlog Sprint Planning Meeting Sprint Backlog Daily Scrum Meetings Sprint Review Meeting

Page 10: Agile Development in .NET

Scrum

Page 11: Agile Development in .NET

.NET

TFS Scrum TemplateVS 2012 Team Web AccessTeam Foundation ServicePowerpoint Storyboarding  

(VS  2012 Premium, Ultimate,Test Professional)

Code Review (VS 2012 Premium, Ultimate)

Page 12: Agile Development in .NET

TFS Templates Visual Studio Scrum 2.0+

Bugs + Product Backlog MSF for Agile Software Development v6.0+

bugs separate from Product Backlog resolve work items before closing them

Page 13: Agile Development in .NET

VS Team Explorer - Scrum

Page 14: Agile Development in .NET

Team Explorer – Work Items

Page 15: Agile Development in .NET

Sprint Backog

Page 16: Agile Development in .NET

Work Item

Page 17: Agile Development in .NET

Team Web Access

Page 18: Agile Development in .NET

Burndown Chart

Provision your project with SQL Server Reporting Services

Page 19: Agile Development in .NET

Team Foundation Service

Kanban boards

Page 20: Agile Development in .NET

TFS Licenses Limited

View My Work Items Standard

View My Work ItemsStandard FeaturesAgile Boards

FullView My Work ItemsStandard FeaturesAgile BoardsBacklog and Sprint Planning ToolsRequest and Manage Feedback

Page 21: Agile Development in .NET

Urban Turtle

Page 22: Agile Development in .NET

Eylean

Assignments

Kanban Board

Page 23: Agile Development in .NET

So what does all this mean?

Page 24: Agile Development in .NET
Page 25: Agile Development in .NET

Test-driven Development (TDD)

1. Write the Test

2. Break the Thing

3. Run the Tests

4. Fix All the Things

5. Run all the successful Tests

Page 26: Agile Development in .NET

Nunit Example

Page 27: Agile Development in .NET

TDD in .NET

Unit Test Template(in VS) VSTest.Console.exe

(replaces MSTest in VS 2012) MSTest ASP.NET MVC Framework

Page 28: Agile Development in .NET

Testing Frameworks

NUnit XUnit MBUnit

Page 29: Agile Development in .NET

Mocking

VS 2012 – MS Fakes – Stub and Shim Moq Rhino NMock

Page 30: Agile Development in .NET

TDD - What’s It Good For?

Highly effective for trivial code and code with few dependencies.  

Effectiveness decreases with complexity and dependencies in the code.  

Page 31: Agile Development in .NET

What else is important

when you move fast?

Page 32: Agile Development in .NET

Knowing Your Destination

Page 33: Agile Development in .NET

Behavior-driven Development (BDD) Move Fast Be Clear About Where You’re Going

Page 34: Agile Development in .NET

Given-When-Then

Given (preconditions)

When (event occurs)

Then (a testable outcome is achieved)

Page 35: Agile Development in .NET

Story: Buy Coffee

Given there is coffee left in the store and I have paid the cashier $5 plus tip.

When I stand in line in front of the Barista’s counter

Then I should be served a coffee

Page 36: Agile Development in .NET

BDD with .NET

SpecFlow Cuke4Nuke Cucumber with Ruby

Use BDD to create User Stories

Page 37: Agile Development in .NET

Continuous Integration (CI)

Image by Thoughtworks

Page 38: Agile Development in .NET

Folwer’s Words of Wisdom “My general rule of thumb is that every

developer should commit to the repository every day”

“Continuous Integration is all about communication, so you want to ensure that everyone can easily see the state of the system and the changes that have been made to it.”

“One of the most important things to communicate is the state of the mainline build. “

Page 39: Agile Development in .NET

CI in .NET

Team Foundation Server Cruisecontrol.NET TeamCity by JetBrains

Page 40: Agile Development in .NET

Coding, testing, and releasing at breakneck speed.

What could go wrong?

Page 41: Agile Development in .NET
Page 42: Agile Development in .NET

Refactoring to Patterns

Refactoring: Improving the Design of Existing Codeby Martin Folwer

Design Patterns: Elements of Reusable Object-Oriented Softwareby Gang of Four (GoF)

○ Erich Gamma○ Richard Helm○ Ralph Johnson○ John Vlissides

Page 43: Agile Development in .NET

Martin Fowler

“Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior.”

Page 44: Agile Development in .NET

Erich Gamma“Design patterns provide targets for refactorings.”

Page 45: Agile Development in .NET

Refactoring Tools

Refactoring in Visual Studio ReSharper by JetBrains (plug-in for VS)

Page 46: Agile Development in .NET
Page 47: Agile Development in .NET

ReSharper Refactorings Adjust Namespaces Change Signature (Parameters) Convert Abstract Class to Interface / Interface to Abstract Class Convert Anonymous to Named Type Convert Extension Method to Plain Static Convert Indexer (Default Property) to Method Convert Interface to Abstract Class Convert Method to Indexer (Default Property) Convert Method to Property Convert Property to Auto-Property Convert Property to Method(s) Convert Static to Extension Method Copy Type Encapsulate Field Extract Class Extract Class from Parameters Extract Interface

Page 48: Agile Development in .NET

ReSharper Refactorings Extract Method Extract Superclass Inline Field/Method/Variable Introduce Field/Parameter/Introduce Variable Make Method Non-Static/Non-Shared/Static/Shared Move Static Member Move String to Resource Move to Folder Move Type to Another File or Namespace/Outer Scope/Matching Files Move Members Up/Down Rename Replace Constructor with Factory Method Safe Delete Transform Out Parameters to Tuple Use Base Type where Possible

Page 49: Agile Development in .NET

Design Patterns

ASP.NET MVC Framework Model View ViewModel(MVVM)

Page 50: Agile Development in .NET

Agile as Coding Culture

Pair Programming (not popular) Code Reviews (very popular)

Page 51: Agile Development in .NET

Agile in .NET

Scrum Test-driven Development (TDD) Behavior-driven Development (BDD) Continuous Integration (CI) Refactoring to Design Patterns Code Reviews

Page 52: Agile Development in .NET

Sources http://agilemanifesto.org/ Extreme Programming Explained, Kent Beck Refactoring,Martin Fowler Design Patterns, GoF Refactoring to Patterns , Joshua Kerievsky Continuous Integration, Paul Duvall, Steve

Matyas, and Andrew Glover

Page 53: Agile Development in .NET

AGILE DEVELOPMENT

IN .NETDan Hermes

Lexicon Systems.NET Development and Consulting

Email: [email protected]: @lexiconsystemsPhone: (781)526-0738Blog: www.itshopkeeping.com

Page 54: Agile Development in .NET