Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Software Evolution: Einführung
Dr. Thorsten Arendt
Marburg, 15. Oktober 2015
Überblick
• Was ist Software-Evolution?
• Warum ist Software-Evolution wichtig?
• Was sind die Prinzipien der Software-Evolution?
• Ist Evolution von Open-Source-Software anders?
2 Software-Evolution WS 2015/2016
Warum ist Software-Evolution wichtig?
• Immer mehr Softwaresysteme existieren und müssen gewartet
werden.
• Der Evolutionsanteil an der Softwareentwicklung wird immer höher.
– „Faktor 2 bis 100 je nach Anwendung“ [Sommerville]
– „1976 – 1998: Wartungskosten mehr als 67%“ [Schach]
– „Through 2008, at least 65 percent of custom-developed services
for new SOA projects will be implemented via wrapping or re-
engineering of established applications.“ [Gartner]
• Software-Evolution ist häufig nicht genügend systematisch.
3 Software-Evolution WS 2015/2016
Was ist Software-Evolution?
4 Software-Evolution WS 2015/2016
Definitionen
Wartung (eines SW-Systems): Beseitigung von Fehlverhalten des Systems
nach seiner Inbetriebnahme
Pflege (eines SW-Systems): Anpassung des Systems an geänderte
Bedingungen oder dessen Weiterentwicklung aufgrund neuer oder
geänderter Anforderungen
Betreuung (eines SW-Systems): Zusammenfassung der Pflege- und
Wartungstätigkeiten.
Im laufenden Betrieb in ihrer Zielumgebung ist Software in der Regel
Änderungen unterworfen. Die dafür notwendigen Tätigkeiten kann man - je
nach Ursache und Zielsetzung - in Pflege- und Wartungstätigkeiten einteilen.
Alle Änderungen an Softwaresystemen nach der ersten Auslieferung, die auch
Architekturänderungen einschließen können, werden als Software-Evolution
bezeichnet.
Software-Wartung und Software-Pflege
5 Software-Evolution WS 2015/2016
Reparatur von Software-Fehlern: Diese ist i.A. umso teurer, je früher die
Ursache im Entwicklungsprozess liegt. D.h. Codierungsfehler lassen sich relativ
billig beheben, Fehler in den Anforderungen sind am teuersten.
Anpassung an veränderte Betriebsbedingungen: Diese können sich z.B.
durch neue Hardware, Betriebssysteme oder sonstige Basis-Software ergeben.
Erweiterung oder Änderung der Funktionalität: Diese können sich z.B. aus
organisatorischen oder geschäftlichen Änderungen ergeben.
Functionality
addition or
modificat ion
(65%)
Fault repair
(17%)
Software
adaptation
(18%)
[Sommerville]
Software altert – Warum???
6 Software-Evolution WS 2015/2016
„Programs, like people, get old. We can‘t prevent aging, but we can
understand its causes, take steps to limit its effects, temporarily reverse
some of the damage it has caused, and prepare for the day when the
software is no longer viable.“ [Parnas]
• zu wenig Anpassung an neue Anforderungen
• durch Anpassungen
– Einschränkungen im Design
– abnehmende Performanz
– abnehmende Zuverlässigkeit
• Nötige Aufräumarbeiten werden nicht durchgeführt.
– fehlende Dokumentation nachreichen
– Restrukturierung der Software
– Testsuite anpassen
Woran erkennt man Software-Alterung?
7 Software-Evolution WS 2015/2016
• Veraltete oder fehlende Dokumentation
• Fehlende Tests
• Die ursprünglichen Entwickler sind gegangen.
• Das Wissen über das Innere der Software ist weg.
• Das Gesamtsystem wird nicht voll verstanden.
• Die Entwickler brauchen zu viel Zeit für einfache Änderungen.
• Kontinuierliches Fehlersuchen
• Lange Build-Zeiten
• Duplizierter Code und andere Code Smells
Warum wollen wir ein Software-System ändern?
8 Software-Evolution WS 2015/2016
• Neue Anforderungen
• Die Performanz verbessern
– „First do it, then do it right, then do it fast.“
• Das System auf eine neue Plattform portieren.
– Eine neue Technologie ausprobieren
– Dazu muss plattformspezifischer Code identifiziert werden.
• Extraktion des Designs
– Um eventuell Teile neu zu schreiben
• Abhängigkeit vom Menschen reduzieren
• Ein monolithisches System in individuelle Teile zerlegen
Gesetze der Software-Evolution [Lehman]
9 Software-Evolution WS 2015/2016
1. Fortlaufende Änderungen:
– Wird ein System in realer Umgebung wirklich genutzt, so wird es notwendigerweise zum Gegenstand von Änderungen.
2. Wachsende Komplexität:
– Je länger ein System genutzt und fortlaufend geändert wird, desto komplexer wird seine Struktur. Vereinfachung erfordert zusätzlichen Aufwand.
3. Stabile Kenngrößen:
– Software-Evolution folgt festen Regeln. Kenngrößen wie SW-Umfangszuwachs, Zeit zwischen zwei Auslieferungen (Releases) oder Fehlerhäufigkeit sind (nahezu) invariant.
4. Organisatorische Stabilität:
– Große SW-Systeme entwickeln sich stabil - und relativ unabhängig von den dafür aufgewandten Kosten und Ressourcen.
Gesetze der Software-Evolution [Lehman]
10 Software-Evolution WS 2015/2016
5. Notwendige Vertrautheit:
– Im langfristigen Mittel ist der inkrementelle Zuwachs pro Version nahezu konstant. (Z.B. muss ein zu großer Evolutionsschritt durch mehrere kleinere wieder kompensiert werden.)
6. Kontinuierliche wachsende Software:
– Der funktionale Anteil eines Programms muss kontinuierlich wachsen, um den Anwender weiterhin zufrieden zu stellen.
7. Abnehmende Qualität:
– Programme scheinen eine abnehmende Qualität zu haben, es sei denn, sie werden systematisch gepflegt und an Änderungen in der Umgebung angepasst.
8. Feedback:
– Entwicklungsprozesse sind Feedback-Systeme und müssen als solche behandelt werden, um erfolgreich geändert oder verbessert zu werden.
Open Source Software: Projekte (1) (1969-2000)
11 Software-Evolution WS 2015/2016http://www.unlu.edu.ar/~tyr/tyr/TYR-2004/poster--open_source_software_evolution.gif
Open Source Software: Projekte (2) (1995-2006)
12 Software-Evolution WS 2015/2016
[Deshpande,Riehle]
Einige Hypothesen zur Evolution von Open
Source Software (OSS)
13 Software-Evolution WS 2015/2016
Beispiel: Die Linux-Entwicklung startete 1994 (v 1.0). Die
Evolution bis 2003 zeigt, dass Linux mehr als linear wächst.
Hypothesen:
1. OSS wächst schneller als Closed Source Software (CSS).
2. OSS-Projekte zeigen mehr Kreativität. (z.B. Hinzugefügte
Funktionalität pro Zeiteinheit)
3. OSS ist weniger komplex als CSS. (z.B. Komplexitätsmaße)
4. OSS-Projekte haben weniger Fehler; Fehler finden und
fixen erfolgt schneller. (z.B. modifizierte Funktionen pro
Zeiteinheit)
5. OSS-Projekte haben eine bessere Modularisierung. (z.B.
Korrelation von hinzugefügten Funktionen zu geänderten)
Gesetz Messungen / Metriken
Fortlaufende Änderungen z.B. Anzahl der Änderungen (kumuliert)
Wachsende Komplexität Komplexitätsmaße (z.B. McCabe)
Stabile Kenngrößen Inkrementelle Änderungen der Modulanzahl
Organisatorische
Stabilität
Durchschnittliche Anzahl der Änderungen pro Tag,
Änderungs- und Wachstumsraten der Funktionen
Notwendige Vertrautheit z.B. Anzahl der Änderungen an Programmelementen
Kontinuierliches
Wachstum
Lines of Code (LoC), Anzahl der Module, Anzahl der
Definitionen (Typen, globale Variablen, Funktionen)
Abnehmende Qualität Externe und interne Qualitätsmetriken
FeedbackFunktionaler Zusammenhang zwischen Modulanzahl
und inkrementellem Aufwand
Die Gesetze von Lehman in Open Source
Software [Xie, Chen, Neamtiu]
14 Software-Evolution WS 2015/2016
Zusammenfassung
15 Software-Evolution WS 2015/2016
• Softwareentwicklung ist vielfach langfristig angelegt.
• Software-Evolution umfasst die Wartung und Pflege von
Softwaresystemen sowie ihre Erweiterung bezüglich neuer
Anforderungen.
• Software altert.
• Meir M. Lehman hat eine Reihe von Gesetzen aufgestellt,
die die Prinzipien der Software-Evolution beschreiben.
– Obwohl diese Gesetze ursprünglich für Closed-Source-
Projekte aufgestellt worden sind, wollen wir sie anhand von
Open-Source-Projekten studieren.
Sekundär-Literatur
16 Software-Evolution WS 2015/2016
• Ian Sommerville: Software Engineering, 9. Auflage, 2013
• Stephen Schach: Object Oriented Software Engineering, 1. Auflage, 2007
• David Lorge Parnas: Software Aging, ICSE, 1994
• Meir M. Lehman: Laws of Software Evolution Revisited, EWSPT, 1996
• Amit Deshpande, Dirk Riehle: The Total Growth of Open Source, OSS,
2008
• Guowu Xie, Jianbo Chen, Iulian Neamtiu: Towards a Better Understanding
of Software Evolution: An Empirical Study on Open Source Software,
ICSM, 2009