Parameter | Kursinformationen |
---|---|
Veranstaltung: | Vorlesung Softwareentwicklung |
Teil: | 1/27 |
Semester | @config.semester |
Hochschule: | @config.university |
Inhalte: | @comment |
Link auf den GitHub: | https://github.com/TUBAF-IfI-LiaScript/VL_Softwareentwicklung/blob/master/01_Software.md |
Autoren | @author |
Was ist Software, welche Abläufen kennzeichnen den zugehörigen Entwicklungsprozess?
00000000 48 69 65 72 20 69 73 74 20 65 69 6e 20 42 65 69 |Hier ist ein Bei|
00000010 73 70 69 65 6c 74 65 78 74 2e 20 44 65 72 20 48 |spieltext. Der H|
00000020 65 78 64 75 6d 70 20 69 73 74 20 61 75 66 20 64 |exdump ist auf d|
00000030 65 72 20 6c 69 6e 6b 65 6e 20 53 65 69 74 65 20 |er linken Seite |
00000040 7a 75 20 73 65 68 65 6e 2e 0a 0a 4e 65 75 65 20 |zu sehen...Neue |
00000050 5a 65 69 6c 65 6e 20 6f 64 65 72 20 41 62 73 e4 |Zeilen oder Absä|
00000060 74 7a 65 20 73 69 6e 64 20 64 61 6e 6e 20 61 75 |tze sind dann au|
00000070 63 68 20 22 5a 65 69 63 68 65 6e 22 20 6d 69 74 |ch "Zeichen" mit|
00000080 20 65 69 6e 65 6d 20 62 65 73 74 69 6d 6d 74 65 | einem bestimmte|
00000090 6e 0a 43 6f 64 65 2e 28 30 61 29 2e 2e 2e 0a 0a |n.Code.(0a).....|
Begriff | Definitionsansatz |
---|---|
Software als "Medium" | Software [ist] all das, was zum Funktionieren eines Computers notwendig, aber nicht Hardware ist. |
Software ist sinnlich nicht wahrnehmbar ... . Sie ist komplex und besteht aus umfangreichen Texten | |
Software als Ziel | Software macht den Computer nutzbar |
Software ermöglicht die Abbildung von Prozessen auf einem Rechner | |
Software als Ganzes | Dabei sind Computerprogramme nicht nur als Beschreibung der auszuführenden Funktionen ... Vereinbarung zur Nutzung, ... Dokumentationsinhalte. |
Software beschreibt die Umsetzung von Algorithmen, Datenstrukturen, Nutzerinterfaces usw. in Code, der auf einem Computer ausgeführt werden kann.
Ein Software-Lebenszyklus beschreibt den gesamten Prozess der Herstellung und des Betriebs Implementierung ausgehend von der kundenseitigen Problemstellung über die Realisierung und den Betrieb bis hin zur Ablösung der Software durch einen Nachfolger.
- Problemstellung
- Analyse Entwurf
- Implementierung
- Test
- Markteinführung
- Pflege/Wartung
Welche Querbeziehungen ("Während der Tests wird erkannt, dass die Implementierung Mängel aufweist.") zwischen den einzelnen Stufen sehen Sie?
Welche Definitionen ergeben sich daraus für den Entwicklungsprozess?
"Unter dem Begriff Softwareentwicklung versteht man die Konzeption und standardisierte Umsetzung von Softwareprojekten und die damit verbundenen Prozesse." [^Freund, S. 25]
... oder insbesondere auf große Projekte zielend
„Zielorientierte Bereitstellung und systematische Verwendung von Prinzipien, Methoden und Werkzeugen für die arbeitsteilige, ingenieurmäßige Entwicklung und Anwendung von umfangreichen Softwaresystemen.“ [^Balzert, S. 36]
Was heißt das, "ingenieurmäßig" oder "standardisiert"?
Gemäß ISO 9126 gibt es die sechs folgenden Qualitätsmerkmale für Softwareprodukte:
Nachfolger ISO 25010: Zusätzlich
- Kompatibilität
- Sicherheit
Die Norm kann als eine Art Checkliste verstanden werden.
{{0-1}}
Steigende Komplexität der Softwareprodukte ...
Projekt/Produkt | Lines of Code | Jahr |
---|---|---|
Unix v 1.0 | 10.000 | 1971 |
Win32/Smile Virus | 10.000 | 2002 |
Space shuttle | 400.000 | |
Windows 3.1 | 2.300.000 | 1992 |
HD DVD Player (XBox) | 4.500.000 | 2001 |
Firefox | 9.900.000 | 2010 |
Android | 12.000.000 | |
F-35 Flugzeug | 24.000.000 | 2013 |
62.000.000 | ||
Autonomes Fahrzeug | 100.000.000 |
Quelle unter anderem 2 und [^McCandless]
{{1-2}}
Und wann entsteht der Aufwand? Wann muss ein Team Kosten in die Entwicklung investieren?
Projektphase | Relativer Kosteanteil | |
---|---|---|
Spezifikation und Architekturentwurf | Entwicklung | 16% |
Detailentwurf und Kodierung | 8% | |
Test | 16% | |
Anpassung | Wartung | 12% |
Erweiterung und Verbesserung | 36% | |
Fehlerbehebung | 12% |
Zahlwerte aus einem Diagramm in 3
{{2-3}}
Merke: Die Entwicklung kleiner Programme unterscheidet sich von der Entwicklung großer Programme!
Kriterium | Kleine Programme | Große Programme |
---|---|---|
Zeilenzahl | bis zu ein paar 1000 Zeilen | Millionen von LOC |
Einsatz | "Eigengebrauch" | kommerzieller Einsatz von Dritten |
Anforderungsanalyse | vage Idee | präzise Spezifikation |
Vorgehensmodell | unstrukturiert | strukturierter Entwicklungsprozesse |
Test und Validierung | unter Realbedingungen am Endprodukt | Systematische Prüfstrategie |
Komplexität | Überschaubare Zahl von Komponenten, Abhängigkeiten usw. | Hohe Komplexität, explizite Organisation in Struktureinheiten und Modulen |
Dokumentation | Fehlt in der Regel | zwingend erforlderlich, permanente Pflege |
Planung und Organisation | Kaum Planung und Projektorganisation | zwingend erforderlich |
Darstellung entsprechen motiviert aus 4.
[^McCandless] David McCandless [https://informationisbeautiful.net/visualizations/million-lines-of-code/)] (https://informationisbeautiful.net/visualizations/million-lines-of-code/)
Die Zusammenfassung wurde durch die Ausführungen von 3 motiviert
-
Management
- Es wird mit der Codierung sofort angefangen.
- Eine Festlegung der Anforderungen/Qualitätsmerkmale fehlt
- Eine Abnahme der Phasenergebnisse erfolgt nicht
- Ein Vorgehensmodell fehlt, bzw. wird nicht verfolgt
- Die Schulung für die Software-Ersteller und -Anwender wird vernachlässigt oder als nicht notwendig angesehen
- Die Terminvorgaben sind unrealistisch und nicht koordiniert.
- Begriffe werden nicht definiert
-
Architektur
- Die Systemarchitektur ist nicht oder nur sehr umständlich erweiterbar (fehlende Datenkapselung, fehlende Modularität)
- Es wird ein unnützes Maß an Komplexität in den Entwurf integriert: "Es könnte doch sein, dass ..."
-
Entwicklungfluss
- Die Auswahl der Werkzeuge/Methoden ist unzureichend vorbereitet
- Es wird nicht systematisch bzw. unzureichend getestet.
- Standards und Richtlinien werden nicht beachtet.
-
Dokumentation
- Schlechte Namensvergabe wie z.B. File-, Klassen-, Methoden- und Variablennamen
- Die Dokumentation fehlt bzw. ist veraltet, unzureichend oder nicht adäquat
Ariane Jungfernflug
{{1-2}}
V88 war die Startnummer des Erstflugs der europäischen Schwerlast-Trägerrakete Ariane 5 am 4. Juni 1996. Die Rakete trug die Seriennummer 501. Der Flug endete etwa 40 Sekunden nach dem Start, als die Rakete nach einer Ausnahmesituation in der Software der Steuereinheit plötzlich vom Kurs abkam und sich kurz darauf selbst zerstörte. Vier Cluster-Forschungssatelliten zur Untersuchung des Erdmagnetfelds gingen dabei verloren (Schaden 290 Millionen Euro).
-- Overflow is correctly handled for the vertical component
L_M_BV_32 := TBD.T_ENTIER_16S((1.0 / C_M_LSB_BH) *
G_M_INFO_DERIVE(T_ALG.E_BH));
if L_M_BV_32 > 32767 then
P_M_DERIVE(T_ALG.E_BV) := 16#7FFF#; -- largest 16Bit number (Two's complement)
elseif L_M_BV_32 < -32768 then
P_M_DERIVE(T_ALG.E_BV) := 16#8000#; -- smallest negative 16Bit number
else
P_M_DERIVE(T_ALG.E_BV) := UC_16S_EN_16NS(TBD.T_ENTIER_16S(L_M_BV_32));
end if;
-- But not for the horizontal one
P_M_DERIVE(T_ALG.E_BH) := UC_16S_EN_16NS(TBD.T_ENTIER_16S
((1.0 / C_M_LSB_BH) *
G_M_INFO_DERIVE(T_ALG.E_BH));
Mars Rover
{{2-3}}
Mars Pathfinder war ein US-amerikanischer Mars-Lander, der 1996 von der NASA eingesetzt wurde. Er brachte 1997 den ersten erfolgreichen Mars-Rover Sojourner auf die Marsoberfläche.
Nach dem Beginn der Aufzeichnung von meteorologischen Daten mit dem Sojourner traten plötzlich scheinbar zufällige System-Zurücksetzungen auf. Das Betriebssystem bootete neu, was mit einem Datenverlust einher ging. Diese Fehler waren aber auch schon auf der Erde aufgetreten ...
Durch Analyse des Logbuches zu diesem Zeitpunkt konnte festgestellt werden, dass es bei der Programmierung von "Sojourner" ein Problem gab. Dabei schlug die sogenannte Prioritäten-Inversion zu, die sich zeigt, wenn mehrere Prozesse ein und die selbe Ressource nutzen.
Weitere Informationen unter What the media coudn't tell you about Mars Pathfinder
Aggressiver Gandhi
{{3-4}}
Der als friedlich bekannte Inder Mahatma Gandhi ist im Spiele Civilization 5 dafür bekannt, besonders gerne nukleare Waffen zu nutzen. Diese Affinität ist einen Programmierfehler im ersten Teil zuzuordnen, in welchem der Agressionswert bestimmt, wie wahrscheinlich es ist, dass der Herrscher eine atomare Waffe benutzt. Gandhi startet dort mit einem Aggressionswert von 1, jedoch bekommt jede Demokratie bei Spielstart -2 Aggresionspunkte, was zu einem Wert von -1 führt. Binär betrachtet entspricht das folgender 8 Bit Zahl:
1111 1111
Dieser Wert wird intern aber als ein unsigned char, also wie eine 8 Bit vorzeichenlosen Ganzzahl behandelt. Dies führt dazu, dass nicht eine -1 gelesen wird, sondern der Maximalwert dieses Datentyps 255.
{{0-3}}
Das folgende anschauliche Beispiel und die zugehörige Analyse ist durch ein Beispiel der Vorlesung "Software Engineering" von Prof. Dr. Schürr, (TU Darmstadt) motiviert.
Achtung: Das folgende Codebeispiel enthält eine Fülle von Fehlern!
#include <stdio.h>
FILE *fp;
void main()
{
fp = fopen("numbers.txt", "r");
int a[10];
int num = 0, l = 0;
while(1){
if (fscanf(fp, "%d", &num) == 1) {
a[l] = num;
l++;
} else {
break;
}
}
for(int i=0; i<l; i++)
printf("%5i ",a[i]);
printf("\n");
int aux;
for(int i=2; i<l; i++){
for(int j=l; j>i; j--){
if (a[j-1] > a[j]){
aux = a[j-1];
a[j-1] = a[j];
a[j] = aux;
}
}
}
for(int i=0; i<l; i++)
printf("%5i ",a[i]);
printf("\nAus Maus!\n");
}
Aufgabe: Lesen Sie den Code, erklären Sie die Aufgabe, die er löst und identifizieren Sie Fehlerquellen.
{{1-2}}
Welche Probleme sehen Sie im Hinblick auf die zuvor genannten Qualitätsmerkmale
Aspekt | Bewertung |
---|---|
Funktionalität | ? |
Zuverlässigkeit | |
Benutzbarkeit | |
Effizienz | |
Wartungsfreundlichkeit | |
Übertragbarkeit |
{{2}}
Aspekt | Bewertung |
---|---|
Funktionalität | feste Feldlänge, das Programm stürzt bei mehr als 10 Einträgen ab |
Zuverlässigkeit | keine Überprüfung der Existenz der Datei, kein Schließen der Datei |
Benutzbarkeit | im Programmcode enthaltene Dateinamen, feste Feldlänge |
Effizienz | quadratischer Aufwand der Sortierung |
Wartungsfreundlichkeit | fehlende Dokumentation, unverständliche Variablenbezeichner, redundante Codeelemente |
Übertragbarkeit |
Warum ist Softwareentwicklung so herausfordernd
- Die Größe der zu lösenden Probleme. Software ist nicht einfacher, als die Probleme, die sie löst. Je größer und schwieriger die Software, desto aufwendiger und schwieriger ist die Entwicklung.
- Die Tatsache, dass Software ein immaterielles Produkt ist. Die Immaterialität macht das Arbeiten mit Software schwieriger als dasjenige mit materiellen Produkten vergleichbarer Komplexität, da die Risiken auch schwerer zu erkennen sind.
- Sich permanent verändernde Ziele aufgrund der Evolution. Schon das Bestimmen und Erreichen fixierter Ziele bei der Entwicklung ist keine leichte Aufgabe. Sich verändernde Ziele machen das ganze nochmal um eine Größenordnung schwieriger.
- Fehler infolge von Fehleinschätzungen zur Skalierung ("was im Kleinen geht, geht genauso im Großen"). Software-Entwicklung wird daher unbewusst meist als viel einfacher eingeschätzt, als sie tatsächlich ist. Dies führt zu unrealistischen Erwartungen und zu von Beginn an zu tiefen Kosten- und Terminschätzungen.
- Funktionierende Einzelkomponenten stellen noch lange kein funktionierendes Gesamtsystem sicher.
Der Faktor Mensch
In einem Projekt stellt sich die Frage wie viele Personen involviert sind und damit welche Komplexität der Entwicklungsfluss hat. In einem Team von 3 Personen wird muss sichergestellt sein, dass eine Information bei 2 Partnern ankommt. Die maximale Anzahl ergibt sich zu
^
| Kommunikationspfade o
|
|
|
| o <- ab hier mehr Kommunikationspfade
| als involvierte Personen
|
| o <- bis hierher linear
| o
+---o---------------------------------------> .
1 2 3 4 5 6
Grafik motiviert aus 4
Hier ist eine koordinierte Interaktion und Kommunikation notwendig!
Ein Vorgehensmodell zur Softwareentwicklung ist ein für die Softwareentwicklung angepasstes Vorgehensmodell bei der professionellen („ingenieursmäßigen“) Anwendungsentwicklung. Es ist ein standardisierter, organisatorischer Rahmen für den idealen Ablauf eines Entwicklungsprojektes und dient dazu, die Softwareentwicklung übersichtlicher zu gestalten und in der Komplexität beherrschbar zu machen. 6
Die zwei erstgenannten Vorgehensweisen setzen auf eine Planbarkeit des Projektes, während die agilen Methoden auf die Flexibilität in den Vordergrund stellen.
Anforderungen Problemanalyse, Systemspezifikation
\
Entwurf Grobentwurf, Feinentwurf
\
Umsetzung Implementierung, Integration
\
Überprüfung Testen des Systems
\
Betrieb und Wartung Installation, Anpassung .
Eigenschaften des Wasserfallmodells:
- Aktivitäten sind in der vorgegebenen Reihenfolge und in der vollen Breite vollständig durchzuführen.
- Am Ende jeder Aktivität steht ein fertiggestelltes Dokument, d.h. das Wasserfallmodell ist ein „dokumentgetriebenes“ Modell.
- Der Entwicklungsablauf ist sequentiell und als Top-down-Verfahren realisiert.
- Es ist einfach, verständlich und benötigt nur wenig Managementaufwand.
Vorteile:
- klare Abgrenzung der Phasen – einfache Möglichkeiten der Planung und Kontrolle
- bei stabilen Anforderungen und klarer Abschätzung von Kosten und Umfang ein sehr effektives Modell
Nachteile:
- Das Modell ist nur bei einfachen Projekten anwendbar – Unflexibel gegenüber Änderungen und im Vorgehen
- Frühes festschreiben der Anforderungen ist sehr problematisch und kann zu teuren Änderungen führen
- Fehler werden eventuell erst sehr spät erkannt und müssen mit erheblichen Aufwand entfernt werden
Szenarien
Anforderungen ................> Abnahmetest
\ ^ / ^
v \ Testfälle v /
Grobentwurf ................> Systemtest
\ ^ / ^
v \ Testfälle v /
Feinentwurf ................> Integrationstest
\ ^ / ^
v \ Testfälle v /
Modulimpl. ................> Modultest
\ \ / /
\ +-------------------------+ /
+---------------------------+ .
Tätigkeitsbereiche des V-Modell: Softwareerstellung, Qualitätssicherung, Konfigurationsmanagement, Projektmanagement
Vorteile:
- Integrierte und detaillierte Darstellung von den Tätigkeitsbereichen
- Generisches Modell mit definierten Möglichkeiten zur Anpassung an projektspezifische Anforderungen
- Gut geeignet für große Projekte
Nachteile:
- Für kleine und mittlere Softwareentwicklungen führt das V-Modell zu einem unnötigen Overhead
- Die im V-Modell definierten Rollen (bis zu 25) sind für gängige Softwareentwicklungen nicht realistisch
- explizite Werkzeuge notwendig
Wesentliche Gründe für agile Herangehensweisen sind, dass sich die Ziele und das Umfeld (beteiligte Personen, Marktanforderungen, technisches Umfeld/Schnittstellen) im Laufe des Projektes ändern. Die agilen Methoden eignen sich daher besonders gut, um auf geänderte Anforderungen zu reagieren, da die Entwicklungszyklen in der Regel kurz angelegt sind. Die Anforderungen werden häufig nur knapp beschrieben und erst kurz vor Beginn von Umsetzung und Test ausformuliert. Durch die kurzen Zeiträume sind (nachträgliche) Änderungen der Anforderungen relativ leicht möglich.
Klassische Methoden | Agile Methoden | |
---|---|---|
Anforderungen am Projektbeginn | klar definiert | unscharf |
Änderungsbereitschaft | gering | explizit |
Anforderungsbeschreibung | technische Sicht / Perspektive des Unternehmens | Kundensicht (Anwendungsfälle) |
Entscheidungsfindung | Gremien | Team |
Planung | durch Projektleiter | im Team |
Kundeninteraktion | Kunde oft unbekannt | Kunde als aktiver Teil |
Agile Methoden sind z.B.:
- Scrum
- Kanban
- Extreme Programming (XP)
- Crystal
CASE is the use of computer-based support in the software development process
{{0}}
Klassifikation nach dem Einsatzzweck
-
Anforderungsanalyse
- Spezifikation
- Modellierung
-
Code-Erstellung (Editoren)
- Editor, IDE
- Dokumentation
-
Ausführung und Testen
- Compiler, Interpreter
- IDE, Build-System
- Debugger
-
Koordination Entwicklungsprozess
- Projektverwaltung
- Code-Base Management und Versionierung
- Deployment
- Support
{{1}}
Grad der Integration verschiedener Funktionalitäten
- Tools - einzelne Aktivitäten im Software Life-cycle
- Workbenches - mehrere Werkzeuge
- Integrated Development Environments - Kombination mehrerer Workbenches und Werkzeuge zur Unterstützung des kompletten Software Life-cycle
Texteditor vs. Integrated Development Environment (IDE) ... worfür soll ich mich entscheiden?
- Analyse des Workflows und der Formen der Zusammenarbeit
- Analyse der verwendeten Spezifikations und Modellierungstechniken, Programmiersprachen, etc.
- Analyse der Komplexität des Vorhabens, der erforderlichen Unterstützung
- Analyse der Rahmenbedingungen (Betriebssysteme, Kosten)
- Betrachten Sie die Darstellung unter Webseite Programmwechsel und versuchen Sie die überspitzten Missverständnisse der einzelnen Protagonisten im Kontext eines Softwareprojektes zu stellen.
- Korrigieren Sie das
allesFalsch.c
Beispiel, verbessern Sie die Lesbarkeit des Codes.
Wo entsteht der größte Zeit- bzw. Kostenaufwand bei kommerzieller Software?
- [( )] Entwurf
- [( )] Programmierung
- [(X)] Service/Wartung
Wann ist eine Software-Dokumentation wichtig?
- [[ ]] immer, man sollte auch bei kleinsten Projekten eine möglichst detaillierte Dokumentation schreiben
- [[X]] bei (mittel-)großen Projekten
- [[x]] bei kleinen Projekten mit komplexem Code
- [[ ]] die Dokumentation ist generell nicht wichtig, erfahrene Programmierer finden sich selber zurecht
Footnotes
-
Von Sae1962 - Eigenes Werk, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=52216179 ↩
-
Dragan Radovanovic, Kif Leswing, "Google runs on 5000 times more code than the original space shuttle", 2016, Link ↩
-
Prof. Dr. Thorsten Lemburg, Einführung in die Softwareentwicklung, Link ↩ ↩2
-
Prof. Dr. Thorsten Lemburg, Einführung in die Softwareentwicklung - Seminar: Softwareentwicklung in der Wissenschaft, Link ↩ ↩2
-
Wikimedia, Autor Phrd, Fragment fallout zone of failed Ariane 501 launch. [Link](http://www.esa.int/esapub/bulletin/bullet89/images/dalm89f4.gif, https://commons.wikimedia.org/wiki/File:Ariane_501_Fallout_Zone.svg) ↩