visualizing java code bases for jfokus 2017

90
01

Upload: aestas-it

Post on 15-Feb-2017

118 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Visualizing Java code bases for Jfokus 2017

01

Page 2: Visualizing Java code bases for Jfokus 2017

02

Page 3: Visualizing Java code bases for Jfokus 2017

Let's start!03

Page 4: Visualizing Java code bases for Jfokus 2017

BackgroundFind new clients

Face big code bases

Need quick analysis

Need quick results

••••

04

Page 5: Visualizing Java code bases for Jfokus 2017

Code sizeGoogle: 2 billions LOC

Facebook: 61 million LOC

Me: from 20K to 2M LOC

•••

05

Page 6: Visualizing Java code bases for Jfokus 2017

I hate reading...

06

Page 7: Visualizing Java code bases for Jfokus 2017

It's life, Jim, but not as we know it!

07

Page 8: Visualizing Java code bases for Jfokus 2017

Code is data!08

Page 9: Visualizing Java code bases for Jfokus 2017

Well, big data09

Page 10: Visualizing Java code bases for Jfokus 2017

Snapshot

10

Page 11: Visualizing Java code bases for Jfokus 2017

Temporal

11

Page 12: Visualizing Java code bases for Jfokus 2017

Who usesSonarQube?

12

Page 13: Visualizing Java code bases for Jfokus 2017

SonarQubeDon't get me wrong: I love it!

BUT... it's not that easy to get data in.

It needs to be tuned for each team.

It's not easy to make your team to use the data.

Data is impersonal.

•••••

13

Page 14: Visualizing Java code bases for Jfokus 2017

First steps14

Page 15: Visualizing Java code bases for Jfokus 2017

Count thelines!

15

Page 16: Visualizing Java code bases for Jfokus 2017

Size does matterGives you an estimate (on how much reading is needed).

Most of the code bases are polyglot. Ratio between languages can

tell something.

Ratio between test code, comments, blank lines is also interesting.

••

16

Page 17: Visualizing Java code bases for Jfokus 2017

cloc

17

Page 18: Visualizing Java code bases for Jfokus 2017

Usagecloc ‐‐help

cloc ‐‐write‐lang‐def=lang.defs

01.

02.

18

Page 19: Visualizing Java code bases for Jfokus 2017

Usagecloc ‐‐csv 

     ‐‐quite 

     ‐‐progress‐rate=0

     ‐‐ignored=files.ignored 

     ‐‐exclude‐dir=test,build

     ‐‐read‐lang‐def=lang.defs 

     ‐‐out=data.csv

     .

01.

02.

03.

04.

05.

06.

07.

08.

19

Page 20: Visualizing Java code bases for Jfokus 2017

Language definitionsGradle

    filter remove_matches ^\s*//

    filter remove_inline //.*$

    filter call_regexp_common C

    extension gradle

    3rd_gen_scale 4.10

01.

02.

03.

04.

05.

06.

20

Page 21: Visualizing Java code bases for Jfokus 2017

Where are thepictures?

21

Page 22: Visualizing Java code bases for Jfokus 2017

We havestats, let'splot them!

22

Page 23: Visualizing Java code bases for Jfokus 2017

Excel?Probably not.

23

Page 24: Visualizing Java code bases for Jfokus 2017

Pie charts areboring!

24

Page 25: Visualizing Java code bases for Jfokus 2017

Infographics!25

Page 26: Visualizing Java code bases for Jfokus 2017

d3.js

26

Page 27: Visualizing Java code bases for Jfokus 2017

d3.jsJavascript library for data visualizations

Tons of examples

Many libraries built on top of d3.js

Several books

••••

27

Page 28: Visualizing Java code bases for Jfokus 2017

Useful chartsCalendar View ­ https://bl.ocks.org/mbostock/4063318

Buble Chart ­ https://bl.ocks.org/mbostock/4063269

Hierarchical Edge Bundling ­ https://bl.ocks.org/mbostock/1044242

•••

28

Page 29: Visualizing Java code bases for Jfokus 2017

Demo29

Page 30: Visualizing Java code bases for Jfokus 2017

Many alternativesvis.js

raphael.js

sigma.js

many, many, many more

••••

30

Page 31: Visualizing Java code bases for Jfokus 2017

Tableau Public

31

Page 32: Visualizing Java code bases for Jfokus 2017

Tableau Public

32

Page 33: Visualizing Java code bases for Jfokus 2017

Tableau Public

33

Page 34: Visualizing Java code bases for Jfokus 2017

Demo34

Page 35: Visualizing Java code bases for Jfokus 2017

Design yourown!

35

Page 36: Visualizing Java code bases for Jfokus 2017

SVG + Inkscape

36

Page 37: Visualizing Java code bases for Jfokus 2017

Home­made Inforgraphics

37

Page 38: Visualizing Java code bases for Jfokus 2017

Code City38

Page 39: Visualizing Java code bases for Jfokus 2017

Code City

39

Page 40: Visualizing Java code bases for Jfokus 2017

ImplementationseXcentia plugin for SonarQube

JSCity••

40

Page 41: Visualizing Java code bases for Jfokus 2017

Demo41

Page 42: Visualizing Java code bases for Jfokus 2017

Temporalanalysis

42

Page 43: Visualizing Java code bases for Jfokus 2017

GitHub

43

Page 44: Visualizing Java code bases for Jfokus 2017

GitHub

44

Page 45: Visualizing Java code bases for Jfokus 2017

FishEye

45

Page 46: Visualizing Java code bases for Jfokus 2017

GourceSoftware projects are displayed by Gource as an animated tree with

the root directory of the project at its centre. 

Directories appear as branches with files as leaves. 

Developers can be seen working on the tree at the times they

contributed to the project.

“46

Page 47: Visualizing Java code bases for Jfokus 2017

Launch gourcegource ‐s 0.1 ‐1280x720 

gource ‐‐output‐custom‐log log1.txt 

gource ‐s 0.1 ‐1280x720 log1.txt

01.

02.

03.

47

Page 48: Visualizing Java code bases for Jfokus 2017

Log format1444125624|Luke Daley|M|/ratpack‐core/.../WiretapPublisher.java

1444125624|Luke Daley|M|/ratpack‐core/.../YieldingPublisher.java

1444306114|Stian Lindhom|M|/ratpack‐manual/.../13‐http.md

1444312172|Andrey Antukh|M|/ratpack‐core/.../WebSocketEngine.java

01.

02.

03.

04.

48

Page 49: Visualizing Java code bases for Jfokus 2017

Demo49

Page 50: Visualizing Java code bases for Jfokus 2017

Code MaatCode Maat is a command line tool used to mine and analyze data from

version­control systems“50

Page 51: Visualizing Java code bases for Jfokus 2017

Launch Maatgit log ‐‐pretty=format:'[%h] %aN %ad %s' \

    ‐‐date=short ‐‐numstat ‐‐after=YYYY‐MM‐DD

01.

02.

51

Page 52: Visualizing Java code bases for Jfokus 2017

Launch Maatmaat ‐l git.log ‐c git ‐a summary 

maat ‐l ratpack_evo.log ‐c git ‐a revisions > ratpack_freqs.csv

python scripts/merge_comp_freqs.py ratpack_freqs.csv ratpack_lines.csv

01.

02.

03.

52

Page 53: Visualizing Java code bases for Jfokus 2017

Analysis typesabs­churn, age, author­churn, authors, communication, coupling,

entity­churn, entity­effort, entity­ownership, fragmentation, identity,

main­dev, main­dev­by­revs, messages, refactoring­main­dev,

revisions, soc, summary

53

Page 54: Visualizing Java code bases for Jfokus 2017

Demo54

Page 55: Visualizing Java code bases for Jfokus 2017

Let's talk bigdata

55

Page 56: Visualizing Java code bases for Jfokus 2017

ElasticSearchDistributed, scalable, and highly available

Real­time search and analytics capabilities

Sophisticated RESTful API

•••

56

Page 57: Visualizing Java code bases for Jfokus 2017

Index data$ curl ‐XPUT 'http://localhost:9200/gitlog/commit/123345' ‐d '{

  "commitId" : "123345",

  "timestamp" : "2009‐11‐15T14:12:12",

  "message" : "git into es"

}'

01.

02.

03.

04.

05.

57

Page 58: Visualizing Java code bases for Jfokus 2017

KibanaFlexible analytics and visualization platform

Real­time summary and charting of streaming data

Intuitive interface for a variety of users

Instant sharing and embedding of dashboards

••••

58

Page 59: Visualizing Java code bases for Jfokus 2017

Kibana59

Page 60: Visualizing Java code bases for Jfokus 2017

Demo60

Page 61: Visualizing Java code bases for Jfokus 2017

Structure61

Page 62: Visualizing Java code bases for Jfokus 2017

Structure101

62

Page 63: Visualizing Java code bases for Jfokus 2017

Demo63

Page 64: Visualizing Java code bases for Jfokus 2017

Graphs are everywhere!

64

Page 65: Visualizing Java code bases for Jfokus 2017

jQAssistantjQAssistant is a QA tool which allows the definition and validation of

project specific rules on a structural level. 

It is built upon the graph database Neo4j and can easily be plugged

into the build process to automate detection of constraint violations

and generate reports about user defined concepts and metrics.

“65

Page 66: Visualizing Java code bases for Jfokus 2017

jQAssistantjqassistant scan ‐f binaries

jqassistant server

01.

02.

66

Page 67: Visualizing Java code bases for Jfokus 2017

Query your codeMATCH

  (class:Class)‐[:DECLARES]‐>(method:Method)

RETURN

  class.fqn, count(method) as Methods

ORDER BY

  Methods DESC

LIMIT 20

01.

02.

03.

04.

05.

06.

07.

67

Page 68: Visualizing Java code bases for Jfokus 2017

Query different versionsmatch

  (artifact:Artifact)‐[:CONTAINS]‐>(type:Type)

return

  artifact.fileName as Artifact, collect(type.fqn) as Types

01.

02.

03.

04.

68

Page 69: Visualizing Java code bases for Jfokus 2017

neo4j

69

Page 70: Visualizing Java code bases for Jfokus 2017

Demo70

Page 71: Visualizing Java code bases for Jfokus 2017

Conclusion71

Page 72: Visualizing Java code bases for Jfokus 2017

Adam Tornhill

72

Page 73: Visualizing Java code bases for Jfokus 2017

Hotspot Analysisuse hotspots to identify maintenance problems.

use hotspots for risk management.

hotspots point to code review candidates.

hotspots are input to exploratory tests.

••••

73

Page 74: Visualizing Java code bases for Jfokus 2017

ConclusionExtract data from your code!

Visualize it and search for hot spots!

Search for new facts and knowledge!

Become data scientist or data journalist!

••••

74

Page 75: Visualizing Java code bases for Jfokus 2017

Next time...75

Page 76: Visualizing Java code bases for Jfokus 2017

when you...76

Page 77: Visualizing Java code bases for Jfokus 2017

push yourcode

77

Page 78: Visualizing Java code bases for Jfokus 2017

REMEMBER78

Page 79: Visualizing Java code bases for Jfokus 2017

79

Page 80: Visualizing Java code bases for Jfokus 2017

Readingmaterial

80

Page 81: Visualizing Java code bases for Jfokus 2017

Your Code as a Crime Scene

81

Page 82: Visualizing Java code bases for Jfokus 2017

Metrics and Models in SQE

82

Page 83: Visualizing Java code bases for Jfokus 2017

Software Metrics and Metrology

83

Page 84: Visualizing Java code bases for Jfokus 2017

Links: imageshttp://abstrusegoose.com/432

http://camarenaphoto.tumblr.com/post/112238079516/its­life­jim­but­

not­as­we­know­it­spock

http://technology.ie/big­data­looks­like/

http://www.informationisbeautiful.net/visualizations/million­lines­of­

code/

http://githut.info/

http://emmanueloga.com/2013/10/07/Graphs­are­Everywhere­An­

overview­of­GraphConnect­San­Francisco­2013.html

••

••

••

84

Page 85: Visualizing Java code bases for Jfokus 2017

Links: toolshttps://github.com/AlDanial/cloc

http://gource.io/

http://wettel.github.io/codecity­wof.html

https://github.com/adamtornhill/code­maat

http://d3js.org/

http://visjs.org/

••••••

85

Page 86: Visualizing Java code bases for Jfokus 2017

Links: toolshttp://www.sonarqube.org/

https://www.atlassian.com/pt/software/fisheye/overview

https://www.elastic.co/products/elasticsearch

https://www.elastic.co/products/kibana

http://jqassistant.org/

http://neo4j.com/

••••••

86

Page 87: Visualizing Java code bases for Jfokus 2017

Links: toolshttps://github.com/ThoughtWorksStudios/saikuro_treemap

https://www.youtube.com/watch?v=iiIytERhV9o

https://codescene.io

http://www.adamtornhill.com/articles/software­

revolution/part1/index.html

••••

87

Page 88: Visualizing Java code bases for Jfokus 2017

That's all!88

Page 89: Visualizing Java code bases for Jfokus 2017

Thank you!89

Page 90: Visualizing Java code bases for Jfokus 2017

90