Beruflich Dokumente
Kultur Dokumente
Einhrung
Schlimme Sowarefehler
Richtlinien
Soware-alitt
Florian Adamsky, B. Sc.
florian.adamsky@iem.thm.de
http://florian.adamsky.it/
cbd
Sowareentwicklung im SS 2014
Weitere Manahmen
page.2
Einhrung
Schlimme Sowarefehler
Outline
1 Einhrung
2 Schlimme Sowarefehler
3 Richtlinien
4 Weitere Manahmen
Richtlinien
Weitere Manahmen
page.3
Einhrung
Schlimme Sowarefehler
Contents
1 Einhrung
2 Schlimme Sowarefehler
3 Richtlinien
4 Weitere Manahmen
Richtlinien
Weitere Manahmen
page.4
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
page.5
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
Soware-alitt
page.6
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
Prfbarkeit
Nicht.
.
Funktional
Funktionalitt:
Genauigkeit,S
Richtigkeit,
Sicherheit
(security), . . .
Funktional
GeModifiAber auch nicht-funktionale Aspekte wie z.B.:
schwindigkeit
zierbarkeit
Konformitt .
.
.
Verstndlichkeit
Analysierbarkeit
Zuverlssigkeit Modifizierbarkeit
Anpassbarkeit
Prfbarkeit
.
Kundensicht
.
Soware-alitt
Verstndlichkeit
Entwicklersicht
page.7
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
https://www.nytimes.com/2010/02/05/technology/05electronics.html
page.8
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
7
10ubiquitre
Wir schreiten in das
Computerzeitalter
Abhngigkeit von kritischer Soware nimmt weiter zu
1.5
moderne Autos sind bepackt mit 30 Computern und ber 100 Millionen
Zeilen Code
1
Sowarefehler verursachen
erhebliche Kosten
IX-Studie 2006:
35.9 % des IT-Budgets geht ins Bug-Fixing
0.5
Komplexitt von Soware-Systemen steigt exponentiell an
0
.
v0
.0
v0 1
.9
v0 6
.99
v1
.0
v1
v2 .2
.2
v2 .0
.4
v2 .0
.6
v3 .0
.2.
0
https://www.nytimes.com/2010/02/05/technology/05electronics.html
page.9
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
page.10
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
page.11
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
page.12
Einhrung
Schlimme Sowarefehler
Contents
1 Einhrung
2 Schlimme Sowarefehler
3 Richtlinien
4 Weitere Manahmen
Richtlinien
Weitere Manahmen
page.13
Einhrung
Schlimme Sowarefehler
Mariner 1
22. Juli 1962
Richtlinien
Weitere Manahmen
page.14
Einhrung
Schlimme Sowarefehler
Richtlinien
erac-25
(19821985)
elle: http://courses.cs.vt.edu/cs3604/lib/Therac_25/Therac_1
Weitere Manahmen
page.15
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
Morris-Wurm
(1988)
//
.
page.16
Einhrung
Schlimme Sowarefehler
Contents
1 Einhrung
2 Schlimme Sowarefehler
3 Richtlinien
4 Weitere Manahmen
Richtlinien
Weitere Manahmen
page.17
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
page.18
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
page.19
Einhrung
Schlimme Sowarefehler
Richtlinien
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;
Weitere Manahmen
page.20
Einhrung
Schlimme Sowarefehler
Richtlinien
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;
Weitere Manahmen
page.21
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
page.22
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
KISS-Prinzip
Programmieren tendieren dazu Probleme zu verkomplizieren
Einfacher Code ist
schneller zu verstehen und zu reparieren
einfacher zu warten und zu erweitern
wiederverwendbar und eleganter
page.23
Einhrung
Schlimme Sowarefehler
Negativbeispiel
. .Was tut das folgende Code-Fragment?
a = ((-foo)&b) | (~-foo)&c;
Richtlinien
Weitere Manahmen
page.24
Einhrung
Schlimme Sowarefehler
Negativbeispiel
. .Was tut das folgende Code-Fragment?
a = ((-foo)&b) | (~-foo)&c;
Das hier
if (foo)
a = b;
else
a = c;
Richtlinien
Weitere Manahmen
page.25
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
page.26
Einhrung
Schlimme Sowarefehler
Richtlinien
Einrckungen
Tabulatoren sind bse besser Leerzeichen
Tabulatoren sind auf andere Systen unterschiedlich definiert
4 Leerzeichen
Weitere Manahmen
page.27
Einhrung
Schlimme Sowarefehler
Richtlinien
Statements
Jedes Statement gehrt in eine extra Zeile
Je mehr Statements in einer Zeile, desto schwerer zu lesen:
while (!fin.eof()) {
string zeile; getline(fin, zeile);
if (zeile == "test") { continue; } cout << zeile << endl;
}
Weitere Manahmen
page.28
Einhrung
Schlimme Sowarefehler
Richtlinien
Statements
Jedes Statement gehrt in eine extra Zeile
Je mehr Statements in einer Zeile, desto schwerer zu lesen:
while (!fin.eof()) {
string zeile; getline(fin, zeile);
if (zeile == "test") { continue; } cout << zeile << endl;
}
Besser
while (!fin.eof()) {
string zeile;
getline(fin, zeile);
if (zeile == "test") {
continue;
}
cout << zeile << endl;
}
Weitere Manahmen
page.29
Einhrung
Schlimme Sowarefehler
Richtlinien
Chunking
Gruppierung von zusammengehrenden Instruktionen
while (!fin.eof()) {
string zeile;
getline(fin, zeile);
if (zeile == "test")
continue;
cout << zeile << endl;
}
Weitere Manahmen
page.30
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
Chunking
Gruppierung von zusammengehrenden Instruktionen
while (!fin.eof()) {
while (!fin.eof()) {
string zeile;
// Zeile einlesen
getline(fin, zeile);
string zeile;
if (zeile == "test")
getline(fin, zeile);
continue;
if (zeile == "test")
continue;
// Zeile ausgeben
cout << zeile << endl;
}
page.31
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
Klammern
. .K&R Style
for (int i = 0; i < N; ++i) {
for (int y = 0; y < N; ++y) {
. .BSD Style
for (int i = 0; i < N; ++i)
{
for (int y = 0; y < N; ++y)
}
}
page.32
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
page.33
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
Namesgebung
Variablen-, Klassen- und Methodennamen sollten selbsterklrend sein
aber auch schnell zu schreiben
Tipps
denkt nach bevor Ihr einer Variable einen Namen gebt
benutzt keine negative Logik r Namen
if (not debug_not_enabled) { ... }
besser
if (debug_is_enabled) { ... }
page.34
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
Namesgebung 2
Ungarische Notation: {Prfix}/{Datentyp}
{Bezeichner}
Mit Unterstrich
z.B.: max_velocity, err_article_soldout, user_id
Konstaten in Grobuchstaben
#define PI 3.1415926535
const double PI = 3.1415926535;
bleibt konsistent
page.35
Einhrung
Schlimme Sowarefehler
Negativbeispiel
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 <= p + v + t + 2; k3++) {
o = 0;
for (q = 0; q < 3; q++) {
for (j3 = o + p + t;
j3 <= o + p + t + 2;
j3++) {
Richtlinien
Weitere Manahmen
page.36
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
page.37
Einhrung
Schlimme Sowarefehler
Richtlinien
Negativbeispiel
for (int j = 0; j <= timestamps.Length; j++) {
try {
.if
}
}
catch {
}
}
Weitere Manahmen
page.38
Einhrung
Schlimme Sowarefehler
Richtlinien
Negativbeispiel
for (int j = 0; j <= timestamps.Length; j++) {
try {
.if
}
}
catch {
}
}
Weitere Manahmen
page.39
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
page.40
Einhrung
Schlimme Sowarefehler
Richtlinien
Kommentare
Kommentare sind grundstzlich sehr ntzlich
Kommentare die nicht so ntzlich sind:
Weitere Manahmen
page.41
Einhrung
Schlimme Sowarefehler
Richtlinien
Kommentare
Kommentare sind grundstzlich sehr ntzlich
Kommentare die nicht so ntzlich sind:
$i = 0;
// set i to 0
Weitere Manahmen
page.42
Einhrung
Schlimme Sowarefehler
Richtlinien
Kommentare
Kommentare sind grundstzlich sehr ntzlich
Kommentare die nicht so ntzlich sind:
$i = 0;
$i++;
// set i to 0
Weitere Manahmen
page.43
Einhrung
Schlimme Sowarefehler
Richtlinien
Kommentare
Kommentare sind grundstzlich sehr ntzlich
Kommentare die nicht so ntzlich sind:
$i = 0;
$i++;
// set i to 0
if ($i == $j) {
Weitere Manahmen
page.44
Einhrung
Schlimme Sowarefehler
Contents
1 Einhrung
2 Schlimme Sowarefehler
3 Richtlinien
4 Weitere Manahmen
Richtlinien
Weitere Manahmen
page.45
Einhrung
Schlimme Sowarefehler
Richtlinien
Weitere Manahmen
Konstantes Lernen
Programming isnt a good job for folks who arent interested in
constant learning. Sco Hanselman
page.46
Einhrung
Schlimme Sowarefehler
Richtlinien
Danke
Fragen?
florian.adamsky@iem.thm.de
http://florian.adamsky.it/
Weitere Manahmen