+ All Categories
Home > Documents > A Domain-Independent Formalism for Software Evolution Tom Mens Programming Technology Lab Vrije...

A Domain-Independent Formalism for Software Evolution Tom Mens Programming Technology Lab Vrije...

Date post: 25-Dec-2015
Category:
Upload: rhoda-wilson
View: 214 times
Download: 0 times
Share this document with a friend
39
A Domain-Independent Formalism for Software Evolution Tom Mens Programming Technology Lab Vrije Universiteit Brussel February, 2000
Transcript

A Domain-Independent Formalismfor Software Evolution

Tom MensProgramming Technology Lab

Vrije Universiteit Brussel

February, 2000

2

Overview of Presentation -

Introduction Motivation Reuse Contracts Example

Graph Rewriting Formalism Reuse Contract Formalism Scalability Issues Domain-Independence Experiments Conclusion

3

Motivation

Address lack of tool support for software evolution CASE tools, IDEs, version control tools

Provide formal foundation for reuse contracts clear and unambiguous definitions better insight in evolution process facilitate tool support improve scalability

4

Motivation ctd.

Lack of formal approaches to software evolution very few formal approaches available always domain-specific

architectural evolution evolving specifications

usually focus on anticipated changes e.g. run-time software reconfiguration

Need for domain-independent approach to unanticipated software evolution

5

Reuse Contracts

Document unanticipated evolution in a disciplined way Allow to detect conflicts

upgradereuse upgrade

conflict

evolutionevolution merge

conflict

When merging parallel evolutions of same software artifact (collaborative software development)

When upgrading to new versions of software

Lightweight approach simple ideas, easy to implement & customise

6

Pointcenter vertices

Circle

radius

area()circumference()

Triangle

area()circumference()

center 11 3

Example

Evolution of UML class diagrams

{*radius2}

Pointcenter vertices

Circle

radius

Triangle

1 3

Geo

area()circumference()

7

Overview of Presentation -

Introduction Graph Rewriting Formalism

Graphs Graph Rewriting Application Conditions

Reuse Contract Formalism Scalability Issues Domain-Independence Experiments Conclusion

8

Graphs

G

Triangle «class»

Circle «class»

«isa»

intersects «operation»

«assoc»

center

radius «attribute»

«hasa»

vertices

{3}

Point «class»Geo «class»

area «operation»

circumference «operation»

x «attribute»

distanceTo «operation»

y «attribute»

«isa»

• Internal Graph Representation

intersects(c: Circle)

radius

Circle

distanceTo(p: Point)

xy

Point

Triangle

area()circumference()

Geocenter

vertices 3

• Example: UML class diagram Node types:

«class» «attribute» «operation» «interface»

Edge types: «assoc» «hasa»

(aggregation) «isa»

(generalisation) «implements»

9

Type Graph

Node & edge subtype hierarchy Additional constraints needed

e.g. inheritance hierarchy is acyclic

v

e

node type

edge type

implements

nested

operation

attribute

interface

class

assoc, hasa, isa

isa

uses

invokes

nested

nested

10

(Conditional) Graph Rewriting

L

area «operation»

radius «attribute»

P

m

R

area «operation»

radius «attribute»

«uses»

G

Circle «class»

area «operation»

«uses»

circumference «operation»

radius «attribute»

L’

area «operation»

radius «attribute»

C

s

use application conditions: more expressive and concise

represents evolution of arbitrary software artifacts Algebraic single-pushout approach

H

Circle «class»

area «operation»«uses»

circumference «operation»

radius «attribute»«uses»

pushout

constr

uction

11

Anticipated vs. Unanticipated

Application conditions can be used to cope with Anticipated evolution

restrict possible evolutions of a single graph attach application condition to graph

restrict possible evolutions of all graphs attach application condition to graph rewriting system

Unanticipated evolution (Reuse Contracts) Attach application condition to a graph production

to detect structural conflicts more easily

12

Overview of Presentation -

Introduction Graph Rewriting Formalism Reuse Contract Formalism

Detecting evolution conflicts Primitive contract types Applicability conflicts Evolution conflicts

Scalability Issues Domain-Independence Experiments Conclusion

13

Detecting Evolution Conflicts

Two kinds of evolution conflicts Syntactic conflicts Semantic conflicts

Conservative approach: only generate conflict warnings

Approach Provide general formal definition

in terms of graph rewriting formalism

Complete fine-grained characterisation

14

Use a restricted set of possible graph productions

Extension Cancellation

Refinement Coarsening

NodeRetyping EdgeRetyping

Primitive Contract Types

Refinement(,area,radius,«uses»)

R

area «operation»

radius «attribute»

«u

ses»

L «u

ses»

area «operation»

radius «attribute»

Cancellation(area,«operation»)

L

«operation»area

R

15

Structural Conflicts

Refinement(,area,radius,«uses»)

• Applicability conflict if P1 and P2 not parallel independent• Gives rise to ill-formed result graph (syntactic conflict)

G

Circle «class»

area «operation»

circumference «operation»

radius «attribute»«uses»

<<uses>>

G2

Circle «class»

circumference «operation»

radius «attribute»«uses»

G1

Circle «class»

area «operation»

circumference «operation»

radius «attribute»«uses»

«uses»

Cancellation(area,«operation»)

Undefined source conflict

Refinement

Cancellation

P1

P2

16

Applicability Conflict Table

Complete fine-grained characterisation of applicability conflicts

AC3

  Extend(v,)

Cancel(v,)

Refine(e,v,w,)

Refine(e,u,v,)

Coarsen(e,v,w,)

Coarsen(e,u,v,)

Nretype(v,,)

ERetype(e,v,w,,)

ERetype(e,u,v,,)

Extension(v,)

AC1

Cancellation(v,)

AC2 AC3 AC4 AC9

Refinement(e,v,w,)

AC5

Refinement(e,u,v,)

AC4 AC5

Coarsening(e,v,w,)

AC6 AC10

if =

Coarsening(e,u,v,)

AC6 AC10

if =NodeRetype

(v,,) AC9 AC7

EdgeRetype(e,v,w,,)

AC10

if = AC8

if =

EdgeRetype(e,u,v,,)

AC10

if = AC8

if =

17

Applicability Conflict Table ctd. Duplicate Node Conflict Double Cancellation Conflict Undefined Source Conflict Undefined Target Conflict Duplicate Edge Conflict Double Coarsening Conflict Double Node Retyping Conflict Double Edge Retyping Conflict Undefined Node Retyping Conflict Undefined Edge Retyping Conflict

18

Alternative Conflict Table

Compare breaches of application conditions more general

does not rely on primitive contract types

more scalable can be used directly for composite contract types

or domain-specific contract types

19

AC1

AC8

AC7

AC10

AC6 AC10

AC9

AC9

AC5

AC3

AC3

AC2

Alternative Conflict Table

v v v we v we type(v)= type(e,v,w)=

v

v

v we

v we

type(v)=

type(e,v,w)=

20

Evolution Conflicts

L1

area «operation»

radius «attribute»

R1

area «operation»

radius «attribute»«uses»

G

Circle «class»

area «operation»

circumfer «operation»

radius «attribute»«uses»

G1

Circle «class»

area «operation»

circumfer «operation»

radius «attribute»

«uses»

«uses»

m1

Refinement(,area,radius,«uses»)

H

Circle «class»

area «operation»

circumfer «operation»

radius «attribute»

«uses»

«uses»

«uses»

Pushout

construction

L2

area «operation»

circumfer «operation»

R2

area «operation»

circumfer «operation»

«uses»

G2

Circle «class»

area «operation»

«uses»

circumfer «operation»

radius «attribute»«uses»

Refinement(,area,circumference,«uses»)

m2

L

area «operation»

Pullback

construction

area «operation»

area «operation»

21

Finer-grained characterisation Compare pairs of primitive contract types

double reachability conflict cycle introduction conflict

Detect graph patterns in result of merge more general more scalable

Evolution Conflict Detection

«uses»area radius

«uses»

{evolver 1}

{evolver 2}

23

Overview of Presentation -

Introduction Graph Rewriting Formalism Reuse Contract Formalism Scalability Issues

Composite Contract Types Normalisation

Domain-Independence Experiments Conclusion

24

Composite Contract Types

G0

Triangle «class»

area «operation»

Circle «class»

area «operation»

«assoc»center

circumference «operation» circumference «operation»

«assoc»

center

radius «attribute»

«hasa»vertices

Point «class»

G1

Triangle «class»

area «operation»

Circle «class»

area «operation»

circumference «operation» circumference «operation»

«assoc»

center

radius «attribute»

«hasa»vertices

Point «class»Geo «class»

«isa»«isa»

CreateSuperclass(Geo,[Circle,Triangle])

Extension(Geo,«class»)Refinement(,Circle,Geo,«isa»)

Refinement(,Triangle,Geo,«isa»)Coarsening(center,Circle,Point,«assoc»)

Coarsening(center,Triangle,Point,«assoc»)Refinement(center,Geo,Point,«assoc»)

25

Composite Contract Types ctd.

MoveNode(area,«operation»,Circle,Geo)MoveNode(circumference,«operation»,Circle,Geo)

Cancellation(Triangle.area,«operation»)Cancellation(Triangle.circumference,«operation»)

Refactor(Geo,[area,circumference])

G1

Triangle «class»

area «operation»

Circle «class»

area «operation»

circumference «operation» circumference «operation»

«assoc» cente

r

radius «attribute»

«hasa»vertices

Point «class»Geo «class»

«isa»«isa»

G2

Triangle «class»

Circle «class»

«assoc»center

radius «attribute»«hasa»vertices

Point «class»

Geo «class»

«isa»

«isa»

area «operation»

circumference «operation»

26

Composite Contract Types ctd.

Composite contract types can be domain-independent can be domain-specific (e.g. CreateSuperclass) are defined as composite productions

Conflicts can be detected directly using alternative applicability conflict table using graph pattern approach

Advantages more practical in use atomic, more efficient remove unnecessary conflict warnings

27

Normalisation algorithm

Remove redundancy in evolution sequence remove redundant couples

Extension; Cancellation

absorb couples of primitive contract types Refinement; EdgeRetyping = Refinement

Rearrange primitive contract types based on sequential independence canonical form

Extensions; NodeRetypings; Refinements, ...

28

Normalisation ctd.

Advantages compacts evolution sequence (reduces

complexity) removes unnecessary conflict warnings makes evolution process easier to understand

finding specific modifications comparing differences between parallel evolutions

To do improve efficiency of normalisation algorithm rely on canonical form for merging normalised

evolution sequences

29

Overview of Presentation -

Introduction Graph Rewriting Formalism Reuse Contract Formalism Scalability Issues Domain-Independence

Possible Customisations Customising the formalism Case studies

Experiments Conclusion

30

Possible Customisations

class collaborations extension and generalisation of [Lucas97] similar to UML collaboration diagrams

[Mens&al99]

UML class diagrams software architectures [Romero99] others

other UML diagrams non-OO paradigms?

31

Case study: UML class diagrams

Specify type graph & type constraints Specify domain-specific modifications

Primitive contract types Extension: AddOperation, AddAttribute, AddClassifier Cancellation: DropOperation, DropAttribute, DropClassifier Refinement: AddGeneralisation, AddAssociation

Composite contract types (e.g. CreateSuperclass)

Fine-tune conflict detection type graph gives rise to new applicability conflicts wf-constraints capture some evolution conflict

warnings e.g. cycle introduction for inheritance-edges

use domain-specific knowledge to ignore conflict warnings e.g. ignore cycle introduction for associations

32

Domain-specific normalisation

AddClass(B); AddClass(A); AddOperation(A.m);

DropClass(B); AddAttribute(A.a);

DropOperation(A.m)

Extension(B,«class»); Extension(A,«class»);

Extension(A.m,«operation»); Cancellation(B,«class»);

Extension(A.a,«attribute»); Cancellation(A.m,«operation»)

Extension(A,«class»); Extension(A.a, «attribute»)

normalisation

AddClass(A); AddAttribute(A.a)

Dom

ain-

inde

pend

ent

fram

ewor

k

Dom

ain-

spec

ific

cu

stom

isat

ion

translation translation

(not for composite contract types)

33

Case study: software architectures

need to detect more high-level conflicts introduce derived edges

in

«gate»

out

«gate»

«link»

Parser «component»

Pipe2 «connector»

Semantor «component» Coder «component»

Pipe3 «connector»

«link» «link» «link»

SequentialCompiler «architecture»

Lexer «component»

Pipe1 «connector»

«link» «link»

«binding» «binding»

in

«gate»

in

«gate»

in

«gate»

in

«gate»

in

«gate»

in

«gate»

in

«gate»

out

«gate»

out

«gate»

out

«gate»

out

«gate»

out

«gate»

out

«gate»

out

«gate»«pipe» «pipe» «pipe»

34

Overview of Presentation -

Introduction Graph Rewriting Formalism Reuse Contract Formalism Scalability Issues Domain-Independence Experiments Conclusion

35

Experiments

Implementation of basic formalism primitive contract types, conflict detection implemented in PROLOG

rapid prototyping expressing conflict detection rules directly unification mechanism for detecting graph patterns use SOUL to access and reason about Smalltalk code

Scalability normalisation algorithm no validation of composite contract types

lack of adequate (large-scale) industry case

36

Experiments ctd.

Domain-specific customisation customisations of PROLOG framework

UML class diagrams small experiments with UML CASE tools identify basic conflicts for class diagrams

(based on small changes in industry case study) software architectures [Romero99]

Further experiments needed develop and implement efficient algorithms validate scalability aspects integrate in CASE tool and version control tool

37

Current-day version control systems use version graph perform textual merging

only research prototypes for syntactic/semantic merging

Next generation version control tools Use normalisation

to compact version graph to compare between alternative variants easily refactor commonalities in different variants

More sophisticated merge tools syntactic and semantic merging domain-independent

RCs for version control

38

Overview of Presentation -

Introduction Graph Rewriting Formalism Reuse Contract Formalism Scalability Issues Domain-Independence Experiments Conclusion

Contribution Future Work

39

Contribution

Domain-independent formalism for evolution can be applied in all phases of software life-cycle

Reuse contract formalism enables formal distinction between syntactic & semantic conflicts complete fine-grained characterisation of conflicts scalability (composite contract types, normalisation)

Simple yet general model for evolution easy to implement in tools simple ideas with large practical impact

Better support for evolution in tools CASE tools, IDEs, version control systems

40

Future Work

Focus on conflict resolution More scalability issues

techniques to reduce potential conflicts use more sophisticated conflict detection techniques

in presence of composite contract types modify normalisation algorithm factorisation algorithm for generating composite contract types formal properties (e.g. commutativity, inverse, ...)

Co-evolution between different models / between model and metamodel

Enhancing underlying graph formalism nested hyperedges, encapsulation mechanism, parameterisation

mechanism, more complex application conditions, ... extension needs to preserve formal properties


Recommended