Agile Development in .NET
-
Upload
danhermes -
Category
Technology
-
view
396 -
download
1
description
Transcript of Agile Development in .NET
AGILE DEVELOPMENT
IN .NET
Dan Hermes
Waterfall
Waterfall
Analysis
Design
Development
Deployment
Waterfall
Why didn’t it work?
CHANGE
Design changes New requirements Code rewrites Versioning test plans and docs Release Rescheduling
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
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?
XP – the Dominant Agile Approach Scrum Test-driven Development (TDD) Behavior-driven Development (BDD) Continuous Integration (CI) Refactoring to Design Patterns Code Reviews
Scrum
Scrum Master Product Owner Product Backlog Sprint Planning Meeting Sprint Backlog Daily Scrum Meetings Sprint Review Meeting
Scrum
.NET
TFS Scrum TemplateVS 2012 Team Web AccessTeam Foundation ServicePowerpoint Storyboarding
(VS 2012 Premium, Ultimate,Test Professional)
Code Review (VS 2012 Premium, Ultimate)
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
VS Team Explorer - Scrum
Team Explorer – Work Items
Sprint Backog
Work Item
Team Web Access
Burndown Chart
Provision your project with SQL Server Reporting Services
Team Foundation Service
Kanban boards
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
Urban Turtle
Eylean
Assignments
Kanban Board
So what does all this mean?
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
Nunit Example
TDD in .NET
Unit Test Template(in VS) VSTest.Console.exe
(replaces MSTest in VS 2012) MSTest ASP.NET MVC Framework
Testing Frameworks
NUnit XUnit MBUnit
Mocking
VS 2012 – MS Fakes – Stub and Shim Moq Rhino NMock
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.
What else is important
when you move fast?
Knowing Your Destination
Behavior-driven Development (BDD) Move Fast Be Clear About Where You’re Going
Given-When-Then
Given (preconditions)
When (event occurs)
Then (a testable outcome is achieved)
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
BDD with .NET
SpecFlow Cuke4Nuke Cucumber with Ruby
Use BDD to create User Stories
Continuous Integration (CI)
Image by Thoughtworks
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. “
CI in .NET
Team Foundation Server Cruisecontrol.NET TeamCity by JetBrains
Coding, testing, and releasing at breakneck speed.
What could go wrong?
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
Martin Fowler
“Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior.”
Erich Gamma“Design patterns provide targets for refactorings.”
Refactoring Tools
Refactoring in Visual Studio ReSharper by JetBrains (plug-in for VS)
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
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
Design Patterns
ASP.NET MVC Framework Model View ViewModel(MVVM)
Agile as Coding Culture
Pair Programming (not popular) Code Reviews (very popular)
Agile in .NET
Scrum Test-driven Development (TDD) Behavior-driven Development (BDD) Continuous Integration (CI) Refactoring to Design Patterns Code Reviews
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
AGILE DEVELOPMENT
IN .NETDan Hermes
Lexicon Systems.NET Development and Consulting
Email: [email protected]: @lexiconsystemsPhone: (781)526-0738Blog: www.itshopkeeping.com