SlideShare a Scribd company logo
1 of 151
A Modern Architecture Review
Using Code Review Tools


@AdamCogan | #vsalm #tee12 #dev324



                                     Delivering Awesome Web Applications
Agenda
•   #1 The 1st things to look out for
        • Processes
        • Does it work?
        • Documentation

•   #2 High Level tools
        • Architecture
        • Code Analysis
        • Code Metrics

•   #3 Manual Checking
        • SOLID Design Principles
        • Code Review tools




                                        V9.5
About Adam
   Chief Architect at SSW
        Developing custom solutions for
         businesses across a range of
         industries such as Government,
         banking, insurance
   Microsoft Gold Partner
   Microsoft Regional Director
   VSTS MVP
   @AdamCogan
I Believe
The first things to look out for
Do you evaluate the processes?
     Often times this is the source of problems
           Are devs getting bogged down in the UI?
           Do you have a Scrum Master?
           Do you have continuous integration?
           Do you have continuous deployment?
           Do you have a Schema Master?
           Do you have a TFS Master?




http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouHaveTheD
esignersFixingUpTheUI.aspx
Are they on the latest version?
        …of VS

        …of TFS

        Alternatively for a „Gold Star‟ …
               Resharper, add-ins, extensions




http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
Can you „Get latest‟ and compile? #L1
        It's amazing how often you can't simply do a "Get Latest" and
         compile

        Add _Instructions_Compile.docx

        Then run unit tests…




http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
Can you get latest and compile? #L1
        See the Integration.Test project fail

        Add _Instructions_Compile.docx




http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
Can you get latest and compile? #L2
   Creation of the
    database via
    scripts
    (incremental)
    Tip: use OSQL,
    SQLCMD or SSW
    SQL Deploy
   and re-run the
    tests. They will
    now pass.
Do you want a „Gold Star‟ ? #L3
   Streamline setup of a new development environment
   Problems to check for:
       Windows 8 not supported
       Many things to build
       Lots of dependencies
   Recommendation: All manual work station setup steps
    should be scripted with PowerShell
   Recommendation: A get + compile should work within 1
    minute, and work without a dev being on the domain (to
    support external consultants)
PS C:CodeNorthwind> .Setup-Environment.ps1

Problem: Azure environment variable run state directory is not configured
(_CSRUN_STATE_DIRECTORY).

Problem: Azure Storage Service is not running. Launch the development fabric
by starting the solution.


WARNING: Abandoning remainder of script due to critical failures.

To try and automatically resolve the problems found, re-run the script with a -Fix
flag.


Figure: You see the problems in the devs environment
Note Prefix e.g. _01Setup-Environment.ps1
PS C:CodeNorthwind> .Setup-Environment.ps1 -fix

Problem: Azure environment variable run state directory is not configured
(_CSRUN_STATE_DIRECTORY).
Fixed: _CSRUN_STATE_DIRECTORY user variable set

Problem: Azure Storage Service is not running. Launch the development fabric
by starting the solution.
WARNING: No automated fix available for 'Azure Storage Service is running'


WARNING: Abandoning remainder of script due to critical failures.




Figure: The script tries to automatically fix the problems
PS C:CodeNorthwind> .Setup-Environment.ps1 -fix

Problem: Azure Storage Service is not running. Launch the development fabric
by starting the solution.
WARNING: No automated fix available for 'Azure Storage Service is running'


WARNING: Abandoning remainder of script due to critical failures.




Figure: Note on 2nd run only 1 script remains – see there is less to fix
Can you „Check In‟ and Deploy #L1
       Add _Instructions_Deploy.docx

       Alternatively for a „Star‟ …




http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/Default.aspx
Can you „Check In‟ and Deploy #L2
       Use PowerShell scripts as your documentation
            build.ps1
            deploy_dev.ps1
            deploy_test.ps1
            deploy_prod.ps1
       Alternatively for a „Gold Star‟ … TFSBuild + Portal




http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/Default.aspx
Can you „Check In‟ and Deploy #L2
TFSBuild + Portal
The compile problem….

A team issue?

Does it matter?

No?




        http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
Methods of compiling [Pain]
 ?




       http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
Tip: Should you compile? [Pain]
        Look at the page…

        Alt+Tab to Visual studio

        Modify file

        Save

        F5

        Wait 15 sec…

        Change the url (sometimes a crazy error)…

        Hit F5… Wait 5 sec

        Review change… (report)




http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
Tip: Should you compile? [Pain]




        http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
Tip: Should you compile? [Pain]




        http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
Do you review the Solution and
 Project names?
     The name of your solution and the names of the project in your
      solution should be consistent




http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouReviewThe
SolutionName.aspx
Do you review the documentation?
     Old School:
           Heavy, long documents
           Sequence Diagrams
           UML




http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouReviewThe
Documentation.aspx
Suggestions for doco
e.g. Enterprise Architect
   Use Red for unimplemented stuff

   Use the DateTime shape
    To see the last time the diagram was modified and by whom

   Mark items as „TODO: Adam‟.
    For items still pending
Do you review the documentation
   New School:
       4 docs
         •   Business.docx
         •   _Instructions_Compile.docx
         •   _Instructions_Deploy.docx
         •   Technologies.docx
       Unit Tests (low level)
       Code and Work Items (low level  PBI)
Vote:
High Level Tools
Agenda
•   #1 The 1st things to look out for
        • Processes
        • Does it work?
        • Documentation

•   #2 High Level tools
       • Architecture
       • Code Analysis
       • Code Metrics
•   #3 Manual Checking
        • SOLID Design Principles
        • Code Review tools
Do you look at the architecture?
     2 Choices:
           VS Dependency Graph or … ?
              • Ultimate Edition + Take screenshots
           nDepend                                         ?
              •   3rd Party Tool for a few hundred $ + Take screenshots
              •   Bad - Attach… Detach…. Noisy UI
              •   Bad - Complicated
              •   Good - No need for VS Ultimate
              •   Bonus: See problems in the „Queries + Rules Explorer‟
              •   Awesome - Customizable

http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouLookAtThe
Architecture.aspx
My Dream
My Dream – instead of this
My Dream – it automatically does this
Ndepend Relationships 101
Dependancy Graphs Intro
• Drill into a major relationship
• Edge Thickness: # Types
• [Major] Select Types | That are using me directly or indirectly

  Doco:
  Relationship | Export to HTML
• Relationship | Export to Graph
• Relationship | Generate a code rule that warns if this dependency
  exists
• Relationship | View internal Dependency cycles on graph
Something for the wall
• http://www.ndepend.com/Res/DiagramBoxAndArrowGraphBig.jpg
Ndepend Relationship 201
• See bidirectional relationships
• Potentially not healthy
• Relationship | Open this dependency on Matrix

About Erosion
• Much more green… then the blue is erosion
• Solution? Adaptive Design… moving towards the way the software has
  evolved
• Fix by remove the hard dependency in the wrong direction. Add some
  Inversion of Control (aka interfaces) in the middle
Look at what to refactor
Ndepend Relationships 301
Continuing….the matrix

Before fixing understand the scope

Right click | Build a graph representing one of the shortest paths
Ndepend 401
The rules

Q: Which ones do you care about?

 (use the Metrics view for a picture)
Or…
Great Overview tool and learning tool
Not for day-to-day use as a code analysis tool.
Note: Don‟t be distracted by a colour problem 
The Goal for your Code Analysis?
The Goal for your Code Analysis?

Encourage team members to check in their
code regularly
with no Code Analysis warnings, and
Code Metrics in green.

Eg.
Lets have a look at my Norwegian Ninja
Do you use the best Code Analysis
 tools?




http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouDoCodeAn
alysis.aspx
Do you use the best Code Analysis
 tools?
     Level 1 – ReSharper – All Rules

     Level 2 - VS Code Analysis (FXCop) – Default Settings

     Level 3 - VS Code Analysis (FXCop) – All Rules

     Level 4 – StyleCop – All Rules

     Level 5 – SSW Code Auditor – All Rules


      ?

http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouDoCodeAn
alysis.aspx
Do you use the best Code Analysis
 tools?
     Level 1 – ReSharper – campsite scout rule
     Level 2 - VS Code Analysis (FXCop) – Default Settings
     Level 3 - VS Code Analysis (FXCop) – Custom
     Level 4 – StyleCop
     Level 4 – StyleCop - Custom
     Level 5 – SSW Code Auditor
     Level 5 – SSW Code Auditor - Custom
 TIP: Have a document with rules that you turn off and the reason

http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouDoCodeAn
alysis.aspx
ReSharper
Resharper Custom
Code Analysis



          Run

          Options to make a Custom set (Hard UI)
Code Analysis
Find the options….
Code Analysis Custom
Code Analysis – Suppress #1
Add in „Suppression File‟ or in code?


   ?
Code Analysis – Suppress #2

Add in „Suppression File‟ or in code?
   Rule No Good – removed from Rule Set

   Rule N/A in this case – in „Suppression File‟

   Rule is Valid – in this case I am overriding it
Code Analysis – Create work item #1
Add as Bug, PBI or Task...


?
Code Analysis – Create work item #2
   Option 1: German (Neno Loje)
          Select 30 in a PBI

          Leave as warning


   Option 2: Boy Scout
          Easy ones (all into 1 PBI) eg. Alt+Enter on Resharper
          Hard ones (1 per PBI)
StyleCop
Code Auditor
Rules turned off
Do you check the code coverage?
       See if there are unit tests

       See if they are any good (~ 80% coverage)




http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouLookForCodeCoverage.aspx
Report time?
   If you are doing a report, gather some more reports…

         E.g. Code Metrics, Code Coverage, Code Clones

   But lets assume we are continuing to „Probe‟… So from:
       SRP
       …
       …
       Naming Conventions
Our solution is clean now. What next?
Agenda
•   #1 The 1st things to look out for
        • Processes
        • Does it work?
        • Documentation

•   #2 High Level tools
        • Architecture
        • Code Analysis
        • Code Metrics

•   #3 Manual Checking
        • SOLID Design
          Principles
        • Code Review tools
Do you run Code Metrics to find
dodgy code?
   Use the “Hot Spots” feature to quickly identify smelly code

   It measures:
       Maintainability Index
       Cyclomatic Complexity
       Depth of Inheritance
       Class Coupling
       Lines of Code
Code Metrics Results
Manual Checking:
Getting our hands dirty
Manual Review
   After using the automated high level tools it‟s time to actually
    jump into the code

   Look for code that doesn‟t follow SOLID principles… and then
    design patterns

   Speak to the devs
SOLID Principles
     Single Responsibility Principle

     Open Close Principle

     Liskov Substitution Principle

     Interface Segregation Principle

     Dependency Inversion Principle




http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouKnowCom
monDesignPrinciples.aspx
Single Responsibility Principle
   A class should have one and only one responsibility


         public class Address {
          // Standard Address Properties
          public Image GetGoogleMaps() {}
          public decimal GetDistance(Address destination) {}
          public bool ValidateAddress() {}
        }
Single Responsibility Principle
   The Address class has too many responsibilities
       Showing an image of the address (tied to UI)
       Calculations based on the address
       Validation of the address
   Another UI may use BingMaps instead of Google Maps

   Some, if not all of these functions should be moved to other
    classes like MapHelper and AddressHelper
Single Responsibility Principle
  public class AddressHelper {
    public decimal GetDistance(Address start, Address destination) {}
    public bool ValidateAddress(Address address) {}
  }
  public class GoogleMapProvider : IMapProvider {
    public Image GetMap(Address start) {}
  }

  public class BingMapProvider : IMapProvider {
    public Image GetMap(Address start) {}
  }
Open Closed Principle
   Open for extension, but closed for modification

   Use Abstract base classes that specify some base functionality

   E.g. In .NET WebRequest allows you to connect servers via
    web protocols
       HttpWebRequest
       FtpWebRequest
       FileWebRequest
Liskov‟s Substitution Principle
   Subtypes must be substitutable for their base types

    public abstract class Duck {
      public abstract void Quack();
    }
Liskov‟s Substitution Principle
public class PekinDuck : Duck {
  public void Quack() {}
}

public class BatteryPoweredDuck : Duck{
  public BatteryPoweredDuck(Battery energizer) {}
  public void Quack() {}
}
   Can‟t swap PekinDuck with BatteryPoweredDuck because
   you need pass it some batteries first
Another example
public class Rectangle {                        public class Square : Rectangle {
  protected int _width;                           public override void SetWidth(int width) {
  protected int _height;                             _width = width;
                                                     _height = width;
  public int Width { get { return _width; }
                                                  }
  public int Height { get { return _height; }     public override void SetHeight(int height)
  public void SetWidth(int width) {             {
     _width = width;                                 _width = height;
  }                                                  _height = height;
                                                  }
  public void SetHeight(int height) {
                                                }
     _height = height;
  }
}
Another Example (cont…)
   If we try to use these classes

    var shape = new Rectangle();
    shape.SetWidth(2);
    shape.SetHeight(5);
    Console.WriteLine(String.Format(“Area = {0}”,
    shape.Height * shape.Width))
    // Prints 10 as expected (2 * 5 = 10)
Another Example (cont…)
   If we try the Square
    var shape = new Square();
    shape.SetWidth(2);
    shape.SetHeight(5);
    Console.WriteLine(String.Format(“Area =
    {0}”, shape.Height * shape.Width))
    // Prints 25 not as expected since we set
    the Width = 2 and Height = 5
Another Example (cont..)
 The Square violates the Liskov substitution principle as
 we don‟t get expected behaviour as setting the width will
 also modify the height and vice versa
Interface Segregation Principle
   Don‟t create interfaces with lots of methods that don‟t
    necessarily get used in their implementations
public interface IBird {        public class MockingBird : IBird
  public void Chirp();          {
  public void Flap();             public void Chirp() {}
  public void Fly();              public void Flap() {}
  public void Eat();              public void Fly() {}
}                                 public void Eat() {}
                                }
Interface Segregation Principle
   public class Emu : IBird {
     public void Chirp() {}
     public void Flap() {}
     public void Fly() {}
     public void Eat() {
        throw new NotImplementedException();
     }
   }
Interface Segregation Principle

    public interface IBird {
      public void Chirp();
      public void Flap();
      public void Eat();
    }

    public interface IFlyingBird : IBird {
      public void Fly();
    }

    public class Emu : IBird {
      public void Chirp() {}
      public void Flap() {}
      public void Fly() {}
    }
Dependency Inversion Principle
Depend on abstractions, not on implementations. Anything
required to create a valid instance of an object, should have those
dependencies passed in as arguments to the constructor


   Higher level classes to depend on abstractions of lower level
    classes (swappable)
        public class Employee {
         public Employee() {
           FavCoffee = new Cappuccino();
           Skills = new List<Skills> {
              new MSAccessSkill(),
              new SharePointSkill(),
              new DotNetNukeSkill()
           }
         }
    }
Dependency Inversion Principle
 public class Employee {
   public Employee(IDrinkable iamthirsty, IEnumerable<Skills> skills) {}
 }
Dependency Inversion Principle




var MarkLiu = new Employee(             var EricPhan = new Employee(
  CoffeeFactory.Get(“Skim Cappuccino”),   CoffeeFactory.Get(“Latte”),
  new List<Skills> {                      new List<Skills> {
    new MSAccessSkill(),                    new BusinessIntelligenceSkill(),
    new SharePointSkill(),                  new MVC4Skill(),
    new DotNetNukeSkill()                   new DotNetSkill()
  });                                     });
Do you know the common Design
 Patterns?
     ?

 “Communicate massive amount of data in a few words”

     Adam Cogan



 “Accepted solutions to well known problems”

     Ben Day



http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouKnowCom
monDesignPatterns.aspx
Do you know the common Design
 Patterns?
     Inversion of Control              Abstract factory                  Iterator

     Dependency Injection              Adapter                           Visitor

     Factory                           Bridge                            State

     Singleton                         Mediator                          Composite

     Repository                        Proxy                             Facade

     Unit of Work                      Flyweight                         Observer

     MVC                               Chain of responsibility           Decorator

     MVP                               Command                           Null object

     MVVM                              Memento                           Interpreter


http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouKnowCom
monDesignPatterns.aspx
Anti-
Patterns
Abstractness vs Instability Diagram
   Shows the assemblies that are painful to
    maintain
          i.e concrete and stable, and
    which assemblies are potentially useless
          i.e abstract and instable

   Abstract: The assembly contains many abstract
    types (i.e interfaces and abstract classes) and
    few concrete types

   Stable: The assembly is considered stable if its
    types are used by a lot of types of tier
    assemblies. In this condition stable means painful
    to modify.
Do you start reading code?
Comments
   Q: Good or Bad?

   Comments are a smell

   Includes comments that explain the intent (the why rather than
    the what)
Do you start reading code?
     Is clear and easy to read

     Has consistent and meaningful names for everything

     Has no duplicate or redundant code

     Has consistent styles and formatting

     Explains "why" when you read down, and "how" when you
      read left to right




http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouStartReadi
ngCode.aspx
Do you know Code Reviews after
check in are bad?
   If you are aiming to get the to nirvana of Continuous
    Deployment, then you cant *rely* on code reviews after the
    fact.

   Code Reviews have different status:
    * Important
    * Nice to have
The Scenario
   Mark is migrating from DotNetNuke to MVC

   He‟s unsure of his code because he doesn‟t know Razor

   Add some code with a comment „this could be done better‟

   Checks in anyway
Use the Code Review tools in TFS
2012
   TFS 2012 has built in Code Review tools

   Hooks into the check-in/shelving process

   This allows code to be manually reviewed before checking in
Suspend current changes
Request a Review
Assign
Reviewer
Reviewer Gets
the Request
Check out the
changeset
           Related work
              items




            Modified files
Shows the
changed code
Side by Side
(Standard Diff)
#2
#1
Finalizing the Code Review
Check the
Code Review
Check any
comments
View code marked for review
Mark any flagged
code as completed
Mark the Code Review as Complete
Code Review Summary
     Today: Developer does some work and wants to get it
      checked before committing to source control

     Suggestion to MS: Add a new scenario
          No touching of code
          Architect „Adds comments‟ during code review
          Automatically adds the developers who originally worked on that
           section (instead of manually using annotate)
          Creates “Code Review” work items




http://www.ssw.com.au/ssw/Standards/BetterSoftwareSuggestions/TeamFoundationServer.aspx
Resources
   Thanks: Eric Phan and Adam Stephensen

   Thanks: Marcel De Vries and Terje Sandstrom



   Google: ssw tv architecture code reviews

   http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterAr
    chitectureandCodeReview/
Summary
•   #1 The 1st things to look out for
        •   Processes
        •   Does it work?
        •   Documentation
•   #2 High Level tools
        •   Architecture
        •   Code Analysis
        •   Code Metrics
•   #3 Manual Checking
        •   SOLID Design Principles
        •   Code Review tools
Evaluations + 2 things
   Include best tip or tool you heard. Plus your tip to me.


   @adamcogan
    or
    AdamCogan@ssw.com.au


   Come and visit us (+ Sydney .NET User Group)

   Come and visit Damian Brady, Steven Nagy (+ Brisbane .NET User Group)
Thank You!
Sydney | Melbourne | Brisbane | Adelaide



info@ssw.com.au

www.ssw.com.au




                                           Delivering Awesome Web Applications
Questions?
Take a business card.
Refactoring
   Level 1: Minimum

   Level 2: Custom



   Note: All disabled ones to be documented
    eg. http://www.benday.com/2010/03/15/article-static-methods-
    are-a-code-smell/

More Related Content

What's hot

Automated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and JenkinsAutomated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and JenkinsWork at Play
 
Continuous Delivery: The Dirty Details
Continuous Delivery: The Dirty DetailsContinuous Delivery: The Dirty Details
Continuous Delivery: The Dirty DetailsMike Brittain
 
Introduction to Team Foundation Server (TFS) Online
Introduction to Team Foundation Server (TFS) OnlineIntroduction to Team Foundation Server (TFS) Online
Introduction to Team Foundation Server (TFS) OnlineDenis Voituron
 
Test Automation With Cucumber JVM, Selenium, and Mocha
Test Automation With Cucumber JVM, Selenium, and MochaTest Automation With Cucumber JVM, Selenium, and Mocha
Test Automation With Cucumber JVM, Selenium, and MochaSalesforce Developers
 
Shift left-csun-sagar-barbhaya
Shift left-csun-sagar-barbhayaShift left-csun-sagar-barbhaya
Shift left-csun-sagar-barbhayaSAGAR BARBHAYA
 
TFS 2010: Team Development on Crack
TFS 2010: Team Development on CrackTFS 2010: Team Development on Crack
TFS 2010: Team Development on CrackSteve Lange
 
Office Add-ins community call-March 2019
Office Add-ins community call-March 2019Office Add-ins community call-March 2019
Office Add-ins community call-March 2019Microsoft 365 Developer
 
DevOps: Sprinkle Dev, Sprinkle Ops, Let's make Cake, not Mud Pies
DevOps: Sprinkle Dev, Sprinkle Ops, Let's make Cake, not Mud PiesDevOps: Sprinkle Dev, Sprinkle Ops, Let's make Cake, not Mud Pies
DevOps: Sprinkle Dev, Sprinkle Ops, Let's make Cake, not Mud PiesCentric Consulting
 
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...Stefan Richter
 
Lap Around Visual Studio 2010 Ultimate And TFS 2010
Lap Around Visual Studio 2010 Ultimate And TFS 2010Lap Around Visual Studio 2010 Ultimate And TFS 2010
Lap Around Visual Studio 2010 Ultimate And TFS 2010Ed Blankenship
 
Selenium + Specflow
Selenium + SpecflowSelenium + Specflow
Selenium + Specflowcromwellryan
 
[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOps
[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOps[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOps
[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOpsKMS Technology
 
Testing lightning components feb 15th 2018
Testing lightning components feb 15th 2018Testing lightning components feb 15th 2018
Testing lightning components feb 15th 2018Richard Clark
 
JavaOne - Performance Focused DevOps to Improve Cont Delivery
JavaOne - Performance Focused DevOps to Improve Cont DeliveryJavaOne - Performance Focused DevOps to Improve Cont Delivery
JavaOne - Performance Focused DevOps to Improve Cont DeliveryAndreas Grabner
 
Automated Visual Regression Testing by Dave Sadlon
Automated Visual Regression Testing by Dave SadlonAutomated Visual Regression Testing by Dave Sadlon
Automated Visual Regression Testing by Dave SadlonQA or the Highway
 
StarWest 2013 Performance is not an afterthought – make it a part of your Agi...
StarWest 2013 Performance is not an afterthought – make it a part of your Agi...StarWest 2013 Performance is not an afterthought – make it a part of your Agi...
StarWest 2013 Performance is not an afterthought – make it a part of your Agi...Andreas Grabner
 
Testing for Logic App Solutions | Integration Monday
Testing for Logic App Solutions | Integration MondayTesting for Logic App Solutions | Integration Monday
Testing for Logic App Solutions | Integration MondayBizTalk360
 
Bit Rot in the Docs
Bit Rot in the DocsBit Rot in the Docs
Bit Rot in the DocsSarah Maddox
 
Behat bdd training (php) course slides pdf
Behat bdd training (php) course slides pdfBehat bdd training (php) course slides pdf
Behat bdd training (php) course slides pdfseleniumbootcamp
 

What's hot (20)

Automated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and JenkinsAutomated Testing With Jasmine, PhantomJS and Jenkins
Automated Testing With Jasmine, PhantomJS and Jenkins
 
Continuous Delivery: The Dirty Details
Continuous Delivery: The Dirty DetailsContinuous Delivery: The Dirty Details
Continuous Delivery: The Dirty Details
 
Introduction to Team Foundation Server (TFS) Online
Introduction to Team Foundation Server (TFS) OnlineIntroduction to Team Foundation Server (TFS) Online
Introduction to Team Foundation Server (TFS) Online
 
Test Automation With Cucumber JVM, Selenium, and Mocha
Test Automation With Cucumber JVM, Selenium, and MochaTest Automation With Cucumber JVM, Selenium, and Mocha
Test Automation With Cucumber JVM, Selenium, and Mocha
 
Shift left-csun-sagar-barbhaya
Shift left-csun-sagar-barbhayaShift left-csun-sagar-barbhaya
Shift left-csun-sagar-barbhaya
 
TFS 2010: Team Development on Crack
TFS 2010: Team Development on CrackTFS 2010: Team Development on Crack
TFS 2010: Team Development on Crack
 
Office Add-ins community call-March 2019
Office Add-ins community call-March 2019Office Add-ins community call-March 2019
Office Add-ins community call-March 2019
 
DevOps: Sprinkle Dev, Sprinkle Ops, Let's make Cake, not Mud Pies
DevOps: Sprinkle Dev, Sprinkle Ops, Let's make Cake, not Mud PiesDevOps: Sprinkle Dev, Sprinkle Ops, Let's make Cake, not Mud Pies
DevOps: Sprinkle Dev, Sprinkle Ops, Let's make Cake, not Mud Pies
 
React a11y-csun
React a11y-csunReact a11y-csun
React a11y-csun
 
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...
Using Clojure, NoSQL Databases and Functional-Style JavaScript to Write Gext-...
 
Lap Around Visual Studio 2010 Ultimate And TFS 2010
Lap Around Visual Studio 2010 Ultimate And TFS 2010Lap Around Visual Studio 2010 Ultimate And TFS 2010
Lap Around Visual Studio 2010 Ultimate And TFS 2010
 
Selenium + Specflow
Selenium + SpecflowSelenium + Specflow
Selenium + Specflow
 
[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOps
[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOps[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOps
[Webinar] Test First, Fail Fast - Simplifying the Tester's Transition to DevOps
 
Testing lightning components feb 15th 2018
Testing lightning components feb 15th 2018Testing lightning components feb 15th 2018
Testing lightning components feb 15th 2018
 
JavaOne - Performance Focused DevOps to Improve Cont Delivery
JavaOne - Performance Focused DevOps to Improve Cont DeliveryJavaOne - Performance Focused DevOps to Improve Cont Delivery
JavaOne - Performance Focused DevOps to Improve Cont Delivery
 
Automated Visual Regression Testing by Dave Sadlon
Automated Visual Regression Testing by Dave SadlonAutomated Visual Regression Testing by Dave Sadlon
Automated Visual Regression Testing by Dave Sadlon
 
StarWest 2013 Performance is not an afterthought – make it a part of your Agi...
StarWest 2013 Performance is not an afterthought – make it a part of your Agi...StarWest 2013 Performance is not an afterthought – make it a part of your Agi...
StarWest 2013 Performance is not an afterthought – make it a part of your Agi...
 
Testing for Logic App Solutions | Integration Monday
Testing for Logic App Solutions | Integration MondayTesting for Logic App Solutions | Integration Monday
Testing for Logic App Solutions | Integration Monday
 
Bit Rot in the Docs
Bit Rot in the DocsBit Rot in the Docs
Bit Rot in the Docs
 
Behat bdd training (php) course slides pdf
Behat bdd training (php) course slides pdfBehat bdd training (php) course slides pdf
Behat bdd training (php) course slides pdf
 

Viewers also liked

A Study of the Quality-Impacting Practices of Modern Code Review at Sony Mobile
A Study of the Quality-Impacting Practices of Modern Code Review at Sony MobileA Study of the Quality-Impacting Practices of Modern Code Review at Sony Mobile
A Study of the Quality-Impacting Practices of Modern Code Review at Sony MobileSAIL_QU
 
ICSME 2016: Search-Based Peer Reviewers Recommendation in Modern Code Review
ICSME 2016: Search-Based Peer Reviewers Recommendation in Modern Code ReviewICSME 2016: Search-Based Peer Reviewers Recommendation in Modern Code Review
ICSME 2016: Search-Based Peer Reviewers Recommendation in Modern Code ReviewAli Ouni
 
Mining the Modern Code Review Repositories: A Dataset of People, Process and ...
Mining the Modern Code Review Repositories: A Dataset of People, Process and ...Mining the Modern Code Review Repositories: A Dataset of People, Process and ...
Mining the Modern Code Review Repositories: A Dataset of People, Process and ...Norihiro Yoshida
 
Code reviews vs Pull requests
Code reviews vs Pull requestsCode reviews vs Pull requests
Code reviews vs Pull requestsTim Pettersen
 
Git and Gerrit Code Review - Tech Talk - 2010_09_23
Git and Gerrit Code Review - Tech Talk - 2010_09_23Git and Gerrit Code Review - Tech Talk - 2010_09_23
Git and Gerrit Code Review - Tech Talk - 2010_09_23msohn
 
On to code review lessons learned at microsoft
On to code review lessons learned at microsoftOn to code review lessons learned at microsoft
On to code review lessons learned at microsoftMichaela Greiler
 
The Impact of Code Review Coverage and Participation on Software Quality
The Impact of Code Review Coverage and Participation on Software QualityThe Impact of Code Review Coverage and Participation on Software Quality
The Impact of Code Review Coverage and Participation on Software QualityShane McIntosh
 
How to successfully grow a code review culture
How to successfully grow a code review cultureHow to successfully grow a code review culture
How to successfully grow a code review cultureNina Zakharenko
 
Voxxed days 2015-hakansaglam-codereview
Voxxed days 2015-hakansaglam-codereviewVoxxed days 2015-hakansaglam-codereview
Voxxed days 2015-hakansaglam-codereviewHakan Saglam
 
Modern Code Reviews in Open Source Projects: Which Problems Do They Fix?
Modern Code Reviews in Open Source Projects: Which Problems Do They Fix?Modern Code Reviews in Open Source Projects: Which Problems Do They Fix?
Modern Code Reviews in Open Source Projects: Which Problems Do They Fix?Moritz Beller
 

Viewers also liked (11)

A Study of the Quality-Impacting Practices of Modern Code Review at Sony Mobile
A Study of the Quality-Impacting Practices of Modern Code Review at Sony MobileA Study of the Quality-Impacting Practices of Modern Code Review at Sony Mobile
A Study of the Quality-Impacting Practices of Modern Code Review at Sony Mobile
 
ICSME 2016: Search-Based Peer Reviewers Recommendation in Modern Code Review
ICSME 2016: Search-Based Peer Reviewers Recommendation in Modern Code ReviewICSME 2016: Search-Based Peer Reviewers Recommendation in Modern Code Review
ICSME 2016: Search-Based Peer Reviewers Recommendation in Modern Code Review
 
Mining the Modern Code Review Repositories: A Dataset of People, Process and ...
Mining the Modern Code Review Repositories: A Dataset of People, Process and ...Mining the Modern Code Review Repositories: A Dataset of People, Process and ...
Mining the Modern Code Review Repositories: A Dataset of People, Process and ...
 
Code reviews vs Pull requests
Code reviews vs Pull requestsCode reviews vs Pull requests
Code reviews vs Pull requests
 
Git and Gerrit Code Review - Tech Talk - 2010_09_23
Git and Gerrit Code Review - Tech Talk - 2010_09_23Git and Gerrit Code Review - Tech Talk - 2010_09_23
Git and Gerrit Code Review - Tech Talk - 2010_09_23
 
On to code review lessons learned at microsoft
On to code review lessons learned at microsoftOn to code review lessons learned at microsoft
On to code review lessons learned at microsoft
 
Code Review for iOS
Code Review for iOSCode Review for iOS
Code Review for iOS
 
The Impact of Code Review Coverage and Participation on Software Quality
The Impact of Code Review Coverage and Participation on Software QualityThe Impact of Code Review Coverage and Participation on Software Quality
The Impact of Code Review Coverage and Participation on Software Quality
 
How to successfully grow a code review culture
How to successfully grow a code review cultureHow to successfully grow a code review culture
How to successfully grow a code review culture
 
Voxxed days 2015-hakansaglam-codereview
Voxxed days 2015-hakansaglam-codereviewVoxxed days 2015-hakansaglam-codereview
Voxxed days 2015-hakansaglam-codereview
 
Modern Code Reviews in Open Source Projects: Which Problems Do They Fix?
Modern Code Reviews in Open Source Projects: Which Problems Do They Fix?Modern Code Reviews in Open Source Projects: Which Problems Do They Fix?
Modern Code Reviews in Open Source Projects: Which Problems Do They Fix?
 

Similar to A modern architecturereview–usingcodereviewtools-ver-3.5

Office Add ins community call-February 2019
Office Add ins community call-February 2019Office Add ins community call-February 2019
Office Add ins community call-February 2019Microsoft 365 Developer
 
Introducing systems analysis, design & development Concepts
Introducing systems analysis, design & development ConceptsIntroducing systems analysis, design & development Concepts
Introducing systems analysis, design & development ConceptsShafiul Azam Chowdhury
 
Clean architecture with asp.net core
Clean architecture with asp.net coreClean architecture with asp.net core
Clean architecture with asp.net coreSam Nasr, MCSA, MVP
 
Wessel Loth - Fire your Frontend Framework with Lit - TEQnation 2022.pdf
Wessel Loth - Fire your Frontend Framework with Lit - TEQnation 2022.pdfWessel Loth - Fire your Frontend Framework with Lit - TEQnation 2022.pdf
Wessel Loth - Fire your Frontend Framework with Lit - TEQnation 2022.pdfWessel Loth
 
DNN-Connect 2019: DNN Horror Stories
DNN-Connect 2019: DNN Horror StoriesDNN-Connect 2019: DNN Horror Stories
DNN-Connect 2019: DNN Horror StoriesWill Strohl
 
Continuous delivery @wcap 5-09-2013
Continuous delivery   @wcap 5-09-2013Continuous delivery   @wcap 5-09-2013
Continuous delivery @wcap 5-09-2013David Funaro
 
O365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - MaterialO365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - MaterialThomas Daly
 
Devconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developedDevconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developedAlexander Makarov
 
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"Fwdays
 
VS Code and Modern Development Environment Preview
VS Code and Modern Development Environment PreviewVS Code and Modern Development Environment Preview
VS Code and Modern Development Environment PreviewRoberto Stefanetti
 
ASAS 2014 - Simon Brown
ASAS 2014 - Simon BrownASAS 2014 - Simon Brown
ASAS 2014 - Simon BrownAvisi B.V.
 
Development Environment Tips
Development Environment TipsDevelopment Environment Tips
Development Environment TipsAdam Culp
 
BTD2015 - Your Place In DevTOps is Finding Solutions - Not Just Bugs!
BTD2015 - Your Place In DevTOps is Finding Solutions - Not Just Bugs!BTD2015 - Your Place In DevTOps is Finding Solutions - Not Just Bugs!
BTD2015 - Your Place In DevTOps is Finding Solutions - Not Just Bugs!Andreas Grabner
 
Code Review
Code ReviewCode Review
Code ReviewRavi Raj
 
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems SoftwareLessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems SoftwareDevOps for Enterprise Systems
 

Similar to A modern architecturereview–usingcodereviewtools-ver-3.5 (20)

Usable Software Design
Usable Software DesignUsable Software Design
Usable Software Design
 
Office Add ins community call-February 2019
Office Add ins community call-February 2019Office Add ins community call-February 2019
Office Add ins community call-February 2019
 
Introducing systems analysis, design & development Concepts
Introducing systems analysis, design & development ConceptsIntroducing systems analysis, design & development Concepts
Introducing systems analysis, design & development Concepts
 
Clean architecture with asp.net core
Clean architecture with asp.net coreClean architecture with asp.net core
Clean architecture with asp.net core
 
Wessel Loth - Fire your Frontend Framework with Lit - TEQnation 2022.pdf
Wessel Loth - Fire your Frontend Framework with Lit - TEQnation 2022.pdfWessel Loth - Fire your Frontend Framework with Lit - TEQnation 2022.pdf
Wessel Loth - Fire your Frontend Framework with Lit - TEQnation 2022.pdf
 
DNN-Connect 2019: DNN Horror Stories
DNN-Connect 2019: DNN Horror StoriesDNN-Connect 2019: DNN Horror Stories
DNN-Connect 2019: DNN Horror Stories
 
OOSE UNIT-1.pdf
OOSE UNIT-1.pdfOOSE UNIT-1.pdf
OOSE UNIT-1.pdf
 
Continuous delivery @wcap 5-09-2013
Continuous delivery   @wcap 5-09-2013Continuous delivery   @wcap 5-09-2013
Continuous delivery @wcap 5-09-2013
 
Raising the Bar
Raising the BarRaising the Bar
Raising the Bar
 
O365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - MaterialO365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - Material
 
In (database) automation we trust
In (database) automation we trustIn (database) automation we trust
In (database) automation we trust
 
Devconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developedDevconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developed
 
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
 
VS Code and Modern Development Environment Preview
VS Code and Modern Development Environment PreviewVS Code and Modern Development Environment Preview
VS Code and Modern Development Environment Preview
 
ASAS 2014 - Simon Brown
ASAS 2014 - Simon BrownASAS 2014 - Simon Brown
ASAS 2014 - Simon Brown
 
Kku2011
Kku2011Kku2011
Kku2011
 
Development Environment Tips
Development Environment TipsDevelopment Environment Tips
Development Environment Tips
 
BTD2015 - Your Place In DevTOps is Finding Solutions - Not Just Bugs!
BTD2015 - Your Place In DevTOps is Finding Solutions - Not Just Bugs!BTD2015 - Your Place In DevTOps is Finding Solutions - Not Just Bugs!
BTD2015 - Your Place In DevTOps is Finding Solutions - Not Just Bugs!
 
Code Review
Code ReviewCode Review
Code Review
 
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems SoftwareLessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
Lessons Learned from Large Scale Adoption of DevOps for IBM z Systems Software
 

More from SSW

ALM for CRM - George Doubinski
ALM for CRM - George DoubinskiALM for CRM - George Doubinski
ALM for CRM - George DoubinskiSSW
 
Rules to-better-video-export-process
Rules to-better-video-export-processRules to-better-video-export-process
Rules to-better-video-export-processSSW
 
VisualStudio2012-WhatsNew-TechEd_v3-9
VisualStudio2012-WhatsNew-TechEd_v3-9VisualStudio2012-WhatsNew-TechEd_v3-9
VisualStudio2012-WhatsNew-TechEd_v3-9SSW
 
Interface usability-adding-schweppervescence-ver3-8
Interface usability-adding-schweppervescence-ver3-8Interface usability-adding-schweppervescence-ver3-8
Interface usability-adding-schweppervescence-ver3-8SSW
 
SharePoint Jonah Lomu of CMS
SharePoint Jonah Lomu of CMSSharePoint Jonah Lomu of CMS
SharePoint Jonah Lomu of CMSSSW
 
Interface Usability - Adding Schweppervescence
Interface Usability - Adding SchweppervescenceInterface Usability - Adding Schweppervescence
Interface Usability - Adding SchweppervescenceSSW
 

More from SSW (6)

ALM for CRM - George Doubinski
ALM for CRM - George DoubinskiALM for CRM - George Doubinski
ALM for CRM - George Doubinski
 
Rules to-better-video-export-process
Rules to-better-video-export-processRules to-better-video-export-process
Rules to-better-video-export-process
 
VisualStudio2012-WhatsNew-TechEd_v3-9
VisualStudio2012-WhatsNew-TechEd_v3-9VisualStudio2012-WhatsNew-TechEd_v3-9
VisualStudio2012-WhatsNew-TechEd_v3-9
 
Interface usability-adding-schweppervescence-ver3-8
Interface usability-adding-schweppervescence-ver3-8Interface usability-adding-schweppervescence-ver3-8
Interface usability-adding-schweppervescence-ver3-8
 
SharePoint Jonah Lomu of CMS
SharePoint Jonah Lomu of CMSSharePoint Jonah Lomu of CMS
SharePoint Jonah Lomu of CMS
 
Interface Usability - Adding Schweppervescence
Interface Usability - Adding SchweppervescenceInterface Usability - Adding Schweppervescence
Interface Usability - Adding Schweppervescence
 

Recently uploaded

Vip Female Escorts Noida 9711199171 Greater Noida Escorts Service
Vip Female Escorts Noida 9711199171 Greater Noida Escorts ServiceVip Female Escorts Noida 9711199171 Greater Noida Escorts Service
Vip Female Escorts Noida 9711199171 Greater Noida Escorts Serviceankitnayak356677
 
/:Call Girls In Jaypee Siddharth - 5 Star Hotel New Delhi ➥9990211544 Top Esc...
/:Call Girls In Jaypee Siddharth - 5 Star Hotel New Delhi ➥9990211544 Top Esc.../:Call Girls In Jaypee Siddharth - 5 Star Hotel New Delhi ➥9990211544 Top Esc...
/:Call Girls In Jaypee Siddharth - 5 Star Hotel New Delhi ➥9990211544 Top Esc...lizamodels9
 
GD Birla and his contribution in management
GD Birla and his contribution in managementGD Birla and his contribution in management
GD Birla and his contribution in managementchhavia330
 
M.C Lodges -- Guest House in Jhang.
M.C Lodges --  Guest House in Jhang.M.C Lodges --  Guest House in Jhang.
M.C Lodges -- Guest House in Jhang.Aaiza Hassan
 
Russian Faridabad Call Girls(Badarpur) : ☎ 8168257667, @4999
Russian Faridabad Call Girls(Badarpur) : ☎ 8168257667, @4999Russian Faridabad Call Girls(Badarpur) : ☎ 8168257667, @4999
Russian Faridabad Call Girls(Badarpur) : ☎ 8168257667, @4999Tina Ji
 
BEST Call Girls In Greater Noida ✨ 9773824855 ✨ Escorts Service In Delhi Ncr,
BEST Call Girls In Greater Noida ✨ 9773824855 ✨ Escorts Service In Delhi Ncr,BEST Call Girls In Greater Noida ✨ 9773824855 ✨ Escorts Service In Delhi Ncr,
BEST Call Girls In Greater Noida ✨ 9773824855 ✨ Escorts Service In Delhi Ncr,noida100girls
 
Lowrate Call Girls In Sector 18 Noida ❤️8860477959 Escorts 100% Genuine Servi...
Lowrate Call Girls In Sector 18 Noida ❤️8860477959 Escorts 100% Genuine Servi...Lowrate Call Girls In Sector 18 Noida ❤️8860477959 Escorts 100% Genuine Servi...
Lowrate Call Girls In Sector 18 Noida ❤️8860477959 Escorts 100% Genuine Servi...lizamodels9
 
Non Text Magic Studio Magic Design for Presentations L&P.pptx
Non Text Magic Studio Magic Design for Presentations L&P.pptxNon Text Magic Studio Magic Design for Presentations L&P.pptx
Non Text Magic Studio Magic Design for Presentations L&P.pptxAbhayThakur200703
 
Vip Dewas Call Girls #9907093804 Contact Number Escorts Service Dewas
Vip Dewas Call Girls #9907093804 Contact Number Escorts Service DewasVip Dewas Call Girls #9907093804 Contact Number Escorts Service Dewas
Vip Dewas Call Girls #9907093804 Contact Number Escorts Service Dewasmakika9823
 
rishikeshgirls.in- Rishikesh call girl.pdf
rishikeshgirls.in- Rishikesh call girl.pdfrishikeshgirls.in- Rishikesh call girl.pdf
rishikeshgirls.in- Rishikesh call girl.pdfmuskan1121w
 
Grateful 7 speech thanking everyone that has helped.pdf
Grateful 7 speech thanking everyone that has helped.pdfGrateful 7 speech thanking everyone that has helped.pdf
Grateful 7 speech thanking everyone that has helped.pdfPaul Menig
 
RE Capital's Visionary Leadership under Newman Leech
RE Capital's Visionary Leadership under Newman LeechRE Capital's Visionary Leadership under Newman Leech
RE Capital's Visionary Leadership under Newman LeechNewman George Leech
 
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...anilsa9823
 
Insurers' journeys to build a mastery in the IoT usage
Insurers' journeys to build a mastery in the IoT usageInsurers' journeys to build a mastery in the IoT usage
Insurers' journeys to build a mastery in the IoT usageMatteo Carbone
 
A DAY IN THE LIFE OF A SALESMAN / WOMAN
A DAY IN THE LIFE OF A  SALESMAN / WOMANA DAY IN THE LIFE OF A  SALESMAN / WOMAN
A DAY IN THE LIFE OF A SALESMAN / WOMANIlamathiKannappan
 
VIP Call Girl Jamshedpur Aashi 8250192130 Independent Escort Service Jamshedpur
VIP Call Girl Jamshedpur Aashi 8250192130 Independent Escort Service JamshedpurVIP Call Girl Jamshedpur Aashi 8250192130 Independent Escort Service Jamshedpur
VIP Call Girl Jamshedpur Aashi 8250192130 Independent Escort Service JamshedpurSuhani Kapoor
 
VIP Kolkata Call Girl Howrah 👉 8250192130 Available With Room
VIP Kolkata Call Girl Howrah 👉 8250192130  Available With RoomVIP Kolkata Call Girl Howrah 👉 8250192130  Available With Room
VIP Kolkata Call Girl Howrah 👉 8250192130 Available With Roomdivyansh0kumar0
 
Cash Payment 9602870969 Escort Service in Udaipur Call Girls
Cash Payment 9602870969 Escort Service in Udaipur Call GirlsCash Payment 9602870969 Escort Service in Udaipur Call Girls
Cash Payment 9602870969 Escort Service in Udaipur Call GirlsApsara Of India
 
7.pdf This presentation captures many uses and the significance of the number...
7.pdf This presentation captures many uses and the significance of the number...7.pdf This presentation captures many uses and the significance of the number...
7.pdf This presentation captures many uses and the significance of the number...Paul Menig
 

Recently uploaded (20)

Vip Female Escorts Noida 9711199171 Greater Noida Escorts Service
Vip Female Escorts Noida 9711199171 Greater Noida Escorts ServiceVip Female Escorts Noida 9711199171 Greater Noida Escorts Service
Vip Female Escorts Noida 9711199171 Greater Noida Escorts Service
 
/:Call Girls In Jaypee Siddharth - 5 Star Hotel New Delhi ➥9990211544 Top Esc...
/:Call Girls In Jaypee Siddharth - 5 Star Hotel New Delhi ➥9990211544 Top Esc.../:Call Girls In Jaypee Siddharth - 5 Star Hotel New Delhi ➥9990211544 Top Esc...
/:Call Girls In Jaypee Siddharth - 5 Star Hotel New Delhi ➥9990211544 Top Esc...
 
GD Birla and his contribution in management
GD Birla and his contribution in managementGD Birla and his contribution in management
GD Birla and his contribution in management
 
M.C Lodges -- Guest House in Jhang.
M.C Lodges --  Guest House in Jhang.M.C Lodges --  Guest House in Jhang.
M.C Lodges -- Guest House in Jhang.
 
Russian Faridabad Call Girls(Badarpur) : ☎ 8168257667, @4999
Russian Faridabad Call Girls(Badarpur) : ☎ 8168257667, @4999Russian Faridabad Call Girls(Badarpur) : ☎ 8168257667, @4999
Russian Faridabad Call Girls(Badarpur) : ☎ 8168257667, @4999
 
BEST Call Girls In Greater Noida ✨ 9773824855 ✨ Escorts Service In Delhi Ncr,
BEST Call Girls In Greater Noida ✨ 9773824855 ✨ Escorts Service In Delhi Ncr,BEST Call Girls In Greater Noida ✨ 9773824855 ✨ Escorts Service In Delhi Ncr,
BEST Call Girls In Greater Noida ✨ 9773824855 ✨ Escorts Service In Delhi Ncr,
 
Lowrate Call Girls In Sector 18 Noida ❤️8860477959 Escorts 100% Genuine Servi...
Lowrate Call Girls In Sector 18 Noida ❤️8860477959 Escorts 100% Genuine Servi...Lowrate Call Girls In Sector 18 Noida ❤️8860477959 Escorts 100% Genuine Servi...
Lowrate Call Girls In Sector 18 Noida ❤️8860477959 Escorts 100% Genuine Servi...
 
Non Text Magic Studio Magic Design for Presentations L&P.pptx
Non Text Magic Studio Magic Design for Presentations L&P.pptxNon Text Magic Studio Magic Design for Presentations L&P.pptx
Non Text Magic Studio Magic Design for Presentations L&P.pptx
 
Vip Dewas Call Girls #9907093804 Contact Number Escorts Service Dewas
Vip Dewas Call Girls #9907093804 Contact Number Escorts Service DewasVip Dewas Call Girls #9907093804 Contact Number Escorts Service Dewas
Vip Dewas Call Girls #9907093804 Contact Number Escorts Service Dewas
 
rishikeshgirls.in- Rishikesh call girl.pdf
rishikeshgirls.in- Rishikesh call girl.pdfrishikeshgirls.in- Rishikesh call girl.pdf
rishikeshgirls.in- Rishikesh call girl.pdf
 
Grateful 7 speech thanking everyone that has helped.pdf
Grateful 7 speech thanking everyone that has helped.pdfGrateful 7 speech thanking everyone that has helped.pdf
Grateful 7 speech thanking everyone that has helped.pdf
 
RE Capital's Visionary Leadership under Newman Leech
RE Capital's Visionary Leadership under Newman LeechRE Capital's Visionary Leadership under Newman Leech
RE Capital's Visionary Leadership under Newman Leech
 
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...
 
Insurers' journeys to build a mastery in the IoT usage
Insurers' journeys to build a mastery in the IoT usageInsurers' journeys to build a mastery in the IoT usage
Insurers' journeys to build a mastery in the IoT usage
 
A DAY IN THE LIFE OF A SALESMAN / WOMAN
A DAY IN THE LIFE OF A  SALESMAN / WOMANA DAY IN THE LIFE OF A  SALESMAN / WOMAN
A DAY IN THE LIFE OF A SALESMAN / WOMAN
 
VIP Call Girl Jamshedpur Aashi 8250192130 Independent Escort Service Jamshedpur
VIP Call Girl Jamshedpur Aashi 8250192130 Independent Escort Service JamshedpurVIP Call Girl Jamshedpur Aashi 8250192130 Independent Escort Service Jamshedpur
VIP Call Girl Jamshedpur Aashi 8250192130 Independent Escort Service Jamshedpur
 
VIP Kolkata Call Girl Howrah 👉 8250192130 Available With Room
VIP Kolkata Call Girl Howrah 👉 8250192130  Available With RoomVIP Kolkata Call Girl Howrah 👉 8250192130  Available With Room
VIP Kolkata Call Girl Howrah 👉 8250192130 Available With Room
 
Cash Payment 9602870969 Escort Service in Udaipur Call Girls
Cash Payment 9602870969 Escort Service in Udaipur Call GirlsCash Payment 9602870969 Escort Service in Udaipur Call Girls
Cash Payment 9602870969 Escort Service in Udaipur Call Girls
 
7.pdf This presentation captures many uses and the significance of the number...
7.pdf This presentation captures many uses and the significance of the number...7.pdf This presentation captures many uses and the significance of the number...
7.pdf This presentation captures many uses and the significance of the number...
 
Forklift Operations: Safety through Cartoons
Forklift Operations: Safety through CartoonsForklift Operations: Safety through Cartoons
Forklift Operations: Safety through Cartoons
 

A modern architecturereview–usingcodereviewtools-ver-3.5

  • 1. A Modern Architecture Review Using Code Review Tools @AdamCogan | #vsalm #tee12 #dev324 Delivering Awesome Web Applications
  • 2.
  • 3. Agenda • #1 The 1st things to look out for • Processes • Does it work? • Documentation • #2 High Level tools • Architecture • Code Analysis • Code Metrics • #3 Manual Checking • SOLID Design Principles • Code Review tools V9.5
  • 4. About Adam  Chief Architect at SSW  Developing custom solutions for businesses across a range of industries such as Government, banking, insurance  Microsoft Gold Partner  Microsoft Regional Director  VSTS MVP  @AdamCogan
  • 5.
  • 6.
  • 8. The first things to look out for
  • 9. Do you evaluate the processes?  Often times this is the source of problems  Are devs getting bogged down in the UI?  Do you have a Scrum Master?  Do you have continuous integration?  Do you have continuous deployment?  Do you have a Schema Master?  Do you have a TFS Master? http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouHaveTheD esignersFixingUpTheUI.aspx
  • 10. Are they on the latest version?  …of VS  …of TFS  Alternatively for a „Gold Star‟ …  Resharper, add-ins, extensions http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
  • 11. Can you „Get latest‟ and compile? #L1  It's amazing how often you can't simply do a "Get Latest" and compile  Add _Instructions_Compile.docx  Then run unit tests… http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
  • 12. Can you get latest and compile? #L1  See the Integration.Test project fail  Add _Instructions_Compile.docx http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
  • 13. Can you get latest and compile? #L2  Creation of the database via scripts (incremental) Tip: use OSQL, SQLCMD or SSW SQL Deploy  and re-run the tests. They will now pass.
  • 14. Do you want a „Gold Star‟ ? #L3  Streamline setup of a new development environment  Problems to check for:  Windows 8 not supported  Many things to build  Lots of dependencies  Recommendation: All manual work station setup steps should be scripted with PowerShell  Recommendation: A get + compile should work within 1 minute, and work without a dev being on the domain (to support external consultants)
  • 15. PS C:CodeNorthwind> .Setup-Environment.ps1 Problem: Azure environment variable run state directory is not configured (_CSRUN_STATE_DIRECTORY). Problem: Azure Storage Service is not running. Launch the development fabric by starting the solution. WARNING: Abandoning remainder of script due to critical failures. To try and automatically resolve the problems found, re-run the script with a -Fix flag. Figure: You see the problems in the devs environment Note Prefix e.g. _01Setup-Environment.ps1
  • 16. PS C:CodeNorthwind> .Setup-Environment.ps1 -fix Problem: Azure environment variable run state directory is not configured (_CSRUN_STATE_DIRECTORY). Fixed: _CSRUN_STATE_DIRECTORY user variable set Problem: Azure Storage Service is not running. Launch the development fabric by starting the solution. WARNING: No automated fix available for 'Azure Storage Service is running' WARNING: Abandoning remainder of script due to critical failures. Figure: The script tries to automatically fix the problems
  • 17. PS C:CodeNorthwind> .Setup-Environment.ps1 -fix Problem: Azure Storage Service is not running. Launch the development fabric by starting the solution. WARNING: No automated fix available for 'Azure Storage Service is running' WARNING: Abandoning remainder of script due to critical failures. Figure: Note on 2nd run only 1 script remains – see there is less to fix
  • 18. Can you „Check In‟ and Deploy #L1  Add _Instructions_Deploy.docx  Alternatively for a „Star‟ … http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/Default.aspx
  • 19. Can you „Check In‟ and Deploy #L2  Use PowerShell scripts as your documentation  build.ps1  deploy_dev.ps1  deploy_test.ps1  deploy_prod.ps1  Alternatively for a „Gold Star‟ … TFSBuild + Portal http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/Default.aspx
  • 20. Can you „Check In‟ and Deploy #L2 TFSBuild + Portal
  • 21. The compile problem…. A team issue? Does it matter? No? http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
  • 22. Methods of compiling [Pain] ? http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
  • 23.
  • 24. Tip: Should you compile? [Pain]  Look at the page…  Alt+Tab to Visual studio  Modify file  Save  F5  Wait 15 sec…  Change the url (sometimes a crazy error)…  Hit F5… Wait 5 sec  Review change… (report) http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
  • 25. Tip: Should you compile? [Pain] http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
  • 26. Tip: Should you compile? [Pain] http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/CanYouGetLatestAndCompile.aspx
  • 27. Do you review the Solution and Project names?  The name of your solution and the names of the project in your solution should be consistent http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouReviewThe SolutionName.aspx
  • 28.
  • 29. Do you review the documentation?  Old School:  Heavy, long documents  Sequence Diagrams  UML http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouReviewThe Documentation.aspx
  • 30.
  • 31.
  • 32. Suggestions for doco e.g. Enterprise Architect  Use Red for unimplemented stuff  Use the DateTime shape To see the last time the diagram was modified and by whom  Mark items as „TODO: Adam‟. For items still pending
  • 33. Do you review the documentation  New School:  4 docs • Business.docx • _Instructions_Compile.docx • _Instructions_Deploy.docx • Technologies.docx  Unit Tests (low level)  Code and Work Items (low level  PBI)
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39. Vote:
  • 41. Agenda • #1 The 1st things to look out for • Processes • Does it work? • Documentation • #2 High Level tools • Architecture • Code Analysis • Code Metrics • #3 Manual Checking • SOLID Design Principles • Code Review tools
  • 42. Do you look at the architecture?  2 Choices:  VS Dependency Graph or … ? • Ultimate Edition + Take screenshots  nDepend ? • 3rd Party Tool for a few hundred $ + Take screenshots • Bad - Attach… Detach…. Noisy UI • Bad - Complicated • Good - No need for VS Ultimate • Bonus: See problems in the „Queries + Rules Explorer‟ • Awesome - Customizable http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouLookAtThe Architecture.aspx
  • 43.
  • 45. My Dream – instead of this
  • 46. My Dream – it automatically does this
  • 47.
  • 48. Ndepend Relationships 101 Dependancy Graphs Intro • Drill into a major relationship • Edge Thickness: # Types • [Major] Select Types | That are using me directly or indirectly Doco: Relationship | Export to HTML • Relationship | Export to Graph • Relationship | Generate a code rule that warns if this dependency exists • Relationship | View internal Dependency cycles on graph
  • 49.
  • 50. Something for the wall • http://www.ndepend.com/Res/DiagramBoxAndArrowGraphBig.jpg
  • 51. Ndepend Relationship 201 • See bidirectional relationships • Potentially not healthy • Relationship | Open this dependency on Matrix About Erosion • Much more green… then the blue is erosion • Solution? Adaptive Design… moving towards the way the software has evolved • Fix by remove the hard dependency in the wrong direction. Add some Inversion of Control (aka interfaces) in the middle
  • 52.
  • 53.
  • 54. Look at what to refactor
  • 55. Ndepend Relationships 301 Continuing….the matrix Before fixing understand the scope Right click | Build a graph representing one of the shortest paths
  • 56.
  • 57.
  • 58. Ndepend 401 The rules Q: Which ones do you care about? (use the Metrics view for a picture)
  • 59.
  • 60. Or…
  • 61. Great Overview tool and learning tool Not for day-to-day use as a code analysis tool. Note: Don‟t be distracted by a colour problem 
  • 62. The Goal for your Code Analysis?
  • 63. The Goal for your Code Analysis? Encourage team members to check in their code regularly with no Code Analysis warnings, and Code Metrics in green. Eg.
  • 64.
  • 65. Lets have a look at my Norwegian Ninja
  • 66. Do you use the best Code Analysis tools? http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouDoCodeAn alysis.aspx
  • 67. Do you use the best Code Analysis tools?  Level 1 – ReSharper – All Rules  Level 2 - VS Code Analysis (FXCop) – Default Settings  Level 3 - VS Code Analysis (FXCop) – All Rules  Level 4 – StyleCop – All Rules  Level 5 – SSW Code Auditor – All Rules ? http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouDoCodeAn alysis.aspx
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73. Do you use the best Code Analysis tools?  Level 1 – ReSharper – campsite scout rule  Level 2 - VS Code Analysis (FXCop) – Default Settings  Level 3 - VS Code Analysis (FXCop) – Custom  Level 4 – StyleCop  Level 4 – StyleCop - Custom  Level 5 – SSW Code Auditor  Level 5 – SSW Code Auditor - Custom TIP: Have a document with rules that you turn off and the reason http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouDoCodeAn alysis.aspx
  • 76. Code Analysis  Run  Options to make a Custom set (Hard UI)
  • 80. Code Analysis – Suppress #1 Add in „Suppression File‟ or in code?  ?
  • 81. Code Analysis – Suppress #2 Add in „Suppression File‟ or in code?  Rule No Good – removed from Rule Set  Rule N/A in this case – in „Suppression File‟  Rule is Valid – in this case I am overriding it
  • 82. Code Analysis – Create work item #1 Add as Bug, PBI or Task... ?
  • 83. Code Analysis – Create work item #2  Option 1: German (Neno Loje) Select 30 in a PBI Leave as warning  Option 2: Boy Scout Easy ones (all into 1 PBI) eg. Alt+Enter on Resharper Hard ones (1 per PBI)
  • 87.
  • 88. Do you check the code coverage?  See if there are unit tests  See if they are any good (~ 80% coverage) http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouLookForCodeCoverage.aspx
  • 89.
  • 90. Report time?  If you are doing a report, gather some more reports… E.g. Code Metrics, Code Coverage, Code Clones  But lets assume we are continuing to „Probe‟… So from:  SRP  …  …  Naming Conventions
  • 91. Our solution is clean now. What next?
  • 92. Agenda • #1 The 1st things to look out for • Processes • Does it work? • Documentation • #2 High Level tools • Architecture • Code Analysis • Code Metrics • #3 Manual Checking • SOLID Design Principles • Code Review tools
  • 93. Do you run Code Metrics to find dodgy code?  Use the “Hot Spots” feature to quickly identify smelly code  It measures:  Maintainability Index  Cyclomatic Complexity  Depth of Inheritance  Class Coupling  Lines of Code
  • 94.
  • 97. Manual Review  After using the automated high level tools it‟s time to actually jump into the code  Look for code that doesn‟t follow SOLID principles… and then design patterns  Speak to the devs
  • 98. SOLID Principles  Single Responsibility Principle  Open Close Principle  Liskov Substitution Principle  Interface Segregation Principle  Dependency Inversion Principle http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouKnowCom monDesignPrinciples.aspx
  • 99.
  • 100. Single Responsibility Principle  A class should have one and only one responsibility public class Address { // Standard Address Properties public Image GetGoogleMaps() {} public decimal GetDistance(Address destination) {} public bool ValidateAddress() {} }
  • 101. Single Responsibility Principle  The Address class has too many responsibilities  Showing an image of the address (tied to UI)  Calculations based on the address  Validation of the address  Another UI may use BingMaps instead of Google Maps  Some, if not all of these functions should be moved to other classes like MapHelper and AddressHelper
  • 102. Single Responsibility Principle public class AddressHelper { public decimal GetDistance(Address start, Address destination) {} public bool ValidateAddress(Address address) {} } public class GoogleMapProvider : IMapProvider { public Image GetMap(Address start) {} } public class BingMapProvider : IMapProvider { public Image GetMap(Address start) {} }
  • 103.
  • 104. Open Closed Principle  Open for extension, but closed for modification  Use Abstract base classes that specify some base functionality  E.g. In .NET WebRequest allows you to connect servers via web protocols  HttpWebRequest  FtpWebRequest  FileWebRequest
  • 105.
  • 106. Liskov‟s Substitution Principle  Subtypes must be substitutable for their base types public abstract class Duck { public abstract void Quack(); }
  • 107. Liskov‟s Substitution Principle public class PekinDuck : Duck { public void Quack() {} } public class BatteryPoweredDuck : Duck{ public BatteryPoweredDuck(Battery energizer) {} public void Quack() {} } Can‟t swap PekinDuck with BatteryPoweredDuck because you need pass it some batteries first
  • 108. Another example public class Rectangle { public class Square : Rectangle { protected int _width; public override void SetWidth(int width) { protected int _height; _width = width; _height = width; public int Width { get { return _width; } } public int Height { get { return _height; } public override void SetHeight(int height) public void SetWidth(int width) { { _width = width; _width = height; } _height = height; } public void SetHeight(int height) { } _height = height; } }
  • 109. Another Example (cont…)  If we try to use these classes var shape = new Rectangle(); shape.SetWidth(2); shape.SetHeight(5); Console.WriteLine(String.Format(“Area = {0}”, shape.Height * shape.Width)) // Prints 10 as expected (2 * 5 = 10)
  • 110. Another Example (cont…)  If we try the Square var shape = new Square(); shape.SetWidth(2); shape.SetHeight(5); Console.WriteLine(String.Format(“Area = {0}”, shape.Height * shape.Width)) // Prints 25 not as expected since we set the Width = 2 and Height = 5
  • 111. Another Example (cont..) The Square violates the Liskov substitution principle as we don‟t get expected behaviour as setting the width will also modify the height and vice versa
  • 112.
  • 113.
  • 114. Interface Segregation Principle  Don‟t create interfaces with lots of methods that don‟t necessarily get used in their implementations public interface IBird { public class MockingBird : IBird public void Chirp(); { public void Flap(); public void Chirp() {} public void Fly(); public void Flap() {} public void Eat(); public void Fly() {} } public void Eat() {} }
  • 115. Interface Segregation Principle public class Emu : IBird { public void Chirp() {} public void Flap() {} public void Fly() {} public void Eat() { throw new NotImplementedException(); } }
  • 116. Interface Segregation Principle public interface IBird { public void Chirp(); public void Flap(); public void Eat(); } public interface IFlyingBird : IBird { public void Fly(); } public class Emu : IBird { public void Chirp() {} public void Flap() {} public void Fly() {} }
  • 117.
  • 118. Dependency Inversion Principle Depend on abstractions, not on implementations. Anything required to create a valid instance of an object, should have those dependencies passed in as arguments to the constructor  Higher level classes to depend on abstractions of lower level classes (swappable) public class Employee { public Employee() { FavCoffee = new Cappuccino(); Skills = new List<Skills> { new MSAccessSkill(), new SharePointSkill(), new DotNetNukeSkill() } } }
  • 119. Dependency Inversion Principle public class Employee { public Employee(IDrinkable iamthirsty, IEnumerable<Skills> skills) {} }
  • 120. Dependency Inversion Principle var MarkLiu = new Employee( var EricPhan = new Employee( CoffeeFactory.Get(“Skim Cappuccino”), CoffeeFactory.Get(“Latte”), new List<Skills> { new List<Skills> { new MSAccessSkill(), new BusinessIntelligenceSkill(), new SharePointSkill(), new MVC4Skill(), new DotNetNukeSkill() new DotNetSkill() }); });
  • 121. Do you know the common Design Patterns?  ? “Communicate massive amount of data in a few words”  Adam Cogan “Accepted solutions to well known problems”  Ben Day http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouKnowCom monDesignPatterns.aspx
  • 122. Do you know the common Design Patterns?  Inversion of Control  Abstract factory  Iterator  Dependency Injection  Adapter  Visitor  Factory  Bridge  State  Singleton  Mediator  Composite  Repository  Proxy  Facade  Unit of Work  Flyweight  Observer  MVC  Chain of responsibility  Decorator  MVP  Command  Null object  MVVM  Memento  Interpreter http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouKnowCom monDesignPatterns.aspx
  • 124. Abstractness vs Instability Diagram  Shows the assemblies that are painful to maintain i.e concrete and stable, and which assemblies are potentially useless i.e abstract and instable  Abstract: The assembly contains many abstract types (i.e interfaces and abstract classes) and few concrete types  Stable: The assembly is considered stable if its types are used by a lot of types of tier assemblies. In this condition stable means painful to modify.
  • 125. Do you start reading code? Comments  Q: Good or Bad?  Comments are a smell  Includes comments that explain the intent (the why rather than the what)
  • 126. Do you start reading code?  Is clear and easy to read  Has consistent and meaningful names for everything  Has no duplicate or redundant code  Has consistent styles and formatting  Explains "why" when you read down, and "how" when you read left to right http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouStartReadi ngCode.aspx
  • 127. Do you know Code Reviews after check in are bad?  If you are aiming to get the to nirvana of Continuous Deployment, then you cant *rely* on code reviews after the fact.  Code Reviews have different status: * Important * Nice to have
  • 128. The Scenario  Mark is migrating from DotNetNuke to MVC  He‟s unsure of his code because he doesn‟t know Razor  Add some code with a comment „this could be done better‟  Checks in anyway
  • 129. Use the Code Review tools in TFS 2012  TFS 2012 has built in Code Review tools  Hooks into the check-in/shelving process  This allows code to be manually reviewed before checking in
  • 134. Check out the changeset Related work items Modified files
  • 136.
  • 138. #2 #1
  • 142. View code marked for review
  • 143. Mark any flagged code as completed
  • 144. Mark the Code Review as Complete
  • 145. Code Review Summary  Today: Developer does some work and wants to get it checked before committing to source control  Suggestion to MS: Add a new scenario  No touching of code  Architect „Adds comments‟ during code review  Automatically adds the developers who originally worked on that section (instead of manually using annotate)  Creates “Code Review” work items http://www.ssw.com.au/ssw/Standards/BetterSoftwareSuggestions/TeamFoundationServer.aspx
  • 146. Resources  Thanks: Eric Phan and Adam Stephensen  Thanks: Marcel De Vries and Terje Sandstrom  Google: ssw tv architecture code reviews  http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterAr chitectureandCodeReview/
  • 147. Summary • #1 The 1st things to look out for • Processes • Does it work? • Documentation • #2 High Level tools • Architecture • Code Analysis • Code Metrics • #3 Manual Checking • SOLID Design Principles • Code Review tools
  • 148. Evaluations + 2 things  Include best tip or tool you heard. Plus your tip to me.  @adamcogan or AdamCogan@ssw.com.au  Come and visit us (+ Sydney .NET User Group)  Come and visit Damian Brady, Steven Nagy (+ Brisbane .NET User Group)
  • 149. Thank You! Sydney | Melbourne | Brisbane | Adelaide info@ssw.com.au www.ssw.com.au Delivering Awesome Web Applications
  • 151. Refactoring  Level 1: Minimum  Level 2: Custom  Note: All disabled ones to be documented eg. http://www.benday.com/2010/03/15/article-static-methods- are-a-code-smell/

Editor's Notes

  1. Make more realistic