Codequalitätskontrolle mit SonarQube

Ähnliche Dokumente
Werkzeuggestützte Softwareprüfungen Statische Analyse und Metriken

Softwaremetriken verstehen und nutzen

Echolot Qualitätssicherung mit Sonar

Management von Softwaresystemen Systembewertung: Metriken und Prozess

Software-Metriken. Dipl.-Ing.(BA) Henning Sievert Seminar Software-Entwurf WS 2004/05

Kontinuierliche Architekturanalyse. in 3D

Hans Scheitter GmbH & Co.KG

Java: Eine kurze Einführung an Beispielen

Open-Source-Werkzeugkasten für Software-QS :15-11:15 Uhr Zagrebsaal I

Java-Schulung Grundlagen

Software-Metriken: Purismus vs. Pragmatismus

Kampf dem Fehlerteufel PMD, Findbugs und Checkstyle in großen Projekten

Einstieg in die Informatik mit Java

Datum Wochen Band DVD Band eingelegt Protokoll kontr. Recovery kontr. Tag Nr. RW Sign. Sign. Sign.

Statische Code-Analyse: Software-Metriken Fernstudium Master Wirtschaftsinformatik Formale Methoden

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

Software Engineering. 13. Automatische Code Analyse. Franz-Josef Elmer, Universität Basel, WS 2005/06

II.1.1. Erste Schritte - 1 -

Primitive Datentypen

Software Tests (2) Quellcode Reviews

Abonnieren Sie die kostenlose epaper-zeitung unter

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Software Engineering I

Ich liebe Java && Ich liebe C# Rolf Borst

Inhalt Software-Metriken Software-Metriken mit Together FindBugs. Software-Metriken. Raimar Lill Matthias Meitner David Föhrweiser Marc Spisländer

ITG RKSVNet - Webservice Signierung von Belegen via Internet

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

System.out.println("TEXT");

5. Tutorium zu Programmieren

Programmieren 2 Java Überblick

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Algorithmen und Datenstrukturen

UNIVERSITÄT ULM Fakultät für Ingenieurswissenschaften und Informatik Institut für Datenbanken und Informationssysteme

Programmieren I + II Regeln der Code-Formatierung

Einführung in die Programmierung für Wirtschaftsinformatik

PROGRAMMIERUNG IN JAVA

Datenbankanwendungsprogrammierung Crashkurs Java

Grundlagen zur nebenläufigen Programmierung in Java

Objektorientierte Programmierung OOP Programmieren mit Java

Refactoring von Legacy Systemen. Jochen Winzen andrena objects ag

Statische Analyse. Holger Hans Peter Freyther 1. Seminar zu Ursachen und Vermeidung von Fehlern in der Softwareentwicklung, 2006

Die 7 Wege zum Clean Code

Montag, 14.3 Dienstag, 15.3 Mittwoch, 16.3 Donnerstag, 17.3 Freitag, 18.3 Samstag, 19.3 Sonntag, Programmiertes Entwerfen 1 KG1 Götte

Selbststudium OOP Programmieren 1 - H1103 Felix Rohrer

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Grundlagen der Programmierung Teil1 Einheit III Okt. 2009

Analyse und praktischer Vergleich von neuen Access- Layer-Technologien in modernen Webanwendungen unter Java. Oliver Kalz

Java Einführung ABLAUFSTEUERUNG Kapitel 3 und 4

Test-Driven Design: Ein einfaches Beispiel

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Quantität für Qualität

Javakurs für Anfänger

Iterativ. Inkrementell

Themen. Web Service - Clients. Kommunikation zw. Web Services

Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn

Hadoop. Simon Prewo. Simon Prewo

Robuste und Praktikable Ansätze zur Verhinderung von Sicherheitsdefekten. Christoph Kern, Google

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz Institut für Angewandte Informatik

Programmiervorkurs WS 2012/2013. Schleifen und Methoden

Entwicklungswerkzeuge

Statische Code-Analyse zur Qualitätsmessung

Software Engineering II Refactoring, Style, Software Metriken

JUnit. Unit testing unter Java

Comparison of Software Products using Software Engineering Metrics

Dr. Monika Meiler. Inhalt

PHP Code Konventionen Um einen einheitlichen Code zu generieren, der von jedem gelesen werden kann, müssen folgende Konventionen eingehalten werden.

Codequalität: Code-Metrik Version 0.1

Testen und Metriken. Einige Fehler. Fehler vermeiden. Andreas Zeller Universität des Saarlandes Microsoft Research.

Web-Testen mit JUnit und HttpUnit. Kai Schmitz-Hofbauer Lehrstuhl für Software-Technik Ruhr-Universität Bochum

Klausur Grundlagen der Programmierung

Theorieplan Januar 2015

Andy Hunt. Programmieren lernen. mit Minecraft-Plugins. dpunkt.verlag

Inhalt. Fragestellungen. ...we make the invisible visible... Analysen und deren Anwendung Erfahrungen

Programmierprojekt. Anne0e Bieniusa Sommersemester 2014

6 Speicherorganisation

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

DHBW Stuttgart, Informatik, Advanced SW-Engineering Aug Programmierung

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Das HeronVerfahren für root(a) (Babilonisches Wurzelziehen)

HTW IMI-B Informatik 1 Kara Worksheet 2 Seite: 1. Variables to store a true/false state: boolean movingright = true;

Bean-Mapping mit MapStruct

Thema: Testen von objektorientierter Software

Typumwandlungen bei Referenztypen

Thomas Schoen hello2morrow GmbH. Six-Sigma für Software Architekten

We have declared war on error!

Transkript:

Codequalitätskontrolle mit SonarQube

Wer ist das? Josha von Gizycki Goslarer Seit 2008 bei der Java, Oracle, Webentwicklung, Hacker, Zocker, Rocker Codequalitätskontrolle mit SonarQube - 2

Warum der? Codequalitätskontrolle mit SonarQube - 3

Typische Fehler im Alltag Keine Tests Zeitdruck Legacy Code Basteln Codequalitätskontrolle mit SonarQube - 4

Was ist das Ergebnis? Big Ball of Mud? Gasfabrik? Spaghetticode mit Copy Pasta? Innere Plattform? Sumo-Hochzeit? Codequalitätskontrolle mit SonarQube - 5

Was macht statische Codeanalyse? Bytecode oder Quelltext Nutzt Metriken Generiert Statistiken Codequalitätskontrolle mit SonarQube - 6

Was ist statische Codeanalyse? Bytecode Quelltext Quelltext Bugs Ineffizienz Codestil Harte Fehler Handwerk Konventionen Codequalitätskontrolle mit SonarQube - 7

Metriken? Lat. ars metrica : Lehre von den Maßen Codequalitätskontrolle mit SonarQube - 8

Softwaremetriken Mathematische Funktion Code Vergleichbarkeit Eine Softwarequalitätsmetrik ist eine Funktion, die eine Software-Einheit in einen Zahlenwert abbildet, welcher als Erfüllungsgrad einer Qualitätseigenschaft der Software-Einheit interpretierbar ist. IEEE Standard 1061, 1998 Codequalitätskontrolle mit SonarQube - 9

McCabe Zyklomatische Komplexität Anzahl unterschiedlicher Möglichkeiten, durch ein Stück Code zu laufen 1 + Anzahl Kontrollstrukturen + Boolesche Operatoren if, while, do, for,?:, catch, case &&, Grenzwerte 10 für Methoden 200 für Klassen Codequalitätskontrolle mit SonarQube - 10

McCabe Zyklomatische Komplexität String wochentagsname(int nummer) { switch(nummer) { case 1: return "Montag"; case 2: return "Dienstag"; case 3: return "Mittwoch"; case 4: return "Donnerstag"; case 5: return "Freitag"; case 6: return "Samstag"; case 7: return "Sonntag"; } return ""; } String wochentagsname(int nummer) { String[] tage = new String[] { "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"}; int len = tage.length; if (nummer >= 1 && nummer <= len) { return tage[nummer - 1]; } return ""; } Codequalitätskontrolle mit SonarQube - 11

Mehrwert Quantitative / Qualitative Einschätzung der Codebasis Argumentationsgrundlage gegenüber Entscheidern Risikoabschätzung Teamorganisation Codequalitätskontrolle mit SonarQube - 12

SonarQube Scanner Datenbank Web-Komponente Codequalitätskontrolle mit SonarQube - 13

SonarQube OpenSource unter LGPL v3 Integriert unter anderem PMD, Checkstyle, Findbugs Plugins Sprachen (Java, Javascript, PHP, ) SCM (Git, Subversion, Mercurial, ) GitHub (Authentifikation, Pull Requests) Codequalitätskontrolle mit SonarQube - 14

Code Smell Cyclomatic Complexity Deprecated code should be removed eventually Silly math should not be performed Codequalitätskontrolle mit SonarQube - 15

Vulnerability public static fields should be constant Credentials should not be hard-coded Values passed to SQL commands should be sanitized Codequalitätskontrolle mit SonarQube - 16

Bugs Classes should not be compared by name Loops should not be infinite Null pointers should not be dereferenced Codequalitätskontrolle mit SonarQube - 17

Auswertung Codequalitätskontrolle mit SonarQube - 18

Auswertung Codequalitätskontrolle mit SonarQube - 19

Auswertung Codequalitätskontrolle mit SonarQube - 20

Auswertung Codequalitätskontrolle mit SonarQube - 21

Auswertung Codequalitätskontrolle mit SonarQube - 22

Auswertung Codequalitätskontrolle mit SonarQube - 23

Auswertung Codequalitätskontrolle mit SonarQube - 24

Auswertung Codequalitätskontrolle mit SonarQube - 25

Auswertung Codequalitätskontrolle mit SonarQube - 26

Quality Gates Codequalitätskontrolle mit SonarQube - 27

Quality Gates - GitFlow Codequalitätskontrolle mit SonarQube - 28

Interpretation Relative Werte > Absolute Werte Änderungen > Status Quo Metriken verstehen Metriken in Relation zueinander stellen Codequalitätskontrolle mit SonarQube - 29

Lines of Code Lines of Code - LOC Source Lines of Code SLOC Comment Lines of Code CLOC Non-Comment Lines of Code NCLOC Logical Lines of Code - LLOC Codequalitätskontrolle mit SonarQube - 30

Metriken in Relation setzen DTO search(list<list<dto>> rawdata, int id) { if(rawdata!= null) { for(list<dto> sublist : rawdata) { for(dto dto : sublist) { if(dto.getid() == id) { return dto; } } } } return null; } Codequalitätskontrolle mit SonarQube - 31

Metriken in Relation setzen DTO search(list<list<dto>> rawdata, int id) { if(rawdata == null) { return; } } for(list<dto> sublist : rawdata) { for(dto dto : sublist) { if(dto.getid() == id) { return dto; } } } return null; Codequalitätskontrolle mit SonarQube - 32

Metriken in Relation setzen void printnumbers() { for(int i = 0; i < 10; ++i) { if(i % 2 == 0) { continue; } if(i % 3 == 0) { continue; } System.out.println(i); } } Codequalitätskontrolle mit SonarQube - 33

Metriken in Relation setzen void printnumbers() { for(int i = 0; i < 10; ++i) { if(i % 2 == 0 i % 3 == 0) { continue; } System.out.println(i); } } Codequalitätskontrolle mit SonarQube - 34

SQALE - ISO 9126 Codequalitätskontrolle mit SonarQube - 35

Maintainability Rating A: 0 0,1 B: 0,11 0,2 C: 0,21 0,5 D: 0,5 1 E: > 1 Technical Debt / Development Cost Projektgröße: 2.500 LOC Technische Schuld: 50 Tage 50 / (0.06 * 2.500) = 0,33 Codequalitätskontrolle mit SonarQube - 36

Erfahrungswerte Mit ausreichend großer Codebasis erreichen viele Legacy-Projekte ein A-Rating Codequalitätskontrolle mit SonarQube - 37

Erfahrungswerte Codequalitätskontrolle mit SonarQube - 38

Erfahrungswerte For every 30 rule violations, you can expect on average three minor bugs and one major bug Embedded Programmer Codequalitätskontrolle mit SonarQube - 39

Erfahrungswerte Live mit SonarQube zu arbeiten, kann zu Gasfabriken führen Codequalitätskontrolle mit SonarQube - 40

Das heißt? Statistiken sind interessant Qualitätserhöhung Teammotivation Messbare Qualität für Kunden Codequalitätskontrolle mit SonarQube - 41

Codequalitätskontrolle mit SonarQube - 42

Buffet ist eröffnet! Codequalitätskontrolle mit SonarQube - 43

Ich hab da mal was vorbereitet Codequalitätskontrolle mit SonarQube - 44

Josha von Gizycki josha.von.gizycki@triology.de https://jug.cloudogu.com/sonar Logindaten: jug / 20160825 Codequalitätskontrolle mit SonarQube - 45