Sie sind auf Seite 1von 46

page.

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

Was 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 Eignung
beziehen, festgelegte Erfordernisse zu erfllen.
Funktionalitt: Genauigkeit, Richtigkeit, Sicherheit (security), . . .
Aber auch nicht-funktionale Aspekte wie z.B.:
Konformitt .
Verstndlichkeit
Analysierbarkeit
Modifizierbarkeit
Anpassbarkeit
Prfbarkeit .

Soware-alitt verbessert die funktionalen Aspekte

page.5

Einhrung

Schlimme Sowarefehler

Richtlinien

Weitere Manahmen

Was 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 Eignung
beziehen, festgelegte Erfordernisse zu erfllen.
Funktionalitt: Genauigkeit, Richtigkeit, Sicherheit (security), . . .
Aber auch nicht-funktionale Aspekte wie z.B.:
Konformitt .
Verstndlichkeit
Analysierbarkeit
Modifizierbarkeit
Anpassbarkeit
Prfbarkeit .

Soware-alitt

Soware-alitt verbessert die funktionalen Aspekte .

page.6

Einhrung

Schlimme Sowarefehler

Richtlinien

Weitere Manahmen

Was ist Soware-alitt?


. .alittsmerkmale
DIN-ISO Norm 9126 definiert den Begri Soware-alitt wie folgt:
Funktionalitt

Prfbarkeit

Soware-alitt ist die Gesamtheit der Merkmale und


Merkmalswerte eines Soware-Produkts, die sich auf dessen Eignung
Benutzbeziehen, festgelegte Erfordernisse zu erfllen.
Konformitt
barkeit

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

Soware-alitt verbessert die funktionalen Aspekte ..

page.7

Einhrung

Schlimme Sowarefehler

Richtlinien

Weitere Manahmen

Was ist das Problem mit der (Un)-alitt von Soware?


Wir schreiten in das ubiquitre Computerzeitalter
Abhngigkeit von kritischer Soware nimmt weiter zu
moderne Autos sind bepackt mit 30 Computern und ber 100 Millionen
Zeilen Code

Sowarefehler verursachen erhebliche Kosten


IX-Studie 2006:
35.9 % des IT-Budgets geht ins Bug-Fixing

Komplexitt von Soware-Systemen steigt exponentiell an

https://www.nytimes.com/2010/02/05/technology/05electronics.html

page.8

Einhrung

Schlimme Sowarefehler

Richtlinien

Weitere Manahmen

Was ist das Problem mit der (Un)-alitt von Soware?


. .Entwicklung des Linux Kernel
Anzahl der Programmzeilen

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

Youre not so smart, then you think you are!


Kurzzeitgedchtnis ist unser Arbeitsgedchtnis
Spanne ist begrenzt auf: 7 2 Chunks

Aufmerksamkeitsspanne ist kurz


Unsere Paern-Matching Fhigkeiten sind ausgeprgt
Ergo
der Leser des Codes sollte nicht mehr als 5 Fakten auf einmal im
Gedchtnis halten mssen um bestimmte Aspekte zu verstehen
Code sollte in kleine verstehbare Pakete aufgeteilt werden
hnlich werden lange Texte in Sektionen und Untersektionen aufgeteilt

page.10

Einhrung

Schlimme Sowarefehler

Richtlinien

Ursachen r schlechte Soware-alitt


keine Zeit
fehlendes Know-How
unklare Projektzielsetzung
falsche oder verfrhte Optimierung am Code
Programmierer die versuchen besonders clever zu sein
falsche Teambesetzung
mangelhae Projektplanung
fehlende alittssicherung

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

die N sprengte die Raumsonde nach


dem Start, weil ein Bug dazu hrte dass
die Rakete vom Kurs abkam
eine Formel auf Papier wurde falsch in
Code transkripiert (Bindestrich fehlte)
hrte zu einer falschen Berechnung der
Flugbahn
Kosten: 18.2 Millionen Dollar

Richtlinien

Weitere Manahmen

page.14

Einhrung

Schlimme Sowarefehler

Richtlinien

erac-25
(19821985)

Linearbeschleuniger zur Anwendung in


der Strahlentherapie
ein Sowarefehler ttete 3 Menschen
und verletzte 3 weitere schwer
bei dem Fehler handelte es sich um race
condition

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)

erster Internet Wurm


infizierte 20006000 Computer in weniger als einem Tag
keine bse Absicht, sondern Vermessung des Internets
zum Eindringen nutze der Wurm eine Buer-Overflow Schwachstelle
im finderd
. .Beispielhae Schwachstelle in ngerd
#define BUFFSIZE 8
char buff[BUFFSIZE];
gets(buff);

//
.

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

Dont repeat yourself (DRY)

page.18

Einhrung

Schlimme Sowarefehler

Richtlinien

Weitere Manahmen

Wiederhole dich nicht!


. .DRY-Prinzip
Every piece of knowledge must have a single, unambiguous, authoritative
.
representation
within a system
eines der wichtigsten Fundamente in der Soware-Entwicklung
hat das Ziel Redundanz zu vermeiden
hil Systeme einfacher zu warten und Fehler zu finden
Wie realisiert man das?
Auslagern in Funktionen, Methoden oder Klassen

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;

elle: Sudokusolver Medieninformatiker 1. Semester

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;

elle: Sudokusolver Medieninformatiker 1. Semester

Weitere Manahmen

page.21

Einhrung

Schlimme Sowarefehler

Richtlinien

Weitere Manahmen

Keep it Simple and Stupid (KISS)

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

schreibt kurze Methoden/Funktionen


erhht die wiederverwendbarkeit
erleichtert die testbarkeit

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

Formatiert euren Code richtig

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;

// Zeile berspringen bei Test

cout << zeile << endl;


}

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)

cout << array[i][y];

cout << array[i][y];

}
}

page.32

Einhrung

Schlimme Sowarefehler

Richtlinien

Weitere Manahmen

Namen sollten selbsterklrend


sein!

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}

z.B.: strName, pFooBar, kPi


schwerer zu lesen ThisIsHarderToRead
nderung des Datentypen bedeutete Variablenumbenennung

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++) {

elle: Sudokusolver IKT 5. Semester

Richtlinien

Weitere Manahmen

page.36

Einhrung

Schlimme Sowarefehler

Richtlinien

Weitere Manahmen

Behebe das Problem, nicht die


Symptome

page.37

Einhrung

Schlimme Sowarefehler

Richtlinien

Negativbeispiel
for (int j = 0; j <= timestamps.Length; j++) {
try {

.if

(timestamps[j] > timestamps[j + 1]) {.


correctOrder = false;

}
}
catch {
}
}

Weitere Manahmen

page.38

Einhrung

Schlimme Sowarefehler

Richtlinien

Negativbeispiel
for (int j = 0; j <= timestamps.Length; j++) {
try {

.if

(timestamps[j] > timestamps[j + 1]) {.


correctOrder = false;

}
}
catch {
}
}

Weitere Manahmen

Index Out of Range Exception

page.39

Einhrung

Schlimme Sowarefehler

Richtlinien

Weitere Manahmen

Kommentiere was der Code tut,


nicht den Code

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

// use sneaky trick to add 1 to i

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

// use sneaky trick to add 1 to i

if ($i == $j) {

// I made sure to use == rather


// than = here to avoid a bug

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

Manahmen zur Verbesserung der Code-alitt


Code-Review im Team
Programmierrichtlinien
Unit-Tests
Statische Code-Analyse
Verwendung von Versionscontrolsystemen (VCS)
ber den Tellerrand gucken
funktionales Paradigma (Lisp, Closure, Haskell, Erlang, F#)

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

Das könnte Ihnen auch gefallen