Folien SWE Ss14 Code Qualitaet
-
Upload
thomas-roland-bartl -
Category
Documents
-
view
227 -
download
0
Transcript of Folien SWE Ss14 Code Qualitaet
-
page.1Einhrung Schlimme Sowarefehler Richtlinien Weitere Manahmen
Soware-alittFlorian Adamsky, B. [email protected]://florian.adamsky.it/
Sowareentwicklung im SS 2014
-
page.2Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenOutline
1 Einhrung
2 Schlimme Sowarefehler
3 Richtlinien
4 Weitere Manahmen
-
page.3Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenContents
1 Einhrung
2 Schlimme Sowarefehler
3 Richtlinien
4 Weitere Manahmen
-
page.4Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenWas ist Soware-alitt?
DIN-ISO Norm 9126 definiert den Begri Soware-alitt wie folgt:Soware-alitt ist die Gesamtheit der Merkmale und
Merkmalswerte eines Soware-Produkts, die sich auf dessen Eignungbeziehen, festgelegte Erfordernisse zu erfllen.
Funktionalitt: Genauigkeit, Richtigkeit, Sicherheit (security), : : :Aber auch nicht-funktionale Aspekte wie z.B.:
Konformitt .VerstndlichkeitAnalysierbarkeitModifizierbarkeitAnpassbarkeitPrfbarkeit .
) Soware-alitt verbessert die funktionalen Aspekte
..
Soware-alitt
..
. .alittsmerkmale
.
..S. Nicht-Funktional..
Verstnd-lichkeit
.Modifi-
zierbarkeit
.Konformitt
.
Prfbarkeit
.Funktional . .
Funk-tionalitt
.Benutz-barkeit
.Ge-
schwindigkeit
.
Zuver-lssigkeit
..
Kundensicht
.
Entwicklersicht
-
page.5Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenWas ist Soware-alitt?
DIN-ISO Norm 9126 definiert den Begri Soware-alitt wie folgt:Soware-alitt ist die Gesamtheit der Merkmale und
Merkmalswerte eines Soware-Produkts, die sich auf dessen Eignungbeziehen, festgelegte Erfordernisse zu erfllen.
Funktionalitt: Genauigkeit, Richtigkeit, Sicherheit (security), : : :Aber auch nicht-funktionale Aspekte wie z.B.:
Konformitt .VerstndlichkeitAnalysierbarkeitModifizierbarkeitAnpassbarkeitPrfbarkeit .
) Soware-alitt verbessert die funktionalen Aspekte ..
Soware-alitt
..
. .alittsmerkmale
.
..S. Nicht-Funktional..
Verstnd-lichkeit
.Modifi-
zierbarkeit
.Konformitt
.
Prfbarkeit
.Funktional . .
Funk-tionalitt
.Benutz-barkeit
.Ge-
schwindigkeit
.
Zuver-lssigkeit
..
Kundensicht
.
Entwicklersicht
-
page.6Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenWas ist Soware-alitt?
DIN-ISO Norm 9126 definiert den Begri Soware-alitt wie folgt:Soware-alitt ist die Gesamtheit der Merkmale und
Merkmalswerte eines Soware-Produkts, die sich auf dessen Eignungbeziehen, festgelegte Erfordernisse zu erfllen.
Funktionalitt: Genauigkeit, Richtigkeit, Sicherheit (security), : : :Aber auch nicht-funktionale Aspekte wie z.B.:
Konformitt .VerstndlichkeitAnalysierbarkeitModifizierbarkeitAnpassbarkeitPrfbarkeit .
) Soware-alitt verbessert die funktionalen Aspekte ..
Soware-alitt
..
. .alittsmerkmale
.
..S. Nicht-Funktional..
Verstnd-lichkeit
.Modifi-
zierbarkeit
.Konformitt
.
Prfbarkeit
.Funktional . .
Funk-tionalitt
.Benutz-barkeit
.Ge-
schwindigkeit
.
Zuver-lssigkeit
..
Kundensicht
.
Entwicklersicht
-
page.7Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenWas ist das Problem mit der (Un)-alitt von Soware?
Wir schreiten in das ubiquitre ComputerzeitalterAbhngigkeit von kritischer Soware nimmt weiter zu
moderne Autos sind bepackt mit 30 Computern und ber 100 MillionenZeilen Code
Sowarefehler verursachen erhebliche KostenIX-Studie 2006:35.9 % des IT-Budgets geht ins Bug-Fixing
Komplexitt von Soware-Systemen steigt exponentiell an
..
. .Entwicklung des Linux Kernel
.
.....
v0.01
.
v0.96
.
v0.99
.
v1.0
.
v1.2
.
v2.2.0
.
v2.4.0
.
v2.6.0
.
v3.2.0
.0 .
0:5
.
1
.
1:5
.
107
.Anzahl
derP
rogram
mzeilen
https://www.nytimes.com/2010/02/05/technology/05electronics.html
-
page.8Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenWas ist das Problem mit der (Un)-alitt von Soware?
Wir schreiten in das ubiquitre ComputerzeitalterAbhngigkeit von kritischer Soware nimmt weiter zu
moderne Autos sind bepackt mit 30 Computern und ber 100 MillionenZeilen Code
Sowarefehler verursachen erhebliche KostenIX-Studie 2006:35.9 % des IT-Budgets geht ins Bug-Fixing
Komplexitt von Soware-Systemen steigt exponentiell an..
. .Entwicklung des Linux Kernel
.
.....
v0.01
.
v0.96
.
v0.99
.
v1.0
.
v1.2
.
v2.2.0
.
v2.4.0
.
v2.6.0
.
v3.2.0
.0 .
0:5
.
1
.
1:5
.
107
.Anzahl
derP
rogram
mzeilen
https://www.nytimes.com/2010/02/05/technology/05electronics.html
-
page.9Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenYoure not so smart, then you think you are!
Kurzzeitgedchtnis ist unser ArbeitsgedchtnisSpanne ist begrenzt auf: 7 2 Chunks
Aufmerksamkeitsspanne ist kurzUnsere Paern-Matching Fhigkeiten sind ausgeprgt
Ergoder Leser des Codes sollte nicht mehr als 5 Fakten auf einmal imGedchtnis halten mssen um bestimmte Aspekte zu verstehenCode sollte in kleine verstehbare Pakete aufgeteilt werden
hnlich werden lange Texte in Sektionen und Untersektionen aufgeteilt
-
page.10Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenUrsachen r schlechte Soware-alitt
keine Zeitfehlendes Know-Howunklare Projektzielsetzungfalsche oder verfrhte Optimierung am CodeProgrammierer die versuchen besonders clever zu seinfalsche Teambesetzungmangelhae Projektplanungfehlendealittssicherung
-
page.11Einhrung Schlimme Sowarefehler Richtlinien Weitere Manahmen
-
page.12Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenContents
1 Einhrung
2 Schlimme Sowarefehler
3 Richtlinien
4 Weitere Manahmen
-
page.13Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenMariner 122. Juli 1962
die N sprengte die Raumsonde nachdem Start, weil ein Bug dazu hrte dassdie Rakete vom Kurs abkameine Formel auf Papier wurde falsch inCode transkripiert (Bindestrich fehlte)hrte zu einer falschen Berechnung derFlugbahnKosten: 18.2 Millionen Dollar
-
page.14Einhrung Schlimme Sowarefehler Richtlinien Weitere Manahmenerac-25(19821985)
Linearbeschleuniger zur Anwendung inder Strahlentherapieein Sowarefehler ttete 3 Menschenund verletzte 3 weitere schwerbei dem Fehler handelte es sich um racecondition
elle: http://courses.cs.vt.edu/cs3604/lib/Therac_25/Therac_1
-
page.15Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenMorris-Wurm(1988)
erster Internet Wurminfizierte 20006000 Computer in weniger als einem Tagkeine bse Absicht, sondern Vermessung des Internetszum Eindringen nutze der Wurm eine Buer-Overflow Schwachstelleim finderd
. .Beispielhae Schwachstelle in ngerd
.
#define BUFFSIZE 8char buff[BUFFSIZE];gets(buff);//
-
page.16Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenContents
1 Einhrung
2 Schlimme Sowarefehler
3 Richtlinien
4 Weitere Manahmen
-
page.17Einhrung Schlimme Sowarefehler Richtlinien Weitere Manahmen
Dont repeat yourself (DRY)
-
page.18Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenWiederhole dich nicht!
. .DRY-Prinzip
.Every piece of knowledge must have a single, unambiguous, authoritativerepresentation within a system
eines der wichtigsten Fundamente in der Soware-Entwicklunghat das Ziel Redundanz zu vermeidenhil Systeme einfacher zu warten und Fehler zu findenWie realisiert man das?
Auslagern in Funktionen, Methoden oder Klassen
-
page.19Einhrung Schlimme Sowarefehler Richtlinien Weitere Manahmen
if(sudokuBack[i][y]!=zahl) {if(sudokuBack[i][y+1]!=zahl) {
if(sudokuBack[i][y+2]!=zahl) {if(sudokuBack[i][y+3]!=zahl) {
if(sudokuBack[i][y+4]!=zahl) {if(sudokuBack[i][y+5]!=zahl) {
if(sudokuBack[i][y+6]!=zahl) {if(sudokuBack[i][y+7]!=zahl) {
if(sudokuBack[i][y+8]!=zahl) {return 0;
Besser:for (int y = 0; y < N; ++y) {
if (sudokuField[i][y] == zahl)return true;}return false;
elle: Sudokusolver Medieninformatiker 1. Semester
-
page.20Einhrung Schlimme Sowarefehler Richtlinien Weitere Manahmen
if(sudokuBack[i][y]!=zahl) {if(sudokuBack[i][y+1]!=zahl) {
if(sudokuBack[i][y+2]!=zahl) {if(sudokuBack[i][y+3]!=zahl) {
if(sudokuBack[i][y+4]!=zahl) {if(sudokuBack[i][y+5]!=zahl) {
if(sudokuBack[i][y+6]!=zahl) {if(sudokuBack[i][y+7]!=zahl) {
if(sudokuBack[i][y+8]!=zahl) {return 0;
Besser:for (int y = 0; y < N; ++y) {
if (sudokuField[i][y] == zahl)return true;}return false;
elle: Sudokusolver Medieninformatiker 1. Semester
-
page.21Einhrung Schlimme Sowarefehler Richtlinien Weitere Manahmen
Keep it Simple and Stupid (KISS)
-
page.22Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenKISS-Prinzip
Programmieren tendieren dazu Probleme zu verkomplizierenEinfacher Code ist
schneller zu verstehen und zu repariereneinfacher zu warten und zu erweiternwiederverwendbar und eleganter
schreibt kurze Methoden/Funktionenerhht die wiederverwendbarkeiterleichtert die testbarkeit
-
page.23Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenNegativbeispiel
. .Was tut das folgende Code-Fragment?
.
a = ((-foo)&b) | (~-foo)&c;
Das hierif (foo)
a = b;else
a = c;
-
page.24Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenNegativbeispiel
. .Was tut das folgende Code-Fragment?
.
a = ((-foo)&b) | (~-foo)&c;
Das hierif (foo)
a = b;else
a = c;
-
page.25Einhrung Schlimme Sowarefehler Richtlinien Weitere Manahmen
Formatiert euren Code richtig
-
page.26Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenEinrckungen
Tabulatoren sind bse! besser LeerzeichenTabulatoren sind auf andere Systen unterschiedlich definiert
4 Leerzeichen
-
page.27Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenStatements
Jedes Statement gehrt in eine extra ZeileJe mehr Statements in einer Zeile, desto schwerer zu lesen:while (!fin.eof()) {
string zeile; getline(fin, zeile);if (zeile == "test") { continue; } cout
-
page.28Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenStatements
Jedes Statement gehrt in eine extra ZeileJe mehr Statements in einer Zeile, desto schwerer zu lesen:while (!fin.eof()) {
string zeile; getline(fin, zeile);if (zeile == "test") { continue; } cout
-
page.29Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenChunking
Gruppierung von zusammengehrenden Instruktionen
while (!fin.eof()) {string zeile;getline(fin, zeile);if (zeile == "test")
continue;cout
-
page.30Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenChunking
Gruppierung von zusammengehrenden Instruktionen
while (!fin.eof()) {string zeile;getline(fin, zeile);if (zeile == "test")
continue;cout
-
page.31Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenKlammern
. .K&R Style
.
for (int i = 0; i < N; ++i) {for (int y = 0; y < N; ++y) {
cout
-
page.32Einhrung Schlimme Sowarefehler Richtlinien Weitere Manahmen
Namen sollten selbsterklrendsein!
-
page.33Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenNamesgebung
Variablen-, Klassen- und Methodennamen sollten selbsterklrend seinaber auch schnell zu schreiben
Tippsdenkt nach bevor Ihr einer Variable einen Namen gebtbenutzt keine negative Logik r Namenif (not debug_not_enabled) { ... }
besserif (debug_is_enabled) { ... }
-
page.34Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenNamesgebung 2
Ungarische Notation: {Prfix}/{Datentyp} {Bezeichner}z.B.: strName, pFooBar, kPischwerer zu lesen ThisIsHarderToReadnderung des Datentypen bedeutete Variablenumbenennung
Mit Unterstrichz.B.: max_velocity, err_article_soldout, user_id
Konstaten in Grobuchstaben
#define PI 3.1415926535const double PI = 3.1415926535;
bleibt konsistent
-
page.35Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenNegativbeispiel
o = 0; r = 0; p = 0;q = 0; v = 0; u = 0;for (r = 0; r < 3; r++) {
v = 0;for (u = 0; u < 3; u++) {
for (k3 = p + v + t;k3
-
page.36Einhrung Schlimme Sowarefehler Richtlinien Weitere Manahmen
Behebe das Problem, nicht dieSymptome
-
page.37Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenNegativbeispiel
for (int j = 0; j timestamps[j + 1]) {.correctOrder = false;}}catch {
}}
..
-
page.38Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenNegativbeispiel
for (int j = 0; j timestamps[j + 1]) {.correctOrder = false;}}catch {
}}
...
Index Out of Range Ex-ception
-
page.39Einhrung Schlimme Sowarefehler Richtlinien Weitere Manahmen
Kommentiere was der Code tut,nicht den Code
-
page.40Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenKommentare
Kommentare sind grundstzlich sehr ntzlichKommentare die nicht so ntzlich sind:
$i = 0; // set i to 0
$i++; // use sneaky trick to add 1 to i
if ($i == $j) { // I made sure to use == rather// than = here to avoid a bug
-
page.41Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenKommentare
Kommentare sind grundstzlich sehr ntzlichKommentare die nicht so ntzlich sind:
$i = 0; // set i to 0
$i++; // use sneaky trick to add 1 to i
if ($i == $j) { // I made sure to use == rather// than = here to avoid a bug
-
page.42Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenKommentare
Kommentare sind grundstzlich sehr ntzlichKommentare die nicht so ntzlich sind:
$i = 0; // set i to 0
$i++; // use sneaky trick to add 1 to i
if ($i == $j) { // I made sure to use == rather// than = here to avoid a bug
-
page.43Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenKommentare
Kommentare sind grundstzlich sehr ntzlichKommentare die nicht so ntzlich sind:
$i = 0; // set i to 0
$i++; // use sneaky trick to add 1 to i
if ($i == $j) { // I made sure to use == rather// than = here to avoid a bug
-
page.44Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenContents
1 Einhrung
2 Schlimme Sowarefehler
3 Richtlinien
4 Weitere Manahmen
-
page.45Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenManahmen zur Verbesserung der Code-alitt
Code-Review im TeamProgrammierrichtlinienUnit-TestsStatische Code-AnalyseVerwendung von Versionscontrolsystemen (VCS)ber den Tellerrand gucken
funktionales Paradigma (Lisp, Closure, Haskell, Erlang, F#)Konstantes LernenProgramming isnt a good job for folks who arent interested inconstant learning. Sco Hanselman
-
page.46Einhrung Schlimme Sowarefehler Richtlinien Weitere ManahmenDanke
[email protected]://florian.adamsky.it/
EinfhrungSchlimme SoftwarefehlerRichtlinienWeitere Manahmen