Software Evolution: Einführung · 15 Software-Evolution WS 2015/2016 •Softwareentwicklung ist...

Preview:

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

Recommended