Padawan 2 Jedi - An Overview of Modern Development Practices (Austin Code Camp 2012)
Upcoming SlideShare
Loading in...5
×
 

Padawan 2 Jedi - An Overview of Modern Development Practices (Austin Code Camp 2012)

on

  • 1,695 views

This is the presentation I gave at Austin Code Camp 2012 on June 9, 2012. Abstract: "Are you wanting to become a better software developer but don't know where to start? Do the terms TDD, BDD, CI, ...

This is the presentation I gave at Austin Code Camp 2012 on June 9, 2012. Abstract: "Are you wanting to become a better software developer but don't know where to start? Do the terms TDD, BDD, CI, SOLID, Agile, etc. seem foreign to you? This 2 hour presentation will cover many of the software development principles, patterns & practices that every developer should know. The goal is to give you a broad overview of how modern developers work and to provide resources to help any aspiring developer get on the fast-track to becoming better at their craft.

Statistics

Views

Total Views
1,695
Views on SlideShare
1,688
Embed Views
7

Actions

Likes
0
Downloads
2
Comments
0

2 Embeds 7

http://speakerrate.com 6
http://www.linkedin.com 1

Accessibility

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • [twitter]Starting my presentation "Padawan to Jedi". Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
  • [twitter]Starting my presentation "Padawan to Jedi". Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
  • [twitter]Starting my presentation "Padawan to Jedi". Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
  • [twitter]Starting my presentation "Padawan to Jedi". Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
  • [twitter]Starting my presentation "Padawan to Jedi". Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
  • [twitter]Starting my presentation "Padawan to Jedi". Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
  • [twitter]Starting my presentation "Padawan to Jedi". Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
  • \n
  • \n
  • \n
  • Its passion that feeds your learning\n\n
  • [twitter]Use http://paper.li to read all the links tweeted throughout the day. Way faster than looking through the tweets.[/twitter]\nTips\nRead Blogs\nAttend\n Code Camps\n User Groups\n Conferences\nFollow the right people on twitter\n My list\n paper.li\nRead books\nListen.\n\n
  • [twitter]Use http://paper.li to read all the links tweeted throughout the day. Way faster than looking through the tweets.[/twitter]\nTips\nRead Blogs\nAttend\n Code Camps\n User Groups\n Conferences\nFollow the right people on twitter\n My list\n paper.li\nRead books\nListen.\n\n
  • [twitter]Use http://paper.li to read all the links tweeted throughout the day. Way faster than looking through the tweets.[/twitter]\nTips\nRead Blogs\nAttend\n Code Camps\n User Groups\n Conferences\nFollow the right people on twitter\n My list\n paper.li\nRead books\nListen.\n\n
  • [twitter]Use http://paper.li to read all the links tweeted throughout the day. Way faster than looking through the tweets.[/twitter]\nTips\nRead Blogs\nAttend\n Code Camps\n User Groups\n Conferences\nFollow the right people on twitter\n My list\n paper.li\nRead books\nListen.\n\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Links\nhttp://objectmentor.com/\nhttp://www.objectmentor.com/omSolutions/oops_what.html\nhttp://en.wikipedia.org/wiki/Object-oriented_design\nhttp://en.wikipedia.org/wiki/Object-oriented_programming\n\n
  • Notification Service Example (Email)\nEncapsulation\nSometimes called Information Hiding\nData and Methods kept together\nhttp://en.wikipedia.org/wiki/Information_hiding\n“The hiding of design decisions in a computer program that are most likely to change” - Wikipedia\n\n
  • Notification Service Example\nInheritance\nExtend/Override\nInterface\nDeferred implementation\nPolymorphism\nReplace an object of a class with an object of its subclasses\nAbstraction\n Code against an interface, not implementation\n Depend on abstractions, not concretions\n\n
  • Notification Service Example\nInheritance\nExtend/Override\nInterface\nDeferred implementation\nPolymorphism\nReplace an object of a class with an object of its subclasses\nAbstraction\n Code against an interface, not implementation\n Depend on abstractions, not concretions\n\n
  • Notification Service Example\nInheritance\nExtend/Override\nInterface\nDeferred implementation\nPolymorphism\nReplace an object of a class with an object of its subclasses\nAbstraction\n Code against an interface, not implementation\n Depend on abstractions, not concretions\n\n
  • Goals\nLow Coupling\n Unit tests promote low coupling. Highly coupled code is difficult to test.\n Links\n Coupling And Cohesion on c2.com\n http://c2.com/cgi/wiki?CouplingAndCohesion\n “The degree to which each program module relies on each one of the other modules” – Wikipedia\n http://en.wikipedia.org/wiki/Coupling_(computer_science)\nHigh Cohesion\n http://codebetter.com/blogs/jeremy.miller/pages/129542.aspx “A measure of how strongly-related and focused the various responsibilities of a software module are” - Wikipedia \n http://en.wikipedia.org/wiki/Cohesion_(computer_science)\nValue\nDon't have to understand the whole picture because it is broken down into decoupled pieces.\n Understanding one piece is enough to work on that piece\n\n
  • [twitter]Every developer should be able to communicate using basic UML: http://bit.ly/qimo8 http://ibm.co/9cUooz http://bit.ly/kKwys [/twitter]\nLinks\nhttp://en.wikipedia.org/wiki/Class_diagram\nhttp://www.ibm.com/developerworks/rational/library/769.html\nhttp://www.holub.com/goodies/uml/\n UML Reference Card\n\n
  • [twitter]Every developer should be able to communicate using basic UML: http://bit.ly/qimo8 http://ibm.co/9cUooz http://bit.ly/kKwys [/twitter]\nClass Diagram\nRelationship\nInheritance\nImplementation\nLinks\n http://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/\n http://www.objectmentor.com/resources/articles/umlClassDiagrams.pdf\n http://www.agilemodeling.com/artifacts/classDiagram.htm\n\n
  • Sequence Diagram\nLifetimes and interactions\n\n\n
  • Activity Diagram\nOverall flow of functionality\nShows paralellism\n\n
  • \n
  • \n
  • Works\nSatisfies Requirements (the right ones)\n\n
  • Maintainability\nSimplicity\n\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Simplicity is the key! The following help keep it simple.\n
  • [twitter]YAGNI (You Aren't Gonna Need It): Don't implement code you don't need. http://bit.ly/7qy9B [/twitter]\nYAGNI (You Aren't Going To Need It)\nhttp://c2.com/xp/YouArentGonnaNeedIt.html\nHelps keep it simple\nPicture of targeting computer\n\n
  • [twitter]Defer design decisions to the Last Responsible Moment http://bit.ly/gGLzrb [/twitter]\nLast Responsible Moment\nhttp://www.codinghorror.com/blog/2006/10/the-last-responsible-moment.html\n\n
  • [twitter]Avoid Pre-Mature Optimization: http://bit.ly/qAANet http://bit.ly/n5fmTK[/twitter]\nAvoid Premature Optimization\nhttp://c2.com/cgi/wiki?PrematureOptimization "We should forget about small efficiencies, say about 97% of the time; premature optimization is the root of all evil Yet we should not pass up our opportunities in that critical 3%."             -- Donald E. Knuth, Structured Programming with go to Statements \n http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.103.6084&rep=rep1&type=pdf Src: Structured Programming with go to Statements, ACM Journal Computing Surveys, Vol 6, No. 4, Dec. 1974. p.268. \n\n
  • [twitter]DRY: Don’t Repeat Yourself. Repeated code is unmaintainable. http://bit.ly/m6wg2c http://bit.ly/DVBz9 http://bit.ly/owjNTR [/twitter]\nDRY\nhttp://en.wikipedia.org/wiki/Don%27t_repeat_yourself\nhttp://c2.com/cgi/wiki?DontRepeatYourself\nhttp://www.artima.com/intv/dry.html\nPicture of clones\n\n
  • [twitter]Separation of Concerns: A place for everything, and everything in its place. http://bit.ly/qL74lf [/twitter]\nSeparation of Concerns\nhttp://en.wikipedia.org/wiki/Separation_of_concerns\nDarth maul sliced in half\n\n
  • [twitter]Favor Composition over Inheritance: It is far more flexible. http://bit.ly/bfnaH4 http://bit.ly/ofJznN [/twitter]\nComposition over inheritance\nhttp://www.artima.com/lejava/articles/designprinciples4.html\nComposition is more decoupled than inheritance\n You can reuse an object that is part of the composition (strategy pattern)\n You cannot reuse an overriden method\n Inheritance allows the overriden method to make assumptions on the base class's internal state\nhttp://lostechies.com/chadmyers/2010/02/13/composition-versus-inheritance/\n\n
  • [twitter]Explicit over Implicit: Make implicit concepts explicit in your code. http://bit.ly/nS2NUB http://bit.ly/oSSFE2 [/twitter]\nfrom DDD\n make implicit concepts explicit. http://sympriser.wordpress.com/2009/03/31/revisiting-fowlers-video-store-02-making-implicit-concepts-explicit/ \nhttp://martinfowler.com/ieeeSoftware/explicit.pdf\n\n
  • [twitter]Fail Fast: The faster your code fails, the sooner you correct it. http://bit.ly/22QPBA [/twitter]\nFail Fast\nLinks\n Article by James Shore\n http://martinfowler.com/ieeeSoftware/failFast.pdf\nAssertions\nRaise errors with any info useful to debugging.\nPicture of Jar Jar Binks\n\n
  • [twitter]Fail Fast: The faster your code fails, the sooner you correct it. http://bit.ly/22QPBA [/twitter]\nFail Fast\nLinks\n Article by James Shore\n http://martinfowler.com/ieeeSoftware/failFast.pdf\nAssertions\nRaise errors with any info useful to debugging.\nPicture of Jar Jar Binks\n\n
  • [twitter]Fail Fast: The faster your code fails, the sooner you correct it. http://bit.ly/22QPBA [/twitter]\nFail Fast\nLinks\n Article by James Shore\n http://martinfowler.com/ieeeSoftware/failFast.pdf\nAssertions\nRaise errors with any info useful to debugging.\nPicture of Jar Jar Binks\n\n
  • [twitter]Law of Demeter: Reduce class dependencies by only talking to the nearest neighbor. http://bit.ly/qpnke [/twitter]\nLaw of Demeter\nLinks\n http://en.wikipedia.org/wiki/Law_of_Demeter\n\n
  • [twitter]No Broken Windows: “A little leaven leavens the whole lump” Keep code clean...sloppiness is contagious. http://bit.ly/nFNwc5 [/twitter]\nNo Broken Windows\nhttp://www.artima.com/intv/fixit.html\n On second page of article\n\n
  • [twitter]The Boy Scout Rule: Leave it better than you found it. http://bit.ly/9Q9nVR [/twitter]\nBoy Scout Principle\nLeave the codebase better than you found it\n\n
  • [twitter]The SOLID Principles: http://bit.ly/nkFfgw http://bit.ly/usIAS http://bit.ly/mQLEzk http://bit.ly/ow4iOV [/twitter]\nLinks\nhttp://en.wikipedia.org/wiki/Solid\nSOLID Motivational Posters\n http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/\nhttp://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod\nhttp://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf\nOCP,SRP,LSP, Chain of Responsibility, Double Dispatch by Jeremy Miller\n  \nLos Techies Topic of the Month\n http://lostechies.com/chadmyers/2008/03/08/pablo-s-topic-of-the-month-march-solid-principles/\n e-book\n http://lostechies.com/wp-content/uploads/2011/03/pablos_solid_ebook.pdf\n\n
  • SRP\nhttp://www.objectmentor.com/resources/articles/srp.pdf\n\n
  • SRP\nhttp://www.objectmentor.com/resources/articles/srp.pdf\n\n
  • OCP\nLinks\n http://www.objectmentor.com/resources/articles/ocp.pdf\n http://c2.com/cgi/wiki?OpenClosedPrinciple\n\n
  • OCP\nLinks\n http://www.objectmentor.com/resources/articles/ocp.pdf\n http://c2.com/cgi/wiki?OpenClosedPrinciple\n\n
  • LSP\nhttp://www.objectmentor.com/resources/articles/lsp.pdf\n\n
  • LSP\nhttp://www.objectmentor.com/resources/articles/lsp.pdf\n\n
  • ISP\nhttp://www.objectmentor.com/resources/articles/isp.pdf\n\n
  • ISP\nhttp://www.objectmentor.com/resources/articles/isp.pdf\n\n
  • DIP\nIoC\nLinks\n http://www.objectmentor.com/resources/articles/dip.pdf\n http://codebetter.com/jeremymiller/2005/07/20/tdd-design-starter-kit-dependency-inversion-principle/\n\n
  • DIP\nIoC\nLinks\n http://www.objectmentor.com/resources/articles/dip.pdf\n http://codebetter.com/jeremymiller/2005/07/20/tdd-design-starter-kit-dependency-inversion-principle/\n\n
  • [twitter]SOLID Motivational Posters: http://bit.ly/o21sQa[/twitter]\n
  • [twitter]Design Patterns: http://bit.ly/alwFHt http://bit.ly/IgCxT http://bit.ly/a6LwIT http://bit.ly/2owmxC [/twitter]\nLinks\nhttp://en.wikipedia.org/wiki/Design_Patterns\nhttp://sourcemaking.com/\nhttp://dofactory.com/Patterns/Patterns.aspx\nhttp://www.artima.com/lejava/articles/gammadp.html\n Summary Among developers, design patterns are a popular way to think about design, but what is the proper way to think about design patterns? In this interview, Erich Gamma, co-author of the landmark book, Design Patterns, talks with Bill Venners about the right way to think about and use design patterns. \nRelationships Diagram\n http://r3dux.org/2011/06/design-pattern-relationships/\n\n
  • [twitter]Wisdom: Don't use design patterns just because you can. That's a sure sign of immaturity.[/twitter]\nUse wisdom in applying patterns\nDon’t use the patterns just to use them. A common newbie mistake.\nWhat works for a web app doesn't work for a backend data processing engine\nWhat works for a new application does not bode well for a legacy app\nDon't bite off more than you can chew.\nDon't try something new just because it's new. It must fulfill a buisiness need.\nConsider those who have to support the code you write. Can they?\n\n
  • \nLinks\nhttp://en.wikipedia.org/wiki/Design_Patterns\nhttp://sourcemaking.com/\nhttp://dofactory.com/Patterns/Patterns.aspx\nhttp://www.artima.com/lejava/articles/gammadp.html\n Summary Among developers, design patterns are a popular way to think about design, but what is the proper way to think about design patterns? In this interview, Erich Gamma, co-author of the landmark book, Design Patterns, talks with Bill Venners about the right way to think about and use design patterns. \nRelationships Diagram\n http://r3dux.org/2011/06/design-pattern-relationships/\n\n
  • \n
  • \n
  • [twitter]Patterns of Enterprise Application Architecture: Great patterns book. http://bit.ly/aC4dnZ [/twitter]\nPoEAA\nLinks\n http://martinfowler.com/eaaCatalog/index.html\n\n
  • [twitter]Other Design Pattern Pattern Resources... GRASP: http://bit.ly/qxXqoh Fowler's Pattern Repository List: http://bit.ly/hiCY6u [/twitter]\nLinks\nMartin Fowler's links to many pattern repositories\n http://martinfowler.com/articles/enterprisePatterns.html\n\n
  • [twitter]Domain Driven Design: Must read for developers. http://bit.ly/1l9LPT http://bit.ly/tlZJe [/twitter]\nLinks\nDomain Driven Design Quickly (Free e-book from Info-Q)\n http://www.infoq.com/minibooks/domain-driven-design-quickly\nhttp://domaindrivendesign.org/\n\n
  • \n
  • \n
  • [twitter]Refactoring: Just do it. Constantly improve your code. http://bit.ly/eg9sk http://bit.ly/aVTvzE http://bit.ly/41eSRm [/twitter]\nLinks\nhttp://martinfowler.com/books.html#refactoring\nhttp://www.refactoring.com/\nRefactoring to Patterns\n http://industriallogic.com/xp/refactoring/catalog.html\n\n
  • \n
  • [twitter]Code Smells: If it stinks, refactor it. http://bit.ly/8XixMa [/twitter]\n
  • [twitter]ReSharper: THE must-have tool for every .NET developer: http://bit.ly/s09v\n [/twitter]\n
  • \n
  • \n
  • [twitter]Repository and Unit of Work Patterns: Encapsulate your DB code. http://bit.ly/JSTHa http://bit.ly/CvEAA [/twitter]\nRepository\nStore objects like a collection...not worrying about sql or xml or whatever persistence mechanism you are using. All access is C#. (Persistence Ignorance) Show a class with inline sql, then try to replace sql for mongo \n Then show how introducing a repository can simplify this by depending on an interface.\nA repository is not a DAO. \n It is a model of a collection\n Repository == ICollection\n\n
  • [twitter]NHibernate: Eases DB access. http://bit.ly/amleRr , Book: http://bit.ly/17HK0T, Fluent NHibernate: http://bit.ly/17btBp [/twitter]\nNHibernate\nLinks\n http://nhforge.org/Default.aspx\n Book: NHibernate In Action\n http://www.manning.com/kuate/\n\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • [twitter]The Agile Testing Quadrants define the different kinds of automated tests and when to use them: http://bit.ly/uLXR7h[/twitter]\n
  • [twitter]The Agile Testing Quadrants define the different kinds of automated tests and when to use them: http://bit.ly/uLXR7h[/twitter]\n
  • [twitter]The Test Automation Pyramid helps show what type of tests to invest your time in: http://bit.ly/KnDndM [/twitter]\n
  • [twitter]The Test Automation Pyramid helps show what type of tests to invest your time in: http://bit.ly/KnDndM [/twitter]\n
  • [twitter]The Test Automation Pyramid helps show what type of tests to invest your time in: http://bit.ly/KnDndM [/twitter]\n
  • [twitter]Agile Testing by Lisa Crispin and Janet Gregory, a must read book for agile developers: http://amzn.to/KnE72I [/twitter]\n
  • [twitter]XUnit Test Patterns: Excellent book on unit testing. http://bit.ly/9S8Ot4 [/twitter]\n
  • Good Unit Tests Are\nAtomic\n No dependencies on other tests\n Short (5 lines or so)\n Refactor\n Debugger?\n One logical assertion per test\nSelf-Contained\n Inserts their own data and removes it (if db test)\n Never depend on existing data in db\nOrder Independent & Isolated\nMeaningful\n Intention Revealing name\n Test something of importance (not properties/constructors)\nEasy to Setup\n Decouple from external dependencies\n DB, Web\n Use mocks\n Any dependencies must be set up by automated build\nFast\n Thousands of tests...means each must be very quick\nRepeatable\n Rerunning the test over and over produces same result\nReadable (clear)\n No clutter\n Simple flow\n Use var names rather than plain values\n Good tests names\n Include "Should"\n Tests ARE Documentation\nUnique\n Not testing something that is tested elsewhere\n DRY\nGranular\n Helps localize errors since smaller set of code is under test\n Targets failing code\n\n
  • [twitter]Test Driven Development: http://bit.ly/KPnS8 Book: http://bit.ly/p1IW6b [/twitter]\nLinks\nThe Bowling Game: An example of test-first pair programming -- Robert C. Marin and Robert S. Koss\n http://www.objectmentor.com/resources/articles/xpepisode.htm\nLet's Play TDD" Series of videos\n http://jamesshore.com/Blog/Lets-Play/\n\n
  • [twitter]Test Driven Development: http://bit.ly/KPnS8 Book: http://bit.ly/p1IW6b [/twitter]\nLinks\nThe Bowling Game: An example of test-first pair programming -- Robert C. Marin and Robert S. Koss\n http://www.objectmentor.com/resources/articles/xpepisode.htm\nLet's Play TDD" Series of videos\n http://jamesshore.com/Blog/Lets-Play/\n\n
  • [twitter]Uncle Bob's 3 Rules of TDD: http://bit.ly/bLQqF [/twitter]\nUncle Bob's Three Rules of TDD\nhttp://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd\n\n
  • [twitter]Red Green Refactor: The heartbeat of TDD. http://bit.ly/pZEG1z http://bit.ly/qr2L4X [/twitter]\nhttp://aydsoftware.blogspot.com/2009/05/tdd-rhythm.html\n\n
  • [twitter].NET Testing Frameworks: NUnit: http://nunit.org Machine.Specifications: http://bit.ly/hyBixj [/twitter]\n\n
  • Test first...defines interface\n
  • Then write class to usable interface, to make test pass.\n
  • \n
  • \n
  • Arrange can usually be pulled out into a common setup to be used by many tests.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Extract context into its own reusable class (SRP) (Separation of Concerns)\n
  • [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  • [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  • [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  • [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  • [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  • [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  • [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  • [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  • [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  • [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  • [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  • [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  • [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  • [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  • [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  • [twitter]Two great books on BDD/ATDD testing: The Cucumber Book http://bit.ly/niLRws Specification By Example: http://bit.ly/amqXZG [/twitter]\n
  • [twitter]Two great books on BDD/ATDD testing: The Cucumber Book http://bit.ly/niLRws Specification By Example: http://bit.ly/amqXZG [/twitter]\n
  • [twitter]Two great books on BDD/ATDD testing: The Cucumber Book http://bit.ly/niLRws Specification By Example: http://bit.ly/amqXZG [/twitter]\n
  • [twitter]Two great books on BDD/ATDD testing: The Cucumber Book http://bit.ly/niLRws Specification By Example: http://bit.ly/amqXZG [/twitter]\n
  • [twitter]Awesome TDD Resources: Bowling Kata: http://bit.ly/Lojwj , James Shore Videos: http://bit.ly/9nwSIu [/twitter]\nLinks\nThe Bowling Game: An example of test-first pair programming -- Robert C. Marin and Robert S. Koss\n http://www.objectmentor.com/resources/articles/xpepisode.htm\ns Play TDD" Series of videos\n http://jamesshore.com/Blog/Lets-Play/\n\n
  • [twitter]Excellent Mocking Resources: http://bit.ly/psZZeo http://bit.ly/Leyh http://bit.ly/r7ewwo http://bit.ly/rkWXBy [/twitter]\n\nMocks Aren't Stubs (Martin Fowler)\nhttp://martinfowler.com/articles/mocksArentStubs.html\nResources\nBest and Worst Practices for Mock Objects (Jeremy Miller)\n http://codebetter.com/jeremymiller/2006/01/10/best-and-worst-practices-for-mock-objects/\nUsing AAA with Rhino Mocks\n http://ayende.com/blog/3318/rhino-mocks-arrange-act-assert-syntax\n Quick Reference\n http://svengrand.blogspot.com/2011/02/rhino-mocks-arange-act-assert-aaa.html\n\n
  • [twitter]Rhino Mocks: Excellent tool for mocks in .NET http://bit.ly/qQh6i9 [/twitter]\n
  • \n
  • [twitter]Inversion of Control links: http://bit.ly/13DIh0 http://bit.ly/qGb1GT http://bit.ly/qqA1rw [/twitter]\nLinks\nhttp://martinfowler.com/articles/injection.html\nhttp://codebetter.com/jeremymiller/2005/09/20/what’s-so-great-about-inversion-of-control/\nJeremy Millers Concepts to know first\n http://codebetter.com/jeremymiller/2008/06/29/some-concepts-to-know-first/\n\n
  • [twitter]IoC Containers: StructureMap (http://bit.ly/eOqhpl), Ninject (http://ninject.org/), Autofac (http://bit.ly/JL7nQ) [/twitter]\nTools\nStructureMap\n http://structuremap.net/structuremap/\nNinject\n http://ninject.org/\nAutofac\n http://code.google.com/p/autofac/\n\n
  • [twitter]Code Coverage Tools: dotCover http://bit.ly/9zvPnD and NCover http://bit.ly/GapKF [/twitter]\nCode Coverage\nNCover (with TDD.NET)\n http://testdriven.net\nCommercial\n NCover\n Links\n http://www.ncover.com\n dotCover\n http://www.jetbrains.com/dotcover/\n\n
  • [twitter]TestDriven.NET: Fast test integration with Visual Studio http://bit.ly/vEAEQ [/twitter]\n
  • [twitter]NCrunch: Continuous testing in Visual Studio. The coolest tool I use (next to ReSharper) http://bit.ly/jUlUz6 [/twitter]\n
  • [twitter]Source Control: Subversion is a common solution: http://bit.ly/bG0WEV Book: http://bit.ly/nCrYz3 [/twitter[\nSubversion\nLinks\n http://svnbook.red-bean.com/nightly/en/index.html\n http://subversion.apache.org/\n\n
  • [twitter]Source Control: Distributed models are better, like Git (http://git-scm.com/ Book:http://bit.ly/2wiLT) or Mercurial [/twitter]\nGit\nLinks\n http://progit.org/book/\n http://git-scm.com/\n\n
  • [twitter]Continuous Integration: A MUST DO practice for modern developers. http://bit.ly/qro5y7 http://bit.ly/pzF82M [/twitter]\nLinks\nhttp://www.martinfowler.com/articles/continuousIntegration.html#MaintainASingleSourceRepository.\nEnterprise Continuous Integration Maturity Model\n http://www.urbancode.com/html/resources/white-papers/view.html?id=1214\n\n
  • [twitter]Continuous Integration Servers: TeamCity (http://bit.ly/25gir), Jenkins (http://bit.ly/fC15Q8) [/twitter]\n
  • \n
  • [twitter]Build Monitor: Cradiator is a great tool to visualize pass/fail of your builds. http://bit.ly/raxChw [/twitter]\n
  • \n
  • \n
  • [twitter]The Agile manifesto: http://agilemanifesto.org/ [/twitter]\n
  • \n
  • [twitter]Extreme Programming: http://bit.ly/PKEC Books: http://amzn.to/oMAxAJ http://amzn.to/mOFQx4 http://scr.bi/7u7bOU [/twitter]\nResources\nBooks\n +- Extreme Programming Explained (Second Edition) - Kent Beck\n http://www.amazon.com/exec/obidos/ASIN/0321278658\n First Edition\n http://www.amazon.com/exec/obidos/ASIN/0201616416\n +- XP Purple book (recommended by Martin Fowler)\n http://www.amazon.com/exec/obidos/ASIN/0201616408\n The New XP\n +- http://www.scribd.com/doc/196734/The-New-XP\n Check link\nSites\n http://www.extremeprogramming.org/\n\n
  • [twitter]Scrum: http://bit.ly/13E2eX http://bit.ly/qjrij http://bit.ly/1LRUCI and an excellent blog: http://bit.ly/58V63 [/twitter]\nScrum\nLinks\n http://en.wikipedia.org/wiki/Agile_software_development\n http://www.scrumalliance.org/\n http://www.mountaingoatsoftware.com/\n Blogs\n http://www.agileadvice.com/\n\n
  • [twitter]Excellent book on agile development: James Shore's Art of Agile Development http://bit.ly/cA9rXl [/twitter]\n
  • [twitter]Choosing an Iteration Length: http://bit.ly/qcaIBY [/twitter]\nFeedback Loop\nExample of tracer bullets\nExample of turning on a hotel shower\nBiggest reason why agile "works"\nOften, fixin agile is finding or fixing a broken or missing feedback loop\n\n
  • [twitter]Choosing an Iteration Length: http://bit.ly/qcaIBY [/twitter]\nFeedback Loop\nExample of tracer bullets\nExample of turning on a hotel shower\nBiggest reason why agile "works"\nOften, fixin agile is finding or fixing a broken or missing feedback loop\n\n
  • [twitter]User Stories: http://bit.ly/id6lsV http://bit.ly/2Js80z [twitter]\n
  • \n
  • [twitter]The Planning Game: http://bit.ly/rt0u8k http://bit.ly/nsBNux [/twitter]\n
  • \n
  • \n
  • [twitter]Shared Code Ownership: http://bit.ly/qF9mzE [/twitter]\n
  • [twitter]Pair Programming: Arlo Belshee's excellent doc: "Promiscuous Pairing" http://bit.ly/pBAb [/twitter]\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • [twitter]Questions to ask in Retrospectives: http://bit.ly/qvBogF [/twitter]\n
  • \n
  • \n
  • \n
  • \n

Padawan 2 Jedi - An Overview of Modern Development Practices (Austin Code Camp 2012) Padawan 2 Jedi - An Overview of Modern Development Practices (Austin Code Camp 2012) Presentation Transcript

  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Padawan to Jedi A Developer Jump-Start A U S T I N - C O D E - C A M P - 2 0 1 1 Chris Edwards http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • About Me Chris Edwards Architect at BancVue Ltd. Email: ChrisEdwards357@gmail.com Blog: http:// chrisedwards.dreamhosters.com Twitter: @ChrisEdwards357 Github: http://github.com/ chrisedwards http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • About Me Chris Edwards Architect at BancVue Ltd. Email: ChrisEdwards357@gmail.com Blog: http:// chrisedwards.dreamhosters.com Twitter: @ChrisEdwards357 Github: http://github.com/ chrisedwards We are hiring! http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • What makes a great developer? http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Passion http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Continuous Learning http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Read Books Continuous Learning http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Read Books Continuous Learning http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Read Books Continuous Learning ad Re s Blog http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Read Books Continuous Learning ad Re s Blog http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Follow Others Read Books Continuous Learning ad Re s Blog http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Follow Others Read Books Continuous Learning ad Re s Blog http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Fiesta ! de Camp Co A ustin Attend A ustin User .NET Grou Follow p Events Others Read Books Continuous Learning ad Re s Blog http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Humility http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Communication Skills http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Basics Beginning with the basics... http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Basics Beginning with the basics... http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Basic oo concepts http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Basic oo concepts (Object Oriented) http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Encapsulatio http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Encapsulatio Information Hiding http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Polymorphis http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Polymorphis http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Low Coupling / High Cohesion http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Communicating via uML http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Class Diagram http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Sequence Diagram http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Activity Diagram http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Design The theory and Practice of Design... http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • What makes great software... http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Functionality (It works!) http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Maintainabilit y http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Redundanc y http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Scalability http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Performance http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Usability http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Design Principles The theory and Practice of Design... http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Keep It Super Simple http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • You A ren’t G on na N eed It http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Last Responsible Moment http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Avoid Premature Optimization http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Don’t Repeat Yourself http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Separation of Concerns http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Composition over Inheritance http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Explicit over Implicit http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Fail Fast http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Law of Demeter http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • No Broken Windows http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • The Boy Scout Rule http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • The Solid Principles Principles for SOLID code http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • SRP Responsibility The Single Principle http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • ocp Open-Closed The Principle http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • lsp Liskov Substitution The Principle http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • ispInterface Segregation The Principle http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • dipDependency Inversion The Principle http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • SOLID Motivational Posters http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Design Patterns Testing with mocks and stubs. http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • First, a word of http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • gang of four patterns http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Creational Patterns Abstract Factory Structural Builder Adapter Factory Method Bridge Prototype Composite Singleton Decorator Facade Flyweight Proxy http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Behavioral Chain of Memento Responsibility Observer Interpreter State Iterator Strategy Mediator Template Method http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • PoEAA patterns http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • other design patterns GRASP Martin Fowler’s Pattern http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Domain Driven Design http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Building Entity Value Object Aggregate Root Patterns Service Ubiquitous Language Repository Bounded Context Factory Continuous Integration Many More... http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Pattern Relationship Map http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • refactoring changing form while preserving function (Changing form while preserving function.) http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Resources http://www.refactoring.com http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Code Smells http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • ReSharper http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Persistence changing form while preserving function http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Persistence Ignorance http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Repository and Unit of Work Patterns http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Object Relational Mappers NHibernate Entity Framework Etc. http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • TESTiNG Testing with mocks and stubs. http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Types of Tests http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Types of Tests Unit Tests http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Types of Tests Unit Tests Integration Tests http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Types of Tests Unit Tests Integration Tests Functional / UI Tests http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Agile Testing quadrants http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Agile Testing quadrants http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Test Automation Pyramid http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • unit testing http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Good Unit Tests Are... Atomic Easy to Set Up Self-Contained Fast Order- Repeatable Independent Readable (Clear) Meaningful Unique http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Test-Driven Development http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • TDD Test-Driven Development http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • uncle bob’s Three Rules of 1. You can write no production code unless it makes a failing test pass. 2. You can write no more test code than is sufficient to fail. 3. You can write no more production code than is necessary to pass the http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Red...Green...Refactor The Heartbeat of RED Write a failing unit test. See Green it fail. the test pass. Make Refactor Clean up implementation based on what you have http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • .NET Unit Testing •NUnit •MSpec (Machine.Specifications) •MSTest http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • A Basic Unit Test using [TestFixture] public class OrderTests { [Test] public void TestCalculateSubTotal() { var order = new Order(); order.AddLineItem("Star Destroyer", 5000.00); order.AddLineItem("Death Star", 10000.00); double subTotal = order.CalculateSubTotal(); Assert.That( subTotal, Is.EqualTo( 15000.00 ) ); } } http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • public class Order { public int Id { get; set; } public Customer Customer { get; set; } public DateTime OrderDate { get; set; } public IList< LineItem > LineItems { get; set; } public double CalculateSubTotal() { return LineItems.Select( x => x.Price ).Sum(); } public void AddLineItem( string description, double price ) { LineItems.Add( new LineItem( 1, description, price ) ); } } http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • AAA Arrange, Act, Assert http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • [Test] public void TestCalculateSubTotal() { var order = new Order(); order.AddLineItem("Star Destroyer", 5000.00); order.AddLineItem("Death Star", 10000.00); double subTotal = order.CalculateSubTotal(); Assert.That( subTotal, Is.EqualTo( 15000.00 ) ); } http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • [Test] public void TestCalculateSubTotal() { var order = new Order(); order.AddLineItem("Star Destroyer", 5000.00); order.AddLineItem("Death Star", 10000.00); double subTotal = order.CalculateSubTotal(); Assert.That( subTotal, Is.EqualTo( 15000.00 ) ); } [ Test ] public void TestCalculateSubTotal() { // Arrange. var order = new Order(); order.AddLineItem("Star Destroyer", 5000.00); order.AddLineItem("Death Star", 10000.00); // Act double subTotal = order.CalculateSubTotal(); // Assert. Assert.That( subTotal, Is.EqualTo( 15000.00 ) ); } http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Unit Test with http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Unit Test with [ TestFixture ] public class OrderTests { Order _order; [ SetUp ] public void SetUp() { // Arrange. _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); } [ Test ] public void TestCalculateSubtotal() { // Act. double subTotal = _order.CalculateSubTotal(); // Assert. Assert.That( subTotal, Is.EqualTo( 15000.00 ) ); } } http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • BDD Driven Behavior Development http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • [ TestFixture ] public class OrderTests { Order _order; [ SetUp ] public void SetUp() { // Arrange. _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); } [ Test ] public void TestCalculateSubtotal() { // Act. double subTotal = _order.CalculateSubTotal(); // Assert. Assert.That( subTotal, Is.EqualTo( 15000.00 ) ); } } http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • [ TestFixture ] public class When_an_order_has_two_line_items { Order _order; [ SetUp ] public void SetUpContext() { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); } [ Test ] public void Calculating_the_subtotal_should_return_the_sum_of_the_line_item_prices() { Assert.That( _order.CalculateSubTotal(), Is.EqualTo( 15000.00 ) ); } } http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • [ TestFixture ] public class When_an_order_has_two_line_items { Order _order; [ SetUp ] public void SetUpContext() { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); } [ Test ] public void Calculating_the_subtotal_should_return_the_sum_of_the_line_item_prices() { Assert.That( _order.CalculateSubTotal(), Is.EqualTo( 15000.00 ) ); } } http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • [ TestFixture ] public class When_an_order_has_two_line_items { Order _order; [ SetUp ] public void SetUpContext() { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); } [ Test ] public void Calculating_the_subtotal_should_return_the_sum_of_the_line_item_prices() { Assert.That( _order.CalculateSubTotal(), Is.EqualTo( 15000.00 ) ); } } http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • A BDD-Style Test using [ Subject("Order") ] public class When_an_order_has_two_line_items { static Order _order; static double _subTotal; Establish context = () => { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); }; Because of = () => _subTotal = _order.CalculateSubTotal(); It should_calculate_the_subtotal_of_line_items = () => _subTotal.ShouldEqual( 15000.00 ); } http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • A BDD-Style Test using [ Subject("Order") ] public class When_an_order_has_two_line_items { static Order _order; static double _subTotal; Establish context = () => { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); }; Because of = () => _subTotal = _order.CalculateSubTotal(); It should_calculate_the_subtotal_of_line_items = () => _subTotal.ShouldEqual( 15000.00 ); } http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • A BDD-Style Test using [ Subject("Order") ] public class When_an_order_has_two_line_items { static Order _order; static double _subTotal; Establish context = () => { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); }; Because of = () => _subTotal = _order.CalculateSubTotal(); It should_calculate_the_subtotal_of_line_items = () => _subTotal.ShouldEqual( 15000.00 ); } http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • [ Subject( "Order" ) ] public class Given_an_order_with_two_line_items { protected static Order _order; Establish context = () => { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); }; } public class When_calculating_the_subtotal : Given_an_order_with_two_line_items { static double _subTotal; Because of = () => _subTotal = _order.CalculateSubTotal(); It should_equal_the_sum_of_the_line_item_prices = () => _subTotal.ShouldEqual( 15000.00 ); } public class When_removing_a_line_item_by_its_description : Given_an_order_with_two_line_items { Because of = () => _order.RemoveLineItem( "Star Destroyer" ); It should_remove_the_line_item_from_the_order = () => _order.LineItems.Any( x => x.Description == "Star Destroyer" ).ShouldBeFalse(); } http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • [ Subject( "Order" ) ] public class Given_an_order_with_two_line_items { protected static Order _order; Establish context = () => { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); }; } public class When_calculating_the_subtotal : Given_an_order_with_two_line_items { static double _subTotal; Because of = () => _subTotal = _order.CalculateSubTotal(); It should_equal_the_sum_of_the_line_item_prices = () => _subTotal.ShouldEqual( 15000.00 ); } public class When_removing_a_line_item_by_its_description : Given_an_order_with_two_line_items { Because of = () => _order.RemoveLineItem( "Star Destroyer" ); It should_remove_the_line_item_from_the_order = () => _order.LineItems.Any( x => x.Description == "Star Destroyer" ).ShouldBeFalse(); } http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Tests are documentation Given an order with two line items: When calculating the subtotal It should be the sum of the line item prices. When removing a line item by its description http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Tests are documentationContext: Given an order with two line items:Specificati When calculating the subtotal on: It should be the sum of the line item prices.Specificati on: When removing a line item by its description http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Tests are documentation Given an order with two line items: When calculating the subtotal It should be the sum of the line item prices. When removing a line item by its description http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Tests are documentationArrange Given an order with two line items: : When calculating the subtotal It should be the sum of the line item prices. Act: Assert: When removing a line item by its description http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Acceptance Test Driven Development (ATDD) Specification By Example http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Acceptance Test Driven Development (ATDD) Specification By Example http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Acceptance Test Driven Development (ATDD) Specification By Example http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • More Resources for TDD Bowling Game Kata James Shore “Let’s Play TDD” video series. http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Mocking Testing with mocks and stubs. http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Rhino Mocks http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • State-based vs. Interaction- http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • inversion of control http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • inversion of control (IoC) http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Tools (IoC Structure Map Ninject Autofac http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Code http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Code Coverage Tools TestDriven.NET dotCover (JetBrains) NCover NCrunch http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Source control http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Standard Subversion CVS Others http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Standard Subversion CVS Others Distributed Git Mercurial http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • continuous integration http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • TeamCity http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Build Monitor http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Continuous Deployment http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Agile (Embrace Change) http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Agile embrace change! (Embrace Change) http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 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 & over Processes & Tools Interactions Comprehensive Working Software over Customer Documentation over Contract Negotiation CollaborationResponding 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. http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Many Methodologies Extreme Programming (XP) Scrum http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Extreme Programming (xp) Values: Communicati on Feedback Practices: Simplicity Stand Up Meeting Courage Collective Code Ownership Pair Programming Planning Game Test-Driven Development (TDD) Whole Team Continuous Integration (CI) Merciless Refactoring Small Releases Coding Standards Simple Design System Metaphor http://chrisedwards.dreamhosters.com Sustainable PaceFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Scrum 3 Roles: Product Owner ScrumMaster Team 4 Ceremonies: Sprint Planning Daily Scrum Sprint Reviews Sprint Retrospectives 3 Artifacts: Product Backlog Sprint Backlog Burndown http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Agile Practices A walk through the process (A walk through the process) http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Short Iterations & Feedback Loops Frequency promotes Efficiency http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • User Stories http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Backlog http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Planning Game http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Sustainable Pace / Velocity http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Sustainable Pace / Velocity Looking at yesterday’s weather http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Self-Organizing Team http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Collective Code Ownership http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Collective Code Ownership “Mine Mine” http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Pair Programming http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Merciless Refactoring http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Stand Up Meeting http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Information Radiators Burndown Chart Task Board Build Monitors http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Sprint Demo Demonstration is better than Discussion http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Feedback Firing tracer bullets http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Retrospectives http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Automation Automate everything you can! http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Don’t be discouraged! http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • Don’t be discouraged! Everyone has to start somewhere. http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • About Me Chris Edwards Architect at BancVue Ltd. Email: ChrisEdwards357@gmail.com Blog: http:// chrisedwards.dreamhosters.com http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • About Me Chris Edwards Architect at BancVue Ltd. Email: ChrisEdwards357@gmail.com Blog: http:// chrisedwards.dreamhosters.com We are hiring! http://chrisedwards.dreamhosters.comFollow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources