dr. florian deißenböck 26. januar 2017 - cqse · 2020. 5. 14. · * dme1737.c - driver for the...

44
Continuous Quality in Software Engineering Software-Qualität Dr. Florian Deißenböck 26. Januar 2017 © CQSE GmbH 2017

Upload: others

Post on 26-Jan-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

  • Continuous Quality in Software Engineering

    Software-Qualität

    Dr. Florian Deißenböck26. Januar 2017

    © CQSE GmbH 2017

  • Warum ist Software- Qualität wichtig?

    Warum wird Software- Qualität immer wichtiger?

    Welche Probleme gibt es?

    Hilft das was?

    Was kann man tun?

    © CQSE GmbH 2017

  • Warum ist Software- Qualität wichtig?

    Warum wird Software- Qualität immer wichtiger?

    Welche Probleme gibt es?

    Hilft das was?

    Was kann man tun?

    © CQSE GmbH 2017

  • Software-Wartung

    Technologie: Hardware, BS, Sprachen, Datenbanken, …

    Software-System

    Anforderungen: Geschäftsprozesse, Fahrzeugfunktionen, …

    © CQSE GmbH 2017

  • Software-Wartung

    Technologie: Hardware, BS, Sprachen, Datenbanken, …

    Software-System

    Anforderungen: Geschäftsprozesse, Fahrzeugfunktionen, …

    © CQSE GmbH 2017

  • Software-Wartung

    Technologie: Hardware, BS, Sprachen, Datenbanken, …

    Software-System

    Anforderungen: Geschäftsprozesse, Fahrzeugfunktionen, …

    © CQSE GmbH 2017

  • Warum ist Software- Qualität wichtig?

    Warum wird Software- Qualität immer wichtiger?

    Welche Probleme gibt es?

    Hilft das was?

    Was kann man tun?

    © CQSE GmbH 2017

  • 392 LOC

    © CQSE GmbH 2017

    Code von github.com/activiti

  • 2728

    29

    © CQSE GmbH 2017

  • // Utilities for arrays of elementspublic String showElements(ModelElement[] elements,

    String nomsg) {boolean found = false;StringBuffer res = new StringBuffer();if (elements != null) {Index.getInstance().setCurrentRenderer(FlatReferenceRenderer.getInstance());

    for (int i = 0; i < elements.length(); i++) {ModelElement el = elements[i];res.append(showElementLink(el)).append(HTML.LINE_BREAK);

    found = true;}Index.getInstance().setCurrentRenderer();if (!found && nomsg != null && nomsg.length() > 0) {res.append(HTML.italics(nomsg));

    }return res.toString();

    }

    // Utilities for arrays of elementspublic String showElements(ModelElement[] elements,

    String nomsg) {boolean found = false;StringBuffer res = new StringBuffer();if (elements != null) {Index.getInstance().setCurrentRenderer(FlatReferenceRenderer.getInstance());

    for (int i = 0; i < elements.length(); i++) {ModelElement el = elements[i];res.append(showElementLink(el)).append(HTML.LINE_BREAK);

    found = true;}Index.getInstance().setCurrentRenderer();if (!found && nomsg.length() > 0) {res.append(HTML.italics(nomsg));

    }return res.toString();

    }

    © CQSE GmbH 2017

  • // Utilities for arrays of elementspublic String showElements(ModelElement[] elements,

    String nomsg) {boolean found = false;StringBuffer res = new StringBuffer();if (elements != null) {Index.getInstance().setCurrentRenderer(FlatReferenceRenderer.getInstance());

    for (int i = 0; i < elements.length(); i++) {ModelElement el = elements[i];res.append(showElementLink(el)).append(HTML.LINE_BREAK);

    found = true;}Index.getInstance().setCurrentRenderer();if (!found && nomsg != null && nomsg.length() > 0) {res.append(HTML.italics(nomsg));

    }return res.toString();

    }

    // Utilities for arrays of elementspublic String showElements(ModelElement[] elements,

    String nomsg) {boolean found = false;StringBuffer res = new StringBuffer();if (elements != null) {Index.getInstance().setCurrentRenderer(FlatReferenceRenderer.getInstance());

    for (int i = 0; i < elements.length(); i++) {ModelElement el = elements[i];res.append(showElementLink(el)).append(HTML.LINE_BREAK);

    found = true;}Index.getInstance().setCurrentRenderer();if (!found && nomsg != null && nomsg.length() > 0) {res.append(HTML.italics(nomsg));

    }return res.toString();

    }

    © CQSE GmbH 2017

  • Studie

    Identifikation von über 100 Fehlern in produktiver Software

    17

    Kritisch Nutzersichtbar Nicht nutzersichtbar

    44 46

    Juergens et al., Do Code Clones Matter?, ICSE 2009

  • TODO: ist das wirklich Okay, einem QWidget einen QObject Parent zu geben?TODO: Soll das so sein? Jetzt echt? Alle alten Sachen in die Tonne?TODO: WEG MIT DIESEM DRECK - RK SOLLTE FÜR JEDEN INDEX IMMER…TODO: Nicht benutzen, hat hier überhaupt nix verlorenFIXME: solve timeout problemFIXME: REFACTOREN ! ich habe das jetzt einfache rüberkopiert, ist Müll soTODO: remove this hackTODO: Worin unterscheidet sich dieser Test vom vorherigen??

  • Code von github.com/activiti

  • Code von github.com/activiti

  • Code von github.com/activiti

  • Framework

    Runner

    Extensions

    Core TextUI

    Experimental

    JUnit

    HamcrestMatchers

    Lib

    Tests

    Samples

  • /* * dme1737.c - Driver for the SMSC DME1737, Asus A8000, SMSC SCH311x, SCH5027, * and SCH5127 Super-I/O chips integrated hardware monitoring * features. * Copyright (c) 2007, 2008, 2009, 2010 Juerg Haefliger * * This driver is an I2C/ISA hybrid, meaning that it uses the I2C bus to access * the chip registers if a DME1737, A8000, or SCH5027 is found and the ISA bus * if a SCH311x or SCH5127 chip is found. Both types of chips have very * similar hardware monitoring capabilities but differ in the way they can be * accessed. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */

  • 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016

    © CQSE GmbH 2016

  • Warum ist Software- Qualität wichtig?

    Warum wird Software- Qualität immer wichtiger?

    Welche Probleme gibt es?

    Hilft das was?

    Was kann man tun?

    © CQSE GmbH 2017

  • HTML/JSP

    © CQSE GmbH 2017

    Alle Logos sind von Wikipedia. Die Rechte daran hält die jeweilige Organisation.

  • Alle Logos sind von Wikipedia. Die Rechte daran hält die jeweilige Organisation.

  • Alle Logos sind von Wikipedia. Die Rechte daran hält die jeweilige Organisation.

  • Alle Logos sind von Wikipedia. Die Rechte daran hält die jeweilige Organisation.

  • Alle Logos sind von Wikipedia. Die Rechte daran hält die jeweilige Organisation.

  • Alle Logos sind von Wikipedia. Die Rechte daran hält die jeweilige Organisation.

  • Alle Logos sind von Wikipedia. Die Rechte daran hält die jeweilige Organisation.

  • Alle Logos sind von Wikipedia. Die Rechte daran hält die jeweilige Organisation.

  • Warum ist Software- Qualität wichtig?

    Warum wird Software- Qualität immer wichtiger?

    Welche Probleme gibt es?

    Hilft das was?

    Was kann man tun?

    © CQSE GmbH 2017

  • 2007 2008 2009 2010 2011 2012 2013 2014 2015

    100k

    150k

    200kSLoC

    1,200

    1,400

    1,600

    1,800

    Findings

  • Entwickler System

    Pull

    Dashboard

  • Entwickler System

    Push

    Dashboard

    QualityEngineer

    Task-Liste

    Projektleiter Qualitätsbericht

  • Keine Defizite

    Keine Defizite in geändertem Code

    Keine neue Defizite

    Egal1

    2

    34

    © CQSE GmbH 2017

  • QualityIndicator Full Assessment Delta Assessment

    Stability ofRegular TeamBuilds

    Build is stable.At the time of the last report,there was no automated build atall.

    ArchitectureConformance

    There are zero violations.Architecture specification wascompleted and is now fullyadhered to.

    Stability of UnitTests

    75 unit tests are passing butmany tests have been disabled.

    Unit tests are now executedautomatically.

    Code Coverage Cover coverage measurement is not yet enabled. is working on this.

    CompilerWarnings

    The code exhibits 7 compilerwarnings. However, it isquestionable if their removal isworthwhile.

    The number of warnings wassignificantly reduced but not allfixes actually improve the codequality.

    CodingGuidelinesViolations

    The threshold of for typeswith any FxCop warning isviolated.

    The amount of files with at leastone FxCop warning increased.

    DuplicatedCode

    With a clone coverage ofthe threshold ofi s slightlyviolated.

    Clone coverage did not changesignificantly.

    File SizeThe threshold regarding files >

    LOC is violated.Use of partial classes improvesthe metric values but does notimprove code quality.

    Nesting Depth Both thresholds are satisfied.All nestings deeper than havebeen removed.

    Length ofLongestMethod

    The threshold regardingmethods > LOC is violated.

    The amount of types withmethods longer than LoCMdecreased significantly.

    © CQSE GmbH 2017

  • Warum ist Software- Qualität wichtig?

    Warum wird Software- Qualität immer wichtiger?

    Welche Probleme gibt es?

    Hilft das was?

    Was kann man tun?

    © CQSE GmbH 2017

  • 2007 2008 2009 2010 2011 2012 2013 2014 2015

    100k

    150k

    200kSLoC

    1,200

    1,400

    1,600

    1,800

    Findings

    © CQSE GmbH 2017

  • www.cqse.eu/en/blog

    Dr. Florian Deißenbö[email protected]+49 179 7857188@deissenboeck

    www.cqse.eu@cqse

    www.teamscale.com@teamscaleTeamscale

    © CQSE GmbH 2017