# Fragen
## Was sind geschaeftskritische Software?
Systeme fuer die wirtschaftliche Taetigkeit eines Unternehmens.
- (Produkte, Diensleistung)
## 1.1 Worin liegt die wirtschaftliche Bedeutung des Reengineering geschaeftskritischer Softwaresysteme?
- g.k.S sind entscheidend fuer wirtschaftliche Taetigkeit: Produktive, Dienstleistung
- Geschaeftsprozesse sind im Kern stabil. (z.B. Handel, Versicherungsprinzip)
- Diese Prozesse sind in der Regel komplexe Systeme, die bei der Entwicklung hohe Kosten haben, wo die Einnahmen mit der Zeit diese wieder ausgleichen.
- Z.B. kostet bedarf die Entwicklung einer Software Startkapital. Durch z.B. ein Abo wird mit der Zeit die Ertraege wieder reingeholt. (Amortisierungszeit wird vorrausgesetzt. aka. lange Nutzungsdauer!)
- Die oben genanten Punkte bieten daher eine hohe Stabilitaet und setzen eine lange Nutzungsdauer voraus.
---
- *Aber* Aenderungen (eher im Detail) koennen diese Stabilitaet gefaehrden:
- Zwar sind diese Geschaeftsmodelle an sich stabil und unveraendert, jedoch muessen kleine Aenderungen vorgenommen werden, weil sich die Umgebung aendert.
- Diese Aenderungen koennen sein:
- Optimierung der Geschaeftsmodelle.
- Oeffnung von Systemen z.B. fuers Web und externe Partner.
- Gesetzliche Rahmenbedingungen (Minijobs, Datenschutz, Vertragsform, Steuern)
- Organisationsaenderungen: Merges & Aquisationen
- "Eine Firma kauft die andere. Man moechte den Einkauf zusammenlegen; man meochte einen groesseren Markt bedienen"
- Aenderung der Technisches Platform (OS-Support, Browser, Hardware)
Konflikt: Hohe Stabilitaet, lange Nutzungsdauer vs Haeufige Aenderungen.
Falls nicht:
- Ohne diese Aenderungen sind so eine Software nicht mehr benutzbar.
- Die wirtschaftliche Bedeutung liegt darin, dass wenn man nicht schafft, diese Software an die sich veraendernde Umgebung anzupassen, dann ist die Software unbrauchbar.
**Spaeter**
"Wirtschaftlich ist Software-Reegineering "
## 1.2 Welche Rolle spielen Aenderungen fuer die Anwendbarkeit eines Softwaresystems?
- Umformuliert zu "Auswirkung von Aenderungen auf langfristige Nutzbarkeit"
- Die Systeme sind komplex. Sie sind gross und bestehen aus vielen Teilen. Sie haben folglich auch viele Abhaengigkeiten und viele Menschen sind involviert.
- An dieser Stelle hat Riebisch das Beispiel gebracht, dass Menschen eine Fehleranfaellig fuer 3% haben. Uebertragen auf die Software-entwicklung bedeutet es, dass auf 10'000 Lines of Code sind's 300 fehlerhafte Zeilen. Zusaetzlich, um Aenderungen/Features in einem komplexen System einzupflegen, wird umfassendes Wissen (Zusammenhaenge) ueber das System vorrausgesetzt.
- Mangelndes Wissen fuehrt also zu ungewuenschten Nebeneffekten (Bugs und Errors).
- Mit jeder "inkrementellen" Aenderungen ohne Restrukturierung des Systems *sinkt die Qualitaet durch Strukturverlust*. Dieser Strukturverlust hat Auswirkung auf die zukuenftigen Aenderungen Zum einen sind die Aenderungen notwendig, zum anderen gefaehrden diese Aenderungen die Nutzbarkeit. Es ist also ein Konflikt.
### Software-Wartung (Maintenance = Aufrechterhaltung) nach ANSI/IEEEE 729-1983:
- Veraendern einer Software nach der Freigabe (delivery). Es koennen 3 Gruende haben.
- Correct fault
- Improve performance
- To adapt the product to the changed environment.
Dann gibt es noch die Software-Revolution, welches als Gegensatz zu Software-Evolution gesehen wird. Da wird Software ddurch andere abgeloest.
Software Revolution ist also das Gegenteil von Evolution.
## 1.3 Software Wartung und Softare-Evolution
Evolution ist die Weiterentwicklung von Software zu einem 'hoeheren' Produkt. Revolution beschreibt dann das "Wegwerfen" bzw. Abloesung der Software durch eine neue Software.
Es gibt 4 Arten von Software-Wartung (Maintenance):
- Corrective
- Fehlerbehebung
- Perfective
- Verbesserung vom System, Performance, Sicherheit
- Preventive
- Vorbeugung vor zukuenftige Probleme
- Adaptive
- Anpassung der Software an die Umwelt.
Software-Wartung kostet Geld. In einer Grafik wird veranschaulicht, wie sich die Kosten von einem Software-Lebenszyklus sich zusammensetzen.
- Fuer die Phasen (Requirementanalyse, Designing und Implementation belaufen sich auf etwa 15%)
- Weitere 15% macht das Testen aus.
- Die restlichen 70% (!!!) gehen dann auf die Software-Wartung!
- Adaptive 2/3
- Corrective 1/6
- Anpassungen an die Umwelt 18%
## Erlaeutern Sie das Staged Model der Zustaende eines Softwaresystems!

Ist ein Phasenmodel/Diagramm.
- **Inital Development** umfasst alle Entwicklungsstufen (Anforderungsanalyse, Design, Implementierung und Testing) und Auslieferung.
- Jetzt werden die evolutionaere Entwicklungsschritte an der Software vorgenommen. Diese koennen sein: Erweiterung von Interfaces, API wird veraendert/verbessert und es kommen neue Funktionalitaeten hinzu. Das ist die Phase der **Evolution**.
- Mit der sich staendig wachsenden Software, ist die moeglicherweise vorhandene Software-Architektur nicht mehr die optimalste und deswegen mussen auch strukturelle Aenderungen vorgenommen werden. Umstrukturierungen von Software-System erfordert viel Knowhow und auch Aufwand und wird 'sparsam' eingesetzt. Irgendwann kommt es zu einem Punkt, an dem die Software nicht mehr wartbar ist durch mangelnde Strukturqualitaet. Mit der zunehmenden Strukturverlust sind Strukturanpassungen immer schwerer durchzufuehren. Es folgt letztendlich die Phase **Servicing**. In dieser Phase wird "gepatched" (uebersetzt: Flicken). Die Software wird nur noch notduerftig geflickt. Metapher: Alte Hose, Fahrradreifen. Es geklingt nicht mehr, eine stabile Version der Software zu ermoeglichen. Denn jeder Patch zieht eine Reihe von weiteren Fehlern mit sich. Irgendwann wird die Software nicht mehr weiterentwickelt. Die Software kann natuerlich weiterverwendet werden, jedoch nur so lange die Software nicht veraendert werden muss.
- **Phaseout** beschreibt den Prozess der Abschaffung der Software und Closedown ist das Ende des Softwarelebenszyklusses.
Fuer geschaeftskritische Software ist es daher essentiell, sich im Zustand "Evolution" aufzuhalten. Alles andere ist nicht nachhaltig und wirtschaftlich.
## Worin bestehen im Staged Model Unterschiede zwischen Evolutionaeren Aenderungen und Service-Patches? Geben Sie Beispiele an.
Evolutionaere Aenderungen beinhalten Strukturanpassungen. Die Software wird nachhaltig/stabil weiterentwickelt waehrend bei Services Patches keine Strukturanpassungen vorgenommen werden.