Softwareerosion

Softwareerosion (englisch software erosion, code erosion), auch bekannt als Softwarezerfall (englisch software decay, code decay) oder Softwareverrottung (englisch software rot, code rot), bezeichnet die schleichende Verschlechterung einer bestehenden Software, wie den zunehmenden Rückgang der Performanz, Erschwernisse bei der Anpassbarkeit oder einer Zunahme durch die Akkumulation von Programmfehlern sowie Inkompatibilitäten mit neuen und zukünftigen Softwareumgebungen. Die Softwarelösung bekommt mittelfristig einen Code-Smell und wird langfristig zu einem Altsystem und damit unbrauchbar.

Refactoring

Hauptartikel: Refactoring

Refactoring ist eine Maßnahme, um dem Problem der Softwareerosion zu begegnen. Es handelt sich hierbei um den Prozess des Umschreibens existierenden Codes, um die Struktur zu verbessern, ohne das externe Verhalten zu ändern.[1] Dies beinhaltet das Entfernen toten Codes und das Neuschreiben von Abschnitten, die stark modifiziert wurden und nicht mehr effizient arbeiten. Es muss hierbei darauf geachtet werden, dass sich das externe Verhalten des Codes nicht ändert, da dies zu Inkompatibilitäten führen kann und damit die Softwareerosion noch beschleunigt. Das Codeverhalten kann mit Modultests geprüft werden, die das Verhalten des Codes automatisch verifizieren.

Siehe auch

Softwarealterung

Einzelnachweise

  1. Martin Fowler: What Is Refactoring. 11. September 2007, abgerufen am 31. Januar 2013 (englisch). 
VD
Entwurfsmuster
Erzeugungsmuster

Abstrakte Fabrik | Erbauer | Fabrikmethode | Prototyp | Singleton | Multiton | Objektpool

Strukturmuster

Adapter | Brücke | Decorator | Fassade | Fliegengewicht | Kompositum | Stellvertreter

Verhaltensmuster

Beobachter | Besucher | Interpreter | Iterator | Kommando | Memento | Schablonenmethode | Strategie | Vermittler | Zustand | Zuständigkeitskette | Interceptor | Nullobjekt | Protokollstapel

Muster für objektrelationale Abbildung

Datentransferobjekt | Table Data Gateway | Row Data Gateway | Active Record | Unit of Work | Identity Map | Lazy Loading | Identity Field | Dependent Mapping | Embedded Value | Serialized LOB | Inheritance Mapper | Metadata Mapping | Query Object | Command-Query-Responsibility-Segregation

Nachrichtenübermittlungsmuster

Message | Command Message | Document Message | Event Message | Request-Reply | Return Address | Correlation Identifier | Message Sequence | Message Expiration | Format Indicator | Message Channel | Point-to-Point Channel | Publisher-Subscriber Channel | Datatype Channel | Invalid Message Channel | Dead Letter Channel | Guaranteed Delivery | Channel Adapter | Messaging Bridge | Message Bus | Pipes-and-Filters | Message Router | Content-based Router | Message Filter | Dynamic Router | Recipient List | Splitter | Aggregator | Resequencer | Composed Message Processor | Scatter-Gather | Routing Slip | Process Manager | Message Broker | Message Translator | Envelope Wrapper | Content Enricher | Content Filter | Claim Check | Normalizer | Canonical Data Model | Message Endpoint | Messaging Gateway | Messaging Mapper | Transactional Client | Polling Consumer | Event-driven Consumer | Competing Consumers | Message Dispatcher | Selective Consumer | Durable Subscriber | Idempotent Receiver | Service Activator | Control Bus | Detour | Wire Tap | Message History | Message Store | Smart Proxy | Test Message | Channel Purger

Andere

Application Controller | Business Delegate | Data Access Object | Dependency Injection | Extension Interface | Fluent Interface | Inversion of Control (IoC) | Lock | Model View Controller (MVC) | Model View Presenter (MVP) | Model View Update (MVU) | Model View ViewModel (MVVM) | Page Controller | Registry | Remote Facade | Repository | Service Locator | Session State | Table Module | Template View | Threadpool | Transaction Script | Transform View | Two-Step View | Value Object