Blatt 1 Flashcards
3 Gemeinsamkeiten und 3 Unterschiede zwischen Software Engineering und Programmierung
Unterschiede:
- In der Programmierung liegt der Fokus auf der Implementierung von Code, während das Software Engineering einen umfassenderen Ansatz verfolgt, der auch Konzeption, Design, Tests, Wartung und Management umfasst.
- Programmierung kann als Teil des Software Engineerings betrachtet werden, das wiederum eine Disziplin der Informatik ist.
- Software Engineering konzentriert sich auf die Entwicklung von Software im Rahmen größerer Projekte, während Programmierung oft eine einzelne Aktivität innerhalb dieses Entwicklungsprozesses ist.
Gemeinsamkeiten:
- Sowohl in der Programmierung als auch im Software Engineering ist das Schreiben von Code oft eine notwendige Aufgabe, um die entwickelten Konzepte und Entwürfe umzusetzen.
- In beiden Bereichen werden verschiedene Methoden, Techniken und Tools verwendet, um effiziente Lösungen zu entwickeln.
- Beide sind Teil der Informatik und stehen in enger Verbindung mit anderen Disziplinen wie Softwareentwicklung, Datenbanken und Algorithmen.
Entwurfsfehler bei softwareintensiven Systemen Mars Climate Orbiter
Der Grund, der zum Verlust der Sonde führte, war der Fakt, dass die Sonde sich ungeplant viel zu stark dem Mars näherte. Der Entwurfsfehler lag hierbei in der fehlerhaften Umrechnung der Einheiten - die NASA
berechnete den Impuls p im Internationalen Einheitensystem, während die Navigationssoftware (ausgestellt
durch Lockheed Martin) im imperialen System und der entsprechenden Impulseinheit ausgelegt war. Der Kurs der Sonde wurde aufgrund dessen mehrfach überkorrigiert, wodurch Letztere viel zu nah an den Mars herangeführt wurde.
Entwurfsfehler bei softwareintensiven Systemen LH 2904
Zum Zeitpunkt des Unglücks beinhaltete das für die damalige Zeit noch neue “Fly-By-Wire”-System der Airbus-A320-Familie einen Fehler in der Software, der ein manuelles Bremsen des Flugzeugs bei der Landung
erst ab einem auf das Fahrwerk wirkenden Gewicht von 12 Tonnen zuließ. Gleichzeitig ließen sich die Schubumkehr und die Störklappen (Spoilers) des Flugzeugs erst aktivieren, sobald die Reifen genügend
Drehmoment durch den Bodenkontakt besaßen, was jedoch aufgrund der Nassen Landebahn und dem daraus resultierenden Aquaplanings erst kurz vor Ende der Landebahn möglich war. Als Reaktion auf den
Unfall ließ Airbus den notwendige Aufsetzdruck des Fahrwerks für die Freigabe von Bremse, Störklappen und Schubumkehr von 12 auf 2 Tonnen senken.
Entwurfsfehler bei softwareintensiven Systemen Absturz der Ariane 5
Ursache für den Absturz war eine fehlerhafte Umrechnung von 64-Bit-Gleitkommazahlen in eine vorzeichenbehaftete 16-Bit-Ganzzahl. Aufgrund dessen kam es zu einem arithmetischen Überlauf (Overflow).
Dies führte zu einem Verlust von Lenk- und Lageinformationen, wodurch die Rakete fälschlicherweise davon ausging, vom Kurs abgekommen zu sein. Die “Korrektur” der Flugbahn führte aufgrund der zu hohen auf die Rakete wirkenden Kräfte letztlich dazu, dass diese zerbrach.
Entwurfsfehler bei softwareintensiven Systemen Therac-25
Der Therac-25 war berüchtigt für seine “Bugs” im System, wodurch Patientinnen und Patienten, welche sich einer Behandlung durch den Computer unterzogen, einige Male “verbrannt” wurden. Die Software wurde
durch den Hersteller auch nach den Ereignissen vorerst nicht sorgfältig überprüft. Im Vergleich zu seinen Vorgängern basierte der Therac-25 hauptsächlich auf Software, weswegen das Vernachlässigen der Sorgen
ein fataler Fehler war.
Was ist Software Engineering?
Software Engineering ist die Teildisziplin der Informatik, welche sich mit der Erarbeitung und Anwendung von Prinzipien, Methoden und Werkzeugen zur Entwicklung, zur Herstellung, zum Betrieb und zur Wartung von komplexen Softwaresystemen befasst.
Systems Engineering
Systems Engineering ist ein transdisziplinärer und integrativer Ansatz um komplexe technische Systeme erfolgreich zu entwickeln, zu betreiben und außer Betrieb zu nehmen. Dabei werden verschiedene Prinzipien und Konzepte angewendet und wissenschaftliche, technologische sowie Managementmethoden integriert.
Produktentwicklung
Bei dem Begriff “Produktentwicklung” handelt es sich um eine Produktstrategie, bei der
Produkte/Dienstleistungen erstellt/entwickelt werden und deren Qualität verbessert wird.
Software
Unter “Software” versteht man die nicht technisch-physikalischen Eigenschaften eines Computers. Dazu
gehören beispielsweise das Betriebssystem, Computerprogramme/Apps, etc.
Softwareintensives System
Ein softwareintensives System ist ein System aus Soft- und Hardware, in der Software die bedeutende und essentielle Rolle für Betrieb,
Funktionalität sowie Leistung spielt. Softwareintensive Systeme sind gekennzeichnet durch die Komplexität der Algorithmen, der Systemumgebung und des zeitabhängigen Verhaltens.
Methode
Innerhalb der Disziplin des Software Engineerings beschreibt der Begriff “Methode” eine Vorgehensweise, die nach einem gewissen Plan zielgerichtet erfolgt und welches für eine Vielzahl von Problemen zu einer sinnvollen Lösung führt. Diese Methoden können verschiedene Phasen der Softwareentwicklung abdecken, wie z. B. Anforderungsanalyse, Entwurf, Implementierung, Test und Wartung, und sie können verschiedene Techniken und Werkzeuge umfassen, um diese Phasen zu unterstützen.
Komplexität
Komplexität bezeichnet die Herausforderung, Software oder Softwaresysteme zu verstehen oder zu kontrollieren, weil sie viele Teile haben, die auf komplexe Weise miteinander verbunden sind, und ihr Verhalten oft schwer vorhersehbar ist.
Emergenz
Emergenz beschreibt das Phänomen, bei dem komplexe Systeme Eigenschaften, Muster oder Verhalten aufweisen, die auf der Ebene ihrer Bestandteile nicht vorhanden oder nicht unmittelbar vorhersehbar sind. Diese Systemeigenschaften entstehen durch die Wechselwirkungen der einzelnen Elemente in einem System.
System
Ein System ist eine Anordnung von Elementen, die gemeinsam ein Verhalten besitzen, die die Bestandteile nicht aufweisen. Es ist durch seine Systemgrenze von der Systemumgebung abgegrenzt, erfüllt einen definierten Zweck und besitzt eine vorgegebene Funktion.
Systemgrenze
Die “Systemgrenze” definiert den Bereich, der ein bestimmtes System von seiner Umgebung abgrenzt. Innerhalb dieser Grenze findet die Betrachtung und Analyse der Systemkomponenten und deren Interaktionen statt. Die Systemgrenze hilft dabei, den Fokus auf das spezifische System zu lenken und die Interaktionen mit seiner Umgebung zu identifizieren. Zudem hat das System einen definierten Zweck und eine vorgegebene Funktion, die durch diese Grenze bestimmt werden.