While software is an immaterial object that does not decay with time, it is in fact “aging“ - as Parnas puts it – as we usually fail to adapt the software such that it meets our changing needs and make the software less valuable by doing the changes not careful enough. One of Lehman's laws of software evolution accordingly states that a system that is being used undergoes continuing adaption or degrades in effectiveness. Consequently, we can observe that the ability to cost-effectively adapt software has become one of the most important critical success factors for software development today.
In this lecture we want review how software adaption is addressed at several levels and how far these approaches are able to cope with the need for cost-effective software adaption. We will at first review the need for adaption and study which different forms of adaption are relevant. We will then look into the classical software maintenance lifecycle phase and how required adaption due to changes in the environment is handled there. Then, we will look into approaches that contribute to better adaptable software where the costs for later adaption steps are reduced by taking the need for adaption into account upfront. Both directions are highly relevant, but cannot prevent that still major costs result due to the required adaption. Even worth, it seems that we can only limit the effects of the changes but cannot prevent aging in general. Therefore, also the idea to automate software adaption in form of self-adaptive software has been raised and we will look into such self-adaptive software. As it has the capability to adjust itself in response to changes in the environment, it promises to considerably reduce the costs for required adaption and to avoid a decline in quality. We will discuss existing proposals and solutions as well as its current limitations.
Motivation | 01:33:55 | |
---|---|---|
Organization | 00:13:06 | |
Motivation | 00:16:22 | |
Software Does Age! | 00:13:37 | |
Decreasing Performance and Reliability | 00:17:12 | |
Laws of Software Evolution | 00:12:34 | |
Definitions | 00:11:43 | |
Software Uncertainly Principle | 00:09:21 |
Motivation and Foundations | 01:30:27 | |
---|---|---|
The Software Development Process | 00:17:23 | |
Resulting Recommendation | 00:12:13 | |
Case Studies | 00:14:44 | |
Why has Linux been able to continue its strong growth? | 00:06:28 | |
Typical Changes | 00:12:31 | |
Summary and Outlook | 00:08:39 | |
Foundations | 00:18:29 |
Life Cycle and Kind of Adaption | 01:30:37 | |
---|---|---|
Terminology | 00:08:03 | |
Life Cycle Models and Processes | 00:20:22 | |
Life Cycle | 00:05:36 | |
Economic Perspective | 00:23:01 | |
Summary | 00:02:42 | |
Kind of Adaption | 00:13:23 | |
Level of Adaption | 00:17:30 |
Software Maintenance | 01:27:14 | |
---|---|---|
Motivation | 00:14:40 | |
Types of Maintenance | 00:16:27 | |
Maintenance vs. New Development | 00:12:53 | |
Impact Analysis | 00:16:42 | |
Alternative View | 00:02:57 | |
Techniques | 00:11:14 | |
Economics: The Cost of Maintenance | 00:12:21 |
Maintenance and Software Reengineering | 01:30:01 | |
---|---|---|
Factors Affecting Maintenance Costs | 00:13:39 | |
Predicting Maintainability | 00:11:59 | |
Reengineering - Motivation | 00:15:23 | |
Reengineering and Reverse-Engineering | 00:07:25 | |
Processes | 00:15:26 | |
Program Structure Improvement | 00:15:56 | |
Techniques | 00:10:13 |
Reengineering | 01:34:02 | |
---|---|---|
Reverse Engineering Objectives | 00:15:19 | |
Dynamic Analysis and Instrumentation | 00:15:26 | |
Architecture Recovery | 00:15:10 | |
Refactoring Example | 00:11:12 | |
Economics | 00:11:30 | |
System Quality Assessment | 00:09:23 | |
Replacement and Reengineering | 00:16:02 |
Foundations for Adaptability | 01:30:59 | |
---|---|---|
Project Overview | 00:11:59 | |
Wrapper | 00:17:09 | |
Foundations for Adaptability | 00:12:33 | |
Forms for Adaptability | 00:12:54 | |
Life Cycle and Adaptability | 00:09:41 | |
Adaption Scenarios | 00:13:14 | |
Software Ecosystems | 00:13:29 |
Modeling Concepts - Principles | 01:19:37 | |
---|---|---|
Modeling Concepts | 00:17:33 | |
Characteristics and Subcharacteristics | 00:11:39 | |
Design Principle: Abstraction | 00:13:06 | |
Design Principle: Incrementality | 00:07:05 | |
Design Principle: Modularity | 00:18:05 | |
Design Principle: Information Hiding | 00:12:09 |
Techniques, Development Concepts and Approaches for Adaptability | 01:27:15 | |
---|---|---|
Modules and Interfaces | 00:13:34 | |
Inheritance | 00:13:00 | |
Configurability | 00:08:17 | |
Development Concepts | 00:15:13 | |
Code Generation | 00:12:11 | |
Approaches for Adaptability | 00:14:25 | |
Observer Pattern | 00:10:35 |
Approaches for Adaptability | 01:35:59 | |
---|---|---|
Design Pattern | 00:17:39 | |
Facade Pattern | 00:07:22 | |
Architectural Styles and Patterns | 00:21:52 | |
Microkernel | 00:08:26 | |
Limitations | 00:14:39 | |
Modeling Paradigms | 00:10:17 | |
OO & Modularity | 00:15:44 |
Component-, Service- and Agent-Orientation | 01:27:33 | |
---|---|---|
Decorator Pattern | 00:09:52 | |
Component Orientation | 00:20:20 | |
Service Orientation | 00:11:42 | |
Service Repository | 00:12:02 | |
Initial Development and Service-Orientation | 00:16:27 | |
Agent Orientation | 00:17:10 |
Aspects & Developments | 01:31:16 | |
---|---|---|
Aspect Orientation | 00:15:55 | |
Iterations and Aspects | 00:09:18 | |
Feature-Orientation | 00:18:16 | |
Development Paradigms | 00:07:40 | |
Model-Driven Development | 00:14:53 | |
Summary | 00:11:08 | |
Self-Adaptive Software | 00:14:06 |
Adaption during Software Maintenance | 00:18:24 | |
---|---|---|
Adaption during Software Maintenance | 00:07:54 | |
Java to HTML Converter Demo | 00:10:30 |
Reengineering/Maintenance | 00:22:26 | |
---|---|---|
Reengineering Maintenance | 00:13:59 | |
Multithreading | 00:08:27 |
Reengineering/Maintenance | 00:19:04 | |
---|---|---|
Reengineering Maintenance | 00:14:01 | |
Java to HTML Handler | 00:05:03 |
Adaptable Software - Assignment 2 | 00:09:02 | |
---|---|---|
Outline | 00:04:28 | |
Multiple Interceptor Chains | 00:04:34 |
Adaptable Software - Assignment 2 | 00:10:43 | |
---|---|---|
ThreadPool | 00:06:21 | |
Delivering Content Type Information | 00:04:22 |
Adaptable Software - Assignment 2 | 00:11:24 | |
---|---|---|
Class Diagram | 00:05:20 | |
Interceptor Chains | 00:06:04 |
Adaptable Software - Assignment 2 | 00:04:52 | |
---|---|---|
Java to HTML Interceptor | 00:04:52 |
Project Assignment 3 | 00:09:46 | |
---|---|---|
Self-adaptive Software | 00:09:46 |
Foundations of Self-Adaptive Software | 01:28:40 | |
---|---|---|
Autonomous Applications | 00:11:15 | |
Terminology | 00:18:36 | |
Principles | 00:16:47 | |
Adaption Loop | 00:13:08 | |
Decide Process | 00:13:53 | |
Models and Adaption | 00:15:01 |
Foundations & Approaches for Self-Adaptive Software | 01:29:06 | |
---|---|---|
Recapitulation | 00:22:11 | |
Forms | 00:10:31 | |
Dimensions for Self-Adaptation | 00:16:36 | |
Styles of Self-Adaptation | 00:12:32 | |
Example for Self-Organization | 00:06:14 | |
Approaches for Self-Adaptive Software | 00:10:41 | |
Agent Design | 00:10:21 |
Approaches for Self-Adaptive Software | 01:11:47 | |
---|---|---|
Example: Steels Mars Explorer | 00:14:35 | |
Social Design | 00:23:47 | |
Autonomic Computing | 00:17:48 | |
Types of Control | 00:15:37 |
Software Engineering for Self-Adaptive Systems | 01:33:34 | |
---|---|---|
Modeling Statics and Dynamics | 00:23:11 | |
Software Engineering for Self-Adaptive Systems | 00:17:41 | |
Assurance | 00:15:56 | |
Summary and Comparison | 00:17:04 | |
Summary and Comparison II | 00:19:42 |