SlideShare une entreprise Scribd logo
1  sur  19
Erfahrungsbericht:
Datenbankbasierte Metrikverarbeitung
für Clean Code Development in
Brownfieldprojekten
Software Engineering & Management 2015
Jens Nerche
Leiter Anwendungsentwicklung
Kontext E GmbH
www.kontext-e.de
Email j.nerche@kontext-e.de
Twitter @jensnerche
Blog http://techblog.kontext-e.de
Inhalt
Motivation
Herausforderung Brownfield
Verarbeitung von Metriken
Datenbank
Steadily adding value
Well-crafted software
Realität im
Brownfieldprojekt
Workarounds
Ziele
Größere Kontrolle
Einheitliche Art der Regelprüfung
Automatisierung der Regelprüfung vorantreiben
Verknüpfung der Daten aus verschiedenen Quellen
Bessere Planung der Investitionen in Codequalität
Eine Lösung
Alle Informationen in eine Datenbank
Dazu Architektur-Struktur
Metriken kombinieren
Regelverletzungen mittels DB-Abfrage finden
IDE-Plugin
MATCH
(p1:Package)-[:DEPENDS_ON]->(p2:Package),
path = shortestPath(
(p2)-[:DEPENDS_ON*]->(p1:Package))
WHERE
p1<>p2
RETURN
p1 AS package,
EXTRACT(p IN NODES(path) | p.fqn) AS cycle
ORDER BY
package.fqn;
Zyklenfreiheit
MATCH
(c:Class)-[:DEPENDS_ON]->(d:Type
{fqn: 'org.jmock.Mockery'})
WHERE
not(c.fqn =~ 'de.kontext_e.tim.EmployeeTest')
and not(c.fqn =~ 'de.kontext_e.tim.ProjectTest.*')
RETURN
c.fqn
ORDER BY
c.fqn;
jMock => Mockito
MATCH (cl:JacocoClass)--(m:JacocoMethod)--
(c:JacocoCounter {type: 'COMPLEXITY'})
WHERE c.missed + c.covered > 5
AND NOT(m.signature = 'boolean equals(java.lang.Object)')
AND NOT(m.signature = 'int hashCode()')
AND NOT(cl.fqn =~ 'de.kontext_e.tim.jsf_ui.*')
WITH m AS method, cl.fqn AS fqn, m.signature AS signature,
c.missed + c.covered AS complexity
MATCH (m)--(branches:JacocoCounter {type: 'BRANCH'})
WHERE m = method AND branches.covered * 100 /
(branches.covered + branches.missed) < 90
RETURN fqn, signature, complexity, branches.covered * 100 /
(branches.covered + branches.missed) AS coverage
SKIP 2
Testabdeckung
MATCH (c:GitCommit)--(f:GitCommitFile)
WITH f.relativePath AS path
WHERE path =~'.*.java'
WITH count(path) AS cnt, parseToFullQualifiedName AS gitfqn
ORDER BY cnt DESC LIMIT 10
MATCH (cl:JacocoClass)--(m:JacocoMethod)--
(c:JacocoCounter {type: 'COMPLEXITY'})
WHERE gitfqn = cl.fqn AND c.missed + c.covered > 3
AND NOT(m.signature ='boolean equals(java.lang.Object)')
AND NOT(m.signature ='int hashCode()')
...
Testabdeckung bzgl. Änderungen
...
WHERE
c.fqn =~ 'de.kontext_e.tim.domain.*'
...
Testabdeckung bzgl.
Änderungshäufigkeit und
Kerndomäne
Zusammenfassung
Alle erhobenen Daten in einer gemeinsamen
Datenbank speichern
Datenbankabfragesprache nutzen, um
Regelverletzungen zu finden
Definierte Ausnahmen und Verknüpfung von Daten aus
verschiedenen Quellen ermöglicht bessere Steuerung
der Investitionen in die Codequalität
Einheitliche technische Basis vereinfacht Pflege
erheblich
Studenten:
Visualisierungen
IDE: Advanced Refactoring
C#
...
Jens Nerche
Leiter Anwendungsentwicklung
Kontext E GmbH
www.kontext-e.de
Email j.nerche@kontext-e.de
Twitter @jensnerche
Blog
Slides http://de.slideshare.net/jensnerche
Samples https://github.com/jensnerche
Feedback http://speakerrate.com/jensnerche
Jens Nerche
Leiter Anwendungsentwicklung
Kontext E GmbH
www.kontext-e.de
Email j.nerche@kontext-e.de
Twitter @jensnerche
Blog http://techblog.kontext-e.de
Slides http://de.slideshare.net/jensnerche
Samples https://github.com/jensnerche
Feedback http://speakerrate.com/jensnerche

Contenu connexe

En vedette

MúSica Fotos, (PúBlicidad), A 2 3 4 6 10
MúSica Fotos, (PúBlicidad), A  2 3 4 6 10MúSica Fotos, (PúBlicidad), A  2 3 4 6 10
MúSica Fotos, (PúBlicidad), A 2 3 4 6 10paquitaguapa
 
Maitrise outils TIC des futurs enseignants en début de formation aux TIC
Maitrise outils TIC des futurs enseignants en début de formation aux TICMaitrise outils TIC des futurs enseignants en début de formation aux TIC
Maitrise outils TIC des futurs enseignants en début de formation aux TICProf_UQAM_TIC
 
Appel à projet permanent cr2015 ateliers et aci
Appel à projet permanent cr2015 ateliers et aciAppel à projet permanent cr2015 ateliers et aci
Appel à projet permanent cr2015 ateliers et aciMartine Promess
 
Recuperación Nº 6
Recuperación Nº 6Recuperación Nº 6
Recuperación Nº 6noraznar
 
Jesucristo En El Restaurante
Jesucristo En El RestauranteJesucristo En El Restaurante
Jesucristo En El Restaurantepaquitaguapa
 
Anteproyecto Laeas (LiberacióN Servicios áRea Europea)
Anteproyecto Laeas (LiberacióN Servicios áRea Europea)Anteproyecto Laeas (LiberacióN Servicios áRea Europea)
Anteproyecto Laeas (LiberacióN Servicios áRea Europea)toniomadrid
 
Me voy a la cama
Me voy a la camaMe voy a la cama
Me voy a la camaiesluna
 

En vedette (18)

MúSica Fotos, (PúBlicidad), A 2 3 4 6 10
MúSica Fotos, (PúBlicidad), A  2 3 4 6 10MúSica Fotos, (PúBlicidad), A  2 3 4 6 10
MúSica Fotos, (PúBlicidad), A 2 3 4 6 10
 
Maitrise outils TIC des futurs enseignants en début de formation aux TIC
Maitrise outils TIC des futurs enseignants en début de formation aux TICMaitrise outils TIC des futurs enseignants en début de formation aux TIC
Maitrise outils TIC des futurs enseignants en début de formation aux TIC
 
Gaza, Casamiento
Gaza, CasamientoGaza, Casamiento
Gaza, Casamiento
 
Venganzafemenina
VenganzafemeninaVenganzafemenina
Venganzafemenina
 
Duales Studium BWL ausbildungsbegleitend
Duales Studium BWL ausbildungsbegleitendDuales Studium BWL ausbildungsbegleitend
Duales Studium BWL ausbildungsbegleitend
 
Laviejecita
LaviejecitaLaviejecita
Laviejecita
 
Concepto de información
Concepto de informaciónConcepto de información
Concepto de información
 
diaporame travaille
diaporame travaillediaporame travaille
diaporame travaille
 
Appel à projet permanent cr2015 ateliers et aci
Appel à projet permanent cr2015 ateliers et aciAppel à projet permanent cr2015 ateliers et aci
Appel à projet permanent cr2015 ateliers et aci
 
Cal un [nou] estil de lideratge fonamentat en un model relacional i de trebal...
Cal un [nou] estil de lideratge fonamentat en un model relacional i de trebal...Cal un [nou] estil de lideratge fonamentat en un model relacional i de trebal...
Cal un [nou] estil de lideratge fonamentat en un model relacional i de trebal...
 
????
????????
????
 
Recuperación Nº 6
Recuperación Nº 6Recuperación Nº 6
Recuperación Nº 6
 
Elmetiche
ElmeticheElmetiche
Elmetiche
 
Imagenes de Cuba 2
Imagenes de Cuba 2Imagenes de Cuba 2
Imagenes de Cuba 2
 
Mastercard38 3
Mastercard38 3Mastercard38 3
Mastercard38 3
 
Jesucristo En El Restaurante
Jesucristo En El RestauranteJesucristo En El Restaurante
Jesucristo En El Restaurante
 
Anteproyecto Laeas (LiberacióN Servicios áRea Europea)
Anteproyecto Laeas (LiberacióN Servicios áRea Europea)Anteproyecto Laeas (LiberacióN Servicios áRea Europea)
Anteproyecto Laeas (LiberacióN Servicios áRea Europea)
 
Me voy a la cama
Me voy a la camaMe voy a la cama
Me voy a la cama
 

Erfahrungsbericht Datenbankbasierte Metrikverarbeitung für Clean Code Development in Brownfieldprojekten

Notes de l'éditeur

  1. Unit Tests, Test Coverage Statische Codeanalyse Architektur- und Designvorgaben Automatische Integrations-, System- und Lasttests Continuous Integration &amp; Delivery Versionsverwaltungssysteme Ergebnisse getrennt oder lose aggregiert, z.B. mittels SonarQube
  2. die Testabdeckung unzureichend die statische Codeanalyse nicht vorhanden kein Mechanismus zur Durchsetzung von Architektur- und Designregeln vorhanden somit der Abbruch des CI-Builds bei Regelverletzungen nicht sinnvoll die Nachverarbeitung der Metriken als Kriterium für eine Buildabbrung zwingend nötig
  3. Groovy-Script für die Testabdeckung XSLT für Checkstyle und FindBugs ganze Module bei der Prüfung durch JDepend (zyklische Abhängigkeiten) ausgelassen keine Prüfung von Architektur- und Designregeln (außer wenn durch Checkstyle möglich) manuelle Prüfung: Code Reviews, Pair Programming, Common Code Ownership
  4. Groovy-Script für die Testabdeckung XSLT für Checkstyle und FindBugs ganze Module bei der Prüfung durch JDepend (zyklische Abhängigkeiten) ausgelassen keine Prüfung von Architektur- und Designregeln (außer wenn durch Checkstyle möglich) manuelle Prüfung: Code Reviews, Pair Programming, Common Code Ownership