In [1]:
import pandas as pd
coverage = pd.read_csv("../dataset/jacoco.csv")
coverage = coverage[
['PACKAGE',
'CLASS',
'LINE_COVERED',
'LINE_MISSED']]
coverage.head()
Out[1]:
In [2]:
coverage['lines'] = coverage.LINE_COVERED + coverage.LINE_MISSED
coverage['ratio'] = coverage.LINE_COVERED / coverage.lines
coverage['fqn'] = coverage.PACKAGE + "." + coverage.CLASS
coverage[['fqn', 'ratio']].head()
Out[2]:
In [3]:
import py2neo
graph = py2neo.Graph()
query="""
UNWIND {coverage_data} as coverage
MATCH (t:Type {fqn : coverage.fqn})
MERGE (t)-[:HAS_MEASURE]->(m)
SET
m:Measure:Coverage,
m.ratio = coverage.ratio
RETURN t.fqn as fqn, m.ratio as ratio
"""
coverage_dict = coverage.to_dict(orient='records')
result = graph.run(query, coverage_data=coverage_dict).data()
pd.DataFrame(result).head()
Out[3]:
In [4]:
query = """
MATCH
(t:Type)-[:BELONGS_TO]->(s:Subdomain),
(t)-[:HAS_CHANGE]->(ch:Change),
(t)-[:HAS_MEASURE]->(co:Coverage)
OPTIONAL MATCH
(t)-[:HAS_BUG]->(b:BugInstance)
RETURN
s.name as ASubdomain,
COUNT(DISTINCT t) as Types,
COUNT(DISTINCT ch) as Changes,
AVG(co.ratio) as Coverage,
COUNT(DISTINCT b) as Bugs,
SUM(DISTINCT t.lastMethodLineNumber) as Lines
ORDER BY Coverage ASC, Bugs DESC
"""
In [5]:
re
sult = pd.DataFrame(graph.data(query))
result
Out[5]:
In [6]:
plot_data = result.copy()
plot_data = plot_data.rename(
columns= {
"Changes" : "Investment",
"Coverage" : "Utilization",
"Lines" : "Size"})
plot_data = plot_data.set_index('ASubdomain')
plot_data
Out[6]:
In [7]:
%matplotlib inline
from ausi import portfolio
portfolio.plot_diagram(plot_data, 'Investment', 'Utilization', 'Size');
In [8]:
query = """
MATCH
(t:Type)-[:IS_A]->(ta:TechnicalAspect),
(t)-[:HAS_CHANGE]->(ch:Change),
(t)-[:HAS_MEASURE]->(co:Coverage)
OPTIONAL MATCH
(t)-[:HAS_BUG]->(b:BugInstance)
RETURN
ta.name as ATechnicalAspect,
COUNT(DISTINCT t) as Types,
COUNT(DISTINCT ch) as Investment,
AVG(co.ratio) as Utilization,
COUNT(DISTINCT b) as Bugs,
SUM(DISTINCT t.lastMethodLineNumber) as Size
ORDER BY Utilization ASC, Bugs DESC
"""
In [9]:
result = pd.DataFrame(graph.data(query)).set_index('ATechnicalAspect')
result
Out[9]:
In [10]:
portfolio.plot_diagram(result, 'Investment', 'Utilization', 'Size');