visualizations for code metrics



Similar documents
Percerons: A web-service suite that enhance software development process

EVALUATING METRICS AT CLASS AND METHOD LEVEL FOR JAVA PROGRAMS USING KNOWLEDGE BASED SYSTEMS

Software Engineering & Architecture

Metric Tools for Java

Chapter 24 - Quality Management. Lecture 1. Chapter 24 Quality management

Quality Analysis with Metrics

STAN. Structure Analysis for Java. Version 2. White Paper. Fall 2009

Definitions. Software Metrics. Why Measure Software? Example Metrics. Software Engineering. Determine quality of the current product or process

Open Source Software: How Can Design Metrics Facilitate Architecture Recovery?

Vragen en opdracht. Complexity. Modularity. Intra-modular complexity measures

Software Analysis Visualization

Design methods. List of possible design methods. Functional decomposition. Data flow design. Functional decomposition. Data Flow Design (SA/SD)

Continuous Integration

Chap 4. Using Metrics To Manage Software Risks

Contents. Introduction and System Engineering 1. Introduction 2. Software Process and Methodology 16. System Engineering 53

GECKO Software. Introducing FACTORY SCHEMES. Adaptable software factory Patterns

Analyzing Java Software by Combining Metrics and Program Visualization

Program Understanding with Code Visualization

Software infrastructure for Java development projects

Quality prediction model for object oriented software using UML metrics

BugMaps-Granger: A Tool for Causality Analysis between Source Code Metrics and Bugs

Software Defect Prediction Tool based on Neural Network

What is Visualization? Information Visualization An Overview. Information Visualization. Definitions

A Framework for Dynamic Software Analysis & Application Performance Monitoring

Baseline Code Analysis Using McCabe IQ

Quantitative Evaluation of Software Quality Metrics in Open-Source Projects

BugMaps-Granger: a tool for visualizing and predicting bugs using Granger causality tests

Empirical study of software quality evolution in open source projects using agile practices

CodeCrawler An Extensible and Language Independent 2D and 3D Software Visualization Tool

Effective Visualization Techniques for Data Discovery and Analysis

TDAQ Analytics Dashboard

WebSphere Business Monitor

Synopsis: Title: Software Quality. Theme: Information Systems. Project Term: 9th semester, fall Project Group: sw907e13

Testing Metrics. Introduction

Improving Software Quality with the Continuous Integration Server Hudson. Dr. Ullrich Hafner Avaloq Evolution AG 8911

Software Metrics in Static Program Analysis

A metrics suite for JUnit test code: a multiple case study on open source software

Software Engineering Best Practices. Christian Hartshorne Field Engineer Daniel Thomas Internal Sales Engineer

Analizo: an Extensible Multi-Language Source Code Analysis and Visualization Toolkit

CS171 Visualization. The Visualization Alphabet: Marks and Channels. Alexander Lex [xkcd]

Object Oriented Design

Visualizing an Auto-Generated Topic Map

Jenkins: The Definitive Guide

<Insert Picture Here> Oracle SQL Developer 3.0: Overview and New Features

Reducing Technical Debt Using Maintainability Index

International Journal of Software Engineering and Knowledge Engineering c World Scientific Publishing Company

Research Article Predicting Software Projects Cost Estimation Based on Mining Historical Data

Development of a 3D tool for visualization of different software artifacts and their relationships. David Montaño Ramírez

Fault Prediction Using Statistical and Machine Learning Methods for Improving Software Quality

VISUALIZATION APPROACH FOR SOFTWARE PROJECTS

Program Understanding in Software Engineering

White Paper. How Streaming Data Analytics Enables Real-Time Decisions

Using Code Quality Metrics in Management of Outsourced Development and Maintenance

Agile Development with Jazz and Rational Team Concert

INTRODUCTION TO BUSINESS PROCESS MODELING NOTATION BPMN 1.2 AND BPMN 2.0

tools that make every developer a quality expert

The «SQALE» Analysis Model An analysis model compliant with the representation condition for assessing the Quality of Software Source Code

SOA-14: Continuous Integration in SOA Projects Andreas Gies

How To Calculate Class Cohesion

UPROM Tool: A Unified Business Process Modeling Tool for Generating Software Life Cycle Artifacts

WebSphere Business Monitor

Software Development In the Cloud Cloud management and ALM

Distributed Computing and Big Data: Hadoop and MapReduce

Business Intelligence and Process Modelling

Unit 11: Software Metrics

Java Software Quality Tools and techniques

TeamCity A Professional Solution for Delivering Quality Software, on Time

VMware vrealize Log Insight User's Guide

WebRatio 5: An Eclipse-based CASE tool for engineering Web applications

6 th Annual EclipseCon Introduction to BIRT Report Development. John Ward

Péter Hegedűs, István Siket MTA-SZTE Research Group on Artificial Intelligence, Szeged, Hungary

A methodology for measuring software development productivity using Eclipse IDE

INFOASSIST: REPORTING MADE SIMPLE

BIS 3106: Business Process Management. Lecture Two: Modelling the Control-flow Perspective

Understanding Software Static and Dynamic Aspects

WebSphere Business Monitor

Jenkins Continuous Build System. Jesse Bowes CSCI-5828 Spring 2012

XFlash A Web Application Design Framework with Model-Driven Methodology

Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study

Software Metrics as Benchmarks for Source Code Quality of Software Systems

Understanding Data: A Comparison of Information Visualization Tools and Techniques

Transcription:

ThoughtWorks visualizations for code metrics NEAL FORD software architect / meme wrangler ThoughtWorks nford@thoughtworks.com 3003 Summit Boulevard, Atlanta, GA 30319 www.nealford.com www.thoughtworks.com blog: memeagora.blogspot.com twitter: neal4d

housekeeping ask questions anytime download slides from nealford.com download samples from github.com/nealford

what was that? code_swarm http://code.google.com/p/codeswarm/ point it to a subversion repository visualization of check-ins over time useful? cool!

http://www.wired.com/wired/issue/16-07

wtf s/min

external perspective is the software valuable to its users?

internal perspective how appropriate is the design? how amenable is emergent design? how easy is it to understand & extend? how maintainable is it? is it salvageable?

30,000 feet ground level http://opensimulator.org/wiki/grid_architecture_diagram

where are the defects?

which way do the messages flow?

where do the pictures come from? models created up front convey a vision but usually don t reflect reality generating a complete model for large systems is nearly impossible systems evolve locally, often uncontrolled the best picture very much depends on the question you are trying to answer need tools to create ad-hoc models more easily

1. select a meta-model a model that describes a model example: meta-model for a class diagram a class is a box with name, methods, fields,... available connectors: association, inheritance, aggregation rules: no circles in inheritance, etc.

common meta-models Metrics (Quantitative) Directed Graph M 1 xyz Foo Clas M1 M2 M3 Bar M 2 s Foo 3.4 3.8 6.5 Bar 5.0 0.0 10.0 M 1 Tree Process Model (e.g. Petri Net)

static analysis 2. inspection / instrumentation source code byte code dynamic analysis profiling, listen to messages, log files, network sniffer, etc.

3. mapping to the model example: messaging system capture send/receive actions Senders Comp. Channel A X B Y Receivers Comp. Channel C X C Y map onto directed graph Mapper Nodes: A, B, C Edges: X(A!C) Y(B!C) Graph Model

Graphviz 4. visualization &...

...validation don t simply observe verify & alert enforce rules or best practices detect cycles islands on a dependency graph

the hawthorne effect

the hawthorne effect measure and let it be known that you are measuring

metrics

cyclomatic complexity measures complexity of a function V(G)= e - n + 2 V(G) = cyclomatic complexity of G e= # edges n= # of nodes

start 1 if (c1) 1 2 2 f1() 3 f2() 4 4 3 if (c2) nodes 5 6 5 f3() 6 f4() edges 7 8 7 end

chidamber & kemerer object-oriented metrics shyam r chidamber chris f kemerer easy but not terribly useful very useful

easy (but trivial) dit depth of inheritance tree # levels of inheritance noc number of children # immediate descendants npm number of public methods # public methods in class

very useful wmc rfc lcom cbo/ ce ca weighted methods/ class response for class lack of cohesion efferent couplings afferent couplings of cyclomatic complexity # of methods executed due to method call of sets of methods not shared via sharing fields of other classes this class uses (outgoing calls) of how many other classes use this class (incoming calls)

visualizations

source monitor freeware tool for gathering metrics metrics: lines, statements, % branches, calls, % comments, classes, methods/class, avg stmts/ method, max complexity, max depth, average depth, average complexity graphical user interface, windows only!

source monitor: kiviat graphs

source monitor: class summary

source monitor w/ c#

looking for... classes that violate several kiviat graph ranges really odd shapes

A project dedicated to making code metrics so widely understood, valuable, and simple that their use becomes ubiquitous, thus raising the quality of software across the industry.

panopticode parts code coverage with emma 1-line change to switch to cobertura checkstyle 1-line switch for custom rule sets jdepend code duplication using simian javancss aggregator & reports volatility treemaps

complexity treemap

code coverage

looking for... 20,000 foot view along a single dimension simple view of one dimension information radiators

size & complexity pyramid developed at Universities of Berne and Lugano shows key metrics and their relationships allows comparison to industry standards created by iplasma tool from source code

pyramid 5.75 NOP 224 6.13 NOC 1289 5.69 NOM 7905 7905 NOM 2.79 0.26 LOC 44988 22039 CALLS 0.40 CYCLO 11602 8798 FANOUT

iplasma + Struts

vuze

looking for... adherence to industry standards low number of lines / method (see composed method pattern) low cyclomatic complexity / line

GraphViz

e v e n d o t t l i s t f i l e

output

generating dot files

untangling jars jar analyzer Kirk Knoernschild www.kirkk.com

xml output

t r a n s f o r m e d

graphical struts 1.0

looking for... not that! small number of oneway dependencies no rats nests no cycles

Vizant ant task to create a GraphViz DOT file from an ant build file http://vizant.sourceforge.net/

ant 1.5

log4j

tomcat 3.3.1

from= dist

to= prepare

look for... hot spots more even distribution networks around common dependent elements think about extracting via macrodef

SpringViz XSLT => DOT for spring dependencies http://www.samoht.com/wiki/wiki.pl?springviz

SpringViz

look for... regularity symmetry overloaded dependencies isolated pockets

toxicity chart provides easy to compare overview of quality created with checkstyle + excel

toxicity chart 40.0 35.0 30.0 25.0 20.0 15.0 10.0 5.0 0.0 SessionFactory Utils.java AbstractBeanFactory.java BeanWrapperImpl.jav a DispatcherServ let.java SchedulerFactory Bean.java AntPathMatcher.jav a SQLErrorCodeSQLExceptionTranslator.jav a HibernateTemplate.jav a ReloadableResourceBundleMessageSource.jav a PropertiesBeanDef initionreader.jav a StatementCreatorUtils.java Lazy ConnectionDataSourceProxy.java Def aultmessagelistenercontainer.java JdoTransactionManager.jav a TopLinkTransactionManager.jav a ScriptFactory PostProcessor.java TransactionAwareConnectionFactory Proxy.java NumberUtils.jav a HibernateAccessor.jav a SpringSessionSy nchronization.jav a BeanDef initionvalueresolv er.java ExtendedEntity ManagerCreator.jav a ParameterMethodNameResolv er.java CallableStatementCreatorFactory.java BeanFactory AspectJAdvisorsBuilder.java CustomizableTraceInterceptor.jav a AbstractXsltView.jav a GenericCollectionTy peresolv er.java ArgumentConv ertingmethodinv oker.java SharedEntity ManagerCreator.jav a FreeMarkerConf igurationfactory.java SelectedValueComparator.jav a MockHttpServ letrequest.java FrameworkPortlet.jav a ResourceArray Property Editor.java AspectJWeav ermessagehandler.java MethodMapTransactionAttributeSource.jav a SingleConnectionFactory.java MessageListenerAdapter.jav a JdoTemplate.jav a DataSourceUtils.java Velocity View.jav a AbstractMessageListenerContainer.java SqlLobValue.jav a PortletRequestHandledEv ent.java JdbcOperations.jav a TxAdv icebeandef initionparser.java ArgTy pepreparedstatementsetter.jav a Ref reshablepagedlistholder.java AbstractJasperReportsSingleFormatView.java ClassUtils.java SimpleMailMessage.jav a JmsTransactionManager.jav a TransactionAttributeEditor.jav a Def aultbeandef initiondocumentreader.java AbstractInterceptorDrivenBeanDefinitionDecorator.java ResultSetWrappingSqlRowSet.jav a HsqlMaxValueIncrementer.jav a CodebaseAwareObjectInputStream.jav a AbstractSingletonProxy FactoryBean.java LocalSlsbInv okerinterceptor.java BeansDtdResolv er.java AbstractMessageSource.jav a AbstractDependency InjectionSpringContextTests.java TomcatInstrumentableClassLoader.java LocalContainerEntity ManagerFactoryBean.java ResourceEntity Resolver.java RedirectView.jav a HtmlCharacterEntityReferences.java AbstractPathMapHandlerMapping.jav a AspectJPrecedenceComparator.java ResourceServ let.java Adv isedsupport.jav a EhCacheFactory Bean.java CustomCollectionEditor.java CommonsMultipartFile.jav a OpenEntity ManagerInViewFilter.jav a TopLinkInterceptor.jav a MethodInv okingjobdetailfactorybean.java Def aultnamespacehandlerresolver.java XmlValidationModeDetector.jav a GenericFilterBean.jav a HessianServ iceexporter.java Property AccessorUtils.java InstantiationModelAwarePointcutAdv isorimpl.java BooleanExpressionComplexity ClassDataAbstractionCoupling ClassFanOutComplexity CyclomaticComplexity FileLength MethodLength NestedIfDepth AnonInnerLength ParameterNumber MissingSwitchDefault TreeWalker

test to code ratio Lines of unit test code per line of production code 1.60 1.40 1.20 1.00 1 2 3 3.053.1 4 5 6 7 8 9 10 11 12 13 14 15 16 17 0.80 1/4/06 15/4/06 29/4/06 13/5/06 27/5/06 10/6/06 24/6/06 8/7/06 22/7/06 5/8/06 19/8/06 2/9/06 16/9/06 30/9/06 14/10/06 28/10/06 11/11/06 25/11/06 9/12/06 23/12/06 6/1/07 20/1/07 3/2/07 17/2/07 3/3/07 17/3/07 31/3/07 14/4/07 28/4/07 12/5/07 26/5/07 9/6/07 23/6/07 7/7/07 21/7/07 4/8/07 18/8/07 Releases Unit test LOC/LOC created using unix tools + excel

cc / loc / releases

look for... notifications along your key dimension toxicity: high-spikes test-to-code ratio: higher is better complexity / loc: trends deltas more interesting than raw numbers

Unveiling the beauty of statistics for a fact based world view. time-based statistical view of chart data founded in Stockholm by Ola Rosling, Anna Rosling Rönnlund and Hans Rosling now realized in the google spreadsheet motion gadget

the data

motion chart gadget

look for... time-based trends odd outliers along dimensions symmetry fluidity

CodeCrawler www.inf.unisi.ch/faculty/lanza/codecrawler.html

CodeCrawler

CodeCrawler academic graphical metrics tool language independent written in VisualAge Smalltalk based on the Moose platform quirky but powerful

x-ray graduate student project written by Jacopo Malnati (http://atelier.inf.unisi.ch/~malnatij/xray.php) open-source software visualization plug-in for eclipse provides system complexity view, class & package dependency view model of the underlying Java project can be triggered and used by other plug-ins

x-ray visualizing itself through via system complexity view

using x-ray install the plug-in choose the Analyze Current Project action from the package explorer x-ray creates textual information and actions visualizations characterized by entities positioned according to layouts and criterions

actions # packages # methods open selected classes show/hide nodes show dependencies project name lines of code color tag # classes snapshot image show/hide package content

polymetric views system complexity view class dependency view package dependency view

system complexity view

system complexity view tries to illustrate disharmonies in the design and implementation of a system. identify big nodes (compared to the others) anomalies of shape (provided by the inheritance tree) view provides several different dimensions of metrics

positional metrics

system complexity view

color metrics

system complexity view

x-ray itself Azureus 3.0 (more than 500,000 lines of code)

dependencies outgoing incoming

class & package dependency views

class dependency view

package dependency

Azureus packages

filtering (< 30 weight)

proximity alert

look for... towers (=> lots of code, lots of methods) tangled dependencies exuberant responsibility natural partitions balance

10,000 ft view (literally) CodeCity by Richard Wettel http://www.inf.unisi.ch/phd/wettel/codecity.html

CodeCity integrated environment for software analysis software systems are visualized as interactive, navigable 3D cities written in VisualWorks Smalltalk, atop the Moose platform classes => buildings packages => districts

citylyzer

Citylyzer written atop x-ray inspired by CodeCity building height => number of methods width/length => number of attributes packages => districts

look for... real cityscape buildings that wouldn t exist in the real world overly crowded neighborhoods abandoned parts of town would you live there?

metrics + agility wire metrics & analysis into continuous integration manually check often discuss on iteration boundaries fail the build with: xpath expressions & plugins jdepend-like unit tests

summary intermediate altitude information radiators single dimensions compelling evidence cool!

ThoughtWorks? s please fill out the session evaluations samples at github.com/nealford NEAL FORD software architect / meme wrangler ThoughtWorks This work is licensed under the Creative Commons Attribution-Share Alike 3.0 License. http://creativecommons.org/licenses/by-sa/3.0/us/ nford@thoughtworks.com 3003 Summit Boulevard, Atlanta, GA 30319 www.nealford.com www.thoughtworks.com blog: memeagora.blogspot.com twitter: neal4d