dr. florian deißenböck 26. januar 2017 - cqse · 2020. 5. 14. · * dme1737.c - driver for the...
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