a modern architecture review

128

Upload: crwys

Post on 25-Feb-2016

76 views

Category:

Documents


0 download

DESCRIPTION

A Modern Architecture Review. Using Code Review Tools. @ AdamCogan | # vsalm #tee12 #dev324 . Agenda. #1 The 1 st 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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: A Modern Architecture Review
Page 2: A Modern Architecture Review

A Modern Architecture ReviewUsing Code Review Tools

Delivering Awesome Web Applications

@AdamCogan | #vsalm #tee12 #dev324

Page 3: A Modern Architecture Review

Click icon to add picture

Page 4: A Modern Architecture Review

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

Page 5: A Modern Architecture Review

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

About Adam

Page 6: A Modern Architecture Review
Page 8: A Modern Architecture Review

The first things to look out for

Page 9: A Modern Architecture Review

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/DoYouHaveTheDesignersFixingUpTheUI.aspx

Page 10: A Modern Architecture Review

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

Page 11: A Modern Architecture Review

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

Page 12: A Modern Architecture Review

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

Page 13: A Modern Architecture Review

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.

Page 14: A Modern Architecture Review

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)

Page 15: A Modern Architecture Review

Figure: You see the problems in the devs environmentNote Prefix eg. _01Setup-Environment.ps1

PS C:\Code\Northwind> .\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.

Page 16: A Modern Architecture Review

Figure: The script tries to automatically fix the problems

PS C:\Code\Northwind> .\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.

Page 17: A Modern Architecture Review

Figure: Note on 2nd run only 1 script remains – see there is less to fix

PS C:\Code\Northwind> .\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.

Page 18: A Modern Architecture Review

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

Page 19: A Modern Architecture Review

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

Page 20: A Modern Architecture Review

Can you ‘Check In’ and Deploy #L2TFSBuild + Portal

Page 21: A Modern Architecture Review

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/DoYouReviewTheSolutionName.aspx

Page 22: A Modern Architecture Review
Page 23: A Modern Architecture Review

Do you review the documentation? Old School:

Heavy, long documents Sequence Diagrams UML

http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouReviewTheDocumentation.aspx

Page 24: A Modern Architecture Review
Page 25: A Modern Architecture Review
Page 26: A Modern Architecture Review

Suggestions for doco eg. 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

Page 27: A Modern Architecture Review

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)

Page 28: A Modern Architecture Review
Page 29: A Modern Architecture Review
Page 30: A Modern Architecture Review
Page 31: A Modern Architecture Review
Page 32: A Modern Architecture Review
Page 33: A Modern Architecture Review

Vote:

Page 34: A Modern Architecture Review

High Level Tools

Page 35: A Modern Architecture Review

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

Page 36: A Modern Architecture Review

Do you look at the architecture? 2 Choices:

VS Dependency Graph or … ?• Ultimate Edition

nDepend ?• 3rd Party Tool for a few hundred $ • Weak dependency graph• No need for VS Ultimate• Bonus: See problems in the ‘Queries + Rules Explorer’

http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouLookAtTheArchitecture.aspx

Page 37: A Modern Architecture Review
Page 38: A Modern Architecture Review

My Dream

Page 39: A Modern Architecture Review

My Dream – instead of this

Page 40: A Modern Architecture Review

My Dream – it automatically does this

Page 41: A Modern Architecture Review
Page 42: A Modern Architecture Review
Page 43: A Modern Architecture Review

Great Overview tool and learning toolNot for day-to-day use as a code analysis tool.Note: Don’t be distracted by a colour problem

Page 45: A Modern Architecture Review

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/DoYouDoCodeAnalysis.aspx

Page 47: A Modern Architecture Review
Page 48: A Modern Architecture Review
Page 49: A Modern Architecture Review
Page 50: A Modern Architecture Review
Page 51: A Modern Architecture Review

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/DoYouDoCodeAnalysis.aspx

Page 52: A Modern Architecture Review

ReSharper

Page 53: A Modern Architecture Review

Resharper Custom

Page 54: A Modern Architecture Review

Code Analysis

Page 55: A Modern Architecture Review

Code Analysis Custom

Page 56: A Modern Architecture Review

Code Analysis – Suppress #1Add in ‘Suppression File’ or in code?

?

Page 57: A Modern Architecture Review

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

Page 58: A Modern Architecture Review

Code Analysis – Create work item #1Add as Bug, PBI or Task...

?

Page 59: A Modern Architecture Review

Code Analysis – Create work item #2Neno’s solution = Select 30 in a PBI Leave as warningAussie solution = 1 becomes a PBI

Page 60: A Modern Architecture Review

StyleCop

Page 61: A Modern Architecture Review

Code Auditor

Page 62: A Modern Architecture Review

Rules turned off

Page 63: A Modern Architecture Review

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

Page 64: A Modern Architecture Review
Page 65: A Modern Architecture Review

Report time? If you are doing a report, gather some more reports…

Eg. Code Metrics, Code Coverage, Code Clones

But lets assume we are continuing to ‘Probe’… So from: SRP … … Naming Conventions

Page 66: A Modern Architecture Review

Our solution is clean now. What next?

Page 67: A Modern Architecture Review

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

Page 68: A Modern Architecture Review

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

Page 69: A Modern Architecture Review
Page 70: A Modern Architecture Review

Code Metrics Results

Page 71: A Modern Architecture Review

Manual Checking:Getting our hands dirty

Page 72: A Modern Architecture Review

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

Page 73: A Modern Architecture Review

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/DoYouKnowCommonDesignPrinciples.aspx

Page 74: A Modern Architecture Review
Page 75: A Modern Architecture Review

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() {}}

Page 76: A Modern Architecture Review

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

Page 77: A Modern Architecture Review

Single Responsibility Principlepublic 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) {}}

Page 78: A Modern Architecture Review
Page 79: A Modern Architecture Review

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

Page 80: A Modern Architecture Review
Page 81: A Modern Architecture Review

Liskov’s Substitution Principle Subtypes must be substitutable for their base typespublic abstract class Duck { public abstract void Quack();}

Page 82: A Modern Architecture Review

Liskov’s Substitution Principlepublic 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

Page 83: A Modern Architecture Review

Another examplepublic class Rectangle { protected int _width; protected int _height; public int Width { get { return _width; } public int Height { get { return _height; } public void SetWidth(int width) { _width = width; } public void SetHeight(int height) { _height = height; }}

public class Square : Rectangle { public override void SetWidth(int width) { _width = width; _height = width; } public override void SetHeight(int height) { _width = height; _height = height; }}

Page 84: A Modern Architecture Review

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)

Page 85: A Modern Architecture Review

Another Example (cont…) If we try the Squarevar 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

Page 86: A Modern Architecture Review

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

Page 87: A Modern Architecture Review
Page 88: A Modern Architecture Review
Page 89: A Modern Architecture Review

Interface Segregation Principle Don’t create interfaces with lots of methods that

don’t necessarily get used in their implementationspublic interface IBird {

public void Chirp(); public void Flap(); public void Fly(); public void Eat();}

public class MockingBird : IBird { public void Chirp() {} public void Flap() {} public void Fly() {} public void Eat() {}}

Page 90: A Modern Architecture Review

Interface Segregation Principlepublic class Emu : IBird { public void Chirp() {} public void Flap() {} public void Fly() {} public void Eat() { throw new NotImplementedException(); }}

Page 91: A Modern Architecture Review

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() {}}

Page 92: A Modern Architecture Review
Page 93: A Modern Architecture Review

Dependency Inversion PrincipleDepend 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() } } }

Page 94: A Modern Architecture Review

Dependency Inversion Principlepublic class Employee { public Employee(IDrinkable iamthirsty, IEnumerable<Skills> skills) {} }

Page 95: A Modern Architecture Review

Dependency Inversion Principle

var MarkLiu = new Employee( CoffeeFactory.Get(“Skim Cappuccino”), new List<Skills> { new MSAccessSkill(), new SharePointSkill(), new DotNetNukeSkill() });

var EricPhan = new Employee( CoffeeFactory.Get(“Latte”), new List<Skills> { new BusinessIntelligenceSkill(), new MVC4Skill(), new DotNetSkill() });

Page 96: A Modern Architecture Review

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/DoYouKnowCommonDesignPatterns.aspx

Page 97: A Modern Architecture Review

Do you know the common Design Patterns? Inversion of Control Dependency Injection Factory Singleton Repository Unit of Work MVC MVP MVVM

http://rules.ssw.com.au/SoftwareDevelopment/RulestobetterArchitectureandCodeReview/Pages/DoYouKnowCommonDesignPatterns.aspx

Abstract factory Adapter Bridge Mediator Proxy Flyweight Chain of

responsibility Command Memento

Iterator Visitor State Composite Facade Observer Decorator Null object Interpreter

Page 98: A Modern Architecture Review

Anti-Patterns

Page 99: A Modern Architecture Review

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.

Page 100: A Modern Architecture Review

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)

Page 101: A Modern Architecture Review

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/DoYouStartReadingCode.aspx

Page 102: A Modern Architecture Review

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

Page 103: A Modern Architecture Review

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

Page 104: A Modern Architecture Review

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

Page 105: A Modern Architecture Review

Suspend current changes

Page 106: A Modern Architecture Review

Request a Review

Page 107: A Modern Architecture Review

Assign Reviewer

Page 108: A Modern Architecture Review

Reviewer Gets the Request

Page 109: A Modern Architecture Review

Check out the changeset

Related work items

Modified files

Page 110: A Modern Architecture Review

Shows the changed code

Page 111: A Modern Architecture Review
Page 112: A Modern Architecture Review

Side by Side (Standard Diff)

Page 113: A Modern Architecture Review

#1#2

Page 114: A Modern Architecture Review

Finalizing the Code Review

Page 115: A Modern Architecture Review

Check the Code Review

Page 116: A Modern Architecture Review

Check any comments

Page 117: A Modern Architecture Review

View code marked for review

Page 118: A Modern Architecture Review

Mark any flagged code as completed

Page 119: A Modern Architecture Review

Mark the Code Review as Complete

Page 120: A Modern Architecture Review

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

Page 122: A Modern Architecture Review

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

Page 123: A Modern Architecture Review

Evaluations + 2 things Include best tip or tool you heard. Plus your tip to

me.

@[email protected]

Come and visit me (+ Sydney .NET User Group)

Page 124: A Modern Architecture Review

Delivering Awesome Web Applications

Thank You!Sydney | Melbourne | Brisbane | Adelaide

[email protected]

www.ssw.com.au

Page 125: A Modern Architecture Review

Questions? Take a business card.

Page 127: A Modern Architecture Review

Resources

Connect. Share. Discuss.http://europe.msteched.com

Learning

Microsoft Certification & Training Resourceswww.microsoft.com/learning

TechNet

Resources for IT Professionalshttp://microsoft.com/technet

Resources for Developershttp://microsoft.com/msdn

Page 128: A Modern Architecture Review

Evaluations

http://europe.msteched.com/sessions

Submit your evals online