SlideShare a Scribd company logo
1 of 25
Download to read offline
by
JDD Krakow 2015
Dirk Mahler
2
 Black Boxes Called Artifacts
 jQAssistant
 Software As A Graph
 Let’s Explore Libraries!
Yes We Scan – Software Analysis Using jQAssistant
3
4
 Artifact
 Result of a build/integration processes
 Black Box – What does it hide?
 Let‘s open it!
Person.java
@Entity
public class Person {
private String name;
}
pom.xml
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>2.1.0</version>
</dependency>
person.sql
create table PERSON (id number, name varchar(255)
model.jar
/com/acme/model/Person.class
/META-INF/persistence.xml
acme.war
/index.xhtml
/WEB-INF/lib/model.jar
5
 The Idea
 Scan software structures
 Store them into a database
 Execute queries
 Why?
 Holistic view on the „real world“
 Exploration
 effective searches beyond IDE capabilities
 Individual metrics and visualization
 Complexity, Dependencies
 Validation
 Coding rules, design & architecture constraints
 Reporting
 And finally… it‘s fun!
Database
Find
all…
Yes We Scan
Software Analysis Using jQAssistant
6
7
http://jQAssistant.org
 Open Source: GPLv3
 Current release: 1.0.0 (1.1.0-RC1)
 initiated: 03/2013
 first stable release: 04/2015
 Neo4j Community Edition embedded
 no installation necessary
8
Command
Line/
Maven
Scan
Analyze
Report
Plugins
Plugins
Plugins
9
 Getting Started – Command Line
 unzip jqassistant.distribution-1.0.0.zip
 cd jqassistant.distribution-1.0.0/bin
 jqassistant.sh scan –f model.jar
 jqassistant.sh scan –f acme.war
 jqassistant.sh scan –f acme.ear
 jqassistant.sh scan –u http://somewhere.com/acme.ear
 jqassistant.sh scan –u
maven:repository::http://host/releases
 jqassistant.sh scan –u
rdbms:schema::jdbc:oracle:thin:user/secret@host:1521:sid
 jqassistant.sh server
 http://localhost:7474
10
 Getting Started – Maven Project
<build>
<plugins>
<plugin>
<groupId>com.buschmais.jqassistant.scm</groupId>
<artifactId>jqassistant-maven-plugin</artifactId>
<version>1.0.0</version>
</plugin>
</plugins>
</build>
 mvn install jqassistant:scan
 mvn jqassistant:server
 http://localhost:7474
11
 Available scanner plugins
 Plugin API is public
*.class
RDBMS Schema
Git
JaCoCo
FindBugs
CheckStyle
LiquibaseJAR, WAR, EARZIP
application.xmlweb.xml
MANIFEST.MF /META-INF/services/*
beans.xml
pom.xml surefire-reports.xml
GZ
*.properties
*.xsd
M2 Repository
*.yaml
Yes We Scan
Software Analysis Using jQAssistant
12
13
 All we need is…
 Nodes
 Labels
 Properties
 Relationships
 Modeling is just…
 Taking a pen
 Drawing the structures on a whiteboard (i.e. the database)
 We don‘t need…
 Foreign keys
 Tables and schemas
 Knowledge in graph theory
Type
EXTENDS
fqn:com.acme.model.Person
CONTAINS
Package
name:com
CONTAINS
Package
name:acme
CONTAINS
Package
name:model
Class
Type
CONTAINS
fqn:com.acme.model.PersonAnnotation ANNOTATED_BY
Type
OF_TYPE
fqn:javax.persistence.Entity
REQUIRES
Field
DECLARES
name:name
Type
OF_TYPE
fqn:int
REQUIRES
Maven
CONTAINS
fileName: /META-INF/maven/com.acme.model/pom.xml
Pom
Java
CONTAINS
Archive
fileName:model.jar
Artifact
Web Application
fileName:acme.warArchive
Artifact
CONTAINS
group:org.eclipse.persistence
name:persistence-api
version: 2.1.0
Artifact
scope:compile
DECLARES_DEPENDENCY
15
TypeType
Class
EXTENDS
 Explore an application using queries
 Which class extends from another class?
 Let‘s convert this to ASCII art…
 () as nodes
 -[]-> as directed relationships
16
TypeType
Class
EXTENDS
 Explore an application using queries
 Which class extends from another class?
 Let‘s convert this to ASCII art…
 () as nodes
 -[]-> as directed relationships
()-[]->()
17
C2
Type
C1
Type
Class
EXTENDS
 Explore an application using queries
 Which class extends from another class?
 Let‘s convert this to ASCII art…
 () as nodes
 -[]-> as directed relationships
(c1)-[]->(c2)
18
C2
Type
C1
Type
Class
EXTENDS
 Explore an application using queries
 Which class extends from another class?
 Let‘s convert this to ASCII art…
 () as nodes
 -[]-> as directed relationships
(c1)-[:EXTENDS]->(c2)
19
 Explore an application using queries
 Which class extends from another class?
 Let‘s convert this to ASCII art…
 () as nodes
 -[]-> as directed relationships
(c1:Class)-[:EXTENDS]->(c2:Type)
C2
Type
C1
Type
Class
EXTENDS
20
 Explore an application using queries
 Which class extends from another class?
 Pattern matching is the core principle of Cypher
MATCH
(c1:Class)-[:EXTENDS]->(c2:Type)
RETURN
c1.fqn, c2.fqn
C2
Type
C1
Type
Class
EXTENDS
Yes We Scan
Software Analysis Using jQAssistant
21
22
 Examples
 Artifacts and Maven descriptors
 API changes between releases
 Declared deprecations
 Thrown exceptions
 Structural problems (metrics)
 Declared members
 Depth of inheritance hierarchies
 Cyclomatic complexity
 Fan In/Fan Out of classes and packages
 Package Cycles
Yes We Scan
Software Analysis Using jQAssistant
23
https://jqassistant.org/yes-we-scan-exploring-libraries/
24
 What makes the difference?
 Flexible data model
 Get information about different aspects of the same software in just
one place
 Extend it using plugins
 Including custom implementations
 Expressive queries
 Enrich and query using your own concepts/abstractions
 Create specific metrics and reports
Mail: info@jqassistant.de
Web: jqassistant.de
Twitter: @jqassistant
by

More Related Content

Viewers also liked

4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...PROIDEA
 
PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...
PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...
PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...PROIDEA
 
4Developers: Jak nie zasnąć na telekonferencjach? - Paweł Wrzeszcz
4Developers: Jak nie zasnąć na telekonferencjach? - Paweł Wrzeszcz4Developers: Jak nie zasnąć na telekonferencjach? - Paweł Wrzeszcz
4Developers: Jak nie zasnąć na telekonferencjach? - Paweł WrzeszczPROIDEA
 
PLNOG14: Network Automation - Sławomir Janukowicz
PLNOG14: Network Automation - Sławomir JanukowiczPLNOG14: Network Automation - Sławomir Janukowicz
PLNOG14: Network Automation - Sławomir JanukowiczPROIDEA
 
PLNOG14: Network and Application Performance Monitoring - Bob Cronin
PLNOG14: Network and Application Performance Monitoring - Bob CroninPLNOG14: Network and Application Performance Monitoring - Bob Cronin
PLNOG14: Network and Application Performance Monitoring - Bob CroninPROIDEA
 
4Developers 2015: Mikroserwisy - szanse, dylematy i problemy - Łukasz Sowa
4Developers 2015: Mikroserwisy - szanse, dylematy i problemy - Łukasz Sowa4Developers 2015: Mikroserwisy - szanse, dylematy i problemy - Łukasz Sowa
4Developers 2015: Mikroserwisy - szanse, dylematy i problemy - Łukasz SowaPROIDEA
 
4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...
4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...
4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...PROIDEA
 
4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...
4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...
4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...PROIDEA
 
PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...
PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...
PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...PROIDEA
 
DevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor Bugayenko
DevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor BugayenkoDevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor Bugayenko
DevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor BugayenkoPROIDEA
 
JDD2015: Panta rhei or Reactive Java in practice - Tomasz Kowalczewski
JDD2015: Panta rhei or Reactive Java in practice - Tomasz KowalczewskiJDD2015: Panta rhei or Reactive Java in practice - Tomasz Kowalczewski
JDD2015: Panta rhei or Reactive Java in practice - Tomasz KowalczewskiPROIDEA
 
PLNOG14: Czy można żyć bez systemu ochrony przed atakami DDoS - Marek Janik
PLNOG14: Czy można żyć bez systemu ochrony przed atakami DDoS - Marek JanikPLNOG14: Czy można żyć bez systemu ochrony przed atakami DDoS - Marek Janik
PLNOG14: Czy można żyć bez systemu ochrony przed atakami DDoS - Marek JanikPROIDEA
 
PLNOG 13: Michał Dubiel: OpenContrail software architecture
PLNOG 13: Michał Dubiel: OpenContrail software architecturePLNOG 13: Michał Dubiel: OpenContrail software architecture
PLNOG 13: Michał Dubiel: OpenContrail software architecturePROIDEA
 
JDD2015: Thorny path to Data Mining projects - Alexey Zinoviev
JDD2015: Thorny path to Data Mining projects - Alexey Zinoviev JDD2015: Thorny path to Data Mining projects - Alexey Zinoviev
JDD2015: Thorny path to Data Mining projects - Alexey Zinoviev PROIDEA
 
JDD2015: Migrating to continuous delivery in the world of financial trading -...
JDD2015: Migrating to continuous delivery in the world of financial trading -...JDD2015: Migrating to continuous delivery in the world of financial trading -...
JDD2015: Migrating to continuous delivery in the world of financial trading -...PROIDEA
 
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr BuckiPROIDEA
 

Viewers also liked (17)

4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...
4Developers 2015: Minimalizowanie szkód powodowanych przez nowego członka w z...
 
PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...
PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...
PLNOG14: Więcej niż samo łącze, czyli jak zarabiać na dodatkowych usługach op...
 
4Developers: Jak nie zasnąć na telekonferencjach? - Paweł Wrzeszcz
4Developers: Jak nie zasnąć na telekonferencjach? - Paweł Wrzeszcz4Developers: Jak nie zasnąć na telekonferencjach? - Paweł Wrzeszcz
4Developers: Jak nie zasnąć na telekonferencjach? - Paweł Wrzeszcz
 
PLNOG14: Network Automation - Sławomir Janukowicz
PLNOG14: Network Automation - Sławomir JanukowiczPLNOG14: Network Automation - Sławomir Janukowicz
PLNOG14: Network Automation - Sławomir Janukowicz
 
PLNOG14: Network and Application Performance Monitoring - Bob Cronin
PLNOG14: Network and Application Performance Monitoring - Bob CroninPLNOG14: Network and Application Performance Monitoring - Bob Cronin
PLNOG14: Network and Application Performance Monitoring - Bob Cronin
 
4Developers 2015: Mikroserwisy - szanse, dylematy i problemy - Łukasz Sowa
4Developers 2015: Mikroserwisy - szanse, dylematy i problemy - Łukasz Sowa4Developers 2015: Mikroserwisy - szanse, dylematy i problemy - Łukasz Sowa
4Developers 2015: Mikroserwisy - szanse, dylematy i problemy - Łukasz Sowa
 
4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...
4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...
4Developers 2015: Dlaczego 99% firm, które tworzą API RESTowe kłamie? - Barte...
 
4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...
4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...
4Developers 2015: Stick to the rules - Consumer Driven Contracts - Marcin Grz...
 
PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...
PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...
PLNOG14: Waltzing on that gentle trade‐off between internet routes and FIB sp...
 
DevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor Bugayenko
DevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor BugayenkoDevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor Bugayenko
DevOpsDays Warsaw 2015: Continuous Integration is Dead – Yegor Bugayenko
 
JDD2015: Panta rhei or Reactive Java in practice - Tomasz Kowalczewski
JDD2015: Panta rhei or Reactive Java in practice - Tomasz KowalczewskiJDD2015: Panta rhei or Reactive Java in practice - Tomasz Kowalczewski
JDD2015: Panta rhei or Reactive Java in practice - Tomasz Kowalczewski
 
PLNOG14: Czy można żyć bez systemu ochrony przed atakami DDoS - Marek Janik
PLNOG14: Czy można żyć bez systemu ochrony przed atakami DDoS - Marek JanikPLNOG14: Czy można żyć bez systemu ochrony przed atakami DDoS - Marek Janik
PLNOG14: Czy można żyć bez systemu ochrony przed atakami DDoS - Marek Janik
 
PLNOG 13: Michał Dubiel: OpenContrail software architecture
PLNOG 13: Michał Dubiel: OpenContrail software architecturePLNOG 13: Michał Dubiel: OpenContrail software architecture
PLNOG 13: Michał Dubiel: OpenContrail software architecture
 
JDD2015: Thorny path to Data Mining projects - Alexey Zinoviev
JDD2015: Thorny path to Data Mining projects - Alexey Zinoviev JDD2015: Thorny path to Data Mining projects - Alexey Zinoviev
JDD2015: Thorny path to Data Mining projects - Alexey Zinoviev
 
JDD2015: Migrating to continuous delivery in the world of financial trading -...
JDD2015: Migrating to continuous delivery in the world of financial trading -...JDD2015: Migrating to continuous delivery in the world of financial trading -...
JDD2015: Migrating to continuous delivery in the world of financial trading -...
 
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
 
Work commute Top 10 Mobile apps
Work commute Top 10 Mobile appsWork commute Top 10 Mobile apps
Work commute Top 10 Mobile apps
 

Similar to JDD2015: Yes We Scan! Software Analysis Using jQAssistant And Neo4j - Dirk Mahler

Discover Tasty Query: The library for Scala program analysis
Discover Tasty Query: The library for Scala program analysisDiscover Tasty Query: The library for Scala program analysis
Discover Tasty Query: The library for Scala program analysisJames Thompson
 
Framework engineering JCO 2011
Framework engineering JCO 2011Framework engineering JCO 2011
Framework engineering JCO 2011YoungSu Son
 
C++ classes tutorials
C++ classes tutorialsC++ classes tutorials
C++ classes tutorialsakreyi
 
Mca 2nd sem u-2 classes & objects
Mca 2nd  sem u-2 classes & objectsMca 2nd  sem u-2 classes & objects
Mca 2nd sem u-2 classes & objectsRai University
 
Bca 2nd sem u-2 classes & objects
Bca 2nd sem u-2 classes & objectsBca 2nd sem u-2 classes & objects
Bca 2nd sem u-2 classes & objectsRai University
 
Object Orientation.pdf
Object Orientation.pdfObject Orientation.pdf
Object Orientation.pdfJutt21
 
Framework Design Guidelines For Brussels Users Group
Framework Design Guidelines For Brussels Users GroupFramework Design Guidelines For Brussels Users Group
Framework Design Guidelines For Brussels Users Groupbrada
 
ptu3-harvey-m-deitel-paul-j-deitel-tem-r-nieto-contributor-paul-j-deitel.pdf
ptu3-harvey-m-deitel-paul-j-deitel-tem-r-nieto-contributor-paul-j-deitel.pdfptu3-harvey-m-deitel-paul-j-deitel-tem-r-nieto-contributor-paul-j-deitel.pdf
ptu3-harvey-m-deitel-paul-j-deitel-tem-r-nieto-contributor-paul-j-deitel.pdfjorgeulises3
 
Reducing Redundancies in Multi-Revision Code Analysis
Reducing Redundancies in Multi-Revision Code AnalysisReducing Redundancies in Multi-Revision Code Analysis
Reducing Redundancies in Multi-Revision Code AnalysisSebastiano Panichella
 
Getting Started - Console Program and Problem Solving
Getting Started - Console Program and Problem SolvingGetting Started - Console Program and Problem Solving
Getting Started - Console Program and Problem SolvingHock Leng PUAH
 
SPF Getting Started - Console Program
SPF Getting Started - Console ProgramSPF Getting Started - Console Program
SPF Getting Started - Console ProgramHock Leng PUAH
 
Where are yours vertexes and what are they talking about?
Where are yours vertexes and what are they talking about?Where are yours vertexes and what are they talking about?
Where are yours vertexes and what are they talking about?Roberto Franchini
 
How to write clean & testable code without losing your mind
How to write clean & testable code without losing your mindHow to write clean & testable code without losing your mind
How to write clean & testable code without losing your mindAndreas Czakaj
 
Lecture08 computer applicationsie1_dratifshahzad
Lecture08 computer applicationsie1_dratifshahzadLecture08 computer applicationsie1_dratifshahzad
Lecture08 computer applicationsie1_dratifshahzadAtif Shahzad
 
Object Oriented Programming with C#
Object Oriented Programming with C#Object Oriented Programming with C#
Object Oriented Programming with C#SyedUmairAli9
 
OBJECT ORIENTED PROGRAMING IN C++
OBJECT ORIENTED PROGRAMING IN C++ OBJECT ORIENTED PROGRAMING IN C++
OBJECT ORIENTED PROGRAMING IN C++ Dev Chauhan
 

Similar to JDD2015: Yes We Scan! Software Analysis Using jQAssistant And Neo4j - Dirk Mahler (20)

Discover Tasty Query: The library for Scala program analysis
Discover Tasty Query: The library for Scala program analysisDiscover Tasty Query: The library for Scala program analysis
Discover Tasty Query: The library for Scala program analysis
 
Analysis of software systems using jQAssistant and Neo4j
Analysis of software systems using jQAssistant and Neo4jAnalysis of software systems using jQAssistant and Neo4j
Analysis of software systems using jQAssistant and Neo4j
 
Framework engineering JCO 2011
Framework engineering JCO 2011Framework engineering JCO 2011
Framework engineering JCO 2011
 
C++ classes tutorials
C++ classes tutorialsC++ classes tutorials
C++ classes tutorials
 
Mca 2nd sem u-2 classes & objects
Mca 2nd  sem u-2 classes & objectsMca 2nd  sem u-2 classes & objects
Mca 2nd sem u-2 classes & objects
 
Bca 2nd sem u-2 classes & objects
Bca 2nd sem u-2 classes & objectsBca 2nd sem u-2 classes & objects
Bca 2nd sem u-2 classes & objects
 
Object Orientation.pdf
Object Orientation.pdfObject Orientation.pdf
Object Orientation.pdf
 
Framework Design Guidelines For Brussels Users Group
Framework Design Guidelines For Brussels Users GroupFramework Design Guidelines For Brussels Users Group
Framework Design Guidelines For Brussels Users Group
 
ptu3-harvey-m-deitel-paul-j-deitel-tem-r-nieto-contributor-paul-j-deitel.pdf
ptu3-harvey-m-deitel-paul-j-deitel-tem-r-nieto-contributor-paul-j-deitel.pdfptu3-harvey-m-deitel-paul-j-deitel-tem-r-nieto-contributor-paul-j-deitel.pdf
ptu3-harvey-m-deitel-paul-j-deitel-tem-r-nieto-contributor-paul-j-deitel.pdf
 
Reducing Redundancies in Multi-Revision Code Analysis
Reducing Redundancies in Multi-Revision Code AnalysisReducing Redundancies in Multi-Revision Code Analysis
Reducing Redundancies in Multi-Revision Code Analysis
 
Getting Started - Console Program and Problem Solving
Getting Started - Console Program and Problem SolvingGetting Started - Console Program and Problem Solving
Getting Started - Console Program and Problem Solving
 
SPF Getting Started - Console Program
SPF Getting Started - Console ProgramSPF Getting Started - Console Program
SPF Getting Started - Console Program
 
Where are yours vertexes and what are they talking about?
Where are yours vertexes and what are they talking about?Where are yours vertexes and what are they talking about?
Where are yours vertexes and what are they talking about?
 
C#.net Evolution part 1
C#.net Evolution part 1C#.net Evolution part 1
C#.net Evolution part 1
 
How to write clean & testable code without losing your mind
How to write clean & testable code without losing your mindHow to write clean & testable code without losing your mind
How to write clean & testable code without losing your mind
 
COM Introduction
COM IntroductionCOM Introduction
COM Introduction
 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
 
Lecture08 computer applicationsie1_dratifshahzad
Lecture08 computer applicationsie1_dratifshahzadLecture08 computer applicationsie1_dratifshahzad
Lecture08 computer applicationsie1_dratifshahzad
 
Object Oriented Programming with C#
Object Oriented Programming with C#Object Oriented Programming with C#
Object Oriented Programming with C#
 
OBJECT ORIENTED PROGRAMING IN C++
OBJECT ORIENTED PROGRAMING IN C++ OBJECT ORIENTED PROGRAMING IN C++
OBJECT ORIENTED PROGRAMING IN C++
 

Recently uploaded

WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypseTomasz Kowalczewski
 
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & InnovationWSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & InnovationWSO2
 
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...WSO2
 
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdfAzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdfryanfarris8
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
WSO2Con2024 - Hello Choreo Presentation - Kanchana
WSO2Con2024 - Hello Choreo Presentation - KanchanaWSO2Con2024 - Hello Choreo Presentation - Kanchana
WSO2Con2024 - Hello Choreo Presentation - KanchanaWSO2
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationJuha-Pekka Tolvanen
 
WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...
WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...
WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...WSO2
 
WSO2CON 2024 Slides - Unlocking Value with AI
WSO2CON 2024 Slides - Unlocking Value with AIWSO2CON 2024 Slides - Unlocking Value with AI
WSO2CON 2024 Slides - Unlocking Value with AIWSO2
 
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...WSO2
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2
 
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...WSO2
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2
 
Driving Innovation: Scania's API Revolution with WSO2
Driving Innovation: Scania's API Revolution with WSO2Driving Innovation: Scania's API Revolution with WSO2
Driving Innovation: Scania's API Revolution with WSO2WSO2
 
WSO2CON 2024 - Building a Digital Government in Uganda
WSO2CON 2024 - Building a Digital Government in UgandaWSO2CON 2024 - Building a Digital Government in Uganda
WSO2CON 2024 - Building a Digital Government in UgandaWSO2
 
WSO2Con2024 - Organization Management: The Revolution in B2B CIAM
WSO2Con2024 - Organization Management: The Revolution in B2B CIAMWSO2Con2024 - Organization Management: The Revolution in B2B CIAM
WSO2Con2024 - Organization Management: The Revolution in B2B CIAMWSO2
 

Recently uploaded (20)

WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
 
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & InnovationWSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
WSO2CON 2024 - OSU & WSO2: A Decade Journey in Integration & Innovation
 
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
 
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdfAzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
WSO2Con2024 - Hello Choreo Presentation - Kanchana
WSO2Con2024 - Hello Choreo Presentation - KanchanaWSO2Con2024 - Hello Choreo Presentation - Kanchana
WSO2Con2024 - Hello Choreo Presentation - Kanchana
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaS
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...
WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...
WSO2CON 2024 - Lessons from the Field: Legacy Platforms – It's Time to Let Go...
 
WSO2CON 2024 Slides - Unlocking Value with AI
WSO2CON 2024 Slides - Unlocking Value with AIWSO2CON 2024 Slides - Unlocking Value with AI
WSO2CON 2024 Slides - Unlocking Value with AI
 
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
WSO2Con2024 - GitOps in Action: Navigating Application Deployment in the Plat...
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
Driving Innovation: Scania's API Revolution with WSO2
Driving Innovation: Scania's API Revolution with WSO2Driving Innovation: Scania's API Revolution with WSO2
Driving Innovation: Scania's API Revolution with WSO2
 
WSO2CON 2024 - Building a Digital Government in Uganda
WSO2CON 2024 - Building a Digital Government in UgandaWSO2CON 2024 - Building a Digital Government in Uganda
WSO2CON 2024 - Building a Digital Government in Uganda
 
WSO2Con2024 - Organization Management: The Revolution in B2B CIAM
WSO2Con2024 - Organization Management: The Revolution in B2B CIAMWSO2Con2024 - Organization Management: The Revolution in B2B CIAM
WSO2Con2024 - Organization Management: The Revolution in B2B CIAM
 

JDD2015: Yes We Scan! Software Analysis Using jQAssistant And Neo4j - Dirk Mahler

  • 2. 2  Black Boxes Called Artifacts  jQAssistant  Software As A Graph  Let’s Explore Libraries!
  • 3. Yes We Scan – Software Analysis Using jQAssistant 3
  • 4. 4  Artifact  Result of a build/integration processes  Black Box – What does it hide?  Let‘s open it! Person.java @Entity public class Person { private String name; } pom.xml <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>persistence-api</artifactId> <version>2.1.0</version> </dependency> person.sql create table PERSON (id number, name varchar(255) model.jar /com/acme/model/Person.class /META-INF/persistence.xml acme.war /index.xhtml /WEB-INF/lib/model.jar
  • 5. 5  The Idea  Scan software structures  Store them into a database  Execute queries  Why?  Holistic view on the „real world“  Exploration  effective searches beyond IDE capabilities  Individual metrics and visualization  Complexity, Dependencies  Validation  Coding rules, design & architecture constraints  Reporting  And finally… it‘s fun! Database Find all…
  • 6. Yes We Scan Software Analysis Using jQAssistant 6
  • 7. 7 http://jQAssistant.org  Open Source: GPLv3  Current release: 1.0.0 (1.1.0-RC1)  initiated: 03/2013  first stable release: 04/2015  Neo4j Community Edition embedded  no installation necessary
  • 9. 9  Getting Started – Command Line  unzip jqassistant.distribution-1.0.0.zip  cd jqassistant.distribution-1.0.0/bin  jqassistant.sh scan –f model.jar  jqassistant.sh scan –f acme.war  jqassistant.sh scan –f acme.ear  jqassistant.sh scan –u http://somewhere.com/acme.ear  jqassistant.sh scan –u maven:repository::http://host/releases  jqassistant.sh scan –u rdbms:schema::jdbc:oracle:thin:user/secret@host:1521:sid  jqassistant.sh server  http://localhost:7474
  • 10. 10  Getting Started – Maven Project <build> <plugins> <plugin> <groupId>com.buschmais.jqassistant.scm</groupId> <artifactId>jqassistant-maven-plugin</artifactId> <version>1.0.0</version> </plugin> </plugins> </build>  mvn install jqassistant:scan  mvn jqassistant:server  http://localhost:7474
  • 11. 11  Available scanner plugins  Plugin API is public *.class RDBMS Schema Git JaCoCo FindBugs CheckStyle LiquibaseJAR, WAR, EARZIP application.xmlweb.xml MANIFEST.MF /META-INF/services/* beans.xml pom.xml surefire-reports.xml GZ *.properties *.xsd M2 Repository *.yaml
  • 12. Yes We Scan Software Analysis Using jQAssistant 12
  • 13. 13  All we need is…  Nodes  Labels  Properties  Relationships  Modeling is just…  Taking a pen  Drawing the structures on a whiteboard (i.e. the database)  We don‘t need…  Foreign keys  Tables and schemas  Knowledge in graph theory Type EXTENDS fqn:com.acme.model.Person
  • 15. 15 TypeType Class EXTENDS  Explore an application using queries  Which class extends from another class?  Let‘s convert this to ASCII art…  () as nodes  -[]-> as directed relationships
  • 16. 16 TypeType Class EXTENDS  Explore an application using queries  Which class extends from another class?  Let‘s convert this to ASCII art…  () as nodes  -[]-> as directed relationships ()-[]->()
  • 17. 17 C2 Type C1 Type Class EXTENDS  Explore an application using queries  Which class extends from another class?  Let‘s convert this to ASCII art…  () as nodes  -[]-> as directed relationships (c1)-[]->(c2)
  • 18. 18 C2 Type C1 Type Class EXTENDS  Explore an application using queries  Which class extends from another class?  Let‘s convert this to ASCII art…  () as nodes  -[]-> as directed relationships (c1)-[:EXTENDS]->(c2)
  • 19. 19  Explore an application using queries  Which class extends from another class?  Let‘s convert this to ASCII art…  () as nodes  -[]-> as directed relationships (c1:Class)-[:EXTENDS]->(c2:Type) C2 Type C1 Type Class EXTENDS
  • 20. 20  Explore an application using queries  Which class extends from another class?  Pattern matching is the core principle of Cypher MATCH (c1:Class)-[:EXTENDS]->(c2:Type) RETURN c1.fqn, c2.fqn C2 Type C1 Type Class EXTENDS
  • 21. Yes We Scan Software Analysis Using jQAssistant 21
  • 22. 22  Examples  Artifacts and Maven descriptors  API changes between releases  Declared deprecations  Thrown exceptions  Structural problems (metrics)  Declared members  Depth of inheritance hierarchies  Cyclomatic complexity  Fan In/Fan Out of classes and packages  Package Cycles
  • 23. Yes We Scan Software Analysis Using jQAssistant 23 https://jqassistant.org/yes-we-scan-exploring-libraries/
  • 24. 24  What makes the difference?  Flexible data model  Get information about different aspects of the same software in just one place  Extend it using plugins  Including custom implementations  Expressive queries  Enrich and query using your own concepts/abstractions  Create specific metrics and reports