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
Top Related