SlideShare a Scribd company logo
1 of 24
Download to read offline
SONAR
10 print “Hello EKON”;
20 Goto 10;
“Metrics measure the design of code after it
has been written”
Don’t Change Rules during the Game

1
Agenda EKON
• What are Metrics ?
• Install SONAR
• Top Five (LCOM4)
• Improve your Code (Metric Based Dashboard)
• Optimisation and other Tools

2
What are Metrics?
Metrics are for
• Evaluate Object Complexity
• Quantify your code
• Highlight Redesign Needs
• Change Impact Analysis
UEB: 15_pas_designbycontract.txt

3
Metrics deal with
Bad Structure
•
•
•
•

General Code Size (in module)
Cohesion (in classes and inheritance)
Complexity
Coupling (between classes or units)
• Cyclic Dependency, Declare+Definition, ACD-Metric

• Interfaces or Packages (design & runtime)
• Static, Public, Private (inheritance or delegate)
UEB: 10_pas_oodesign_solution.txt

4
Some Kind of wonderful ?
• Grab the example project files from the
Github repository:
https://github.com/SonarSource/sonarexamples/tree/master/projects/languages
• There's a Delphi sample in there
demonstrating how to configure a sonarproject.properties file that points to your
source code directories.
UEB: 8_pas_verwechselt.txt

5
Important metrics to look for
•
•
•
•

duplicated_blocks
violations – info_violations
public_undocumented_api
uncovered_complexity_by_tests (it is
considered that 80% of coverage is the
objective)
• function_complexity_distribution >= 8,
• class_complexity_distribution >= 60
• package_edges_weight

6
IMPLEMENTED FEATURES
•
•
•
•
•
•
•
•

Counting lines of code, statements, number of files
Counting number of classes, number of packages, methods,
accessors
Counting number of public API (methods, classes and fields)
Counting comments ratio, comment lines (including blank lines)
CPD (code duplication, how many lines, block in how many files)
Code Complexity (per method, class, file; complexity distribution
over methods, classes and files)
LCOM4 and RFC
Code colorization

7
IMPLEMENTED FEATURES II
•
•
•
•
•
•
•
•
•

Unit tests reports
Assembler syntax in grammar
Include statement
Parsing pre-processor statements
Rules
Code coverage reports
Source code highlight for unit tests
“Dead” code recognition
Unused files recognition
http://docs.codehaus.org/display/SONAR/Delphi+Plugin

8
Metric/Review Checklist
1. Standards - are the software standards for name
conventions being followed?
2. Are all program headers completed?
3. Are changes commented appropriately?
4. Are release notes Clear? Complete?
5. Installation Issues, Licenses, Certs. Are there any?
6. Version Control, Are output products clear?
7. Test Instructions - Are they any? Complete?
8.

"Die andere Seite, sehr dunkel sie ist" - "Yoda, halt's Maul und iß
Deinen Toast!"

9
Install or pitfall
Ensure Java 6 SDK/JRE installed (Delphi addon doesn't work with Java 7)
Download the Sonar application: http://www.sonarsource.org/downloads/
Install Sonar (or copy/clone)
Run Sonar (StartSonar.bat)
Once logged on (default user/pass is admin) install the Delphi add-on via
the Update Center list of Available Plugins. See:
http://docs.codehaus.org/display/SONAR/Update+Center
After setting the SONAR_RUNNER_HOME environment variable, exec 'sonarrunner' in the folder with your configured properties file to have
Sonar parse through the Delphi project files.

10
Sonar in 3 minutes
•
•
•
•
•
•
•

http://sonar.codehaus.org/downloads/
unzip
sonar.sh console
mvn sonar:sonar
http://localhost:9000/
Download plug-in jar, Copy to extensions/..
Restart Sonar

11
Top Nine Metrics
1. VOD Violation of Law of Demeter
2. LCOM4 (Lack of Cohesion of Methods)
3. DAC (Data Abstraction Coupling)(Too many
responsibilities or references in the field)
4. CC (Complexity Report), McCabe cyclomatic
complexity, Decision Points)
5. CBO (Coupling between Objects) Modularity

12
Top Nine II
6. PUR (Package Usage Ratio) access information
in a package from outside
7. DD Dependency Dispersion (SS, Shotgun Surgery
(Little changes distributed over too many
objects or procedures ))
8. CR Comment Relation
9. MDC (Module Design Complexity (Class with too
many delegating methods)

13
Demeter as SEQ

UEB: 56_pas_demeter.txt
14
LCOM – cohesion
•LCOM4 measures the number of "connected components"
in a class. A connected component is a set of related
methods and fields.
•There should be only one such component in each class. If
there are 2 or more components, the class should be split
into so many smaller classes.
(Lack of cohesion of methods)

15
DAC or Modules of Classes
Large classes with to many references
• More than seven or eight variables
• More than fifty methods
• You probably need to break up the class in
Components (Strategy, Composite, Decorator)
TWebModule1 = class(TWebModule)
HTTPSoapDispatcher1: THTTPSoapDispatcher;
HTTPSoapPascalInvoker1: THTTPSoapPascalInvoker;
WSDLHTMLPublish1: TWSDLHTMLPublish;
DataSetTableProducer1: TDataSetTableProducer;

16
CC
• Check Complexity
function IsInteger(TestThis: String): Boolean;
begin
try
StrToInt(TestThis);
except
on EConvertError do
result:= False;
else
result:= True;
end;
end;
Ueb: 164_code_reviews.txt

17
CBO I
• CBO measures the number of classes to which a class is
coupled. According to remarks and comments on CBO and
coupling, we include coupling through inheritance.
Two classes are considered coupled, if methods declared in
one class call methods or access attributes defined in the
other class.

18
PUR Package Usage Ratio

19
Finally you can measure:
•
•
•
•
•
•
•

Duplicated code
Coding standards
Unit tests
Complex code
Potential bugs
Comments
Design and architecture

UEB: 33_pas_cipher_file_1.txt

http://docs.codehaus.org/display/SONAR/Developers%27+Seven+Deadly+Sins

20
Metric based Sonar Dashboard
●
●
●
•
•
•
•
•
•
•

You cannot improve what you don’t measure
What you don’t measure, you can’t prove
Broken Window Theory
Sonar Dashboard
– Lines of code
– Code Complexity
– Code Coverage
– Rules Compliance
● Time Machine
● Clouds & Hot spots

http://docs.codehaus.org/display/SONAR/Plugin+Library

21
Refactoring Use
Entity

Refactoring Function

Description

Package

Rename Package

Umbenennen eines Packages

Class

Move Method

Verschieben einer Methode

Class

Extract Superclass

Aus Methoden, Eigenschaften eine
Oberklasse erzeugen und verwenden

Class

Introduce Parameter

Ersetzen eines Ausdrucks durch einen
Methodenparameter

Class

Extract Method

Heraustrennen einer Codepassage

Interface

Extract Interface

Aus Methoden ein Interface erzeugen

Interface

Use Interface

Erzeuge Referenzen auf Klasse

Component

Replace Inheritance
with Delegation

Ersetze vererbte Methoden durch
Delegation in innere Klasse

Class

Encapsulate Fields

Getter- und Setter einbauen

Model

Safe Delete

Delete a Class with Refrences

22
Audits & Metric Links:
•

Delphi XE Tool: Together

•
•

http://www.modelmakertools.com/
Report Pascal Analyzer:

•

http://www.softwareschule.ch/download/pascal_analyzer.pdf
Refactoring Martin Fowler (1999, Addison-Wesley)

•

http://nemo.sonarsource.org/ (Live Sonar)

•

Model View in Together:
www.softwareschule.ch/download/delphi2007_modelview.pdf

23
Q&A and may the source be
with you
max@kleiner.com
www.softwareschule.ch

24

More Related Content

What's hot

JUnit 5 - The Next Generation
JUnit 5 - The Next GenerationJUnit 5 - The Next Generation
JUnit 5 - The Next GenerationKostadin Golev
 
Presentation_C++UnitTest
Presentation_C++UnitTestPresentation_C++UnitTest
Presentation_C++UnitTestRaihan Masud
 
Linux binary analysis and exploitation
Linux binary analysis and exploitationLinux binary analysis and exploitation
Linux binary analysis and exploitationDharmalingam Ganesan
 
Implementing Continuous Delivery with Enterprise Middleware
Implementing Continuous Delivery with Enterprise MiddlewareImplementing Continuous Delivery with Enterprise Middleware
Implementing Continuous Delivery with Enterprise MiddlewareXebiaLabs
 
Renaissance of JUnit - Introduction to JUnit 5
Renaissance of JUnit - Introduction to JUnit 5Renaissance of JUnit - Introduction to JUnit 5
Renaissance of JUnit - Introduction to JUnit 5Jimmy Lu
 
Unit Testing from Setup to Deployment
Unit Testing from Setup to DeploymentUnit Testing from Setup to Deployment
Unit Testing from Setup to DeploymentMark Niebergall
 
Containerize your Blackbox tests
Containerize your Blackbox testsContainerize your Blackbox tests
Containerize your Blackbox testsKevin Beeman
 
Maven TestNg frame work (1) (1)
Maven TestNg frame work (1) (1)Maven TestNg frame work (1) (1)
Maven TestNg frame work (1) (1)Gopi Raghavendra
 
2014 land your-first_patch_neutron
2014 land your-first_patch_neutron2014 land your-first_patch_neutron
2014 land your-first_patch_neutronRossella Sblendido
 
C++ Testing Techniques Tips and Tricks - C++ London
C++ Testing Techniques Tips and Tricks - C++ LondonC++ Testing Techniques Tips and Tricks - C++ London
C++ Testing Techniques Tips and Tricks - C++ LondonClare Macrae
 
Labri 2021-invited-talk
Labri 2021-invited-talkLabri 2021-invited-talk
Labri 2021-invited-talkvschiavoni
 
THE CLR AND THE .NET FRAMEWORK, C#
THE CLR AND THE .NET FRAMEWORK, C#THE CLR AND THE .NET FRAMEWORK, C#
THE CLR AND THE .NET FRAMEWORK, C#MANOJ BURI
 

What's hot (20)

JUnit 5 - The Next Generation
JUnit 5 - The Next GenerationJUnit 5 - The Next Generation
JUnit 5 - The Next Generation
 
Presentation_C++UnitTest
Presentation_C++UnitTestPresentation_C++UnitTest
Presentation_C++UnitTest
 
Bug zillatestopiajenkins
Bug zillatestopiajenkinsBug zillatestopiajenkins
Bug zillatestopiajenkins
 
Linux binary analysis and exploitation
Linux binary analysis and exploitationLinux binary analysis and exploitation
Linux binary analysis and exploitation
 
The DNA of OPNFV
The DNA of OPNFVThe DNA of OPNFV
The DNA of OPNFV
 
Java 9
Java 9Java 9
Java 9
 
Php unit (eng)
Php unit (eng)Php unit (eng)
Php unit (eng)
 
Unit testing (eng)
Unit testing (eng)Unit testing (eng)
Unit testing (eng)
 
Implementing Continuous Delivery with Enterprise Middleware
Implementing Continuous Delivery with Enterprise MiddlewareImplementing Continuous Delivery with Enterprise Middleware
Implementing Continuous Delivery with Enterprise Middleware
 
Renaissance of JUnit - Introduction to JUnit 5
Renaissance of JUnit - Introduction to JUnit 5Renaissance of JUnit - Introduction to JUnit 5
Renaissance of JUnit - Introduction to JUnit 5
 
Modern Python Testing
Modern Python TestingModern Python Testing
Modern Python Testing
 
Unit Testing from Setup to Deployment
Unit Testing from Setup to DeploymentUnit Testing from Setup to Deployment
Unit Testing from Setup to Deployment
 
Containerize your Blackbox tests
Containerize your Blackbox testsContainerize your Blackbox tests
Containerize your Blackbox tests
 
Mesa and Its Debugging
Mesa and Its DebuggingMesa and Its Debugging
Mesa and Its Debugging
 
Maven TestNg frame work (1) (1)
Maven TestNg frame work (1) (1)Maven TestNg frame work (1) (1)
Maven TestNg frame work (1) (1)
 
2014 land your-first_patch_neutron
2014 land your-first_patch_neutron2014 land your-first_patch_neutron
2014 land your-first_patch_neutron
 
Database Management Assignment Help
Database Management Assignment Help Database Management Assignment Help
Database Management Assignment Help
 
C++ Testing Techniques Tips and Tricks - C++ London
C++ Testing Techniques Tips and Tricks - C++ LondonC++ Testing Techniques Tips and Tricks - C++ London
C++ Testing Techniques Tips and Tricks - C++ London
 
Labri 2021-invited-talk
Labri 2021-invited-talkLabri 2021-invited-talk
Labri 2021-invited-talk
 
THE CLR AND THE .NET FRAMEWORK, C#
THE CLR AND THE .NET FRAMEWORK, C#THE CLR AND THE .NET FRAMEWORK, C#
THE CLR AND THE .NET FRAMEWORK, C#
 

Viewers also liked

Vayavya labs corporate presentation feb 2015
Vayavya labs corporate presentation feb 2015Vayavya labs corporate presentation feb 2015
Vayavya labs corporate presentation feb 2015Vayavya Labs Pvt Ltd
 
Introducción al D-BUS
Introducción al D-BUSIntroducción al D-BUS
Introducción al D-BUSjmdep91
 
Native code in Android applications
Native code in Android applicationsNative code in Android applications
Native code in Android applicationsDmitry Matyukhin
 
A new Codemodel for Codemetrics
 A new Codemodel for Codemetrics A new Codemodel for Codemetrics
A new Codemodel for CodemetricsMax Kleiner
 
maXbox Starter 43 Work with Code Metrics ISO Standard
maXbox Starter 43 Work with Code Metrics ISO StandardmaXbox Starter 43 Work with Code Metrics ISO Standard
maXbox Starter 43 Work with Code Metrics ISO StandardMax Kleiner
 
Vayavya Presentation- Design Services 2010
Vayavya  Presentation- Design Services 2010Vayavya  Presentation- Design Services 2010
Vayavya Presentation- Design Services 2010Vayavya Labs Pvt Ltd
 
maXbox Starter 45 Robotics
maXbox Starter 45 RoboticsmaXbox Starter 45 Robotics
maXbox Starter 45 RoboticsMax Kleiner
 
Windows 10 Hybrid Development
Windows 10 Hybrid DevelopmentWindows 10 Hybrid Development
Windows 10 Hybrid DevelopmentMax Kleiner
 
DLL Design with Building Blocks
DLL Design with Building BlocksDLL Design with Building Blocks
DLL Design with Building BlocksMax Kleiner
 
GEO mapbox geo_api_develop2 Intro
 GEO mapbox geo_api_develop2 Intro GEO mapbox geo_api_develop2 Intro
GEO mapbox geo_api_develop2 IntroMax Kleiner
 
Code Review with Sonar
Code Review with SonarCode Review with Sonar
Code Review with SonarMax Kleiner
 
CV_Max_Kleiner_2017
CV_Max_Kleiner_2017CV_Max_Kleiner_2017
CV_Max_Kleiner_2017Max Kleiner
 
Arduino C maXbox web of things slide show
Arduino C maXbox web of things slide showArduino C maXbox web of things slide show
Arduino C maXbox web of things slide showMax Kleiner
 
maXbox starter46 work with Wine
maXbox starter46 work with WinemaXbox starter46 work with Wine
maXbox starter46 work with WineMax Kleiner
 
Refactoring_Rosenheim_2008_Workshop
Refactoring_Rosenheim_2008_WorkshopRefactoring_Rosenheim_2008_Workshop
Refactoring_Rosenheim_2008_WorkshopMax Kleiner
 
A 3D printing programming API
A 3D printing programming APIA 3D printing programming API
A 3D printing programming APIMax Kleiner
 

Viewers also liked (17)

Vayavya labs corporate presentation feb 2015
Vayavya labs corporate presentation feb 2015Vayavya labs corporate presentation feb 2015
Vayavya labs corporate presentation feb 2015
 
Introducción al D-BUS
Introducción al D-BUSIntroducción al D-BUS
Introducción al D-BUS
 
Native code in Android applications
Native code in Android applicationsNative code in Android applications
Native code in Android applications
 
A new Codemodel for Codemetrics
 A new Codemodel for Codemetrics A new Codemodel for Codemetrics
A new Codemodel for Codemetrics
 
maXbox Starter 43 Work with Code Metrics ISO Standard
maXbox Starter 43 Work with Code Metrics ISO StandardmaXbox Starter 43 Work with Code Metrics ISO Standard
maXbox Starter 43 Work with Code Metrics ISO Standard
 
Vayavya Presentation- Design Services 2010
Vayavya  Presentation- Design Services 2010Vayavya  Presentation- Design Services 2010
Vayavya Presentation- Design Services 2010
 
maXbox Starter 45 Robotics
maXbox Starter 45 RoboticsmaXbox Starter 45 Robotics
maXbox Starter 45 Robotics
 
Windows 10 Hybrid Development
Windows 10 Hybrid DevelopmentWindows 10 Hybrid Development
Windows 10 Hybrid Development
 
DLL Design with Building Blocks
DLL Design with Building BlocksDLL Design with Building Blocks
DLL Design with Building Blocks
 
GEO mapbox geo_api_develop2 Intro
 GEO mapbox geo_api_develop2 Intro GEO mapbox geo_api_develop2 Intro
GEO mapbox geo_api_develop2 Intro
 
Code Review with Sonar
Code Review with SonarCode Review with Sonar
Code Review with Sonar
 
CV_Max_Kleiner_2017
CV_Max_Kleiner_2017CV_Max_Kleiner_2017
CV_Max_Kleiner_2017
 
Arduino C maXbox web of things slide show
Arduino C maXbox web of things slide showArduino C maXbox web of things slide show
Arduino C maXbox web of things slide show
 
maXbox starter46 work with Wine
maXbox starter46 work with WinemaXbox starter46 work with Wine
maXbox starter46 work with Wine
 
Refactoring_Rosenheim_2008_Workshop
Refactoring_Rosenheim_2008_WorkshopRefactoring_Rosenheim_2008_Workshop
Refactoring_Rosenheim_2008_Workshop
 
Android JNI
Android JNIAndroid JNI
Android JNI
 
A 3D printing programming API
A 3D printing programming APIA 3D printing programming API
A 3D printing programming API
 

Similar to Software Qualitiy with Sonar Tool 2013_4

To ∞ (~65K) and beyond! - Sebastiano Gottardo - Codemotion Milan 2016
To ∞ (~65K) and beyond! - Sebastiano Gottardo - Codemotion Milan 2016To ∞ (~65K) and beyond! - Sebastiano Gottardo - Codemotion Milan 2016
To ∞ (~65K) and beyond! - Sebastiano Gottardo - Codemotion Milan 2016Codemotion
 
Community DefCore Presentation
Community DefCore PresentationCommunity DefCore Presentation
Community DefCore Presentationrhirschfeld
 
Oscon 2014 def core review
Oscon 2014 def core reviewOscon 2014 def core review
Oscon 2014 def core reviewrhirschfeld
 
OpenStack DefCore review 2014
OpenStack DefCore review 2014OpenStack DefCore review 2014
OpenStack DefCore review 2014rhirschfeld
 
Metrics ekon 14_2_kleiner
Metrics ekon 14_2_kleinerMetrics ekon 14_2_kleiner
Metrics ekon 14_2_kleinerMax Kleiner
 
Code quality par Simone Civetta
Code quality par Simone CivettaCode quality par Simone Civetta
Code quality par Simone CivettaCocoaHeads France
 
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMPInria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMPStéphanie Roger
 
System verilog important
System verilog importantSystem verilog important
System verilog importantelumalai7
 
DefCore: The Interoperability Standard for OpenStack
DefCore: The Interoperability Standard for OpenStackDefCore: The Interoperability Standard for OpenStack
DefCore: The Interoperability Standard for OpenStackMark Voelker
 
What is OpenStack DefCore, Altanta Conference
What is OpenStack DefCore, Altanta ConferenceWhat is OpenStack DefCore, Altanta Conference
What is OpenStack DefCore, Altanta Conferencerhirschfeld
 
Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life DevOps.com
 
Toad tipstricksexpertinsight
Toad tipstricksexpertinsightToad tipstricksexpertinsight
Toad tipstricksexpertinsightRaj esh
 
How to implement continuous delivery with enterprise java middleware?
How to implement continuous delivery with enterprise java middleware?How to implement continuous delivery with enterprise java middleware?
How to implement continuous delivery with enterprise java middleware?Thoughtworks
 
New types of tests for Java projects
New types of tests for Java projectsNew types of tests for Java projects
New types of tests for Java projectsVincent Massol
 
DevSecCon SG 2018 Fabian Presentation Slides
DevSecCon SG 2018 Fabian Presentation SlidesDevSecCon SG 2018 Fabian Presentation Slides
DevSecCon SG 2018 Fabian Presentation SlidesFab L
 
Sumo Logic Cert Jam - Advanced Metrics with Kubernetes
Sumo Logic Cert Jam - Advanced Metrics with KubernetesSumo Logic Cert Jam - Advanced Metrics with Kubernetes
Sumo Logic Cert Jam - Advanced Metrics with KubernetesSumo Logic
 
OUG Ireland Meet-up 12th January
OUG Ireland Meet-up 12th JanuaryOUG Ireland Meet-up 12th January
OUG Ireland Meet-up 12th JanuaryBrendan Tierney
 

Similar to Software Qualitiy with Sonar Tool 2013_4 (20)

To ∞ (~65K) and beyond! - Sebastiano Gottardo - Codemotion Milan 2016
To ∞ (~65K) and beyond! - Sebastiano Gottardo - Codemotion Milan 2016To ∞ (~65K) and beyond! - Sebastiano Gottardo - Codemotion Milan 2016
To ∞ (~65K) and beyond! - Sebastiano Gottardo - Codemotion Milan 2016
 
Community DefCore Presentation
Community DefCore PresentationCommunity DefCore Presentation
Community DefCore Presentation
 
Oscon 2014 def core review
Oscon 2014 def core reviewOscon 2014 def core review
Oscon 2014 def core review
 
OpenStack DefCore review 2014
OpenStack DefCore review 2014OpenStack DefCore review 2014
OpenStack DefCore review 2014
 
Metrics ekon 14_2_kleiner
Metrics ekon 14_2_kleinerMetrics ekon 14_2_kleiner
Metrics ekon 14_2_kleiner
 
Code quality par Simone Civetta
Code quality par Simone CivettaCode quality par Simone Civetta
Code quality par Simone Civetta
 
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMPInria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
Inria Tech Talk : Comment améliorer la qualité de vos logiciels avec STAMP
 
tut0000021-hevery
tut0000021-heverytut0000021-hevery
tut0000021-hevery
 
tut0000021-hevery
tut0000021-heverytut0000021-hevery
tut0000021-hevery
 
Test box bdd
Test box bddTest box bdd
Test box bdd
 
System verilog important
System verilog importantSystem verilog important
System verilog important
 
DefCore: The Interoperability Standard for OpenStack
DefCore: The Interoperability Standard for OpenStackDefCore: The Interoperability Standard for OpenStack
DefCore: The Interoperability Standard for OpenStack
 
What is OpenStack DefCore, Altanta Conference
What is OpenStack DefCore, Altanta ConferenceWhat is OpenStack DefCore, Altanta Conference
What is OpenStack DefCore, Altanta Conference
 
Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life
 
Toad tipstricksexpertinsight
Toad tipstricksexpertinsightToad tipstricksexpertinsight
Toad tipstricksexpertinsight
 
How to implement continuous delivery with enterprise java middleware?
How to implement continuous delivery with enterprise java middleware?How to implement continuous delivery with enterprise java middleware?
How to implement continuous delivery with enterprise java middleware?
 
New types of tests for Java projects
New types of tests for Java projectsNew types of tests for Java projects
New types of tests for Java projects
 
DevSecCon SG 2018 Fabian Presentation Slides
DevSecCon SG 2018 Fabian Presentation SlidesDevSecCon SG 2018 Fabian Presentation Slides
DevSecCon SG 2018 Fabian Presentation Slides
 
Sumo Logic Cert Jam - Advanced Metrics with Kubernetes
Sumo Logic Cert Jam - Advanced Metrics with KubernetesSumo Logic Cert Jam - Advanced Metrics with Kubernetes
Sumo Logic Cert Jam - Advanced Metrics with Kubernetes
 
OUG Ireland Meet-up 12th January
OUG Ireland Meet-up 12th JanuaryOUG Ireland Meet-up 12th January
OUG Ireland Meet-up 12th January
 

More from Max Kleiner

EKON26_VCL4Python.pdf
EKON26_VCL4Python.pdfEKON26_VCL4Python.pdf
EKON26_VCL4Python.pdfMax Kleiner
 
EKON26_Open_API_Develop2Cloud.pdf
EKON26_Open_API_Develop2Cloud.pdfEKON26_Open_API_Develop2Cloud.pdf
EKON26_Open_API_Develop2Cloud.pdfMax Kleiner
 
maXbox_Starter91_SyntheticData_Implement
maXbox_Starter91_SyntheticData_ImplementmaXbox_Starter91_SyntheticData_Implement
maXbox_Starter91_SyntheticData_ImplementMax Kleiner
 
Ekon 25 Python4Delphi_MX475
Ekon 25 Python4Delphi_MX475Ekon 25 Python4Delphi_MX475
Ekon 25 Python4Delphi_MX475Max Kleiner
 
EKON 25 Python4Delphi_mX4
EKON 25 Python4Delphi_mX4EKON 25 Python4Delphi_mX4
EKON 25 Python4Delphi_mX4Max Kleiner
 
maXbox Starter87
maXbox Starter87maXbox Starter87
maXbox Starter87Max Kleiner
 
maXbox Starter78 PortablePixmap
maXbox Starter78 PortablePixmapmaXbox Starter78 PortablePixmap
maXbox Starter78 PortablePixmapMax Kleiner
 
maXbox starter75 object detection
maXbox starter75 object detectionmaXbox starter75 object detection
maXbox starter75 object detectionMax Kleiner
 
BASTA 2020 VS Code Data Visualisation
BASTA 2020 VS Code Data VisualisationBASTA 2020 VS Code Data Visualisation
BASTA 2020 VS Code Data VisualisationMax Kleiner
 
EKON 24 ML_community_edition
EKON 24 ML_community_editionEKON 24 ML_community_edition
EKON 24 ML_community_editionMax Kleiner
 
maxbox starter72 multilanguage coding
maxbox starter72 multilanguage codingmaxbox starter72 multilanguage coding
maxbox starter72 multilanguage codingMax Kleiner
 
EKON 23 Code_review_checklist
EKON 23 Code_review_checklistEKON 23 Code_review_checklist
EKON 23 Code_review_checklistMax Kleiner
 
EKON 12 Running OpenLDAP
EKON 12 Running OpenLDAP EKON 12 Running OpenLDAP
EKON 12 Running OpenLDAP Max Kleiner
 
EKON 12 Closures Coding
EKON 12 Closures CodingEKON 12 Closures Coding
EKON 12 Closures CodingMax Kleiner
 
NoGUI maXbox Starter70
NoGUI maXbox Starter70NoGUI maXbox Starter70
NoGUI maXbox Starter70Max Kleiner
 
maXbox starter69 Machine Learning VII
maXbox starter69 Machine Learning VIImaXbox starter69 Machine Learning VII
maXbox starter69 Machine Learning VIIMax Kleiner
 
maXbox starter68 machine learning VI
maXbox starter68 machine learning VImaXbox starter68 machine learning VI
maXbox starter68 machine learning VIMax Kleiner
 
maXbox starter67 machine learning V
maXbox starter67 machine learning VmaXbox starter67 machine learning V
maXbox starter67 machine learning VMax Kleiner
 
maXbox starter65 machinelearning3
maXbox starter65 machinelearning3maXbox starter65 machinelearning3
maXbox starter65 machinelearning3Max Kleiner
 
EKON22_Overview_Machinelearning_Diagrams
EKON22_Overview_Machinelearning_DiagramsEKON22_Overview_Machinelearning_Diagrams
EKON22_Overview_Machinelearning_DiagramsMax Kleiner
 

More from Max Kleiner (20)

EKON26_VCL4Python.pdf
EKON26_VCL4Python.pdfEKON26_VCL4Python.pdf
EKON26_VCL4Python.pdf
 
EKON26_Open_API_Develop2Cloud.pdf
EKON26_Open_API_Develop2Cloud.pdfEKON26_Open_API_Develop2Cloud.pdf
EKON26_Open_API_Develop2Cloud.pdf
 
maXbox_Starter91_SyntheticData_Implement
maXbox_Starter91_SyntheticData_ImplementmaXbox_Starter91_SyntheticData_Implement
maXbox_Starter91_SyntheticData_Implement
 
Ekon 25 Python4Delphi_MX475
Ekon 25 Python4Delphi_MX475Ekon 25 Python4Delphi_MX475
Ekon 25 Python4Delphi_MX475
 
EKON 25 Python4Delphi_mX4
EKON 25 Python4Delphi_mX4EKON 25 Python4Delphi_mX4
EKON 25 Python4Delphi_mX4
 
maXbox Starter87
maXbox Starter87maXbox Starter87
maXbox Starter87
 
maXbox Starter78 PortablePixmap
maXbox Starter78 PortablePixmapmaXbox Starter78 PortablePixmap
maXbox Starter78 PortablePixmap
 
maXbox starter75 object detection
maXbox starter75 object detectionmaXbox starter75 object detection
maXbox starter75 object detection
 
BASTA 2020 VS Code Data Visualisation
BASTA 2020 VS Code Data VisualisationBASTA 2020 VS Code Data Visualisation
BASTA 2020 VS Code Data Visualisation
 
EKON 24 ML_community_edition
EKON 24 ML_community_editionEKON 24 ML_community_edition
EKON 24 ML_community_edition
 
maxbox starter72 multilanguage coding
maxbox starter72 multilanguage codingmaxbox starter72 multilanguage coding
maxbox starter72 multilanguage coding
 
EKON 23 Code_review_checklist
EKON 23 Code_review_checklistEKON 23 Code_review_checklist
EKON 23 Code_review_checklist
 
EKON 12 Running OpenLDAP
EKON 12 Running OpenLDAP EKON 12 Running OpenLDAP
EKON 12 Running OpenLDAP
 
EKON 12 Closures Coding
EKON 12 Closures CodingEKON 12 Closures Coding
EKON 12 Closures Coding
 
NoGUI maXbox Starter70
NoGUI maXbox Starter70NoGUI maXbox Starter70
NoGUI maXbox Starter70
 
maXbox starter69 Machine Learning VII
maXbox starter69 Machine Learning VIImaXbox starter69 Machine Learning VII
maXbox starter69 Machine Learning VII
 
maXbox starter68 machine learning VI
maXbox starter68 machine learning VImaXbox starter68 machine learning VI
maXbox starter68 machine learning VI
 
maXbox starter67 machine learning V
maXbox starter67 machine learning VmaXbox starter67 machine learning V
maXbox starter67 machine learning V
 
maXbox starter65 machinelearning3
maXbox starter65 machinelearning3maXbox starter65 machinelearning3
maXbox starter65 machinelearning3
 
EKON22_Overview_Machinelearning_Diagrams
EKON22_Overview_Machinelearning_DiagramsEKON22_Overview_Machinelearning_Diagrams
EKON22_Overview_Machinelearning_Diagrams
 

Recently uploaded

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 

Recently uploaded (20)

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 

Software Qualitiy with Sonar Tool 2013_4

  • 1. SONAR 10 print “Hello EKON”; 20 Goto 10; “Metrics measure the design of code after it has been written” Don’t Change Rules during the Game 1
  • 2. Agenda EKON • What are Metrics ? • Install SONAR • Top Five (LCOM4) • Improve your Code (Metric Based Dashboard) • Optimisation and other Tools 2
  • 3. What are Metrics? Metrics are for • Evaluate Object Complexity • Quantify your code • Highlight Redesign Needs • Change Impact Analysis UEB: 15_pas_designbycontract.txt 3
  • 4. Metrics deal with Bad Structure • • • • General Code Size (in module) Cohesion (in classes and inheritance) Complexity Coupling (between classes or units) • Cyclic Dependency, Declare+Definition, ACD-Metric • Interfaces or Packages (design & runtime) • Static, Public, Private (inheritance or delegate) UEB: 10_pas_oodesign_solution.txt 4
  • 5. Some Kind of wonderful ? • Grab the example project files from the Github repository: https://github.com/SonarSource/sonarexamples/tree/master/projects/languages • There's a Delphi sample in there demonstrating how to configure a sonarproject.properties file that points to your source code directories. UEB: 8_pas_verwechselt.txt 5
  • 6. Important metrics to look for • • • • duplicated_blocks violations – info_violations public_undocumented_api uncovered_complexity_by_tests (it is considered that 80% of coverage is the objective) • function_complexity_distribution >= 8, • class_complexity_distribution >= 60 • package_edges_weight 6
  • 7. IMPLEMENTED FEATURES • • • • • • • • Counting lines of code, statements, number of files Counting number of classes, number of packages, methods, accessors Counting number of public API (methods, classes and fields) Counting comments ratio, comment lines (including blank lines) CPD (code duplication, how many lines, block in how many files) Code Complexity (per method, class, file; complexity distribution over methods, classes and files) LCOM4 and RFC Code colorization 7
  • 8. IMPLEMENTED FEATURES II • • • • • • • • • Unit tests reports Assembler syntax in grammar Include statement Parsing pre-processor statements Rules Code coverage reports Source code highlight for unit tests “Dead” code recognition Unused files recognition http://docs.codehaus.org/display/SONAR/Delphi+Plugin 8
  • 9. Metric/Review Checklist 1. Standards - are the software standards for name conventions being followed? 2. Are all program headers completed? 3. Are changes commented appropriately? 4. Are release notes Clear? Complete? 5. Installation Issues, Licenses, Certs. Are there any? 6. Version Control, Are output products clear? 7. Test Instructions - Are they any? Complete? 8. "Die andere Seite, sehr dunkel sie ist" - "Yoda, halt's Maul und iß Deinen Toast!" 9
  • 10. Install or pitfall Ensure Java 6 SDK/JRE installed (Delphi addon doesn't work with Java 7) Download the Sonar application: http://www.sonarsource.org/downloads/ Install Sonar (or copy/clone) Run Sonar (StartSonar.bat) Once logged on (default user/pass is admin) install the Delphi add-on via the Update Center list of Available Plugins. See: http://docs.codehaus.org/display/SONAR/Update+Center After setting the SONAR_RUNNER_HOME environment variable, exec 'sonarrunner' in the folder with your configured properties file to have Sonar parse through the Delphi project files. 10
  • 11. Sonar in 3 minutes • • • • • • • http://sonar.codehaus.org/downloads/ unzip sonar.sh console mvn sonar:sonar http://localhost:9000/ Download plug-in jar, Copy to extensions/.. Restart Sonar 11
  • 12. Top Nine Metrics 1. VOD Violation of Law of Demeter 2. LCOM4 (Lack of Cohesion of Methods) 3. DAC (Data Abstraction Coupling)(Too many responsibilities or references in the field) 4. CC (Complexity Report), McCabe cyclomatic complexity, Decision Points) 5. CBO (Coupling between Objects) Modularity 12
  • 13. Top Nine II 6. PUR (Package Usage Ratio) access information in a package from outside 7. DD Dependency Dispersion (SS, Shotgun Surgery (Little changes distributed over too many objects or procedures )) 8. CR Comment Relation 9. MDC (Module Design Complexity (Class with too many delegating methods) 13
  • 14. Demeter as SEQ UEB: 56_pas_demeter.txt 14
  • 15. LCOM – cohesion •LCOM4 measures the number of "connected components" in a class. A connected component is a set of related methods and fields. •There should be only one such component in each class. If there are 2 or more components, the class should be split into so many smaller classes. (Lack of cohesion of methods) 15
  • 16. DAC or Modules of Classes Large classes with to many references • More than seven or eight variables • More than fifty methods • You probably need to break up the class in Components (Strategy, Composite, Decorator) TWebModule1 = class(TWebModule) HTTPSoapDispatcher1: THTTPSoapDispatcher; HTTPSoapPascalInvoker1: THTTPSoapPascalInvoker; WSDLHTMLPublish1: TWSDLHTMLPublish; DataSetTableProducer1: TDataSetTableProducer; 16
  • 17. CC • Check Complexity function IsInteger(TestThis: String): Boolean; begin try StrToInt(TestThis); except on EConvertError do result:= False; else result:= True; end; end; Ueb: 164_code_reviews.txt 17
  • 18. CBO I • CBO measures the number of classes to which a class is coupled. According to remarks and comments on CBO and coupling, we include coupling through inheritance. Two classes are considered coupled, if methods declared in one class call methods or access attributes defined in the other class. 18
  • 19. PUR Package Usage Ratio 19
  • 20. Finally you can measure: • • • • • • • Duplicated code Coding standards Unit tests Complex code Potential bugs Comments Design and architecture UEB: 33_pas_cipher_file_1.txt http://docs.codehaus.org/display/SONAR/Developers%27+Seven+Deadly+Sins 20
  • 21. Metric based Sonar Dashboard ● ● ● • • • • • • • You cannot improve what you don’t measure What you don’t measure, you can’t prove Broken Window Theory Sonar Dashboard – Lines of code – Code Complexity – Code Coverage – Rules Compliance ● Time Machine ● Clouds & Hot spots http://docs.codehaus.org/display/SONAR/Plugin+Library 21
  • 22. Refactoring Use Entity Refactoring Function Description Package Rename Package Umbenennen eines Packages Class Move Method Verschieben einer Methode Class Extract Superclass Aus Methoden, Eigenschaften eine Oberklasse erzeugen und verwenden Class Introduce Parameter Ersetzen eines Ausdrucks durch einen Methodenparameter Class Extract Method Heraustrennen einer Codepassage Interface Extract Interface Aus Methoden ein Interface erzeugen Interface Use Interface Erzeuge Referenzen auf Klasse Component Replace Inheritance with Delegation Ersetze vererbte Methoden durch Delegation in innere Klasse Class Encapsulate Fields Getter- und Setter einbauen Model Safe Delete Delete a Class with Refrences 22
  • 23. Audits & Metric Links: • Delphi XE Tool: Together • • http://www.modelmakertools.com/ Report Pascal Analyzer: • http://www.softwareschule.ch/download/pascal_analyzer.pdf Refactoring Martin Fowler (1999, Addison-Wesley) • http://nemo.sonarsource.org/ (Live Sonar) • Model View in Together: www.softwareschule.ch/download/delphi2007_modelview.pdf 23
  • 24. Q&A and may the source be with you max@kleiner.com www.softwareschule.ch 24