-
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