Materialsammlung - Softwarequalit¨atbuhl/teach/exercises/SWQualitaet1718/... · Materialsammlung -...

242
Materialsammlung - Softwarequalit¨ at Prof. Dr. Hans-J¨ urgen Buhl Wintersemester 2017/2018 Bergische Universit¨ at Wuppertal Fakult¨ at 4 — Mathematik und Naturwissenschaften Fachgruppe Mathematik und Informatik Praktische Informatik PIBUW - WS2017/18 Oktober 2017 12. Auflage

Transcript of Materialsammlung - Softwarequalit¨atbuhl/teach/exercises/SWQualitaet1718/... · Materialsammlung -...

  • Materialsammlung -

    Softwarequalitat

    Prof. Dr. Hans-Jurgen Buhl

    Wintersemester 2017/2018

    Bergische Universitat Wuppertal

    Fakultat 4 Mathematik und NaturwissenschaftenFachgruppe Mathematik und Informatik

    Praktische Informatik

    PIBUW - WS2017/18Oktober 201712. Auflage

    http://www.math.uni-wuppertal.de/~buhl/http://www.uni-wuppertal.de/http://www.fbc.uni-wuppertal.de/http://www2.math.uni-wuppertal.de/math/index_de.html

  • Version: 31. Januar 2018

    ii

  • Inhaltsverzeichnis

    Chaos an Hannovers Geldautomaten . . . . . . . . . . . . . . . . 18Vorbemerkungen Softwarequalitat heute . . . . . . . . . . . . . . . . . . . . 25

    Haftungsausschlu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25IDE Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Beispiele fur Softwaredisfunktionalitaten . . . . . . . . . . . . . . . . . . 39

    Deep Impact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39USV-Software legt Server lahm . . . . . . . . . . . . . . . . . . . 39Chaos an Hannovers Geldautomaten . . . . . . . . . . . . . . . . 40Therac 25 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Berliner Magnetbahn . . . . . . . . . . . . . . . . . . . . . . . . . 41Elektronik-Fehler fuhrt zu Uberhitzung bei Volvo-PKW . . . . . . 41The Patriot Missile . . . . . . . . . . . . . . . . . . . . . . . . . . 42Kontenabrufverfahren startet wegen Softwareproblemen als Provisorium 43Buffer Overflow im Linux-Kernel . . . . . . . . . . . . . . . . . . 43Auch Superhirne konnen irren - das Risiko Computer . . . . . . . 44Explosion der Ariane 5 . . . . . . . . . . . . . . . . . . . . . . . . 45Neueste Risikoinformationen/Softwareprobleme . . . . . . . . . . 45

    1. Softwarequalitat 471.1. Komponententests/Unit-Tests . . . . . . . . . . . . . . . . . . . . . . . . 471.2. Refactoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481.3. Ariane 5 Failure - Full Report . . . . . . . . . . . . . . . . . . . . . . . . 481.4. Bug plotzlicher unbeabsichtigter Automobilbeschleunigung, ... . . . . . . 481.5. cppcheck CodAn-Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491.6. Exceptions/Trap/Ausnahmebehandlung . . . . . . . . . . . . . . . . . . 511.7. Spezifikation einer abstrakten Datenkapsel . . . . . . . . . . . . . . . . . 52

    1.7.1. Axiomatische Spezifikation . . . . . . . . . . . . . . . . . . . . . . 521.7.2. Beschreibende (denotationale) Spezifikation . . . . . . . . . . . . 521.7.3. Spezifikation durch Codevertrage . . . . . . . . . . . . . . . . . . 55

    1.8. iContract (Java) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551.9. D contracts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551.10. Prinzipien der ordnungsgemaen Programmerstellung . . . . . . . . . . . 611.11. sanitize-Optionen in gcc 5 . . . . . . . . . . . . . . . . . . . . . . . . . . 611.12. Debug-Hilfspakete in OpenSuse . . . . . . . . . . . . . . . . . . . . . . . 62

    1.12.1. debuginfo, debugsource in OpenSUSE . . . . . . . . . . . . . . . . 621.12.2. Umstellung auf projektspezifische Codechecks . . . . . . . . . . . 64

    iii

  • 1.13. Modularisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671.13.1. Prinzipien der Moduarisierung . . . . . . . . . . . . . . . . . . . . 671.13.2. Typen der Modularisierung . . . . . . . . . . . . . . . . . . . . . 67

    1.14. Naturlichsprachige Codevertrage (Kommentare und Verbalisierung) . . . 691.14.1. Fallstricke umgangssprachlicher Spezifikation . . . . . . . . . . . . 69

    1.15. Codevertrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711.15.1. REQUIRE(), ENSURE(), ID() und invariant() . . . . . . . . . 711.15.2. Klassifikation der Klassenmethoden gema SdV . . . . . . . . . . 74

    1.16. Der Sicherheits-Supergau Spectre/Meltdown . . . . . . . . . . . . . . . . 761.17. Wiederverwendbarkeit in hoheren Programmiersprachen . . . . . . . . . 791.18. Erste einfache Code-Contracts in Eiffel: Vorbedingungen und Klassen-Invarianten 851.19. Vererbung und Codevertrage (Fortsetzung von 1.15) . . . . . . . . . . . . 861.20. Integrierte Entwicklungsumgebungen zur Codequalitatssteigerung (am Beispiel: PyDev),1.21. Softwarequalitats-Mangel . . . . . . . . . . . . . . . . . . . . . . . . . . . 881.22. Ein erstes C++-Projekt mit Umbrello und Doxygen . . . . . . . . . . . . 881.23. Code-integrierte Dokumentation (mit autom. Dokumentationserzeugung) 991.24. Ungarische Notation und deren nicht unbedingt codequalitatssteigernde Auswirkungen1021.25. Eclipse CDT in Zusammenarbeit mit Umbrello/Papyrus, Doxygen, ... . . 1031.26. nana-Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1171.27. Vertragsverletzungen zur Laufzeit . . . . . . . . . . . . . . . . . . . . . . 1191.28. C++-nana-Contracts in Eclipse . . . . . . . . . . . . . . . . . . . . . . . 1221.29. Nachbedingungen mit Gleitkommawerten: absolute oder relative Abweichung131

    1.29.1. Klasse Wuerfel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1311.29.2. Contract der Klasse Wuerfel . . . . . . . . . . . . . . . . . . . . . 1321.29.3. double adds.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1331.29.4. double math.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

    1.30. Vererbung und Codevertrage . . . . . . . . . . . . . . . . . . . . . . . . . 1351.31. beA-Sicherheitsmangel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391.32. Biometrische Merkmale zum Authentifizieren . . . . . . . . . . . . . . . . 1391.33. Vertragsverletzungen zur Laufzeit (Fortsetzung) . . . . . . . . . . . . . . 140

    1.33.1. Vertragsverletzungen eines Eiffel-Programms in EiffelStudio: . . . 1401.33.2. Vertragsverletzung bei CLI-Debugglauf: backtrace . . . . . . . . . 1411.33.3. Vertragsverletzungen bei C++-Debug-Lauf in ddd . . . . . . . . . 1441.33.4. Automatischer Start von ddd beim CLI-Debug-Lauf und Vertragsverletzung145

    1.34. Nichtanderungs-Vertrage fur Attribute: Framebedingungen . . . . . . . . 1511.35. Ultimative Nichtanderungsvertrage: const-Methoden . . . . . . . . . . . . 153

    2. Programming by Contract 1572.1. Spezifikation durch Vertrage . . . . . . . . . . . . . . . . . . . . . . . . . 1572.2. Alle Vertrage der Klasse Klasse vektor . . . . . . . . . . . . . . . . . . . 161

    2.2.1. Klassendeklaration/ Interface . . . . . . . . . . . . . . . . . . . . 1612.2.1.1. Grundlegende Abfragen . . . . . . . . . . . . . . . . . . 1642.2.1.2. Klassen-Invariante . . . . . . . . . . . . . . . . . . . . . 1642.2.1.3. Konstruktoren . . . . . . . . . . . . . . . . . . . . . . . 164

    iv

    https://www2.eiffel.com/download/

  • 2.2.1.4. Destruktor . . . . . . . . . . . . . . . . . . . . . . . . . 1662.2.1.5. abgeleitete Abfragen/Operationen auf vektor-Exemplaren 1662.2.1.6. Modifikatoren . . . . . . . . . . . . . . . . . . . . . . . . 1682.2.1.7. Operationen, die vektor-Exemplare erzeugen . . . . . . . 1682.2.1.8. benutzte klassenexterne Hilfsfunktionen/-Methoden . . . 170

    2.2.2. Quellcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1702.3. Ein Vertrag zur Klasse rationalNumber . . . . . . . . . . . . . . . . . . . 1712.4. Ein Vertrag mit Queries, Invariants und Actions . . . . . . . . . . . . . . 177

    A. Design by Contract, by Example, in C++ with nana 179A.1. A first Taste of Design by Contract . . . . . . . . . . . . . . . . . . . . . 180A.2. Elementary Principles of Design by Contract . . . . . . . . . . . . . . . . 185

    A.2.1. First Trial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185A.2.2. Redesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189A.2.3. Destruktor, Kopierkonstruktor und Wertzuweisung . . . . . . . . 194

    A.3. Applying the Six Principles . . . . . . . . . . . . . . . . . . . . . . . . . 199A.3.1. Design und Contracts . . . . . . . . . . . . . . . . . . . . . . . . . 199A.3.2. Implementierung und Tests . . . . . . . . . . . . . . . . . . . . . 203A.3.3. old-Wert durch Kopie in Form eines geeigneten STL-Container-Exemplars210A.3.4. old-Wert durch den Kopierkonstruktor . . . . . . . . . . . . . . . 214A.3.5. Redesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

    A.4. Immutable Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216A.5. Using Immutable Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216A.6. Subcontracting in Design by Contract in Nana . . . . . . . . . . . . . . . 218

    A.6.1. name list-Design (Subcontracting) . . . . . . . . . . . . . . . . . . 218A.6.2. Implementierung und Tests . . . . . . . . . . . . . . . . . . . . . 222A.6.3. Mit Frameregel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225A.6.4. Mit Iterator-Methode (Design) . . . . . . . . . . . . . . . . . . . . 227A.6.5. Implementierung der Iterator-Methode . . . . . . . . . . . . . . . 229A.6.6. Test des Iterators in display contents() und main() . . . . . . . . 230A.6.7. Qstl.h: Framebedingungen mit Hilfe eines Iterators . . . . . . . . 231A.6.8. Hilfsoperatoren fur die STL . . . . . . . . . . . . . . . . . . . . . 233

    A.7. Neuformulierung: Regeln und Leitlinien fur PbC in C++ . . . . . . . . . 234

    v

  • Abbildungsverzeichnis

    0.1. Design by Contract, by Example von Richard Mitchell und Jim McKim . 260.2. Bilder von Deep Impact . . . . . . . . . . . . . . . . . . . . . . . . . . . 390.3. http://catless.ncl.ac.uk/Risks/22.92.html . . . . . . . . . . . . . . . . . . 45

    2.1. Kunden-Lieferanten-Modell . . . . . . . . . . . . . . . . . . . . . . . . . 157

    vii

    http://www.amazon.de/Design-Contract-Example-Richard-Mitchell/dp/0201634600

  • Tabellenverzeichnis

    0.1. Divergence in the Range Gate of a PATRIOT MISSILE . . . . . . . . . . 42

    2.1. Pflichten - Nutzen von Kunden und Lieferanten . . . . . . . . . . . . . . 158

    1

  • Softwarequalitat und -korrektheit

    2 V Mi 10 - 12 in HS06

    Einordnung: Bachelor Mathematik, Nebenfach Informatik; Komb. Bachelor of Arts,Informatik; Bachelor IT; Master Wirtschaftsmathematik, Informatik; Wirtschaftswis-senschaften: Modul I - Software- und Programmiertechnik; Studienschwerpunkte undNebenfacher Informatik anderer Studiengange

    Vorkenntnisse: Einfuhrung in die Informatik; Programmierkenntnisse in C++;erfolgreiche Teilnahme an xxxMAT500000

    Inhalt: Nach Ubersicht in die desastrose Lage der Qualitat vorhandener aktuellerSoftwareprodukte (Heartbleed Bug, ...) wird anhand professioneller Entwicklungswerk-zeuge in qualitatssteigernde Vorgehensweisen eingefuhrt.Die Programmiermethodik

    Codevertrage oder Programming/Design by Contract

    klart die Verantwortlichkeit von Diensteanbieter (function) und Dienstenehmer (Auf-rufer einer Funktion) durch genaue Vereinbarungen. Mittels des Sprachmittels derZusicherung werden Voraussetzungen, Diensteerfullung und Ausnahmebedingungen zurLaufzeit eines Programms (automatisch) uberpruft und fuhren zu Code besserer Qua-litat. Daneben werden diverse weitere Hilfsmittel zur Software-Qualitatsverbesserungvorgestellt und diskutiert.

    Literatur: wird in der Veranstaltung bekannt gegeben.

    (siehe Seite 68 des Modulhandbuchs)

    2

    http://www.math.uni-wuppertal.de/fileadmin/mathematik/Studium/Modulhandbuch_BScMath.pdf

  • Aktuell fehlende Softwarequalitat

    :

    Malware legt mehrere Krankenhauser in Ostengland lahm

    The Heartbleed BugHow to Prevent the next Heartbleed

    Deutsche Bank: Software-PanneErneute IT-Panne

    Online-Bank: Schwere Datenpanne bei Comdirect

    Hirnforschung: Fehlerhafte MRT-Software schurt Zweifel an Zehntausenden Studien

    Traue keinem Scan, den du nicht selbst gefalscht hast

    Software-Fehler: Mars-Rover Curiosity im SicherheitsmodusSoftware-Fehler: Mars-Rover Curiosity zuruck aus Sicherheitsmodus

    ExoMars: Softwarefehler konnte fur Schiaparelli-Absturz verantwortlich seinESA findet SoftwarefehlerUntersuchungsbericht zu Schiaparelli-Absturz

    iOS 11: Taschenrechner scheitert an Grundrechenarten

    Softwaretesting Stuttgart

    3

    https://www.heise.de/newsticker/meldung/Malware-legt-mehrere-Krankenhaeuser-in-Ostengland-lahm-3453447.htmlhttp://heartbleed.com/http://www.dwheeler.com/essays/heartbleed.htmlhttps://www.heise.de/newsticker/meldung/Deutsche-Bank-Software-Panne-ist-behoben-3227079.htmlhttp://www.heise.de/newsticker/meldung/Erneute-IT-Panne-Kurzer-Schock-fuer-Kunden-der-Deutschen-Bank-3330829.htmlhttp://www.wz.de/home/panorama/online-bank-schwere-datenpanne-bei-comdirect-1.2234319https://www.heise.de/newsticker/meldung/Hirnforschung-Fehlerhafte-MRT-Software-schuert-Zweifel-an-Zehntausenden-Studien-3257319.htmlhttps://www.degruyter.com/downloadpdf/j/dmvm.2014.22.issue-1/dmvm-2014-0015/dmvm-2014-0015.pdfhttp://www.heise.de/newsticker/meldung/Software-Fehler-Mars-Rover-Curiosity-im-Sicherheitsmodus-3259431.htmlhttp://www.heise.de/newsticker/meldung/Software-Fehler-Mars-Rover-Curiosity-zurueck-aus-Sicherheitsmodus-3264595.htmlhttps://www.heise.de/newsticker/meldung/ExoMars-Softwarefehler-koennte-fuer-Schiaparelli-Absturz-verantwortlich-sein-3360127.htmlhttps://www.heise.de/newsticker/meldung/Absturz-des-ExoMars-Landers-Schiaparelli-ESA-findet-Softwarefehler-3502663.htmlhttps://scilogs.spektrum.de/go-for-launch/untersuchungsbericht-zu-schiaparelli-absturz-veroeffentlicht/https://www.heise.de/mac-and-i/meldung/iOS-11-Taschenrechner-scheitert-an-Grundrechenarten-3867417.htmlhttp://www.softwaretesting-stuttgart.de/blog/

  • Intel schaltet TSX wegen Bug bei Haswell abIntels Haswell kommt 2013 mit neuer SpeicherverwaltungIntel-Bug: Vorerst kein Transactional MemoryInstall the latest microcode for your processorBroadwell reparieren

    ...

    Liste von ProgrammfehlerbeispielenGeschichte der Softwarefehler

    ...

    (aus: Das weltweite Y2k-Uberwachungssystem meldet)

    4

    http://www.golem.de/news/transactional-memory-intel-schaltet-tsx-wegen-bug-bei-haswell-ab-1408-108545.htmlhttp://www.golem.de/news/transactional-memory-intels-haswell-kommt-2013-mit-neuer-speicherverwaltung-1202-89665.htmlhttp://www.heise.de/newsticker/meldung/Intel-Bug-Vorerst-kein-Transactional-Memory-2292196.htmlhttps://sites.google.com/site/easylinuxtipsproject/microcodehttp://www.heise.de/newsticker/meldung/Intel-will-TSX-beim-Broadwell-reparieren-2427892.htmlhttp://de.wikipedia.org/wiki/Liste_von_Programmfehlerbeispielenhttp://www.certitudo-gmbh.de/g_geschichte.htmlhttp://www.castor.de/diskus/pc2000/fazit.html

  • Programmfehler:Bugs

    ... und konstruktive Gegenmanahmen (Codevertrage) in naturlichsprachigerArtC++14-Standard, Seite 416: 17.5.1.4 Detailed specifications, invariants/requires/postconditions/returns

    oderC++17-Standard, Seite 452: 20.4.1.4 Detailed specifications, invariants/requires/postconditions/returns:

    etwa bei der Spezifikation der C++-Standardbibliotheksfunktion sort():

    5

    https://de.wikipedia.org/wiki/Programmfehlerhttp://open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3797.pdf#page=430http://open-std.org/JTC1/SC22/WG21/docs/papers/2017/n4659.pdf#page=466

  • Besser (vollstandiger) sind die Spezifikationen der C++-Standardbibliothek (fruherhaufig STL genannt) in Standard Template Library Programmers Guide:

    C++20 CodevertrageUm solche

    formalen Spezifikationen auch maschienenuberprufbar zu machen, wurde

    fur C++20 in Contracts programming for C++20 (J. Daniel Garcia) eine C++-Spracherganzung fur Codevertrage mit Hilfe der Attribute expects, ensures undassert vorgeschlagen:

    template r e q u i r e s RandomAccessIterator()

    I t e r bsearch ( I t e r p , I t e r q , s td : : i t e r a t o r t r a i t s : : v a lue type w) {[ [ expects default : p

  • C++ attributesConcepts Lite: Constraining Templates with Predicates

    C++17 attributes:Neue Systemattribute als Code-Metainformation:

    Beispiel zum Attribut maybe unused:

    namespace {[ [ maybe unused ] ] s td : : s t r i n g createWindowsConfigFi lePath (

    const s td : : s t r i n g &r e l a t i v ePa th ) ;// TODO: Reuse t h i s on BSD, MAC . . .[ [ maybe unused ] ] s td : : s t r i n g createL inuxConf igFi l ePath (

    const s td : : s t r i n g &r e l a t i v ePa th ) ;}

    s td : : s t r i n g c r ea teCon f i gF i l ePa th ( const s td : : s t r i n g &r e l a t i v ePa th ) {#i f OS == WINDOWS

    return createWindowsConfigFi lePath ( r e l a t i v ePa th ) ;#e l i f OS == LINUX

    return createL inuxConf igFi l ePath ( r e l a t i v ePa th ) ;#else

    #error OS i s not yet supported#endif

    }// . . .

    (aus C++ attribute examles)

    Besser mit der neuen C++17 bedingten Compilation:

    / workaround un t i l operator== i s cons t expr h t t p :// opens t d . org /JTC1/SC22/WG21/docs / papers /2017/ p0533r0 . pdf/

    constexpr bool equa l ( char const lhs , char const rhs ){

    while ( l h s | | rhs )i f ( l h s++ != rhs++)

    return fa l se ;return true ;

    }

    7

    http://en.cppreference.com/w/cpp/language/attributeshttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3580.pdfhttps://stackoverflow.com/documentation/c%2b%2b/5251/attributes#t=201708310203174070448

  • // aus : h t t p s :// s t a c kov e r f l ow . com/ qu e s t i on s /27490858/howcanyoucomparetwocharacters t r i n g ss t a t i c a l l y atcompilet ime //

    template struct False : s td : : boo l constant { } ;// template // s t r u c t False : s t d : : boo l cons t an t { } ;template void ErrorAbort ( const char Msg) {

    s t a t i c a s s e r t ( False{} , Msg) ;}

    s td : : s t r i n g c r ea teCon f i gF i l ePa th ( const s td : : s t r i n g &r e l a t i v ePa th ) {i f constexpr ( equa l (OS, WINDOWS ) {

    return createWindowsConfigFilePath( r e l a t i v ePa th ) ;} else i f constexpr ( equa l (OS, LINUX ) {

    return createL inuxConf igFi l ePath ( r e l a t i v ePa th ) ;} else {

    ErrorAbort(OS not yet supported ) ;// s t a t i c a s s e r t ( f a l s e , OS i s not ye t suppor ted ) ; doesn t

    work}

    }

    where to specify maybe unused#errorstatic assertgetenv in C++(C++ attributes entsprechen

    Java Annotationen)

    noreturn-Attribut:

    8

    https://stackoverflow.com/questions/38513812/do-i-put-maybe-unused-on-function-declarations-or-definitionshttp://en.cppreference.com/w/cpp/preprocessor/errorhttp://en.cppreference.com/w/cpp/language/static_asserthttp://de.cppreference.com/w/cpp/utility/program/getenvhttp://en.cppreference.com/w/cpp/language/attributeshttps://de.wikipedia.org/wiki/Annotation_(Java)

  • Wir benutzen die IDE Eclipse, auf den Ausbildungslaborrechnern der FachgruppeMathematik und Informatik als eclipse-papyruso1 aufruf- und benutzbar:

    Hinweise zu den Compiler-Optionen fur C++17:

    g++-7, -std=c++1z und -fconcepts

    9

    https://www.dpunkt.de/buecher/12137/9783864901966-eclipse-f%C3%BCr-c-c%2B%2B-programmierer.html

  • Hinweise zur Installation von Eclipse auf Ihrem eigenen Linux-Rechner finden Sie im Ab-schnitt IDE fur C++-Programmierung: Eclipse ... Modeling mit CDT, UML,OCL, Linux Tools, ... (Seite 30).

    10

  • 11

  • Statische Code-Analyse (lint, cdt codan, cppcheck, ...):

    Lint (software)CDT/designs/StaticAnalysisCppcheck und Cppcheck with Eclipse

    12

    https://en.wikipedia.org/wiki/Lint_(software)https://wiki.eclipse.org/CDT/designs/StaticAnalysishttps://de.wikipedia.org/wiki/Cppcheckhttps://mcuoneclipse.com/2015/07/02/open-source-static-code-analysis-cppcheck-with-eclipse/

  • Das Programm cppcheck mu zusatzlich zu eclipse zum Beispiel mit Yast installiertsein:

    13

  • Auch g++ besitzt in letzter Zeit verbesserte Hinweise aufaugenscheinliche Tippfehler:

    14

  • Weitere mogliche Ursachen von Software-Katastrophen:

    C++ Accesses an Array out of bounds gives no error, why?

    GCC 5.0: -fsanitize=bounds: enable instrumentation of array bounds and detectout-of-bounds accesses;GCC 5.1 mit Offloading und Cilk-Plus-Support erschienenUsing gccs 4.8.0 Address Sanitizer: leider fur Indexuberprufung recht ungeeignetaddress-sanitizer how it works

    What is the C++ compiler required to do with ill-formed programs according to the Standard?Undefined behavior

    15

    http://stackoverflow.com/questions/1239938/c-accesses-an-array-out-of-bounds-gives-no-error-whyhttps://www.gnu.org/software/gcc/gcc-5/changes.htmlhttp://www.heise.de/developer/meldung/GCC-5-1-mit-Offloading-und-Cilk-Plus-Support-erschienen-2616912.htmlhttps://code.google.com/p/address-sanitizer/wiki/AddressSanitizerAlgorithmhttps://code.google.com/p/address-sanitizer/wiki/AddressSanitizerAlgorithmhttp://stackoverflow.com/questions/15805394/what-is-the-c-compiler-required-to-do-with-ill-formed-programs-according-to-thhttp://en.wikipedia.org/wiki/Undefined_behavior

  • C++14: Abschnitt 1.3.24 undefined behavior

    (aus: http://en.wikipedia.org/wiki/Bounds checking#Index checking )

    16

    http://open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3797.pdfhttp://en.wikipedia.org/wiki/Bounds_checking#Index_checking

  • Hilfsmittel zur Vermeidung von Codefehlern:

    (aus: CDT/designs/StaticAnalysis)

    Im aktuellen Eclipse:

    Siehe auch: Statische Code-Analyse, ...

    17

    http://wiki.eclipse.org/CDT/designs/StaticAnalysishttp://de.wikipedia.org/wiki/Statische_Code-Analyse

  • Chaos an Hannovers Geldautomaten (05.10.2003 13:00 Uhr)

    Computerprobleme haben am Samstag alle 240 Geldautomaten der Sparkasse in derStadt und Region Hannover lahm gelegt. Die Fusion der Stadt- und Kreissparkasse sollteam Wochenende auch technisch umgesetzt werden, sagte der Sprecher des Geldinstituts,Stefan Becker. Beim Hochfahren eines Server habe sich ein Fehler eingeschlichen, sodass die Geldautomaten nicht mehr funktionierten. Die Sparkasse offnete stadtdessenfunf Filialen, damit Kunden etwa in Einkaufszonen Bargeld abheben konnen.(aus: http://www.heise.de/newsticker/meldung/40834)

    Software-Softwarequalitatsmerkmale (nach Balzert):

    A. Produktorientiert:

    1. funktionale Korrektheit (benotigt Spezifikation)

    2. funktionale Vollstandigkeit

    3. Robustheit gegenuber dem Benutzer

    4. Benutzerfreundlichkeit

    5. Effizienz in Laufzeit

    6. Effizienz in Arbeitsspeicherbedarf

    7. Effizienz in Plattenspeicherbedarf

    8. Integritat (gegenuber unauthorisierten Anderungen)

    9. Kompatibilitat, Integrationsfahigkeit, Standards

    10. Hochverfugbarkeit

    B. Projekt- bzw. teamarbeitsorientiert:

    1. Verstandlichkeit (des GUI, der Dokumentation, ...)

    2. Uberprufbarkeit

    3. Wartbarkeit

    4. Anderbarkeit, Erweiterbarkeit

    5. Portierbarkeit

    6. Produktivitat

    7. Wiederverwendbarkeit

    Siehe auch:Softwaretechnik I (A. Zeller),ISO 9126,FURPS

    18

    http://www.heise.de/newsticker/meldung/40834https://de.wikipedia.org/wiki/Korrektheit_(Informatik)https://de.wikipedia.org/wiki/Hochverf%C3%BCgbarkeithttps://www.st.cs.uni-saarland.de/edu/se1/skript/notes.pdfhttp://de.wikipedia.org/wiki/ISO/IEC_9126http://de.wikipedia.org/wiki/FURPS

  • Relevanzmatrizen zur Beurteilung im Projekt wichtiger Merkmale

    Jedem Qualitatsmerkmal kann man in Design- und Implementierungsphase einemehr oder wenig wichtige Rolle zuordnen. Diese Bewertungszuordnung nennen wirRelevanzmatrix.

    Sie kann auch bei der Beurteilung von Softwarekatastrophen eingesetzt werde, etwa:

    +++ besonders wichtig

    ++ wichtig

    + beachtenswert

    . neutral

    - missachtet

    -- stark missachtet

    --- katastrophal missachtet

    Ein Beispiel:Untersuchungsbericht zu Schiaparelli-Absturz

    Korrektheit --

    Vollstandigkeit --

    Robustheit ---

    Benutzerfreundlichkeit

    Laufzeit-Effizienz

    Hauptspeicher-Effizienz

    Massenspeicher-Effizienz

    Integritat

    Kompatibilitat, Integrationsfahigkeit, Standards

    Hochverfugbarkeit

    ------------------------------------------------

    Verstandlichkeit ---

    Uberprufbarkeit

    Wartbarkeit

    Anderbarkeit/Erweiterbarkeit

    Portierbarkeit

    Produktivitat

    Wiederverwendbarkeit ---

    19

    https://scilogs.spektrum.de/go-for-launch/untersuchungsbericht-zu-schiaparelli-absturz-veroeffentlicht/

  • Memory safetysiehe: http://en.m.wikipedia.org/wiki/Memory safety

    Buffer overflow - Out-of bound writes can corrupt the content of adjacent objects,or internal data like bookkeeping information for the heap or return addresses.

    Dynamic memory errors - Incorrect management of dynamic memory and pointers:

    Dangling pointer - A pointer storing the address of an object that has beendeleted.

    Double frees - Repeated call to free though the object has been already freedcan cause freelist-based allocators to fail.

    Invalid free - Passing an invalid address to free can corrupt the heap. Orsometimes will lead to an undefined behavior.

    Null pointer accesses will cause an exception or program termination in mostenvironments, but can cause corruption in operating system kernels or systemswithout memory protection, or when use of the null pointer involves a largeor negative offset.

    Uninitialized variables - A variable that has not been assigned a value is used. Itmay contain an undesired or, in some languages, a corrupt value:

    Wild pointers arise when a pointer is used prior to initialization to someknown state. They show the same erratic behaviour as dangling pointers,though they are less likely to stay undetected.

    Out of memory errors:

    Stack overflow - Occurs when a program runs out of stack space, typicallybecause of too deep recursion.

    Allocation failures - The program tries to use more memory than the amountavailable. In some languages, this condition must be checked for manuallyafter each allocation.

    newstd::nothrowtry ... catchstd::exception

    20

    http://en.m.wikipedia.org/wiki/Memory_safetyhttp://www.cplusplus.com/reference/new/operator%20new[]/http://www.cplusplus.com/reference/new/nothrow/http://en.cppreference.com/w/cpp/language/try_catchhttp://en.cppreference.com/w/cpp/error/exception

  • Move-Semantik:(Austausch von Referenzen statt Verschieben von Datenblocken,(langere) Datenblocke so lange wie moglich wieder-/weiterverwenden,Datenflu-zentriertes Konzipieren von Algorithmen)

    (aus: https://blog.feabhas.com/2015/01/the-rule-of-the-big-four-and-a-half-move-semantics-and-resource-management/)

    Illustration of move semantics: Move Semantics and Resource ManagementIntroducing the Move Constructor and the Move AssignmentC++11 rvalues and move semantics confusion (return statement)

    RVO:Return Value Optimization, RVO vs. std::movecopy elisioncopy elision (Wikipedia)

    Modern C++ Style:Scott Meyers: Effective Modern C++, 42 Specific Ways to Improve Your Use of C++11 and C++14

    21

    https://blog.feabhas.com/2015/01/the-rule-of-the-big-four-and-a-half-move-semantics-and-resource-management/https://blog.feabhas.com/2015/01/the-rule-of-the-big-four-and-a-half-move-semantics-and-resource-management/https://blog.smartbear.com/c-plus-plus/c11-tutorial-introducing-the-move-constructor-and-the-move-assignment-operator/https://stackoverflow.com/questions/4986673/c11-rvalues-and-move-semantics-confusion-return-statementhttps://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/RVO_V_S_std_move?lang=enhttp://de.cppreference.com/w/cpp/language/copy_elisionhttps://en.wikipedia.org/wiki/Copy_elisionhttp://shop.oreilly.com/product/0636920033707.do

  • Fehlende Benutzung aggressiver Laufzeit-Zusicherungen zur Qualitatsver-besserung von Software:Heartbleed and Formal MethodsHow to Prevent the next HeartbleedAcceptance of Formal Methods: Lessons from Hardware Design the FDIV bug20 Jahre FDIV-Bug: Ein Prozessor-Rechenfehler macht Geschichte20 Jahre FDIV-Bug: Die HintergrundeIntel Skylake bug causes PCs to freeze during complex workloads

    Oder mittels bei jedem Produktions- und Testlauf dauernd uberprufter Codevertrageund sofortiger Meldung bei Vertragsverletzung:

    22

    http://catless.ncl.ac.uk/Risks/27.89.html#subj4.1http://www.dwheeler.com/essays/heartbleed.htmlhttp://www.csl.sri.com/papers/computer96/computer96.htmlhttp://www.heise.de/newsticker/meldung/20-Jahre-FDIV-Bug-Ein-Prozessor-Rechenfehler-macht-Geschichte-2438283.htmlhttp://www.heise.de/ct/artikel/20-Jahre-FDIV-Bug-Die-Hintergruende-2438233.htmlhttps://arstechnica.com/gadgets/2016/01/intel-skylake-bug-causes-pcs-to-freeze-during-complex-workloads/

  • 23

  • Vorbemerkungen Softwarequalitat heute

    Produkthaftung auch fur Software?

    Haftungsausschlu

    Die Uberlassung dieser Bauplane erfolgt ohne Gewahr. Der Plan gibt keine Garantie,Gewahrleistung oder Zusicherung, da diese Plane fur einen bestimmten Zweck geignetsind, da sie richtig sind oder da ein Gebaude, das nach diesen Planen gebaut wird,den Anspruchen des jeweiligen Erwerbers genugt. Der Planer erklart sich bereit, Ersatz-kopien derjenigen Teile der Plane zu liefern, die zum Zeitpunkt des Kaufs unleserlichsind. Daruber hinaus wird keinerlei Haftung ubernommen. Der Erwerber dieser Planesollte beachten, da in den entscheidenden Phasen des Baus und nach der Fertigstellunggeeignete Tests durchzufuhren sind und da die ublichen Vorsichtsmanahmen zumSchutz des Lebens der Bauarbeiter zu treffen sind.

    (Zitat: Robert L. Baber: Softwarereflexionen, Springer-Verlag, Seiten 1...10)

    und in der Praxis:

    ...

    2. HaftungWir werden immer bemuht sein, ihnen einwandfreie Software zu liefern. Wir konnen aberkeine Gewahr dafur ubernehmen, da die Software unterbrechungs- und fehlerfrei lauftund da die in der Software enthaltenen Funktionen in allen von Ihnen gewahlten Kom-binationen ausfuhrbar sind. Fur die Erreichung eines bestimmten Verwendungszweckeskonnen wir ebenfalls keine Gewahr ubernehmen. Die Haftung fur unmittelbare Schaden,mittelbare Schaden, Folgeschaden und Drittschaden ist, soweit gesetzlich zulassig, aus-geschlossen. Die Haftung bei grober Fahrlassigkeit und Vorsatz bleibt hiervon unberuhrt,in jedem Fall ist jedoch die Haftung beschrankt auf den Kaufpreis.(AGB, Punkt 9)

    25

    http://de.wikipedia.org/wiki/Produkthaftunghttp://www.cas.mcmaster.ca/~baber/Books/SWRefl.pdf

  • Design by Contract (Spezifikation durch Vertrage = SdV)

    Abbildung 0.1.: Design by Contract, by Example von Richard Mitchell und Jim McKim

    Vergleiche auch SQS und SQA.

    In den ersten Kapiteln der Vorlesung wird Grundwissen zur Softwarequalitat und-qualitatssicherung wiederholt.

    Die dann behandelte Methodik DbC wurde zuerst in der Programmiersprache Eiffelthematisiert, ist jedoch heute in (fast) allen neuen Programmiersprachen nutzbar.

    http://en.wikipedia.org/wiki/Eiffel (programming language)

    http://en.wikipedia.org/wiki/Design by contract

    Contracts programming for C++20 Current proposal status

    ( Ein Eiffel Tutorial

    Beispiel-Quellen fur EiffelStudio:http://www.math.uni-wuppertal.de/buhl/teach/exercises/PbC09/source code.tar.gz)

    26

    http://de.wikipedia.org/wiki/Design_by_contracthttp://www.amazon.de/Design-Contract-Example-Richard-Mitchell/dp/0201634600http://www.dict.cc/?s=SQShttp://en.wikipedia.org/wiki/Software_quality_assurancehttp://en.wikipedia.org/wiki/Eiffel_(programming_language)http://en.wikipedia.org/wiki/Design_by_contracthttps://www.arcos.inf.uc3m.es/jdgarcia/wp-content/uploads/sites/9/2017/04/contracts.pdfhttp://archive.eiffel.com/doc/online/eiffel50/intro/language/tutorial.pdfhttps://www.eiffel.com/http://www.math.uni-wuppertal.de/~buhl/teach/exercises/PbC09/source_code.tar.gz

  • GNU nana DbC for C and C++

    Ein Beispiel C++-Codevertrag mit Hilfe von Nana:

    #de f i n e EIFFEL CHECK CHECK ALL#inc l ude #inc l ude #inc l ude < e i f f e l . h>#inc l ude . . .vo id qu i ck s o r t ( double v [ ] , i n t l , i n t h){

    REQUIRE( l

  • Software Quality Attributes confirming ISO 9126-1

    Funktionalitat

    Angemessenheit

    Richtigkeit/Sorgfalt

    Interoperationalitat/Kompatibilitat

    Regeltreue

    Ausfallsicherheit

    Ausgereiftheit

    Fehlertoleranz

    Wiederherstellbarkeit

    Bedienbarkeit

    Verstandlichkeit

    Erlernbarkeit

    Funktionsfahigkeit

    Effizienz

    zeitliche Effizienz

    Ressourcenverbrauch

    Wartungsfreundlichkeit

    Analysierbarkeit

    Anderbarkeit

    Stabilitat

    Testbarkeit

    Portabilitat

    Anpassbarkeit

    Installierbarkeit

    Konformitat

    Ersetzbarkeit

    Alexa music device held a party on its ownThe Sun: Cops raid music fans flat ...Smart Home: Nests Neujahrs-Bug lasst Kunden bibbernMacBook: Facebook- und Messenger-App saugten Akkus leerHomematic IP-Ausfall

    28

    https://catless.ncl.ac.uk/Risks/30/50#subj7https://www.thesun.co.uk/news/4873155/cops-raid-german-blokes-house-after-his-alexa-music-device-held-a-party-on-its-own-while-he-was-out/https://www.heise.de/newsticker/meldung/Smart-Home-Nests-Neujahrs-Bug-laesst-Kunden-bibbern-3071171.htmlhttps://www.heise.de/newsticker/meldung/Problem-offenbar-behoben-Facebook-und-Messenger-App-saugten-Akkus-leer-3593440.htmlhttps://www.heise.de/newsticker/meldung/Serverausfall-bei-Homematic-IP-3903589.html

  • C++-Entwicklungsumgebung

    http://www.eclipse.org/downloads/packages/release/Oxygen/1 (Eclipse Oxygen 1)

    Eclipse fur C/C++-Programmierer, 3. AuflageCreating Your First C++ Program in Eclipse

    Eclipse-Modelling (inkl. Java) mit

    CDT (C/C++ Development Environment inklusive Eclipse standalone Debugger),

    UML (Papyrus mit Papyrus-Designer (CPP- und Java-Codeerzeugung),

    OCL-Tools (Object Constraint Language),

    CDT-Linux Tools (fur Gcov, Gprof, Perf, Valgrind, ...),

    PyDev (Python),

    D Development Tools (mit gesondert installiertem dmd, dub),

    Scala,

    Kotlin,

    OcaIDE (Ocaml),

    ...,

    CUTE (C++ Unit-Tests),

    cppcheclipse (mit gesondert installierte cppcheck)

    29

    http://www.eclipse.org/downloads/packages/release/Oxygen/1https://www.dpunkt.de/buecher/12137/9783864901966-eclipse-f%C3%BCr-c-c%2B%2B-programmierer.htmlhttp://www.fayewilliams.com/2011/06/28/creating-your-first-c-program-in-eclipse/

  • Benutzte freie

    CDT/UML2.5-/OCL2.4-Programmentwicklung

    Hilfsmittel (Tools) zurstate of the art-Entwicklung von C++-Anwendungen:

    Verfugbar (vorinstalliert) auf allen Ausbildungsclustern (CIP/IT/PI: l101, ...) derFachgruppe Mathematik/Informatik der BUW als eclipse-papyruso1.

    Hinweis zur Installation auf dem eigenen Linux-Notebook:

    IDE fur C++-Programmierung: Eclipse Oxygen

    Modeling mit CDT, UML, OCL, Linux Tools, ...

    Eclipse Downloads (Download Packages):

    Installiere Eclipse Modeling Tools, (zur Zeit die Version Oxygen 1 durch Download derDatei eclipse-modeling-oxygen-1-linux-gtk-x86 64.tar.gz vonhttp://www.eclipse.org/downloads/, installiere sie mittels:

    /Downloads> gunzip e c l i p s emodelingoxygen1l inuxgtkx86 64 .t a r . gz

    buhl@rhea3 : /Downloads> l s a l ec rwrr 1 buhl u se r s 495882240 22 . Aug 09 :05 e c l i p s e

    modelingoxygen1l inuxgtkx86 64 . t a r

    wechsle ins Zielverzeichnis fur selbstinstallierte Software (etwa $HOME/sw) und entpackeeclipse dorthin:

    /sw> t a r x f /Downloads/ e c l i p s emodelingoxygen1l inuxgtkx86 64 . t a r

    /sw> l s a ldrwxrxrx 9 buhl u se r s 4096 19 . Feb 09 :36 e c l i p s e/sw> mv e c l i p s e e c l i p s emodelingoxygen1l inuxgtkx86 64/sw> cd / bin

    Erzeuge in S$HOME/bin ein Startskript $HOME/bin/eclipse-papyruso1 mit dem Inhalt:

    30

    https://www.heise.de/ix/meldung/Klaerungsversuch-zum-Begriff-des-Stands-der-Technik-in-der-IT-Sicherheit-3759959.htmlhttp://www.eclipse.org/downloads/

  • #!/ b in /sh#$HOME/sw/ e c l i p s emodelingoxygen1l inuxgtkx86 64/ e c l i p s e $

    und gib ihm Ausfuhrbarkeitsrechte:

    /bin> chmod 755 $HOME/bin / e c l i p s epapyruso1

    Erganze dann unter Help, Install Modelling Components das UML-Tool Papyrus(fur die Erstellung von UML-Modellen):

    ...

    erganze dann die OCL Tools zur Erstellung von formalen Constraints (Codevertrage andie UML-Komponenten):

    aktualisiere Papyrus unter Help, Check for updates, falls notig,

    31

  • erganze unter Help, Install New Software, Add den C/C++-Designer (zur Codeer-zeugung unter CDT und JAVA):

    papyrus-designer

    http://download.eclipse.org/modeling/mdt/papyrus/components/designer/

    32

  • erganze unter Help, Install New Software, Add

    full CDT 9.3.0

    http://download.eclipse.org/tools/cdt/releases/9.3

    33

  • und wahle mittels Select All das volle CDT-Plugin ausund installiere es,

    34

  • erganze unter Help, Install New Software, Add

    linuxtools

    http://download.eclipse.org/linuxtools/update

    das Linuxtools-Repositorium und wahle Select All an:

    35

  • Die Linuxtools bieten Eclipse-Integration qualitatssteigernder Tools fur die C++-Entwicklung:

    Callgraph

    ChangeLog

    GProf

    Gcov (oder lcov)

    Libhover

    Man Page

    LTTng

    OProfile

    Perf

    Systemtap

    Valgrind

    Bei Bedarf kann man unter Help, Eclipse Marketplace schlielich noch die Python-Entwicklungsumgebung

    36

  • und D-Unterstutzung (sofern auf Ihrer Maschine dmd und dub installiert sind)

    und ... hinzuinstallieren.(Vorinstalliert auf den Ausbildungsclustern der Fachgruppe als eclipse-papyruso sindzum Beispiel zusatzlich: Scala, Kotlin, OcaIDE (fur Ocaml) sowie Cute.)

    cppcheclipse (Eclipse-Marketplace Plugin fur cppcheck) ist nach Installation voncppcheck ebenfalls sehr empfehlenswert:

    Getting started with CDT developmentCDT Documentation, Tutorials, ...Eclipse CDT (C/C++ Development Tooling)Eclipse fur C/C++-Programmierer, dritte Auflage

    Hinweis zu verfugbaren Softwareentwicklungssystemen:GNU g++ fur Linuxgcc7 vor den TorenCompiler: GCC 7.1 kennt die Sprachfeatures von C++17GCC, the GNU Compiler CollectionC++17: Standardbibliotheksanderungen

    37

    http://cppcheck.sourceforge.net/http://wiki.eclipse.org/Getting_started_with_CDT_developmenthttp://www.eclipse.org/cdt/documentation.phphttp://www.eclipse.org/cdt/https://www.dpunkt.de/buecher/12137/9783864901966-eclipse-f%C3%BCr-c-c%2B%2B-programmierer.htmlhttp://gcc.gnu.org/onlinedocs/http://www.heise.de/newsticker/meldung/Compiler-GCC-7-ist-feature-complete-3466418.htmlhttps://www.heise.de/developer/meldung/Compiler-GCC-7-1-kennt-die-Sprachfeatures-von-C-17-3701663.htmlhttps://gcc.gnu.org/https://www.heise.de/developer/artikel/C-17-Neuzugaenge-in-den-Bibliotheken-3457730.html

  • Cygwin fur Windows, Cygwinmingw-64Windows 10 Linux-SubsystemC++17 Features In Visual Studio 2017 Version 15.3 Preview

    Microsoft Imagine (fruher MSDNAA): VisualStudio 201x fur Windows

    38

    http://www.cygwin.com/https://de.m.wikipedia.org/wiki/Cygwinhttps://mingw-w64.org/doku.phphttp://www.heise.de/newsticker/meldung/Hands-on-Das-neue-Linux-Subsystem-in-Windows-10-3163994.htmlhttps://blogs.msdn.microsoft.com/vcblog/2017/05/10/c17-features-in-vs-2017-3/http://www.zim.uni-wuppertal.de/dienste/software/lizenzen/MSDNAA/

  • Weitere Beispiele fur Softwaredisfunktionalitaten

    Ein sahniger Brocken(aus: Die Zeit vom 15.09.2005)

    Begleitet von groem Werberummel hat die NASA den Kometen Tempel1 beschos-sen. Nun zeigen die Daten: Getroffen hat sie gut, gelernt hat sie wenig.

    Auch wenn in den offiziellen Mitteilungen der NASA keine Rede davon ist - un-ter den versammelten Astronomen hat sich langst herumgesprochen, dass der Er-folg von Deep Impact nicht nur von aufgewirbeltem Feinstaub verdunkelt wurde.Ein Softwarefehler hat dazu gefuhrt, dass die ersten - und besten - Bilder desZusammenpralls im Datenspeicher des Begleitsateliten von spateren Aufnahmenuberschrieben wurden.

    Abbildung 0.2.: Bilder von Deep Impact

    Der vollstandige Artikel: http://www.zeit.de/2005/38/komet

    USV-Software legt Server lahm

    APC, Hersteller von unterbrechungsfreien Stromversorgungssystemen (USV), ratin einem Knowledgebase-Artikel dazu, alte Versionen der PowerChute BusinessEdition-Software 6.X umgehend durch die Version 7.X zu ersetzen.

    Die Software zur Steuerung unterbrechungsfreier Stromversorgungen und zumsicheren Server-Shutdown hat Probleme mit einem auslaufenden Java-Runtime-Zertifikat. Dies fuhrt dazu, dass die Windows-Server, auf denen die alte Versionlauft, zum Teil mehrere Stunden fur eine Ab- beziehungsweise Anmeldung benoti-gen. Die Dienste des Servers wie zum Beispiel Netzwerkfreigaben funktionierenallerdings trotz der Anmeldeprobleme weiterhin.

    (aus http://www.heise.de/newsticker/meldung/62344)

    39

    http://www.zeit.de/http://www.zeit.de/2005/38/komethttp://www.apc.com/index.cfmhttp://www.heise.de/newsticker/meldung/62344

  • Chaos an Hannovers Geldautomaten (05.10.2003 13:00 Uhr)

    Computerprobleme haben am Samstag alle 240 Geldautomaten der Sparkasse inder Stadt und Region Hannover lahm gelegt. Die Fusion der Stadt- und Kreisspar-kasse sollte am Wochenende auch technisch umgesetzt werden, sagte der Sprecherdes Geldinstituts, Stefan Becker. Beim Hochfahren eines Server habe sich einFehler eingeschlichen, so dass die Geldautomaten nicht mehr funktionierten. DieSparkasse offnete stadtdessen funf Filialen, damit Kunden etwa in EinkaufszonenBargeld abheben konnen.

    (aus: http://www.heise.de/newsticker/meldung/40834)

    THERAC 25

    Selten sind solch schadliche Vorfalle so gut dokumentiert worden wie im Fall des

    THERAC 25, eines computergestutzten Bestrahlungsgerates. Dabei handelt essich um ein Bestrahlungsgerat, welches in zwei

    Modi arbeitet: im

    X-Modus

    wird ein Elektronenstrahl von 25 Millionen Elektronen-Volt durch Beschu ei-ner Wolframscheibe in Rontgenstrahlen verwandelt; im

    E-Modus werden die

    Elektronen selbst, allerdingsweicher mit erheblich reduzierter Energie als Kor-

    puskelstrahlung erzeugt. Je nach therapeutischer Indikation wird die geeigneteStrahlungsart eingestellt; in beiden Fallen kann der Bestrahlungsverlauf, nach Mo-dus, Intensitat und Bewegungskurve der Strahlungsquelle, mit einem Bildschirm-

    Menu eingegeben werden.

    Als mehrere Patienten berichteten, sie hatten bei Behandlungsbeginn das Gefuhlgehabt,

    ein heier Strahl durchdringe sie, wurde dies vom Hersteller als

    unmoglich zuruckgewiesen. Erst nach dem Tod zweier Patienten sowie massi-ven Verbrennungen bei weiteren Personen kam heraus, da neben dem X- sowie E-Modus mit niedriger Elektronenintensitat infolge Programmierfehler ein unzulassi-ger dritter Zustand auftrat, namlich direkt wirkende, 25 Millionen Elektronen-Volt

    heie Elektronen.

    Dies geschah immer dann, wenn ein vorgegebenesBehandlungsmenu mittels

    Curser-Taste modifiziert wurde. Um aufwendige Umprogrammierung zu vermei-den, wollte der kanadische Hersteller die Benutzung der Curser-Taste verbietenbzw. diese ausbauen und die Tastenlucke mit Klebeband abdichten lassen! Es istzu befurchten, da der Fall

    THERAC 25 kein Einzelfall ist. Zumeist ist es man-

    gels entsprechender Vorsorge in computergesteuerten Medizingeraten schwerlichmoglich, schadliches Systemverhalten spater aufzuklaren.

    40

    http://www.heise.de/newsticker/meldung/40834

  • Berliner Magnetbahn

    Computer spielen in allen gesellschaftlichen Bereichen eine immer groere Rolle.Angesichts der von fehlerhafter Software ausgehenden Gefahr wird versucht, dieSicherheit von computergesteuerten Systemen so weit wie moglich zu garantieren.

    Softwarefehler: Kleine Ursache, groe WirkungFunf - Null, tippt der Operator in die Tastatur und erwartet, da die Magnetschwe-bebahn auf 50 Stundenkilometer beschleunigen wurde. Doch nichts geschah. Wie-der tippt er funf - null und verga diesmal nicht die

    Enter-Taste zu betatigen, mit

    der die Daten erst in den Rechner abgeschickt werden. Die insgesammt eingegebe-ne Tastenfolge

    funf - null - funf - null interpretiert der Rechner als Anweisung,

    auf unsinnige 5050 Stundenkilometer zu beschleunigen. Dies konnte die Bahn zwarnicht, aber immerhin wurde sie so schnell, da sie nicht mehr rechzeitig vor derStation gebremst werden konnte. Es kam zum Crasch mit Personenschaden sogeschehen vor zwei Jahren bei einer Probefahrt der Berliner M-Bahn.

    Vernunftigerweise hatte die den Computer steuernde Software die Fehlerhaftigkeitder Eingabe

    5050 erkennen mussen. Schon dieses Beispiel mangelnder Software

    zeigt, von welcher Bedeutung das richtige Verhalten von Computerprogrammensein kann. Nicht nur bei Astronauten, die mit softwaregesteuerten Raumfahren insAll starten, hangt heute Leben und Gesundheit von Software ab. Computerpro-gramme erfullen mittlerweile in vielen Bereichen sicherheitsrelevante Aufgaben.

    Elektronik-Fehler fuhrt zu Uberhitzung bei Volvo-PKW

    Kaum ein KFZ-Hersteller, der nicht mit Elektronik, Software und Hightech-Ausstattung das Autofahren komfortabler und die Wartung in der Werkstatt ein-facher machen will. Doch die Tucken der Technik lassen fur manchen Kunden denPKW zum IT-Sicherheitsrisiko werden. Nachdem vor kurzem erst Softwarefehlerbei Mercedes-Dieseln fur Aufsehen sorgten, konnen nun Defekte in der elektro-nischen Steuerung der Motorkuhlung bei Volvo-Personenwagen zur Uberhitzungfuhren.

    Der Fehler tritt bei den Modellen S60, S80, V70 und XC70 aus den Baujahren2000 und 2001 auf, erklarte Volvo, einzelne Modelle aus dem Jahr 1999 seienebenfalls betroffen. Die fehlerhaft arbeitende Elektronik hat Bosch an Volvogeliefert wer fur den Fehler, der vor allem bei langsamer Fahrt bei hohenAuentemperaturen zur Uberhitzung fuhren kann, verantwortlich ist, steht lautVolvo noch nicht fest. Insgesamt 460.000 Fahrzeuge weltweit ruft der schwedischeHersteller daher in die Werkstatten zuruck. Laut dpa erhalten in Deutschlandrund 40.000 Besitzer eines Volvo-PKW eine Aufforderung zum Werkstattbesuch der fur die Halter zumindest kostenlos bleibt.

    (aus: http://www.heise.de/newsticker/meldung/51019)

    41

    http://www.heise.de/newsticker/meldung/51019

  • The Patriot Missile

    The Patriot missile defense battery uses a 24 bit arithmetic which causes therepresentation of real time and velocities to incur roundoff errors; these errorsbecame substantial when the patriot battery ran for 8 or more consecutive hours.

    As part of the search and targeting procedure, the Patriot radar system computesa Range Gate that is used to track and attack the target. As the calculations ofreal time and velocities incur roundoff errors, the range gate shifts by substantialmargins, especially after 8 or more hours of continous run.

    The following data on the effect of extended run time on patriot operations fromAppendix II of the report would be of interest to numerical analysists anywhere.

    Hours Real

    Time

    (seconds)

    Calculated

    Time (seconds)Inaccuracy

    (seconds)Approximate

    Shift In Range

    Gate (meters)

    0 0 0 0 01 3600 3599.9966 .0034 78 28800 28799.9725 .0275 5520a 72000 71999.9313 .0687 13748 172800 172799.8352 .1648 33072 259200 259199.7528 .2472 494100b 360000 359999.6667 .3333* 687

    Tabelle 0.1.: Divergence in the Range Gate of a PATRIOT MISSILE

    a: continuous operation exceeding 20 hours-target outside range gateb: Alpha battery [at Dhahran] ran continuously for about 100 hours* corrected value [GAO report lists .3433]

    On Februrary 21, 1991 the Partiot Project Office send a message to all patriot sitesstating that very long run times could cause a shift in the range gate, resultingin the target being offset. However the message did not specify what constitutesvery long run times. According to the Army officials, they presumed that the userswould not run the batteries for such extended periods of time that the Patriotwould fail to track targets. Therefore, they did not think that more detailedguidance was required.

    The air fields and seaports of Dhahran were protected by six Patriot batteries.Alpha battery was to protect the Dhahran air base.On February 25, 1991, Alpha battery had been in operation for over 100 consecutivehours. That was the day an incomming Scud struck an Army barracks and killed28 American soldiers.

    42

  • On February 26, the next day, the modified software, which compensated for theinaccurated time calculation, arrived in Dhahran.

    Kontenabrufverfahren startet wegen Softwareproblemen als Provisori-um

    Das automatische Kontenabrufverfahren nach demGesetz zur Forderung der

    Steuerehrlichkeit, das ab dem 1. April die Abfrage der Kontostammdaten fureinige Behorden moglich macht, startet mit Anlaufproblemen. Sie liegen vor al-lem darin begrundet, dass die entsprechende Abfragesoftware der Stammdaten,die ab November 2003 zum Zwecke der Terroristenfahndung entwickelt wurde,nicht richtig skaliert. Diese Software wurde auf ca. 2000 Abfragen pro Tag durchdie Polizeifahnder ausgelegt. Mit mehr als taglichen 50.000 Abfragen, die von Fi-nanzamtern, Bafog- oder Sozialamtern ab dem 1. April erwartet werden, ist dieSoftware hoffnungslos uberfordert. Fur die 18 bis 20 Millionen Konten, die jahrlichnach dem Willen des Gesetzgebers gesucht werden sollen, wird derzeit eine volligneue Schnittstellenspezifikation entwickelt und ein komplett neues Programm ge-schrieben. Bis dieses Programm fur die automatische Abfrage durch die Sachbear-beiter fertig ist, muss die Abfrage wie bisher manuell erfolgen.

    Bei dieser manuellen Abfrage reichen Polizeibehorden und Strafverfolger ihreAnfragen auf Papier oder per Fax oder E-Mail bei der Bundesanstalt fur Finanz-dienstleistungsaufsicht (BaFin) ein und bekommen die gewunschten Kontodatenauf demselben Wege zuruck. Dieses Verfahren soll durch eine Suchmaske ersetztwerden, die jede Behorde aufrufen kann wenn die dahinter liegende Abfragesoft-ware die Datenmengen bewaltigen kann.

    (aus: http://www.heise.de/newsticker/meldung/58096)

    Buffer Overflow im Linux-Kernel

    Paul Starzetz von isec hat Details zu einer neuen Lucke im Linux-Kernel veroffent-licht, mit der ein Angreifer Programme mit Root-Rechten ausfuhren kann. Andersals bei vergangenen Veroffentlichungen von Starzetz, wurden die Hersteller aberoffenbar nicht vorab informiert, etwa uber die geschlossene Mailing-Liste Vendor-Sec. Nach seinen Angaben wurde die Linux-Community Veroffentlichungen ohneEmbargos von Distributoren bevorzugen. Um aber die Regeln der so genanntenResponsible Disclosure einzuhalten, veroffentlicht er diesmal keinen Exploit-Code.

    Der Fehler findet sich wieder einmal im Linux ELF-Binary-Loader, in demStarzetz in der Vergangenheit bereits mehrere Lucken aufdeckte. Diesmal ist einBuffer Overflow in der Funktion elf core dump schuld, der beim Aufruf einer

    43

    http://www.heise.de/newsticker/meldung/58096

  • weiteren Funktion (copy from user) mit einer negativen Langenangabe auftritt.Starzetz hat nach eigenen Angaben die Lucke bereits durch ein prapariertesELF-Binary demonstrieren konnen, das mit Kernel-Privilegien lief. Ein Proof-of-Concept-Programm ist seinem Advisory beigefugt, das aber nur den Kern desProblems demonstriert.

    (aus: http://www.heise.de/newsticker/meldung/59498)

    Auch Superhirne konnen irren - das Risiko Computer

    Lenkwaffen, Flugsteuerungen, Diagnosegerate, Verkehrsleitsysteme, Dateien,Produktions-Steuerung uberall hat der Computer das Kommando ubernommen.Doch nicht uberall gibt er die richtigen Befehle. Mancher Irrtum schon hattetodliche Folgen. Das Vertrauen in das elektronische Superhirn ist angeschlagen.

    Sollten US-Kriegsschiffe, die mit dem computergestutzten WaffensystemAegis

    ausgerustet sind, in Zukunft wieder in Spannungsgebieten kreuzen, werden dieverantwortlichen Offiziere dort mit der Angst leben, da sich die Ereignissedes 3. Juli 1988 wiederholen konnten: Damals folgte der Kapitan des Kreuzers

    Vincennes, von elektronischen Befehlen unter Entscheidungsdruck gesetzt,der Logik des Computers, dessen Abtastsystem ein Verkehrsflugzeug mit einerKampfmaschine verwechselte. Er gab den verhangnisvollen Befehl zum Abfeuernder Raketen. Alle 290 Insassen des iranischen Airbus kamen dabei ums Leben. ...

    Aus anderer Quelle:Auch der erste KI-Unfall, bei dem das

    kunstlich intelligente AEGIS-System

    des US-KreuzersVincennes im Sommer 1988 einen zivilen Airbus mit einem

    MIG-Militarjet verwechselte, durfte bei heutigem Kenntnisstand durch einenKonzeptfehler mitverursacht worden sein. Aus der

    Sicht des einzelnen AEGIS-

    Systems werden alle Signale, die auf einem Richtstrahl innerhalb einer 300Meilen umfassenden Uberwachungszone entdeckt werden, einem einzelnen Objektzugeordnet. So konnen ein Militar- und ein Zivil-Jet nur durch ein raumlichgetrenntes System unterschieden werden. Offenbar hat das AEGIS-System aberweder Inkonsistenzen der Daten (militarische und zivile Transponder-Kennung)noch die unvollstandige raumliche Auflosung dem verantwortlichen Kommandeurubermittelt, der im Vertrauen auf die Datenqualitat den Befehl zum Abschuvon fast 300 Zivilisten gab. Offensichtlich ist in Stresituationen eine menschlichePlausibilitatskontrolle nicht nur bei derart komplexen Systemen erschwert. Auseinem bis dahin fehlerfreien Funktionieren wird induktiv auf korrektes Verhaltenim Ernstfall geschlossen. Daher sind besondere Hinweise auf inkonsistente und

    44

    http://www.heise.de/newsticker/meldung/59498

  • unvollstandigeDatenlagen und gegebenenfalls Sperren gegen automatische

    Prozeduren zwingend erforderlich.

    Explosion der Ariane 5

    http://www.ima.umn.edu/ arnold/disasters/ariane5rep.html

    Neueste Risikoinformationen/Softwareprobleme

    ... findet man unter: http://catless.ncl.ac.uk/Risks:

    Abbildung 0.3.: http://catless.ncl.ac.uk/Risks/22.92.html

    Codevertrage / Contracting:Design by contractAn introduction to Design by ContractContracts programming for C++20

    45

    http://www.ima.umn.edu/~arnold/disasters/ariane5rep.htmlhttp://catless.ncl.ac.uk/Riskshttp://de.wikipedia.org/wiki/Design_by_contracthttps://archive.eiffel.com/doc/manuals/technology/contract/https://www.arcos.inf.uc3m.es/jdgarcia/wp-content/uploads/sites/9/2017/04/contracts.pdf

  • 1. Softwarequalitat

    1.1. Komponententests/Unit-Tests

    Modultest/Komponententest/UnittestUnitTest-Suites

    CxxTest unit testing framework for C++: User GuideTest exampleAssert-Makros

    Eclipse plug-in for C++ unit testing with CUTECUTE users guideCUTE example: string reverse(), StringUtils.h, StringUtils.cpp, CUTE-Test in Aktion

    JUnit

    Eclipse JUnit 5 SupportJava Test Annotation

    C++11 attribute specifier sequence

    D programming language Unit Tests

    Python unittest Unit testing framework

    Extreme programmingtest-driven development (TDD)

    47

    http://de.wikipedia.org/wiki/Modultesthttps://visualstudiomagazine.com/articles/2013/03/08/unit-testing-with-c-plus-plus.aspx?m=2http://cxxtest.com/guide.pdfhttp://cxxtest.com/guide.html#_a_first_examplehttp://cxxtest.com/guide.html#testAssertionshttp://cute-test.com/http://cute-test.com/projects/cute/wiki/User_Guidehttp://www2.math.uni-wuppertal.de/~buhl/teach/exercises/Seminar16/CUTEStringReverse.pdfhttp://www2.math.uni-wuppertal.de/~buhl/teach/exercises/Seminar16/StringUtils.hhttp://www2.math.uni-wuppertal.de/~buhl/teach/exercises/Seminar16/StringUtils.cpphttp://www2.math.uni-wuppertal.de/~buhl/teach/exercises/Seminar16/stringReverseTest.jpghttp://junit.sourceforge.net/javadoc/org/junit/package-summary.htmlhttps://www.eclipse.org/eclipse/news/4.7.1a/#junit-5-supporthttps://www.java2novice.com/junit-examples/junit-annotations/http://en.cppreference.com/w/cpp/language/attributeshttp://dlang.org/unittest.htmlhttps://docs.python.org/3/library/unittest.html#module-unittesthttp://en.wikipedia.org/wiki/Unit_testing#Extreme_programminghttps://de.wikipedia.org/wiki/Testgetriebene_Entwicklung

  • 1.2. Refactoring

    RefactoringRefactoring in Eclipse CDTRefactoring 2004, 2008, 2011

    1.3. Ariane 5 Failure - Full Report

    ARIANE 5, Flight 501 Failure, Report by the Inquiry Board

    The Explosion of the Ariane 5:

    The internal SRI* software exception was caused during execution of a data conversionfrom 64-bit floating point to 16-bit signed integer value. The floating point number whichwas converted had a value greater than what could be represented by a 16-bit signedinteger.Ariane 5: 16 bit signed integer overflowAda Programming/ExceptionsInteger overflow

    1.4. Bug plotzlicher unbeabsichtigter

    Automobilbeschleunigung, ...

    Toyota uncontrolled acceleration

    Toyota vehicle recallplotzliche unbeabsichtigte AutomobilbeschleunigungSmartes PedalNASA-GutachtenHalt Toyota Blackbox-Daten zuruck?US-Gericht: Motorelektronik von Toyota schuld an UnfallToyota Case: Single Bit Flip That Killed

    48

    https://de.wikipedia.org/wiki/Refactoringhttp://stackoverflow.com/questions/6832825/additional-refactoring-for-eclipse-cdthttps://wiki.eclipse.org/images/a/a1/C%2B%2B_Refactoring_-_Now_for_Real.pdfhttp://www.rvs.uni-bielefeld.de/publications/Incidents/DOCS/ComAndRep/Ariane/Esa/ariane5/COPY/ariane5rep.htmlhttp://www-users.math.umn.edu/~arnold/disasters/ariane.htmlhttps://books.google.de/books?id=eszSE5VGvuMC&pg=PA147&lpg=PA147&dq=ada+64+bit+floating+to+16+bit+signed+overflow&source=bl&ots=XA01kAI-XK&sig=58UySHUXoIj5KfMo-LvJ0-aNrCQ&hl=de&sa=X&ved=0ahUKEwj7p-jg-fPXAhVMsBQKHXuJAuQQ6AEIdTAI#v=onepage&q=ada%2064%20bit%20floating%20to%2016%20bit%20signed%20overflow&f=falsehttps://en.wikibooks.org/wiki/Ada_Programming/Exceptionshttps://en.wikipedia.org/wiki/Integer_overflowhttp://catless.ncl.ac.uk/Risks/25.82.html#subj1.1http://catless.ncl.ac.uk/Risks/25.85.html#subj5http://en.wikipedia.org/wiki/Sudden_unintended_acceleration#Reported_incidentshttp://www.heise.de/newsticker/meldung/Smartes-Pedal-soll-ausgebrochene-Toyotas-stoppen-954551.htmlhttp://www.heise.de/autos/artikel/Teure-Genugtuung-NASA-Gutachten-entlastet-Toyota-1186338.html?artikelseite=2http://www.heise.de/autos/artikel/Haelt-Toyota-Blackbox-Daten-zurueck-953789.htmlhttp://www.heise.de/newsticker/meldung/US-Gericht-Motorelektronik-von-Toyota-schuld-an-Unfall-2036380.htmlhttp://www.eetimes.com/document.asp?doc_id=1319903&print=yes

  • Aktuelle RuckrufaktionProbleme bei der Airbag-Software Audi ruft 850.000 A4 zuruck

    Fehlende HochverfugbarkeitNotrufnummer wegen Softwarebug nicht erreichbarGrostorung bei der TelekomDSL-Grostorung: 100.000 Betroffene auch in Grobritannien

    1.5. cppcheck CodAn-Tool

    Cppcheck A tool for static C/C++ code analysis (aktuelle Version: 1.81)

    Download und Installation von cppcheck (aktuelle Version: 1.70) unter Opensuse Leap42.2:

    49

    http://www.tagesschau.de/wirtschaft/audi-rueckruf-101.htmlhttp://catless.ncl.ac.uk/Risks/28.33.html#subj9http://www.heise.de/newsticker/meldung/Grossstoerung-bei-der-Telekom-Angreifer-nutzten-Luecke-und-Botnetz-Code-3507088.htmlhttps://www.heise.de/newsticker/meldung/DSL-Grossstoerung-100-000-Betroffene-auch-in-Grossbritannien-3538431.htmlhttp://cppcheck.sourceforge.net/

  • cppcheck in Aktion:

    Siehe auch cppcheclipse auf Seite 37.

    50

  • 1.6. Exceptions/Trap/Ausnahmebehandlung

    AusnahmebehandlungException handlingException safetyCoding by exception

    Java:

    $ Exception in thread Thread0 java . lang . Nul lPo interExcept ionat

    org . e c l i p s e . u i . i n t e r n a l . i d e . IDEWorkbenchPlugin$1 . run ( IDEWorkbenchPlugin .java : 3 5 6 )

    at org . e c l i p s e . swt . widgets . Display . t imerProc ( Display . java : 5171 )at org . e c l i p s e . equinox . launcher . JNIBridge . takedown splash ( Native

    Method)at

    org . e c l i p s e . equinox . launcher . JNIBridge . takeDownSplash ( JNIBridge . java : 1 7 0 )at org . e c l i p s e . equinox . launcher . Main . takeDownSplash (Main . java

    : 2217 )at org . e c l i p s e . equinox . launcher . Main$SplashHandler . run (Main . java

    : 1 1 5 ). . .

    Java Exception HierarchyException HandlingExceptionsHow to throw exception in java with exampleExceptions in JavaHow to Specify and Handle Exceptions in JavaDo you (really) write exception safe code?Java Exception Interview Questions and Answers

    C++:

    std::exceptionC++ Exception HandlingExceptions and Error HandlingException Safety: Concepts and TechniquesException handling mistakes and how to avoid them.Katastrophenschutz mit try und catchExceptions and Error HandlingHow to free memory in try-catch blocks?Creating custom exceptions in C++

    51

    https://de.wikipedia.org/wiki/Ausnahmebehandlunghttps://en.wikipedia.org/wiki/Exception_handlinghttps://en.wikipedia.org/wiki/Exception_safetyhttps://en.wikipedia.org/wiki/Coding_by_exceptionhttps://www.programcreek.com/2009/02/diagram-for-hierarchy-of-exception-classes/https://java-tutorial.org/exception-handling.htmlhttp://www.inf.fu-berlin.de/lehre/SS12/ALP2/slides/V20_ALP2_Exceptions.pdfhttps://beginnersbook.com/2013/04/throw-in-java/https://www.javaworld.com/article/2076700/core-java/exceptions-in-java.htmlhttps://stackify.com/specify-handle-exceptions-java/https://stackoverflow.com/questions/1853243/do-you-really-write-exception-safe-codehttps://www.journaldev.com/2167/java-exception-interview-questions-and-answershttp://en.cppreference.com/w/cpp/error/exceptionhttps://www.tutorialspoint.com/cplusplus/cpp_exceptions_handling.htmhttps://isocpp.org/wiki/faq/exceptionshttp://stroustrup.com/except.pdfhttp://www.acodersjourney.com/2016/08/top-15-c-exception-handling-mistakes-avoid/http://www.willemer.de/informatik/cpp/exceptions.htmhttps://isocpp.org/wiki/faq/exceptionshttps://stackoverflow.com/questions/3048377/how-to-free-memory-in-try-catch-blockshttps://stackoverflow.com/questions/41753358/creating-custom-exceptions-in-c

  • 1.7. Spezifikation einer abstrakten Datenkapsel

    1.7.1. Axiomatische Spezifikation

    TYPESSTACK[X]

    FUNCTIONSempty: STACK[X] 9 BOOLEANnew: STACK[X]push: X x STACK[X] 9 STACK[X]pop: STACK[X] 9 STACK[X]top: STACK[X] 9 X

    PRECONDITIONSpre pop (s: STACK[X]) = (not empty(s))pre top (s: STACK[X]) = (not empty(s))

    AXIOMSfor all x:X, S : STACK[X]: empty(new())

    not empty (push(x,S))top (push(x,S))=xpop (push(x,S))=S

    Vollstandigkeit + Widerspruchsfreiheit (+ Unabhangigkeit)

    1.7.2. Beschreibende (denotationale) Spezifikation

    Queue = Qelem

    q0 = [ ]

    ENQUEUE (e : Qelem)ext wr q : Queuepost q =q y [e]

    DEQUEUE() e : Qelemext wr q : Queuepre q 6= [ ]post q = [e] y q

    ISEMPTY() r : Bext rd q : Queuepost r (len q = 0)

    mathematische Mo-dellierungmit Hilfe vonFolgen, Mengen, ...vergleiche VDM

    52

    http://en.wikipedia.org/wiki/Vienna_Development_Method

  • Aktuellere VDM-Versionen benutzen von Programmierern besser nutzbare reineASCII/Unicode VDM-Versionen ohne Formelschreibweise: Stackspezifikation

    Overture

    Abstract data typeExample: Associative arrayAbstrakter Datentyp

    53

    http://overturetool.org/download/examples/VDM++/stackPP/index.htmlhttp://www.overturetool.org/https://en.wikipedia.org/wiki/Abstract_data_typehttps://en.wikipedia.org/wiki/Associative_arrayhttps://de.wikipedia.org/wiki/Abstrakter_Datentyp

  • Heute wird alternativ als geeignete denotationelle Spezifikationssprache die OCL immerbeliebter:

    Listing 1.1: OCL-Spezifikation Datum

    context Datuminv tagGue l t ig : tag >= 1 and tag =1 and monat = 1600 and j ah r

  • 1.7.3. Spezifikation durch Codevertrage

    siehe SdV (Ubungsblatt 3, Aufgabe 2f.) und Rest dieser Veranstaltung.

    1.8. iContract (Java)

    iContract, Seite 25: BeispieliContract: Design by Contract in JavaiContract: Design by Contract in Java, FortsetzungiContract instrumentation and usage

    1.9. D contracts

    Contract ProgrammingContract programming

    Ein Beispiel:

    55

    http://informatik.karlheinz-hug.de/artikel/ForumWI01%20SdV.pdfhttp://informatik.karlheinz-hug.de/artikel/ForumWI01%20SdV.pdf#page=25https://www.javaworld.com/article/2074956/learn-java/icontract--design-by-contract-in-java.htmlhttps://www.javaworld.com/article/2074956/learn-java/icontract--design-by-contract-in-java.html?page=2https://john.cs.olemiss.edu/~hcc/softArch/notes/iContract/icontract-tools98usa.pdf#page=3https://dlang.org/spec/contracts.htmlhttps://tour.dlang.org/tour/en/gems/contract-programming

  • import std . s t d i o ;import std . math ;import std . conv ;import core . except ion ;import std . p ro ce s s ;import std . s t r i n g ;import std . path ;

    pure nothrow @safe bool with inEps i lonOf ( r e a l l e f t , r e a l r ight ,r e a l d e l t a ) {

    return f ab s ( l e f tr i g h t )=0.0) , Vorbedingung sqrtm v e r l e t z t

    ! ) ;}out ( r e s u l t ){ a s s e r t ( appoximatelyEqualTo(pow( r e su l t ,m) ,x

    , 2 . 0 ) ,Genauigkeit konnte n i ch t

    e r r e i c h t werden ! ) ;}body{

    i f ( x==0) return 0 ;r e a l approx = x/m;r e a l b e t t e r = approx (m1+x/pow( approx ,m) ) /m;while ( b e t t e r != approx ) {

    approx = be t t e r ;b e t t e r = approx (m1+x/pow( approx ,m) ) /m

    ;}return approx ;

    }

    pure nothrow @safe r e a l myown sqrt ( r e a l x )in { a s s e r t ( x >= 0 .0 , Argument i s t negat iv ! ) ;}out ( r e s u l t ) { a s s e r t ( appoximatelyEqualTo( r e s u l t r e su l t , x , 1 . 0 )

    ,Genauigkeit konnte n i ch t e r r e i c h t

    werden ! ) ;}

    56

  • body{r e a l xold , xi , r e s u l t ;i f ( x == 0 . 0 ) {

    r e s u l t = 0 . 0 ;} else {

    x i = x / 2 . 0 ;do{

    // w r i t e l n ( x i ) ;xold = x i ;x i = 0 .5 ( x i + x/ x i ) ;

    } while ( x i != xold ) ;r e s u l t = x i ;

    }return r e s u l t ;

    }

    / ! @mainpage 3dimensiona le Wuerfel date 10 . Februar 2013 ve r s i on 0 .9 Copyright Pub l i c Domain author HJB/

    / ! 3DWuerfel/

    class Wuerfel {

    private r e a l s e i t e ;

    public void Se i t e ( r e a l w)in { a s s e r t (w >= 0 .0 ) ; a s s e r t ( ! i s I n f i n i t y ( s e i t e ) ) ;}out{ a s s e r t ( s e i t e == w) ;}body{ s e i t e = w;}

    public r e a l S e i t e ( ) constout ( r e s u l t ) { a s s e r t ( r e s u l t == s e i t e ) ;}body{return s e i t e ; } ;

    this ( r e a l mySeite = 1 . 0 )in { a s s e r t ( mySeite >= 0 .0 ) ; a s s e r t ( ! i s I n f i n i t y ( s e i t e ) ) ;}

    57

  • out{ a s s e r t ( s e i t e==mySeite ) ;}body{

    this . s e i t e=mySeite ;}

    this ( ) {wr i t e l n ( Wuerfel d e s t r u i e r t !\n ) ;

    }

    / ! @invariant { s e i t e >= 0 && ! isNaN( s e i t e ) && ! i s I n f i n i t y ( s e i t e )

    }/const i n va r i an t ( ) {

    a s s e r t ( s e i t e >= 0 .0 ) ;a s s e r t ( ! isNaN ( s e i t e ) && ! i s I n f i n i t y ( s e i t e ) ) ;

    }

    ove r r i d e s t r i n g toSt r ing ( ) const {return t ex t ( Wuerfel ( , s e i t e , ; , Ober f laeche ( ) , ; ,

    Volumen ( ) , ; , Raumdiagonale ( ) , ) );

    }

    void verdoppleWuerfe l ( )// out{ a s s e r t ( approximatelyEqualTo (pow( o l d ( s e i t e ) ,3) ,pow(

    s e i t e , 3 ) ,600 .0) ) ;}// out { a s s e r t ( approximatelyEqualTo (pow( se i te@pre , 3 ) ,pow(

    s e i t e , 3 ) ,600 .0) ) ;body{

    r e a l old volumen = Volumen ( ) ;s e i t e = pow( 2 . 0 , 1 . 0 / 3 . 0 ) ;a s s e r t ( appoximatelyEqualTo(Volumen ( ) ,

    old volumen 2 . 0 , 600 . 0 ) ) ;}

    un i t t e s t {auto w = new Wuerfel ( ) ;a s s e r t (w. S e i t e == 1 . 0 ) ;r e a l old volumen = w. Volumen ( ) ;w. verdoppleWuerfe l ( ) ;a s s e r t ( appoximatelyEqualTo(w. Volumen ( ) , 2 . 0

    old volumen , 6 0 0 . 0 ) ) ;

    58

  • a s s e r t ( appoximatelyEqualTo(w. Ober f laeche ( ),9 .52440631180919723957 ,1 .00) ) ;

    a s s e r t ( appoximatelyEqualTo(w. Volumen ( ) , 2 . 0 , 6 0 0 . 0 ) ) ;a s s e r t ( appoximatelyEqualTo(w. Raumdiagonale ( )

    ,2 .1822472719434427256 ,1 .0 ) ) ;

    // w r i t e f l n (%1.20 f ,w. Raumdiagonale ( ) ) ;

    w = new Wuerfel ( 2 . 1 ) ;a s s e r t ( appoximatelyEqualTo(w. Ober f laeche ( ) , 2 6 . 4 6 , 2 . 0 0 ) )

    ;a s s e r t ( appoximatelyEqualTo(w. Volumen ( ) , 9 . 2 6 1 , 2 . 0 ) ) ;a s s e r t ( appoximatelyEqualTo(w. Raumdiagonale ( )

    ,3 .6373066958946421055 ,1 .0 ) ) ;

    // w r i t e f l n (%1.20 f ,w. Raumdiagonale ( ) ) ;}

    r e a l Ober f laeche ( ) constout ( r e s u l t ){

    a s s e r t ( appoximatelyEqualTo( r e su l t , 6 . 0 s e i t e s e i t e ,1 . 0 ) ) ;

    } body {return 6 . 0 pow( s e i t e , 2 ) ;

    }

    r e a l Volumen ( ) constout ( r e s u l t ) {

    a s s e r t ( appoximatelyEqualTo( r e su l t , s e i t e s e i t e s e i t e , 1 . 0 ) ) ;} body {

    return pow( s e i t e , 3 ) ;}

    r e a l Raumdiagonale ( ) constout ( r e s u l t ) {

    a s s e r t ( appoximatelyEqualTo( r e su l t , s e i t e myown sqrt ( 3 . 0 ), 6 0 0 . 0 ) ) ;

    } body {return s e i t e s q r t ( 3 . 0 ) ;

    }}

    int main ( char [ ] [ ] a rg s ){

    59

  • try{wr i t e l n ( Tes t l au f Wuerfel :\n ) ;

    auto w1= new Wuerfel ( ) ;w r i t e l n (w1 . S e i t e ) ;w r i t e l n (w1) ; wr i t e l n ( ) ;

    w1 . verdoppleWuerfe l ( ) ;w r i t e l n (w1 . S e i t e ) ;w r i t e l n (w1) ; wr i t e l n ( ) ;

    w1 . S e i t e =2.1 ;wr i t e l n (w1 . S e i t e ) ;w r i t e l n (w1) ; wr i t e l n ( ) ;

    w r i t e l n (myown sqrt ( 3 . 0 ) ) ; w r i t e l n ( ) ;

    w r i t e l n ( sqrtm (512 . 0 , 9 ) ) ;w r i t e l n ( sqrtm (0 .000001 , 6 ) ) ;// w r i t e l n ( sqrtm (1.0 ,2) ) ;wr i t e l n ( sqrtm ( 0 . 0 , 3 ) ) ; w r i t e l n ( ) ;

    w r i t e l n ( r e a l . ep s i l on , , 600 .0 r e a l . e p s i l o n ) ;w r i t e l n (double . e p s i l o n ) ; w r i t e l n ( ) ;

    } catch ( Asser tError e ){wr i t e l n ( Fehlerabbruch : ) ;w r i t e l n ( in Z e i l e , e . l i n e , von Datei ,

    s t r i pExtens i on ( e . f i l e ) , . d ) ;w r i t e l n ( Backtrace : ) ;w r i t e l n ( e ) ;auto f i l e = st r ipExtens i on (baseName ( e . f i l e ) ) ;auto f i l ename = s r c / f i l e . d ;system ( emacs + to ! s t r i n g ( e . l i n e )

    f i l ename & ) ;}

    wr i t e l n ( Programm endet . ) ;return 0 ;

    }

    60

  • 1.10. Prinzipien der ordnungsgemaen

    Programmerstellung

    1. Konstruktive Voraussicht und methodische Restriktion

    2. Strukturierung

    3. C++/JAVA Modularisierung

    4. Lokalitat

    5. Integrierte Dokumentation

    6. Standardisierung

    7. Funktionale und informelle Bindung

    8. Schmale Datenkopplung

    9. Vollstandige Schnittstellenspezifikation

    10. Lineare Kontrollstrukturen

    11. Verbalisierung

    1.11. sanitize-Optionen in gcc 5

    GCC 5 Release Series Changes, New Features and Fixes:UndefinedBehaviorSanitizer gained a few new sanitization options:

    -fsanitize=float-divide-by-zero: detect floating-point division by zero;

    -fsanitize=float-cast-overflow: check that the result of floating-point type to integerconversions do not overflow;

    -fsanitize=bounds: enable instrumentation of array bounds and detect out-of-bounds accesses;

    -fsanitize=alignment: enable alignment checking, detect various misaligned objects;

    -fsanitize=object-size: enable object size checking, detect various out-of-boundsaccesses.

    GCC 5.1 mit Offloading und Cilk-Plus-Support erschienen

    61

    http://en.wikipedia.org/wiki/Structured_programminghttp://en.wikipedia.org/wiki/C%2B%2B11#Features_originally_planned_but_removed_or_not_includedhttps://www.heise.de/developer/artikel/Modulare-Java-Zukunft-Das-Java-Platform-Module-System-erklaert-3700766.html?seite=allhttps://gcc.gnu.org/gcc-5/changes.htmlhttp://www.heise.de/developer/meldung/GCC-5-1-mit-Offloading-und-Cilk-Plus-Support-erschienen-2616912.html

  • 1.12. Debug-Hilfspakete in OpenSuse

    1.12.1. debuginfo, debugsource in OpenSUSE

    62

  • 63

  • 1.12.2. Umstellung auf projektspezifische Codechecks

    Abstellen der shared-Einstellung:

    64

  • Einschalten der projektspezifischen Einstallungen:

    65

  • ... und auch der Code-Checker kennt den C++-Dialekt:

    66

  • 1.13. Modularisierung

    1.13.1. Prinzipien der Moduarisierung

    1. Module sollten syntaktischen Einheiten der Programmiersprache entsprechen.

    2. Module sollten mit moglichst wenigen anderen Modulenkommunizie-

    ren.

    3.Kommunizierende Module sollten so wenig wie moglich Informationen (Da-ten) austauschen.

    4. Jeder Datentausch zweierkommunizierender Module mu offensichtlich in

    der Modulspezifikation (und nicht indirekt) kenntlich gemacht werden.

    5. Alle Daten eines Moduls sollten nur diesem bekannt sein (auer im Falle einergezielten Exportierung an moglichst wenige Nachbarmodule).

    6. Ein Modul sollte abgeschlossen und offen sein.

    1.13.2. Typen der Modularisierung

    1. modulare Zerlegbarkeit (z.B. Top-Down-Design)

    2. modulare Zusammenfugbarkeit (z.B. UNIX-Filter)

    3. modulare Verstandlichkeit (d.h. jede Modulbeschreibung selbsterklarend)

    4. modulareStetigkeit

    Kleine Spezifikationsanderungen wirken sich nur in wenigen Modulen aus.(Z.B. dyn. Felder, symbolische Konstanten, ...)

    5. modularerSchutz

    Fehler/Ausnahmebedingungen bleiben in ihrer Auswirkung auf nur wenigeModule beschrankt. (Z.B. direkte Konsistenzuberprufung von Tastatureinga-ben, ...)

    67

  • Module in C++:// F i l e 1 . cpp :export Lib : // Module d e f i n i t i o n header .

    // Must precede a l l d e c l a r a t i o n s .import std ;

    public :namespace N {

    struct S {S ( ) { std : : cout

  • 1.14. Naturlichsprachige Codevertrage (Kommentare

    und Verbalisierung)

    iOS-11-Datumsfehler ... (wieder um immer wieder)iPhones sturzen ab

    1.14.1. Fallstricke umgangssprachlicher Spezifikation

    Informelle Beschreibung: Auf einem Parkplatz stehen PKWs und Motorader.Zusammen seien es n Fahrzeuge mit insgesamt m Radern. Bestimme die Anzahl P derPKWs.(Uberlegen Sie sich Vorbedingungen und Nachbedingungen der Softwarelosung diesesProblems.)

    Losung: Sei

    P := Anzahl der PKWsM := Anzahl der Motorader

    {

    P +M = n4P + 2M = m

    }

    {

    M = n PP = m2n

    2

    }

    {

    M = 4nm2

    P = m2n2

    }

    Algorithmus:

    M = (4 * n - m) / 2;

    P = (m - 2 * n) / 2;

    std::cout

  • anzufertigen.

    Besser ist also:Eingabe: m {0, 1, ..., numeric_limits::max() },

    n {0, 1, ..., numeric_limits::max() / 2}

    oder sogar n {0, 1, ..., numeric_limits::max() / 4},will man M wirklich mittels

    M = (4 * n - m) / 2; statt dem weniger haufig zu nicht

    erkannten Overflows furendenM = (2 * n - m / 2); in der Implementierung be-

    rechnen.Vorbedingungen: m gerade, 2n m 4n

    Ausgabe: P {0, 1, ..., numeric_limits::max() }, falls die Nachbedingungerfullt ist (sonst

    keine Losung)

    Nachbedingung: Ein (P,M) {0, 1, ..., numeric_limits::max() }2 mit

    P +M = n4P + 2M = m

    Problems with natural languageCan you write an unambiguous specification in a natural language like English?

    Is Software Design is a Trial and Error Approach

    70

    http://www.cs.st-andrews.ac.uk/~ifs/Books/SE9/Web/Requirements/NL-problems.htmlhttp://programmers.stackexchange.com/questions/106760/can-you-write-an-unambiguous-specification-in-a-natural-language-like-englishhttps://stackoverflow.com/questions/1467204/software-design-is-trial-and-error-approach-how-true-is-this-statement

  • 1.15. Codevertrage

    1.15.1. REQUIRE(), ENSURE(), ID() und invariant()

    genaue Spezifikation der Methoden des Moduls:

    Vorbedingungen (preconditions) einer Methode sind Bedingungen, die vordem Aufruf einer Methode erfullt sein mussen, damit sie ausfuhrbar ist. Vor-bedingungen sind boolsche Ausdrucke uber den Abfragen des Moduls undden Parametern der Methode.

    Nachbedingungen(postconditions) einer Methode sind Bedingungen, dienach dem Aufruf einer Methode erfullt sind; sie beschreiben, welches Ergebnisein Methodenaufruf liefert oder welchen Effekt er erzielt. Nachbedingungensind boolsche Ausdrucke uber den Abfragen des Moduls und den Parame-tern der Methode, erweitert um ein Gedachniskonstrukt, das die Werte vonAusdrucken vor dem Methodenaufruf liefert. Im Einzelnen:

    Spezifikation des Funktionsergebnisses

    genaue Spezifikation der Werte der Referenz- und der dereferenziertenPointer-Paramter nach Beendigung der Methode

    Spezifikation der Werte aller Attribute des Moduls nach Beendigung derMethode (haufig werden hier nicht einzeln genannte Attribute als nichtverandert angenommen)

    Definition der erlaubten Stati (Werte aller Attribute) des Moduls zu jedem (beob-achtbaren) Zeitpunkt zur Laufzeit des Moduls.

    Sie werden durch Invarianten beschrieben. Invarianten eines Moduls sind allge-meine unveranderliche Konsistenzbedingungen an den Zustand des Moduls, dievor und nach dem Aufruf jeder (offentlichen) Methode gelten. Formal sind Inva-rianten boolsche Ausdrucke uber den Abfragen des Moduls; inhaltlich konnen siez.B. Geschaftsregeln (business rules) ausdrucken.

    (vergleiche: http://informatik.karlheinz-hug.de/artikel/ForumWI01%20SdV.pdf)

    71

    http://informatik.karlheinz-hug.de/artikel/ForumWI01%20SdV.pdf

  • Ein Beispiel in C++ mit Hilfe von Nana:#define EIFFEL CHECK CHECK ALL#include #include #include < e i f f e l . h>#include . . .void qu i ck so r t (double v [ ] , int l , int h){

    REQUIRE( l

  • Auswahl der Uberprufungslevel durch:#define EIFFEL DOEND#ifndef EIFFEL CHECK#define EIFFEL CHECK CHECK ALL// Makros CHECK() und f o l g ende// CHECK LOOP Makros INVARIANT() und f o l g ende// CHECK INVARIANT Methode invar i an t ( ) und f o l g ende// CHECKENSURE Nachbedingungen und f o l g ende// CHECK REQUIRE Vorgedingungen// CHECKNO#endif#include e i f f e l . h#include nana . h

    Zum nana-Manual

    Contracts programming for C++20 Current proposal status:

    Siehe Seite 6 unten.

    73

    http://www2.math.uni-wuppertal.de/~buhl/teach/exercises/PbC0506/nana.pdfhttps://www.arcos.inf.uc3m.es/jdgarcia/wp-content/uploads/sites/9/2017/04/contracts.pdf

  • 1.15.2. Klassifikation der Klassenmethoden gema SdV

    const-Methoden (Abfragen/Queries/Observatoren/Getter) teilt man in wesentli-che und abgeleitete solche ein.

    Die wesentlichen Observatoren erlauben eine vollstandige Spezifizierung des Zu-stands eines Klassenexemplars.

    Sie (und nur sie) werden nicht durch Nachbedingungen spezifiziert. Sie dienenvielmehr dazu, abgeleitete Observatoren und Modifikatoren (das sind nicht-const-Methoden) in ihren Nachbedingungen naher zu bestimmen.

    Dazu werden die abgeleiteten Observatoren durch eine Nachbedingung unter Be-nutzung einer oder mehrerer wesentlicher Observatoren spezifiziert.

    Modifikatoren werden durch eine Nachbedingung unter Benutzung aller wesentli-cher Observatoren spezifiziert, um den exakten Zustand des Exemplars am Endedes Modifikatoraufrufs anzugeben.

    Verzichte (evtl.) in Nachbedingungen von Modifikatoren darauf, explizit zu spezi-fizieren, was sich nicht andert (in der Annahme, dass alles nicht explizit genannteals ungeandert zu gelten hat). Leider ist nicht immer klar, was ungeandert zu be-deuten hat: Mindestens dann sollten Frameregeln (Rahmenbedingungen) explizitspezifizieren, was nach Aufruf des Modifikators gleich ist wie vorher.

    Explizite Spezifikation aller Rahmenbedingungen konnen bei programminternerUberprufung der Nachbedingungen fehlerhafte Implementierungen aufdecken!

    Schreibe fur jede Methode eine Vorbedingung mit Hilfe von

    Abfragen und

    Bedingungen an Methodenparameter.

    Hier (bei den Vorbedingungen) durfen auch abgeleitete Abfragen, die eventuelleffizienter sein konnen als eine sonst notige Kombination mehrerer wesentlicherAbfragen, benutzt werden.

    Sorge dafur, dass bei Erfulltsein der Vorbedingungen auf jeden Fall die Nachbe-dingungen ebenfalls erfullt sind (oder in Ausnahmefallen eine Exceptionausgelost wird).

    Sorge dafur, dass die Abfragen in Vorbedingungen effizient berechnet werden (evtl.durch Hinzufugen weiterer effizienter abgeleiteter Abfragen). Vergesse nicht, dieevtl. hinzugefugten neuen abgeleiteten Abfragen durch Nachbedingungen (undVorbedingungen) zu spezifizieren.

    Nutze Invarianten um die Abhangigkeit von Abfragen zu spezifizieren (Konsistenz-beziehungen).

    74

  • Untersuche alle Abfragen paarweise auf Redundanzen und formuliere solche expli-zit als Invarianten.

    Wann immer Abfrage-Ergebnisse oder Methoden-Parameter eingeschrankte Wer-tebereiche besitzen, formuliere dies explizit in Form von

    Vorbedingungen,

    Nachbedingungen

    oder

    Invarianten.

    Schreibe die Nachbedingungen von virtuellen (also uberschreibbaren) Methodenimmer in der Form

    Vorbedingung implies Nachbedingung

    (Ensure((!Vorbedingung) || Nachbedingung)), um die Redefinition in Kind-klassen konfliktfrei zu ermoglichen.

    75

  • 1.16. Der Sicherheits-Supergau Spectre/MeltdownMeltdown and Spectre Vulnerabilities in modern computers leak passwords and sensitive data

    Meltdown and Spectre: what we know about the vulnerabilities in CPUs?

    SpectreAttack, 3.1.2018, CVE-2017-5715, 5715/2017in OpenSuse fur AMD behoben, 4.1.2018

    MeltdownAttack, 3.1.2018, CVE-2017-5754, 5754/2017in OpenSuse Kernel Address Isolation behoben, 4.1.2018

    Windows 10 Patch KB4056892, 7.1.2018Windows-Prufwerkzeug, 1/2018Microsoft ...: Details zu Patches und Leistungseinbuen, 9.1.2018

    iOS 11.2.2, 8.1.2018

    Prozessorlucke: Auch Qualcomm-CPUs sind anfallig, 6.1.2018

    Die Sicherheitshinweise und Updates von HW- und SW-Herstellern, 8.1.2018

    Meltdown und Spectre sind ein Security-Supergau, 5.1.2018

    Meltdown und Spectre: Updaten, updaten, updaten, 5.1.2018

    Bug: Browser-Hersteller reagieren auf Meltdown und Spectre, 4.1.2018

    Intel-Chef stie hunderttausende Aktien ab, Borsenkurs sackt ab, 4.1.2018

    US-Senatoren fordern Prufung des Aktienverkaufs von Intel-Chef, 10.1.2018

    Intel patcht ab 2013 produzierte Prozessoren, bestatigt Performance-Auswirkung,9.1.2018

    Weies Haus: NSA wusste nichts von Computerchip-Schwachstelle, 6.1.2018

    De Maiziere will eigene Schlusseltechnologien starken, 5.1.2018

    Erste Klagen gegen Intel, Performanceprobleme kochen hoch, 5.1.2018

    FAQ Meltdown/Spectre

    ...

    76

    https://meltdownattack.com/https://andreafortuna.org/cybersecurity/meltdown-and-spectre-what-we-know-about-the-vulnerabilities-in-cpus/https://en.wikipedia.org/wiki/Spectre_(security_vulnerability)https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5715https://lists.opensuse.org/opensuse-security-announce/2018-01/msg00009.htmlhttps://de.wikipedia.org/wiki/Meltdown_(Sicherheitsl%C3%BCcke)https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5754http://lists.suse.com/pipermail/sle-security-updates/2018-January/003564.htmlhttps://www.heise.de/security/meldung/Meltdown-und-Spectre-Update-fuer-Windows-10-legt-einige-PCs-lahm-3935460.htmlhttps://www.heise.de/newsticker/meldung/Meltdown-und-Spectre-Microsoft-veroeffentlicht-Pruefwerkzeug-fuer-Prozessor-Sicherheitsluecken-3936310.htmlhttps://www.heise.de/newsticker/meldung/Microsoft-ueber-Meltdown-Spectre-Details-zu-Patches-und-Leistungseinbussen-3937462.htmlhttps://www.iphone-ticker.de/ios-11-2-2-verfuegbar-apple-stopft-spectre-sicherheitsluecke-121142/https://www.heise.de/newsticker/meldung/Prozessorluecke-Auch-Qualcomm-CPUs-sind-anfaellig-3935270.htmlhttps://www.heise.de/newsticker/meldung/Meltdown-und-Spectre-Die-Sicherheitshinweise-und-Updates-von-Hardware-und-Software-Herstellern-3936141.htmlhttps://www.heise.de/newsticker/meldung/Analyse-zur-Prozessorluecke-Meltdown-und-Spectre-sind-ein-Security-Supergau-3935124.html?seite=allhttp://www.zeit.de/digital/internet/2018-01/meltdown-sprectre-prozessoren-sicherheitsluecke-intel-smartphone-computer-datensicherheit-hackinghttps://www.heise.de/security/meldung/Prozessor-Bug-Browser-Hersteller-reagieren-auf-Meltdown-und-Spectre-3933043.htmlhttps://www.heise.de/newsticker/meldung/Prozessor-Bug-Intel-Chef-stiess-hunderttausende-Aktien-ab-Boersenkurs-sackt-ab-3932649.htmlhttps://www.heise.de/newsticker/meldung/Meltdown-und-Spectre-US-Senatoren-fordern-Pruefung-des-Aktienverkaufs-von-Intel-Chef-3937706.htmlhttps://www.heise.de/newsticker/meldung/Meltdown-und-Spectre-Intel-patcht-ab-2013-produzierte-Prozessoren-bestaetigt-Performance-Auswirkung-3936956.htmlhttps://www.heise.de/security/meldung/Weisses-Haus-NSA-wusste-nichts-von-Computerchip-Schwachstelle-3935329.htmlhttps://www.heise.de/newsticker/meldung/Prozessor-Luecken-Meltdown-und-Spectre-De-Maiziere-will-eigene-Schluesseltechnologien-staerken-3935037.htmlhttps://www.heise.de/newsticker/meldung/Meltdown-und-Spectre-Erste-Klagen-gegen-Intel-Performanceprobleme-kochen-hoch-3935493.htmlhttps://www.heise.de/newsticker/meldung/FAQ-zu-Meltdown-und-Spectre-Was-ist-passiert-bin-ich-betroffen-wie-kann-ich-mich-schuetzen-3938146.htmlhttps://www.heise.de/thema/Meltdown-und-Spectre

  • 77

  • 78

  • 1.17. Wiederverwendbarkeit in hoheren

    Programmiersprachen

    Vermeide es, das Rad immerwieder neu zu erfinden!

    1. Algorithmen (Programme) losen i. allg. eine Klasse von Problemen, die durchEingabewerte parametrisiert sind.Wiktionary: AlgorithmusEigenschaften eines Algorithmusnondeterminism in PrologNondeterministic algorithm

    2. Constraints: Unterbereichstypen, ...Constraints in ProgrammiersprachenWhy dont Java, C# and C++ have ranges?MODULA-2 subrange typesPascal/ADA-Subrange TypesA Subrange type for C++

    3. Unterprogramme (Funktionen, Prozeduren, Operatoren) losen eine Klasse vonProblemen: Gema dem Prinzip der methodischen Restriktion sind dabei dieeinzelnen Parameter jeweils Werte des Wertebereiches eines festen Typs.PrototypeDeklarationC functions without prototypesC and defining a function prototype with no parametersdeclaring functionsDescriptions of function semantics (Page 420)Problems with natural languageexceptions specificationexception classC++ std exception hierarchyFeatures removed or deprecated in C++11undefined/unspecified behavior (3.4.3f.) of C11Translation limits (5.2.4.1) of C11implementation limits (C++11)Limitations of Java language

    79

    http://de.wiktionary.org/wiki/Algorithmushttp://wiki.zum.de/Algorithmushttp://www.cs.sunysb.edu/~warren/xsbbook/node6.htmlhttp://en.wikipedia.org/wiki/Nondeterministic_algorithm http://de.wikipedia.org/wiki/Constraint#Constraints_in_Programmiersprachenhttp://stackoverflow.com/questions/491199/why-dont-java-c-sharp-and-c-have-rangeshttp://www.modula2.org/reference/subrangetypes.phphttp://courses.cs.vt.edu/~cs3304/Spring00/notes/Chapter-5/tsld017.htmhttp://www.russel.org.uk/stories/subrange.htmlhttp://en.wikipedia.org/wiki/Function_prototypehttp://de.wikibooks.org/wiki/C-Programmierung:_Funktionen#Prototypenhttp://stackoverflow.com/questions/2287164/the-behavior-of-a-c-compiler-with-old-styled-functions-without-prototypeshttp://stackoverflow.com/questions/18378993/c-and-defining-a-function-prototype-with-no-parametershttp://en.cppreference.com/w/cpp/language/functionhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3126.pdf#page=434https://ifs.host.cs.st-andrews.ac.uk/Books/SE9/Web/Requirements/NL-problems.htmlhttp://www.cplusplus.com/doc/tutorial/exceptions/http://www.cplusplus.com/reference/std/exception/exception/http://stdcxx.apache.org/doc/stdlibug/18-2.htmlhttp://en.wikipedia.org/wiki/C%2B%2B11#Features_removed_or_deprecatedhttp://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=22http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=43http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf#page=1210http://geekexplains.blogspot.de/2008/05/limitations-of-java-language.html

  • attributes, lambda expressions, =deleted, =default, overrides, final, type inference (auto), ...

    4. Unterprogramme mit konformen Feldparametern (in Pascal bzw. open-array-Parameter in Modula