52
OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

  • View
    228

  • Download
    2

Embed Size (px)

Citation preview

Page 1: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

OORPTObject-Oriented Reengineering Patterns and Techniques

X. CHAPTER

Prof. O. Nierstrasz

Page 2: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.2

Roadmap

Page 3: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz
Page 4: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

Program Comprehension & Software Evolution -

[Lightweight] Principles and [real] Practice

Program Comprehension & Software Evolution -

[Lightweight] Principles and [real] Practice

Michele LanzaFaculty of InformaticsUniversity of LuganoSwitzerland

Page 5: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.5

Prologue

> Reverse engineer 1’200’000 lines of C++ code in ca. 2300 classes> * 2 = 2’400’000 seconds> / 3600 = 667 hours > 667 hours / 8 = 83 working days> 83 days / 5 = 16 working weeks and 3 days> ~ 4 months

> Questions:— What is the size and the overall structure of the system?— What is the internal structure of the system and its elements?— How did the software system become like that?

Once upon a time…

Page 6: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.6

The Life Cycle of Software Systems

Issues• Tool support• Scalability• Flexibility

?

Time

RequirementsAnalysis

Design

Implementation

Page 7: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.7

Object-Oriented Reverse Engineering

> Goal: take a (large legacy) software system and “understand” it, i.e., construct a mental model of the system

> Problem: the software system in question is— Unknown, very large, and complex— Domain- and language-specific— Seldom documented or commented— “In bad shape”

?

?

Page 8: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.8

Object-Oriented Reverse Engineering (II)

> Constructing a mental model requires information about the system:— Top-down approaches

— Bottom-up approaches

— Mixed Approaches> There is no “silver bullet” methodology> Every reverse engineering situation is unique> Need for flexibility, customizability, scalability, and simplicity

?

Page 9: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.9

Reverse Engineering Approaches

>Reading (source code, documentation, UML diagrams, comments)>Running the SW and analyze its execution trace>Interview users and developers (if available)>Clustering

>Concept Analysis>Software Visualization>Software Metrics>Slicing and Dicing>Querying (Database)>Data Mining>Logic Reasoning>…

?

Page 10: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.10

The “Information Crystallization” Problem

> Many approaches generate too much or not enough information

> The reverse engineer must make sense of this information by himself

> We need the right information at the right time

?

Page 11: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.11

..take a step back..block the ground..think about it..

> The information needed to reverse engineer a legacy software system resides at various levels

> We need to obtain and combine— Coarse-grained information about the whole system

— Fine-grained information about specific parts

— Evolutionary information about the past of the system

!

Page 12: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.12

Contents

> Polymetric Views> Software Visualization vs. Reverse Engineering

— Coarse-grained— Fine-grained— Evolutionary— Dynamic Information

> Discussion> Demos

Page 13: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.13

A Solution - The Polymetric View

> A lightweight combination of two approaches:—Software visualization (reduction of complexity, intuitive)—Software metrics (scalability, assessment)

> Interactivity (iterative process, silver bullet impossible)> Does not replace other techniques, it complements them:

—“Opportunistic code reading”

Page 14: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.14

The Polymetric View - Principles

> Visualize software:— entities as rectangles— relationships as edges

> Enrich these visualizations:— Map up to 5 software metrics

on a 2D figure— Map other kinds of semantic

information on nominal colors

width metric

height metric

2 position metrics

Entities

Relationships

color metric

Page 15: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.15

The Polymetric View - Example

Nodes = ClassesEdges = Inheritance Relationships

Width = Number of AttributesHeight = Number of MethodsColor = Number of Lines of Code

System Complexity View

Page 16: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.16

The Polymetric View - Example (II)…

• Get an impression (build a first raw mental model) of the system, know the size, structure, and complexity of the system in terms of classes and inheritance hierarchies• Locate important (domain model) hierarchies, see if there are any deep, nested hierarchies• Locate large classes (standalone, within inheritance hierarchy), locate stateful classes and classes with behaviour

• Count the classes, look at the displayed nodes, count the hierarchies• Search for node hierarchies, look at the size and shape of hierarchies, examine the structure of hierarchies• Search big nodes, note their position, look for tall nodes, look for wide nodes, look for dark nodes, compare their size and shape, “read” their name => opportunistic code reading

System Complexity View

Reverse engineering goals View-supported tasks

Nodes = ClassesEdges = Inheritance Relationships

Width = # attributesHeight = # methodsColor = # lines of code

Page 17: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.17

Structural SpecificationTarget ......Scope ..........Metrics ....... ...... ......

....... ..... ........Layout ............Description ........................................................

.........................Goals ………………………………………..

……………………………Symptoms ……………………..

……………………………Scenario

Case Study ………………………………………..………………………..

The Polymetric View - Description

> Every polymetric view is described according to a common pattern

> Every view targets specific reverse engineering goals

> The polymetric views are implemented in CodeCrawler

System Complexity View

Page 18: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.18

Coarse-grained Software Visualization

> Reverse engineering question:— What is the size and the overall structure of the system?

> Coarse-grained reverse engineering goals:— Gain an overview in terms of size, complexity, and structure— Asses the overall quality of the system— Locate and understand important (domain model) hierarchies— Identify large classes, exceptional methods, dead code, etc.— …

Page 19: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.19

Coarse-grained Polymetric Views - Example

Method Efficiency Correlation View

Nodes: MethodsEdges: -Size: Number of method parametersPosition X: Number of lines of codePosition Y: Number of statements

LOC

NOS

Goals:• Detect overly long methods• Detect “dead” code• Detect badly formatted methods• Get an impression of the system in terms of coding style• Know the size of the system in # methods

Page 20: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.20

CodeCrawler Demo

Page 21: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.21

Clustering the Polymetric Views

First Contact

System HotspotsSystem ComplexityRoot Class DetectionImplementation Weight Distribution

Candidate Detection

Data Storage Class DetectionMethod Efficiency CorrelationDirect Attribute Access ViewMethod Length Distribution

Inheritance Assessment

Inheritance ClassificationInheritance CarrierIntermediate Abstract

Class Internal

The Class Blueprint

Page 22: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.22

Coarse-grained SV - Conclusions

>Benefits—Views are customizable (context…) and easily modifiable —Simple approach, yet powerful—Scalability

>Limits—Visual language must be learned

Page 23: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.23

Fine-grained Software Visualization

> Reverse engineering question:— What is the internal structure of the system and its elements?

> Fine-grained reverse engineering goals:— Understand the internal implementation of classes and class hierarchies— Detect coding patterns and inconsistencies— Understand class/subclass roles— Identify key methods in a class— …

Page 24: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.24

The Class Blueprint - Principles

Invocation Sequence

Initialization External Interface Internal Implementation Accessor Attribute

• The class is divided into 5 layers• Nodes

• Methods, Attributes, Classes• Edges

• Invocation, Access, Inheritance

• The method nodes are positioned according to

• Layer• Invocation sequence

Page 25: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.25

The Class Blueprint - Principles (II)

Attribute

Read Accessor

Delegating Method

Constant MethodAbstract Method

Overriding Method

Extending Method

Write Accessor

Method

# invocations

# lines

Attribute

# external accesses

# internal accesses

Direct Attribute AccessMethod Invocation

Page 26: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.26

The Class Blueprint - Example

> Delegate:— Delegates functionality to other classes— May act as a “Façade” (DP)

> Large Implementation:— Deep invocation structure— Several methods— High decomposition

> Wide Interface> Direct Access> Sharing Entries

Page 27: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.27

The Class Blueprint - A Pattern Language?

> The patterns reveal information about

— Coding style— Coding policies— Particularities

> We grouped them according to— Size— Layer distribution— Semantics— Call-flow— State usage

>Moreover…—Inheritance Context—Frequent pattern combinations—Rare pattern combinations

>They are all part of a pattern language

Page 28: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.28

The Class Blueprint - Example (II)

> Call-flow— Double Single Entry — (=> split class?)

> Inheritance— Adder— Interface overriders

> Semantics— Direct Access

> State Usage— Sharing Entries

Page 29: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.29

The Class Blueprint - What do we see?

Page 30: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.30

CodeCrawler Demo

Page 31: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.31

Fine-grained SV - Conclusions

> Benefits—Complexity reduction—Visual code inspection technique—Complements the coarse-grained views

> Limits—Visual language must be learned—Good object-oriented knowledge required—No information about actual functionality => opportunistic code

reading necessary

Page 32: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.32

Evolutionary Software Visualization

> Reverse engineering question:— How did the software system become like that?

> Evolutionary reverse engineering goals:— Understand the evolution of OO systems in terms of size and growth rate— Understand at which time an element, e.g., a class, has been added or removed

from the system— Understand the evolution of single classes— Detect patterns in the evolution of classes— …

Page 33: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.33

The Evolution Matrix - Principles

Last VersionFirst Version

Removed Classes

Time (Versions)

Growth Phase Stagnation Phase

Added Classes

Version 2 .. Version (n - 1)

Page 34: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.34

The Evolution Matrix - Principles (II)

>The Evolution Matrix reveals patterns—The evolution of the whole system (versions, growth and stagnation phases, growth rate, initial and final size)—The life-time of classes (addition, removal)

> Moreover, we enrich the evolution matrix view with metric information

> This allows us to see patterns in the evolution of classes

Class

# methods

# attributes

Page 35: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.35

The Evolution Matrix - Pattern Language

• Repeated Modifications make it grow and shrink. • System Hotspot: Nearly every new system version requires changes.• No “cheap class”

Pulsar

Supernova

• Suddenly increases in size, possible reasons: • Massive shift of functionality towards a class.• Data storage class• Developers knew what to fill in.

Time (Versions)

Page 36: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.36

The Evolution Matrix - Pattern Language (II)

• Lost the functionality it had and now trundles along without real meaning. • Possibly dead code.

White Dwarf

Red Giant

• A permanent god class which is always very large

Idle

• Keeps size over several versions. • Possibly dead code,possibly good code. Time (Versions)

Page 37: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.37

The Evolution Matrix - Pattern Language (III)

• Exists during only one or two versions. • Perhaps an idea which was tried out and then dropped.

• Has the same lifespan as the whole system. • Part of the original design. • Perhaps holy dead code which no one dares to remove.

Persistent

Dayfly

Page 38: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.38

The Evolution Matrix - Example

Page 39: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.39

Evolutionary Software Visualization - Demo

Page 40: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.40

Evolutionary SV - Conclusions

>Benefits—Complexity reduction

>Limits—Scalability (can be solved)—Rename problem (can be solved)—Relative changes hard to see (can be solved)

Page 41: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.41

Run-Time Analysis - Problems and Challenges

> RTA and Reverse Engineering - useful (in combination with static information)?> Procedural RTA vs. Object-Oriented RTA> OO RTA - Conceptual problems

— Polymorphism and late-binding— Inheritance and incremental class definition— Functionality (features) spread over the system— Which trace to generate? How?

> Technical challenges and constraints— Instrumentation problem (logging, VM patching, wrapping, ..)— Amount, density, and noise of generated information (Thousands of events in a few seconds..)— Granularity of information (object instantiations, message sends, attribute accesses, ..)— How much can we automate?

Page 42: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.42

RTA - Questions

> Can we merge the dynamic information with static information?> Can we use a ‘’successful’’ static technique like polymetric views in RTA?

— What are the most instantiated classes?— Are there any singletons?— Which classes are object factories?— What is the percentage of actually used methods in classes?— Memory consumption?— Speed bottlenecks?— …

Page 43: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.43

Case Study and Experiment Setup

> Case Study: Moose, our reengineering environment— Implementation language: Smalltalk— Age: 6 years— Size: >250 classes and >3500 methods and a test suite of more than 280 unit

tests (a veritable legacy system ;-)> Setup

— Code instrumentation using MethodWrappers— Trace Scenario(s) given by the Unit test suite— Wrapping down to method body level

> During trace-time we record events and increase counters> Afterwards we map the counter values as metrics

Page 44: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.44

Run-time Measurements

> NCM, the number called methods> NMI, the number of method invocations> NCI, the number of created instances, that is the number of times a

class has been instantiated> NCO, the number of created objects, that is the number of ‘foreign’

objects that a class’s objects instantiated > Condensed information leads to greater scalability> Tradeoff with granularity and sequence of a trace> Interval of the values can be great (logarithmic scaling useful)

Page 45: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.45

Instance Usage Overview

Nodes ClassesEdges InheritanceMetric Scale LogarithmicLayout TreeNode Width # of Created InstancesNode Height # of Called MethodsNode Color # of Method Invocations

SymptomsSmall, light: unusedNarrow, tall: few, but used, instancesFlat, pale: heavily instantiated, seldom usedFlat, dark: heavily instantiated, functionality partially but heavily used

ClassesA: CDIFScannerB: AttributeDescription (3500 instances, 350’000 calls!)C: FAMIX metamodel rootG: Uninstantiated FAMIX classes (!)I: Smalltalk AST Visitor hierarchy

Page 46: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.46

Creation Interaction View

Nodes ClassesEdges InstantiationMetric Scale LogarithmicLayout Embedded SpringNode Width # of Created ObjectsNode Height # of Created InstancesNode Color # of Created InstancesEdge Width # of Instantiations

SymptomsUnconnected: uninstantiatedConnected, small: classes with few instancesFlat, light: instance creators, seldom instantiated, possibly factoriesNarrow, dark: heavily instantiated, but do not create many other instancesWide, dark: heavily instantiated and used

Class ExamplesA: AttributeDescription - C: VWImporter (high-level import), D: VWParseTreeEnumerator (low-level import)E: FAMIXClass, ..Method, ..Attribute, etc. F: FAMIXAccess, FAMIXInvocation - G: MSEMeasurement (short-lived objects)

Page 47: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.47

Dynamic Information SV - Conclusions

>Pros—Some new views on software systems—Intuitive and compact way of presenting very large amounts of information—Insights into implementation issues—Side result: assessment of test suite

> Cons— Loss of granularity and order— Suitability for optimization domain

unclear— Probably does not really scale up

for very large systems (but this depends on the viewer and his/her will to interact..)

— The current approach is intrinsically interactive (automatisation would be possible using advanced metrics-based techniques like detection strategies)

Page 48: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.48

What about reality?

> Most IDEs have no or limited visualization support> Not an industry “standard”, most developers still have vi & emacs

mentality> Still poor usability

— May be used as “stand-alone” browsing tool, but not as part of a development metholodogy

— Needs much more effort (and people) to be “sexy”

> Ongoing work must cope with the “present hypes”, such as distributed development, eXtreme programming, etc.

Page 49: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.49

Epilogue

>Did we succeed after all?>Not completely, but…

—System Hotspots View on 1.200’000 LOC of C++—System Complexity View on ca. 200 classes of C++

The End

Page 50: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.50

Industrial Validation - The Acid Test

> Several large, industrial case studies (NDA)> Different implementation languages> Severe time constraints

System Language Lines of Code Classes

Z C++ 1’200’000 ~2300

Y C++/Java 120’000 ~400

X Smalltalk 600’000 ~2500

W COBOL 40’000 -

Sortie C/C++ 28’000 ~70

Duploc Smalltalk 32’000 ~230

Jun Smalltalk 135’000 ~700

ArgoUML Java 220’000 ~1400

Page 51: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.51

Questions and CommentsLet’s do it…

Page 52: OORPT Object-Oriented Reengineering Patterns and Techniques X. CHAPTER Prof. O. Nierstrasz

© Stéphane Ducasse, Serge Demeyer, Oscar Nierstrasz

OORPT — CHAPTER

X.52

License

> http://creativecommons.org/licenses/by-sa/2.5/

Attribution-ShareAlike 2.5You are free:• to copy, distribute, display, and perform the work• to make derivative works• to make commercial use of the work

Under the following conditions:

Attribution. You must attribute the work in the manner specified by the author or licensor.

Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one.

• For any reuse or distribution, you must make clear to others the license terms of this work.• Any of these conditions can be waived if you get permission from the copyright holder.

Your fair use and other rights are in no way affected by the above.

Attribution-ShareAlike 2.5You are free:• to copy, distribute, display, and perform the work• to make derivative works• to make commercial use of the work

Under the following conditions:

Attribution. You must attribute the work in the manner specified by the author or licensor.

Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one.

• For any reuse or distribution, you must make clear to others the license terms of this work.• Any of these conditions can be waived if you get permission from the copyright holder.

Your fair use and other rights are in no way affected by the above.