Folien SWE Ss14 Code Qualitaet

46
page.1 Einührung Schlimme Sowarefehler Richtlinien Weitere Maßnahmen Soware-alität Florian Adamsky, B. Sc. [email protected] http://florian.adamsky.it/ cbd Sowareentwicklung im SS 2014

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