In [1]:
import pandas as pd
coverage = pd.read_csv("../dataset/jacoco.csv")[['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.head()
Out[2]:
In [3]:
%matplotlib inline
coverage.groupby("PACKAGE").mean()['ratio'].plot(kind='barh')
Out[3]:
In [4]:
import py2neo
graph = py2neo.Graph()
query="""
MATCH (t:Type)
RETURN t.fqn LIMIT 10
"""
pd.DataFrame(graph.data(query))
In [5]:
coverage['fqn'] = coverage.PACKAGE + "." + coverage.CLASS
coverage[['fqn', 'ratio']].head()
Out[5]:
Laden der Coverage-Informationen in die Graphdatenbank
In [6]:
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
"""
result = graph.run(query, coverage_data=coverage.to_dict(orient='records')).data()
pd.DataFrame(result).head()
Out[6]:
In [7]:
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
ORDER BY Coverage ASC, Bugs DESC
"""
pd.DataFrame(graph.data(query))
Out[7]:
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 Changes,
AVG(co.ratio) as Coverage,
COUNT(DISTINCT b) as Bugs
ORDER BY Coverage ASC, Bugs DESC
"""
pd.DataFrame(graph.data(query))
Out[8]:
In [ ]: