code crime scene

40
CODE CRIME SCENE VERSION 1.2 Paweł Klimczyk Gemotial 2017

Upload: pawel-klimczyk

Post on 11-Apr-2017

46 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Code Crime Scene

CODE CRIME SCENE

VERSION 1.2

Paweł KlimczykGemotial 2017

Page 2: Code Crime Scene

About me

■Software engineer■Running Gemotial Software Studio ■Co-organizer of WrocNET■Blog: http://blog.klimczyk.pl■Contact:

– Twitter: @pwlklm– Mail: [email protected]

Page 3: Code Crime Scene

What is a crime scene? (1)

■Duplicate Code■Long Method■Comments■Long Parameter List■Large Class■Switch Statements■Parallel Inheritance

Hierarchies■Conditional Complexity■Combinitorial Explosion■Uncommunicative Name■Dead Code■Inconsistent Names■Temporary Field

Page 4: Code Crime Scene

What is a crime scene? (2)■Alternative Classes

with Different Interfaces

■Primitive ObsessionData Class

■Data Clumps■Refused Bequest■Inappropriate

Intimacy■Indecent Exposure■Feature Envy

■Lazy Class■Message Chains■Middle Man■Divergent Change■Shotgun Surgery ■Parallel Inheritance

Hierarchies■Incomplete Library

Class■Solution Sprawl

Page 5: Code Crime Scene

Crime scene samples – code level

Page 6: Code Crime Scene

Crime scene samples – class level

Page 7: Code Crime Scene

Crime scene samples – SOLID violation

Page 8: Code Crime Scene

Crime scene samples – multiple test assertions

Page 9: Code Crime Scene

SmartStore.NET introduction

https://github.com/smartstoreag/SmartStoreNET

SmartStore.NET is a free, open source, full-featured e-commerce solution for companies of any size. It is web standards compliant and incorporates the newest Microsoft web technology stack.

SmartStore.NET includes all essential features to create multilingual and multi-currency stores targeting desktop or mobile devices and enabling SEO optimized rich product catalogs with support for an unlimited number of products and categories, variants, bundles, datasheets, ESD, discounts, coupons and many more.

The state-of-the-art architecture of SmartStore.NET - with ASP.NET 4.5 + MVC 5, Entity Framework 6 and Domain Driven Design approach - makes it easy to extend, extremely flexible and essentially fun to work with ;-)

Page 10: Code Crime Scene

SmartStore.NET production deployments

■http://2stonedshop.de/■http://indo-divers.de/■http://www.adr-shop.com/■http://www.mobilesat.co.uk/

trendspro.builtwith.com +500 online stores

Page 11: Code Crime Scene

SmartStore.NET Screen (1)

Page 12: Code Crime Scene

SmartStore.NET Screen (2)

Page 13: Code Crime Scene

SmartStore.NET Screen (3)

Page 14: Code Crime Scene

CodeBase Stats (June 2016)

Page 15: Code Crime Scene

Finding the crime

How to find code crime in

project ?

Page 16: Code Crime Scene

Code crime scene (Ndepend)

•Dependency graph•Dependency matrix• LINQ queries•Code quality metrics

(+custom)•More…

Page 17: Code Crime Scene

NDepend – Project overview

Page 18: Code Crime Scene

NDepend – Dependency diagram

Page 19: Code Crime Scene

NDepend – Dependency matrix

Page 20: Code Crime Scene

NDepend – Metricts

Page 21: Code Crime Scene

NDepend – Cyclomatic complexity

Page 22: Code Crime Scene

NDepend – SOLID violation (S)

Page 23: Code Crime Scene

NDepend – SOLID violation (I)

Page 24: Code Crime Scene

NDepend – Code coverage

Page 25: Code Crime Scene

NDepend – Coupling

Page 26: Code Crime Scene

NDepend – GC.Collect

Page 27: Code Crime Scene

June – October 2016 compare

Page 28: Code Crime Scene

Source control systems – measure behavior* 1a660f0 | (HEAD -> master, origin/master, origin/HEAD) dd (Fri May 13 17:03:40 2016) [User1]* dfcd431 | screenshots attepmt 2 (Fri May 13 16:59:35 2016) [User1]* f29f63e | Apropriate screenshotting added (Fri May 13 16:54:46 2016) [User1]* 9203bdb | disabled native events for IE (Fri May 13 16:38:44 2016) [User1]* 45a6f12 | More setting for screenshots (Fri May 13 15:13:36 2016) [User1]* 690180c | IE only (Fri May 13 15:01:22 2016) [User1]* b687d21 | ScreenShots added (Fri May 13 15:00:51 2016) [User1]* f98748f | Added waiting for page fully loaded (Fri May 13 14:44:48 2016) [User1]* 2f15015 | Wait till page fully loaded for IE (Fri May 13 11:46:25 2016) [User1]* 46dafc1 | Enabled IE and Chrome (Fri May 13 11:23:21 2016) [User1]* 4faa96c | eliminated reposting form twice (Fri May 13 11:13:15 2016) [User1]* ea6e879 | Improved user profile edit tests (Fri May 13 10:53:38 2016) [User1]* 83f2f28 | removed retry for TestLauncher (Fri May 13 10:32:31 2016) [User1]* ff0e1ff | Changed retry count and added message text for asserts (Fri May 13 10:25:13 2016) [User1]* 2f27e2a | Temporary disabled most of the tests to (Fri May 13 10:08:46 2016) [User1]* b6dcb02 | FireFox enabled for tests (Thu May 12 14:02:29 2016) [User1]* 04c5596 | Better Handling of an alerts missing situations (Thu May 12 14:00:41 2016) [User1]

Page 29: Code Crime Scene

Code maat - introduction

Features:■Analize GIT/SVN

history■Command line tool■Various analizers■CSV output■Open source

Work flow:Git log….Parse log with code maat

Generate graph from csv

Page 30: Code Crime Scene

Code maat – sample

entity,n-authors,n-revssrc/Presentation/SmartStore.Web/Controllers/ShoppingCartController.cs,4,14src/Plugins/SmartStore.PayPal/Providers/PayPalExpressProvider.cs,4,6src/Libraries/SmartStore.Services/Catalog/Importer/ProductImporter.cs,3,48src/Presentation/SmartStore.Web/Administration/Controllers/ImportController.cs,3,38src/Libraries/SmartStore.Services/Catalog/Importer/CategoryImporter.cs,3,35src/Presentation/SmartStore.Web/Administration/Controllers/ExportController.cs,3,31src/Libraries/SmartStore.Data/Migrations/201601262000441_ImportFramework1.cs,3,30src/Libraries/SmartStore.Services/Customers/Importer/CustomerImporter.cs,3,29

java -jar code-maat-0.8.5-standalone.jar -l log_file.log -c git -a authors

Page 31: Code Crime Scene

Code maat – hot filesentity n.authors n.revs

src/Libraries/SmartStore.Services/Catalog/Importer/ProductImporter.cs 3 48src/Presentation/SmartStore.Web/Administration/Controllers/ImportController.cs 3 38src/Libraries/SmartStore.Services/Catalog/Importer/CategoryImporter.cs 3 35src/Presentation/SmartStore.Web/Administration/Controllers/ExportController.cs 3 31src/Libraries/SmartStore.Data/Migrations/201601262000441_ImportFramework1.cs 3 30src/Libraries/SmartStore.Services/Customers/Importer/CustomerImporter.cs 3 29src/Libraries/SmartStore.Data/Migrations/201512151526290_ImportFramework.cs 2 28src/Libraries/SmartStore.Data/Migrations/201603121451066_ThirdPartyEmailHandOver.cs 2 21src/Plugins/SmartStore.PayPal/Localization/resources.en-us.xml 3 20src/Plugins/SmartStore.PayPal/Localization/resources.de-de.xml 3 20src/Plugins/SmartStore.PayPal/Services/PayPalService.cs 1 20src/Libraries/SmartStore.Services/DataExchange/Export/DataExporter.cs 3 19src/Libraries/SmartStore.Services/DataExchange/Import/DataImporter.cs 3 19src/Libraries/SmartStore.Services/DataExchange/Import/ImportRow.cs 3 18src/Presentation/SmartStore.Web/Administration/Views/Import/_ColumnMappings.cshtml 3 18src/Presentation/SmartStore.Web/Administration/Views/Import/_CreateOrUpdate.cshtml 1 18src/Presentation/SmartStore.Web/Administration/Controllers/ProductController.cs 2 16src/Presentation/SmartStore.Web/Administration/Models/DataExchange/ImportProfileModel.cs 2 16src/Presentation/SmartStore.Web/Controllers/CommonController.cs 2 15src/Presentation/SmartStore.Web/Scripts/smartstore.entityPicker.js 2 15

Page 32: Code Crime Scene

Code maat – Author importance

Christian Oliff James Bright Marcus Gesing Michael Herzog Murat Cakir0

20000

40000

60000

80000

100000

120000

Authors importance 2016

added deleted diff

Page 33: Code Crime Scene

Code maat – module ownership

Marcus Gesing

Murat Cakir

Michael Herzog

0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%

5956 2449

226

6

10053

3747

32

7040

1604

0

90351

3662

src/Plugins/SmartStore.AmazonPay src/Plugins/SmartStore.Clickatell src/Plugins/SmartStore.DevToolssrc/Plugins/SmartStore.DiscountRules src/Plugins/SmartStore.FacebookAuth src/Plugins/SmartStore.GoogleAnalyticssrc/Plugins/SmartStore.GoogleMerchantCenter src/Plugins/SmartStore.OfflinePayment src/Plugins/SmartStore.Shippingsrc/Plugins/SmartStore.ShippingByWeight src/Plugins/SmartStore.Tax src/Plugins/SmartStore.WebApisrc/Libraries/SmartStore.Core src/Libraries/SmartStore.Data src/Libraries/SmartStore.Servicessrc/Libraries/SmartStore.Services/Catalog src/Libraries/SmartStore.Services/Common src/Libraries/SmartStore.Services/DataExchangesrc/Libraries/SmartStore.Services/Localization src/Libraries/SmartStore.Services/Messages src/Libraries/SmartStore.Services/Orderssrc/Libraries/SmartStore.Services/Payments src/Libraries/SmartStore.Services/Shipping src/Libraries/SmartStore.Services/Taskssrc/Libraries/SmartStore.Services/Customers src/Libraries/SmartStore.Services/Configuration src/Libraries/SmartStore.Core/Utilitiessrc/Libraries/SmartStore.Core/Logging src/Libraries/SmartStore.Core/Extensions src/Libraries/SmartStore.Core/Domainsrc/Tests/SmartStore.Services.Tests src/Tests/SmartStore.Web.MVC.Tests src/Presentation/SmartStore.Websrc/Presentation/SmartStore.Web.Framework

Page 34: Code Crime Scene

Code maat – module ownership core

s r c/ P

r es e n ta

t i on / S

ma r tS

tor e

.We b

s r c/ L

ibr a

r i es / S

m a r tSto

r e.S

e r vi ce s

s r c/ L

ibr a

r i es / S

m a r tSto

r e.S

e r vi ce s /D

a taE x change

s r c/ L

ibr a

r ies / S

m a r tSto

r e.S

e r vi ce s / C

a tal o

g

s r c/ P

r es e n ta

t i on / S

ma r tS

tor e

.We b .Fr a

mewo r k

s r c/ L

i br a

r ies / S

m a r tSto

r e.S

e r vi ce s / C

u s tom e r s

s r c/ L

ibr a

r ies / S

m a r tSto

r e.C

o r e

s r c/ L

ibr a

r ies / S

m a r tSto

r e.D

a ta

s r c/ L

ibr a

r i es / S

m a r tSto

r e.S

e r vi ce s / T

a s ks

s r c/ P

l ug in

s / Sma r tS

tor e

.Sh ip

p ing

14266

100537040

1097

234

535699

2449

23

595690351

37471604

1138

723

472396

226

200

1443662 32 0 0 44 0 6 6 0 22Marcus Gesing Murat Cakir Michael Herzog

Page 35: Code Crime Scene

Code maat – code relations

A B C

Functional code Tests code

Page 36: Code Crime Scene

Other tools

■FxCop■StyleCop■R#■SonarQube■CodeCity

Page 37: Code Crime Scene

Arguments for boss

Hard data provided by engineering tools speaks

for itself

Page 38: Code Crime Scene

Key outcome

■Everything can be measured■Use suitable tools■Provide hard data■Programming triangle:

correctness, readability, performance

Page 39: Code Crime Scene

References

■NDepend http://www.ndepend.com/ ■Code Maat

https://github.com/adamtornhill/code-maat■Book https://pragprog.com/book/atcrime/your-

code-as-a-crime-scene■FxCop

https://msdn.microsoft.com/en-us/library/bb429476(v=vs.80).aspx

■R# https://www.jetbrains.com/resharper/ (and other similar VS plugins)

Page 40: Code Crime Scene

Thank you!

Blog: http://blog.klimczyk.plContact:

Twitter: @pwlklmMail: [email protected]