Change-Oriented Software Engineering

57
Change-Oriented Software Engineering Peter Ebraert , Jorge Vallejos, Pascal Costanza, Ellen Van Paesschen and Theo D’Hondt

Transcript of Change-Oriented Software Engineering

Page 1: Change-Oriented Software Engineering

Change-Oriented Software Engineering

Peter Ebraert, Jorge Vallejos, Pascal Costanza, Ellen Van Paesschen and Theo D’Hondt

Page 2: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change-oriented SW Eng.

• Software Development

• ≠Writing a text

• Constructing a system by means of building blocks

2

Page 3: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change-oriented SW Eng.

• Software Development

• ≠Writing a text

• Constructing a system by means of building blocks

• Construction

• Changing a construction yard towards a required structure

2

Page 4: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change-oriented SW Eng.

• Software Development

• ≠Writing a text

• Constructing a system by means of building blocks

• Construction

• Changing a construction yard towards a required structure

• Software Development

2

Page 5: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change-oriented SW Eng.

• Software Development

• ≠Writing a text

• Constructing a system by means of building blocks

• Construction

• Changing a construction yard towards a required structure

• Software Development

2

∈ Software evolution

Page 6: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change-Oriented Support

3

Page 7: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change-Oriented Support

3

Page 8: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change-Oriented Support?

4

Page 9: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change-Oriented Support?

4

Page 10: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

What do we want?

• Support for changes in forward engineering

• Undo mechanism

• Readable change list

• Change objects which can be reused

• Changes should be applicable on different software systems / different platforms

5

Page 11: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

What do we want?

• Support for changes in forward engineering

• Undo mechanism

• Readable change list

• Change objects which can be reused

• Changes should be applicable on different software systems / different platforms

5

‣ Evolvability & Maintainability

Page 12: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

What do we want?

• Support for changes in forward engineering

• Undo mechanism

• Readable change list

• Change objects which can be reused

• Changes should be applicable on different software systems / different platforms

5

‣ Evolvability & Maintainability

‣ Understandability

Page 13: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

What do we want?

• Support for changes in forward engineering

• Undo mechanism

• Readable change list

• Change objects which can be reused

• Changes should be applicable on different software systems / different platforms

5

‣ Evolvability & Maintainability

‣ Understandability

‣ Reusability

Page 14: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Is there a solution around?

• Centralise Change in the development process

• First-class change objects

• A Model for first-class changes

• What models exist already?

• Spyware change model

• ChangeList change model

6

Page 15: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Example case

7

Page 16: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Example case

7

send:(m: String)receive:from:(m: String, s: User)name()

usernameUser

usersget:from:(m: String, s: User)register(u: User)unregister(u: User)

Chatroom

cr

cr get: m from: self

Transcript show: (s name + ': ' + m)

^ username

( " % users:

u receive: m from: s

Page 17: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Evolution scenario

8

users

send:(m: String)receive:from:(m: String, s: User)

User

get:from:(m: String, u: User)register(u: User)unregister(u: User)

Chatroom

cr

name()usernameRegisteredUser

name() Guest

^ 'guest'

cr get: m from: self

Transcript show: (s name + ': ' + m)

^ username

# ! " users:

u receive: m from: s

send:(m: String)receive:from:(m: String, s: User)name()encrypt:(m: String)decrypt:(m: String)

usernameUser

usersget:from:(m: String, s: User)register(u: User)unregister(u: User)

Chatroom

∀ u ∈ users:

u receive: m from: s

cr

f (m)

f !1 (m)

cr get: (self encrypt: m) from: self

Transcript show:(s name + ': ' +s decrypt: m)

^ username

Introducing different kinds of users

Ensuring user privacy

Page 18: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

ChangeList’s Change Log1 Created package ChatApp 2 define User 3 doIt User organisation addCategory:#messaging 4 User receive:from: (change) 5 define User 6 define User 7 User send: (change) 8 doIt User organisation addCategory:#accessing 9 User name (change) 10 define Chatroom 11 define Chatroom 12 doIt Chatroom organisation addCategory:#messaging 13 Chatroom get:from: (change) 14 doit Chatroom organisation addCataegory:#registering 15 Chatroom register: (change) 16 Chatroom unregister: (change) 17 18 define Guest 19 doIt Guest organisation addCategory:#messaging 20 Guest name (change) 21 define RegisteredUser 22 RegisteredUser name (change) 23 User name (remove) 24 define User 25 define RegisteredUser 26 27 doIt User organisation addCategory:#encryption 28 User encrypt: (change) 29 User decrypt: (change) 30 User send: (change) 31 User receive:from: (change)

9

Page 19: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

ChangeList’s Change Log1 Created package ChatApp 2 define User 3 doIt User organisation addCategory:#messaging 4 User receive:from: (change) 5 define User 6 define User 7 User send: (change) 8 doIt User organisation addCategory:#accessing 9 User name (change) 10 define Chatroom 11 define Chatroom 12 doIt Chatroom organisation addCategory:#messaging 13 Chatroom get:from: (change) 14 doit Chatroom organisation addCataegory:#registering 15 Chatroom register: (change) 16 Chatroom unregister: (change) 17 18 define Guest 19 doIt Guest organisation addCategory:#messaging 20 Guest name (change) 21 define RegisteredUser 22 RegisteredUser name (change) 23 User name (remove) 24 define User 25 define RegisteredUser 26 27 doIt User organisation addCategory:#encryption 28 User encrypt: (change) 29 User decrypt: (change) 30 User send: (change) 31 User receive:from: (change)

9

Restricted Level Of Granularity

Page 20: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

ChangeList’s Change Log1 Created package ChatApp 2 define User 3 doIt User organisation addCategory:#messaging 4 User receive:from: (change) 5 define User 6 define User 7 User send: (change) 8 doIt User organisation addCategory:#accessing 9 User name (change) 10 define Chatroom 11 define Chatroom 12 doIt Chatroom organisation addCategory:#messaging 13 Chatroom get:from: (change) 14 doit Chatroom organisation addCataegory:#registering 15 Chatroom register: (change) 16 Chatroom unregister: (change) 17 18 define Guest 19 doIt Guest organisation addCategory:#messaging 20 Guest name (change) 21 define RegisteredUser 22 RegisteredUser name (change) 23 User name (remove) 24 define User 25 define RegisteredUser 26 27 doIt User organisation addCategory:#encryption 28 User encrypt: (change) 29 User decrypt: (change) 30 User send: (change) 31 User receive:from: (change)

9

Restricted Level Of Granularity7 User send: (change)

30 User send: (change)

Page 21: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

ChangeList’s Change Log1 Created package ChatApp 2 define User 3 doIt User organisation addCategory:#messaging 4 User receive:from: (change) 5 define User 6 define User 7 User send: (change) 8 doIt User organisation addCategory:#accessing 9 User name (change) 10 define Chatroom 11 define Chatroom 12 doIt Chatroom organisation addCategory:#messaging 13 Chatroom get:from: (change) 14 doit Chatroom organisation addCataegory:#registering 15 Chatroom register: (change) 16 Chatroom unregister: (change) 17 18 define Guest 19 doIt Guest organisation addCategory:#messaging 20 Guest name (change) 21 define RegisteredUser 22 RegisteredUser name (change) 23 User name (remove) 24 define User 25 define RegisteredUser 26 27 doIt User organisation addCategory:#encryption 28 User encrypt: (change) 29 User decrypt: (change) 30 User send: (change) 31 User receive:from: (change)

9

Restricted Level Of Granularity

Term Overloading

Page 22: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

ChangeList’s Change Log1 Created package ChatApp 2 define User 3 doIt User organisation addCategory:#messaging 4 User receive:from: (change) 5 define User 6 define User 7 User send: (change) 8 doIt User organisation addCategory:#accessing 9 User name (change) 10 define Chatroom 11 define Chatroom 12 doIt Chatroom organisation addCategory:#messaging 13 Chatroom get:from: (change) 14 doit Chatroom organisation addCataegory:#registering 15 Chatroom register: (change) 16 Chatroom unregister: (change) 17 18 define Guest 19 doIt Guest organisation addCategory:#messaging 20 Guest name (change) 21 define RegisteredUser 22 RegisteredUser name (change) 23 User name (remove) 24 define User 25 define RegisteredUser 26 27 doIt User organisation addCategory:#encryption 28 User encrypt: (change) 29 User decrypt: (change) 30 User send: (change) 31 User receive:from: (change)

9

Restricted Level Of Granularity

Term Overloading

2 define User

5 define User6 define User

24 define User

Page 23: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

ChangeList’s Change Log1 Created package ChatApp 2 define User 3 doIt User organisation addCategory:#messaging 4 User receive:from: (change) 5 define User 6 define User 7 User send: (change) 8 doIt User organisation addCategory:#accessing 9 User name (change) 10 define Chatroom 11 define Chatroom 12 doIt Chatroom organisation addCategory:#messaging 13 Chatroom get:from: (change) 14 doit Chatroom organisation addCataegory:#registering 15 Chatroom register: (change) 16 Chatroom unregister: (change) 17 18 define Guest 19 doIt Guest organisation addCategory:#messaging 20 Guest name (change) 21 define RegisteredUser 22 RegisteredUser name (change) 23 User name (remove) 24 define User 25 define RegisteredUser 26 27 doIt User organisation addCategory:#encryption 28 User encrypt: (change) 29 User decrypt: (change) 30 User send: (change) 31 User receive:from: (change)

9

Restricted Level Of Granularity

Term Overloading

Lack Of High-level Changes

Page 24: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

ChangeList’s Change Log1 Created package ChatApp 2 define User 3 doIt User organisation addCategory:#messaging 4 User receive:from: (change) 5 define User 6 define User 7 User send: (change) 8 doIt User organisation addCategory:#accessing 9 User name (change) 10 define Chatroom 11 define Chatroom 12 doIt Chatroom organisation addCategory:#messaging 13 Chatroom get:from: (change) 14 doit Chatroom organisation addCataegory:#registering 15 Chatroom register: (change) 16 Chatroom unregister: (change) 17 18 define Guest 19 doIt Guest organisation addCategory:#messaging 20 Guest name (change) 21 define RegisteredUser 22 RegisteredUser name (change) 23 User name (remove) 24 define User 25 define RegisteredUser 26 27 doIt User organisation addCategory:#encryption 28 User encrypt: (change) 29 User decrypt: (change) 30 User send: (change) 31 User receive:from: (change)

9

Restricted Level Of Granularity

Term Overloading

Lack Of High-level Changes

User Kinds

User Privacy

Page 25: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

ChangeList’s Change Log1 Created package ChatApp 2 define User 3 doIt User organisation addCategory:#messaging 4 User receive:from: (change) 5 define User 6 define User 7 User send: (change) 8 doIt User organisation addCategory:#accessing 9 User name (change) 10 define Chatroom 11 define Chatroom 12 doIt Chatroom organisation addCategory:#messaging 13 Chatroom get:from: (change) 14 doit Chatroom organisation addCataegory:#registering 15 Chatroom register: (change) 16 Chatroom unregister: (change) 17 18 define Guest 19 doIt Guest organisation addCategory:#messaging 20 Guest name (change) 21 define RegisteredUser 22 RegisteredUser name (change) 23 User name (remove) 24 define User 25 define RegisteredUser 26 27 doIt User organisation addCategory:#encryption 28 User encrypt: (change) 29 User decrypt: (change) 30 User send: (change) 31 User receive:from: (change)

9

Restricted Level Of Granularity

Term Overloading

Lack Of High-level Changes

No exploration facilities

Page 26: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

ChangeList’s Change Log1 Created package ChatApp 2 define User 3 doIt User organisation addCategory:#messaging 4 User receive:from: (change) 5 define User 6 define User 7 User send: (change) 8 doIt User organisation addCategory:#accessing 9 User name (change) 10 define Chatroom 11 define Chatroom 12 doIt Chatroom organisation addCategory:#messaging 13 Chatroom get:from: (change) 14 doit Chatroom organisation addCataegory:#registering 15 Chatroom register: (change) 16 Chatroom unregister: (change) 17 18 define Guest 19 doIt Guest organisation addCategory:#messaging 20 Guest name (change) 21 define RegisteredUser 22 RegisteredUser name (change) 23 User name (remove) 24 define User 25 define RegisteredUser 26 27 doIt User organisation addCategory:#encryption 28 User encrypt: (change) 29 User decrypt: (change) 30 User send: (change) 31 User receive:from: (change)

9

Restricted Level Of Granularity

Term Overloading

Lack Of High-level Changes

No exploration facilities

=> Bad for all the “ilities”

Page 27: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007 10

Model of First-class Changes

Fine-grained Changes

Composable Changes

Dependent Changes

Intensional Changes

Change-oriented IDE

Page 28: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Fine-grained Changes

11

Page 29: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007 12

Model of First-class Changes

Fine-grained Changes

Composable Changes

Dependent Changes

Intensional Changes

Change-oriented IDE

Page 30: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Composable Changes

13

whenwhere

. . .Change

whenwhere

. . .

AtomicChange

whenwhere

. . .

CompositeChange

changes

Hierarchy of Atomic Change Classes

RefactoringsHigh level changes

Page 31: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007 14

Model of First-class Changes

Fine-grained Changes

Composable Changes

Dependent Changes

Intensional Changes

Change-oriented IDE

Page 32: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Dependent Changes

15

anAddClasstimestamp

subchanges

isApplied

name

belongsTo

definition

classObject

isAbstract

accessor

anAddMethodtimestamp

subchanges

isApplied

name

belongsTo

accessor

signature

body

returnType

isGetter

isSetter

definition

methodObject

isInstanceMethod

protocols

selector

parameters

send:(m: String)username

User

cr get: m from: self

anAddAttributetimestamp

subchanges

isApplied

name

belongsTo

definition

classObject

oldInstancevariables

olsClassVariables

isInstanceVariable

initialisationValue

anAddAccessChange

timestamp

subchanges

isApplied

initiatorName

initiatorObject

linenr

accesses

scope

read

write

value

isReturnValue

anAddInvocationChange

timestamp

subchanges

isApplied

initiatorName

initiatorObject

linenr

receiver

receiverType

message

arguments

argumentTypes

isReturnValue

anAddAccessChange

timestamp

subchanges

isApplied

initiatorName

initiatorObject

linenr

accesses

scope

read

write

value

isReturnValue

Page 33: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Dependent Changes

15

anAddClasstimestamp

subchanges

isApplied

name

belongsTo

definition

classObject

isAbstract

accessor

anAddMethodtimestamp

subchanges

isApplied

name

belongsTo

accessor

signature

body

returnType

isGetter

isSetter

definition

methodObject

isInstanceMethod

protocols

selector

parameters

send:(m: String)username

User

cr get: m from: self

anAddAttributetimestamp

subchanges

isApplied

name

belongsTo

definition

classObject

oldInstancevariables

olsClassVariables

isInstanceVariable

initialisationValue

anAddAccessChange

timestamp

subchanges

isApplied

initiatorName

initiatorObject

linenr

accesses

scope

read

write

value

isReturnValue

anAddInvocationChange

timestamp

subchanges

isApplied

initiatorName

initiatorObject

linenr

receiver

receiverType

message

arguments

argumentTypes

isReturnValue

anAddAccessChange

timestamp

subchanges

isApplied

initiatorName

initiatorObject

linenr

accesses

scope

read

write

value

isReturnValue

Page 34: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Dependent Changes

15

anAddClasstimestamp

subchanges

isApplied

name

belongsTo

definition

classObject

isAbstract

accessor

anAddMethodtimestamp

subchanges

isApplied

name

belongsTo

accessor

signature

body

returnType

isGetter

isSetter

definition

methodObject

isInstanceMethod

protocols

selector

parameters

send:(m: String)username

User

cr get: m from: self

anAddAttributetimestamp

subchanges

isApplied

name

belongsTo

definition

classObject

oldInstancevariables

olsClassVariables

isInstanceVariable

initialisationValue

anAddAccessChange

timestamp

subchanges

isApplied

initiatorName

initiatorObject

linenr

accesses

scope

read

write

value

isReturnValue

anAddInvocationChange

timestamp

subchanges

isApplied

initiatorName

initiatorObject

linenr

receiver

receiverType

message

arguments

argumentTypes

isReturnValue

anAddAccessChange

timestamp

subchanges

isApplied

initiatorName

initiatorObject

linenr

accesses

scope

read

write

value

isReturnValue

Page 35: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007 16

Model of First-class Changes

Fine-grained Changes

Composable Changes

Dependent Changes

Intensional Changes

Change-oriented IDE

Page 36: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Intensional Changes

17

send:(m: String)receive:from:(m: String, s: User)encrypt:(m: String)decrypt:(m: String)

User

usersget:from:(m: String, s: User)register(u: User)unregister(u: User)

Chatroom

cr

name()usernameRegisteredUser

name() Guest

cr get: (self encrypt: m) from: self

Transcript show:(s name + ': ' +s decrypt: m) ∀ u ∈ users:

u receive: m from: s

^ 'guest'^ username

f (m)

f !1 (m)

Page 37: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Intensional Changes

• Rename method Refactoring:

• Change the name() method to username()

17

send:(m: String)receive:from:(m: String, s: User)encrypt:(m: String)decrypt:(m: String)

User

usersget:from:(m: String, s: User)register(u: User)unregister(u: User)

Chatroom

cr

name()usernameRegisteredUser

name() Guest

cr get: (self encrypt: m) from: self

Transcript show:(s name + ': ' +s decrypt: m) ∀ u ∈ users:

u receive: m from: s

^ 'guest'^ username

f (m)

f !1 (m)

Page 38: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Intensional Changes

17

send:(m: String)receive:from:(m: String, s: User)encrypt:(m: String)decrypt:(m: String)

User

usersget:from:(m: String, s: User)register(u: User)unregister(u: User)

Chatroom

cr

name()usernameRegisteredUser

name() Guest

cr get: (self encrypt: m) from: self

Transcript show:(s name + ': ' +s decrypt: m) ∀ u ∈ users:

u receive: m from: s

^ 'guest'^ username

f (m)

f !1 (m)

Algorithm 1 Change method body: extension Change the name of method name in class RegisteredUser to username Change the name of method name in class Guest to username Change the invocation s name in method receive:from: from User to s username

Page 39: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Intensional Changes

17

send:(m: String)receive:from:(m: String, s: User)encrypt:(m: String)decrypt:(m: String)

User

usersget:from:(m: String, s: User)register(u: User)unregister(u: User)

Chatroom

cr

name()usernameRegisteredUser

name() Guest

cr get: (self encrypt: m) from: self

Transcript show:(s name + ': ' +s decrypt: m) ∀ u ∈ users:

u receive: m from: s

^ 'guest'^ username

f (m)

f !1 (m)

Algorithm 2 Change method body: intension Change the name of method name in all subclasses of the class User to username Change every invocation of that method name to an invocation of method username

Page 40: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Intensional Changes

17

send:(m: String)receive:from:(m: String, s: User)encrypt:(m: String)decrypt:(m: String)

User

usersget:from:(m: String, s: User)register(u: User)unregister(u: User)

Chatroom

cr

name()usernameRegisteredUser

name() Guest

cr get: (self encrypt: m) from: self

Transcript show:(s name + ': ' +s decrypt: m) ∀ u ∈ users:

u receive: m from: s

^ 'guest'^ username

f (m)

f !1 (m)

Algorithm 2 Change method body: intension Change the name of method name in all subclasses of the class User to username Change every invocation of that method name to an invocation of method username

=> More robust to change

Page 41: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007 18

Model of First-class Changes

Fine-grained Changes

Composable Changes

Dependent Changes

Intensional Changes

Change-oriented IDE

Page 42: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change-Oriented IDE

19

Chronologically

Page 43: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007 20

Change-Oriented IDE

As a high-level change hierarchy

Page 44: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change-Oriented IDE

21

As a dependent change hierarchy

Page 45: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change List by ChEOPS

22

1 Changes on ChatApp package: vegsoc.gif2 Add new class "User" 3 Add new instance method "receive: m from: s" to class "User" 4 -> Invocation tree 5 Add new instance variable "cr" to class "User" 6 Add new instance variable "username" to class "User" 7 Add new instance method "send: m" to class "User" 8 -> Invocation tree 9 Add new instance method "name" to class "User" 10 -> Add Read Access 11 Add new class "ChatRoom" 12 Add new instance variable "users" to class "ChatRoom" 13 Add new instance method "get: m from: s" to class "ChatRoom" 14 -> Invocation tree 15 Add new instance method "register: u" to class "ChatRoom" 16 -> Invocation tree 17 Add new instance method "unregister: u" to class "ChatRoom" 18 Add invocation "users remove: u"

1 Changes on ChatApp package: 2 Add new class "Guest" 3 Add new instance method "name" to class "Guest" 4 -> Invocation tree Added 5 Add new class "RegisteredUser" 6 Add new empty instance method "name" to class "RegisteredUser" 7 Add read access to behavioral entity "name" >> return value of variable "username" 8 Remove instance method "name" from class "User" 9 -> Invocation tree Removed

1 Changes on ChatApp package: 2 Add new instance method "encrypt: m" to class "User" 3 -> Invocation tree Added 4 Add new instance method "decrypt: m" to class "User" 5 -> Invocation tree Added 6 Remove instance method "receive: m from: s" from class "User" 7 -> Invocation tree Removed 8 Add new instance method "receive: m from: s" to class "User" 9 -> Invocation tree Added 10 Remove instance method "send: m" from class "User" 11 -> Invocation tree Removed 12 Add new instance method "send: m" to class "User" 13 -> Invocation tree Added

Page 46: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change List by ChEOPS

22

Restricted Level Of Granularity1 Changes on ChatApp package: vegsoc.gif2 Add new class "User" 3 Add new instance method "receive: m from: s" to class "User" 4 -> Invocation tree 5 Add new instance variable "cr" to class "User" 6 Add new instance variable "username" to class "User" 7 Add new instance method "send: m" to class "User" 8 -> Invocation tree 9 Add new instance method "name" to class "User" 10 -> Add Read Access 11 Add new class "ChatRoom" 12 Add new instance variable "users" to class "ChatRoom" 13 Add new instance method "get: m from: s" to class "ChatRoom" 14 -> Invocation tree 15 Add new instance method "register: u" to class "ChatRoom" 16 -> Invocation tree 17 Add new instance method "unregister: u" to class "ChatRoom" 18 Add invocation "users remove: u"

1 Changes on ChatApp package: 2 Add new class "Guest" 3 Add new instance method "name" to class "Guest" 4 -> Invocation tree Added 5 Add new class "RegisteredUser" 6 Add new empty instance method "name" to class "RegisteredUser" 7 Add read access to behavioral entity "name" >> return value of variable "username" 8 Remove instance method "name" from class "User" 9 -> Invocation tree Removed

1 Changes on ChatApp package: 2 Add new instance method "encrypt: m" to class "User" 3 -> Invocation tree Added 4 Add new instance method "decrypt: m" to class "User" 5 -> Invocation tree Added 6 Remove instance method "receive: m from: s" from class "User" 7 -> Invocation tree Removed 8 Add new instance method "receive: m from: s" to class "User" 9 -> Invocation tree Added 10 Remove instance method "send: m" from class "User" 11 -> Invocation tree Removed 12 Add new instance method "send: m" to class "User" 13 -> Invocation tree Added

Page 47: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change List by ChEOPS

22

Restricted Level Of Granularity1 Changes on ChatApp package: vegsoc.gif2 Add new class "User" 3 Add new instance method "receive: m from: s" to class "User" 4 -> Invocation tree 5 Add new instance variable "cr" to class "User" 6 Add new instance variable "username" to class "User" 7 Add new instance method "send: m" to class "User" 8 -> Invocation tree 9 Add new instance method "name" to class "User" 10 -> Add Read Access 11 Add new class "ChatRoom" 12 Add new instance variable "users" to class "ChatRoom" 13 Add new instance method "get: m from: s" to class "ChatRoom" 14 -> Invocation tree 15 Add new instance method "register: u" to class "ChatRoom" 16 -> Invocation tree 17 Add new instance method "unregister: u" to class "ChatRoom" 18 Add invocation "users remove: u"

1 Changes on ChatApp package: 2 Add new class "Guest" 3 Add new instance method "name" to class "Guest" 4 -> Invocation tree Added 5 Add new class "RegisteredUser" 6 Add new empty instance method "name" to class "RegisteredUser" 7 Add read access to behavioral entity "name" >> return value of variable "username" 8 Remove instance method "name" from class "User" 9 -> Invocation tree Removed

1 Changes on ChatApp package: 2 Add new instance method "encrypt: m" to class "User" 3 -> Invocation tree Added 4 Add new instance method "decrypt: m" to class "User" 5 -> Invocation tree Added 6 Remove instance method "receive: m from: s" from class "User" 7 -> Invocation tree Removed 8 Add new instance method "receive: m from: s" to class "User" 9 -> Invocation tree Added 10 Remove instance method "send: m" from class "User" 11 -> Invocation tree Removed 12 Add new instance method "send: m" to class "User" 13 -> Invocation tree Added

Page 48: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change List by ChEOPS

22

Restricted Level Of Granularity

Term Overloading

1 Changes on ChatApp package: vegsoc.gif2 Add new class "User" 3 Add new instance method "receive: m from: s" to class "User" 4 -> Invocation tree 5 Add new instance variable "cr" to class "User" 6 Add new instance variable "username" to class "User" 7 Add new instance method "send: m" to class "User" 8 -> Invocation tree 9 Add new instance method "name" to class "User" 10 -> Add Read Access 11 Add new class "ChatRoom" 12 Add new instance variable "users" to class "ChatRoom" 13 Add new instance method "get: m from: s" to class "ChatRoom" 14 -> Invocation tree 15 Add new instance method "register: u" to class "ChatRoom" 16 -> Invocation tree 17 Add new instance method "unregister: u" to class "ChatRoom" 18 Add invocation "users remove: u"

1 Changes on ChatApp package: 2 Add new class "Guest" 3 Add new instance method "name" to class "Guest" 4 -> Invocation tree Added 5 Add new class "RegisteredUser" 6 Add new empty instance method "name" to class "RegisteredUser" 7 Add read access to behavioral entity "name" >> return value of variable "username" 8 Remove instance method "name" from class "User" 9 -> Invocation tree Removed

1 Changes on ChatApp package: 2 Add new instance method "encrypt: m" to class "User" 3 -> Invocation tree Added 4 Add new instance method "decrypt: m" to class "User" 5 -> Invocation tree Added 6 Remove instance method "receive: m from: s" from class "User" 7 -> Invocation tree Removed 8 Add new instance method "receive: m from: s" to class "User" 9 -> Invocation tree Added 10 Remove instance method "send: m" from class "User" 11 -> Invocation tree Removed 12 Add new instance method "send: m" to class "User" 13 -> Invocation tree Added

Page 49: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change List by ChEOPS

22

Restricted Level Of Granularity

Term Overloading

1 Changes on ChatApp package: vegsoc.gif2 Add new class "User" 3 Add new instance method "receive: m from: s" to class "User" 4 -> Invocation tree 5 Add new instance variable "cr" to class "User" 6 Add new instance variable "username" to class "User" 7 Add new instance method "send: m" to class "User" 8 -> Invocation tree 9 Add new instance method "name" to class "User" 10 -> Add Read Access 11 Add new class "ChatRoom" 12 Add new instance variable "users" to class "ChatRoom" 13 Add new instance method "get: m from: s" to class "ChatRoom" 14 -> Invocation tree 15 Add new instance method "register: u" to class "ChatRoom" 16 -> Invocation tree 17 Add new instance method "unregister: u" to class "ChatRoom" 18 Add invocation "users remove: u"

1 Changes on ChatApp package: 2 Add new class "Guest" 3 Add new instance method "name" to class "Guest" 4 -> Invocation tree Added 5 Add new class "RegisteredUser" 6 Add new empty instance method "name" to class "RegisteredUser" 7 Add read access to behavioral entity "name" >> return value of variable "username" 8 Remove instance method "name" from class "User" 9 -> Invocation tree Removed

1 Changes on ChatApp package: 2 Add new instance method "encrypt: m" to class "User" 3 -> Invocation tree Added 4 Add new instance method "decrypt: m" to class "User" 5 -> Invocation tree Added 6 Remove instance method "receive: m from: s" from class "User" 7 -> Invocation tree Removed 8 Add new instance method "receive: m from: s" to class "User" 9 -> Invocation tree Added 10 Remove instance method "send: m" from class "User" 11 -> Invocation tree Removed 12 Add new instance method "send: m" to class "User" 13 -> Invocation tree Added

Page 50: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change List by ChEOPS

22

Restricted Level Of Granularity

Term Overloading

Lack Of High-level Changes

1 Changes on ChatApp package: vegsoc.gif2 Add new class "User" 3 Add new instance method "receive: m from: s" to class "User" 4 -> Invocation tree 5 Add new instance variable "cr" to class "User" 6 Add new instance variable "username" to class "User" 7 Add new instance method "send: m" to class "User" 8 -> Invocation tree 9 Add new instance method "name" to class "User" 10 -> Add Read Access 11 Add new class "ChatRoom" 12 Add new instance variable "users" to class "ChatRoom" 13 Add new instance method "get: m from: s" to class "ChatRoom" 14 -> Invocation tree 15 Add new instance method "register: u" to class "ChatRoom" 16 -> Invocation tree 17 Add new instance method "unregister: u" to class "ChatRoom" 18 Add invocation "users remove: u"

1 Changes on ChatApp package: 2 Add new class "Guest" 3 Add new instance method "name" to class "Guest" 4 -> Invocation tree Added 5 Add new class "RegisteredUser" 6 Add new empty instance method "name" to class "RegisteredUser" 7 Add read access to behavioral entity "name" >> return value of variable "username" 8 Remove instance method "name" from class "User" 9 -> Invocation tree Removed

1 Changes on ChatApp package: 2 Add new instance method "encrypt: m" to class "User" 3 -> Invocation tree Added 4 Add new instance method "decrypt: m" to class "User" 5 -> Invocation tree Added 6 Remove instance method "receive: m from: s" from class "User" 7 -> Invocation tree Removed 8 Add new instance method "receive: m from: s" to class "User" 9 -> Invocation tree Added 10 Remove instance method "send: m" from class "User" 11 -> Invocation tree Removed 12 Add new instance method "send: m" to class "User" 13 -> Invocation tree Added

Page 51: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change List by ChEOPS

22

Restricted Level Of Granularity

Term Overloading

Lack Of High-level Changes

1 Changes on ChatApp package: vegsoc.gif2 Add new class "User" 3 Add new instance method "receive: m from: s" to class "User" 4 -> Invocation tree 5 Add new instance variable "cr" to class "User" 6 Add new instance variable "username" to class "User" 7 Add new instance method "send: m" to class "User" 8 -> Invocation tree 9 Add new instance method "name" to class "User" 10 -> Add Read Access 11 Add new class "ChatRoom" 12 Add new instance variable "users" to class "ChatRoom" 13 Add new instance method "get: m from: s" to class "ChatRoom" 14 -> Invocation tree 15 Add new instance method "register: u" to class "ChatRoom" 16 -> Invocation tree 17 Add new instance method "unregister: u" to class "ChatRoom" 18 Add invocation "users remove: u"

1 Changes on ChatApp package: 2 Add new class "Guest" 3 Add new instance method "name" to class "Guest" 4 -> Invocation tree Added 5 Add new class "RegisteredUser" 6 Add new empty instance method "name" to class "RegisteredUser" 7 Add read access to behavioral entity "name" >> return value of variable "username" 8 Remove instance method "name" from class "User" 9 -> Invocation tree Removed

1 Changes on ChatApp package: 2 Add encryption for class "RegisteredUser" with function "f(x)= encrypt(x)" and "f(x)= decrypt(x)" 3 -> composite changes 4 Add encryption for class "Guest" with function "f(x)=x" and "f(x)=x" 5 -> composite changes

Page 52: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change List by ChEOPS

22

Restricted Level Of Granularity

Term Overloading

Lack Of High-level Changes

1 Changes on ChatApp package: vegsoc.gif2 Add new class "User" 3 Add new instance method "receive: m from: s" to class "User" 4 -> Invocation tree 5 Add new instance variable "cr" to class "User" 6 Add new instance variable "username" to class "User" 7 Add new instance method "send: m" to class "User" 8 -> Invocation tree 9 Add new instance method "name" to class "User" 10 -> Add Read Access 11 Add new class "ChatRoom" 12 Add new instance variable "users" to class "ChatRoom" 13 Add new instance method "get: m from: s" to class "ChatRoom" 14 -> Invocation tree 15 Add new instance method "register: u" to class "ChatRoom" 16 -> Invocation tree 17 Add new instance method "unregister: u" to class "ChatRoom" 18 Add invocation "users remove: u"

1 Changes on ChatApp package: 2 Add new class "Guest" 3 Add new instance method "name" to class "Guest" 4 -> Invocation tree Added 5 Add new class "RegisteredUser" 6 Add new empty instance method "name" to class "RegisteredUser" 7 Add read access to behavioral entity "name" >> return value of variable "username" 8 Remove instance method "name" from class "User" 9 -> Invocation tree Removed

1 Changes on ChatApp package: 2 Add encryption for class "RegisteredUser" with function "f(x)= encrypt(x)" and "f(x)= decrypt(x)" 3 -> composite changes 4 Add encryption for class "Guest" with function "f(x)=x" and "f(x)=x" 5 -> composite changes

Page 53: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change List by ChEOPS

22

Restricted Level Of Granularity

Term Overloading

Lack Of High-level Changes

No exploration facilities

1 Changes on ChatApp package: vegsoc.gif2 Add new class "User" 3 Add new instance method "receive: m from: s" to class "User" 4 -> Invocation tree 5 Add new instance variable "cr" to class "User" 6 Add new instance variable "username" to class "User" 7 Add new instance method "send: m" to class "User" 8 -> Invocation tree 9 Add new instance method "name" to class "User" 10 -> Add Read Access 11 Add new class "ChatRoom" 12 Add new instance variable "users" to class "ChatRoom" 13 Add new instance method "get: m from: s" to class "ChatRoom" 14 -> Invocation tree 15 Add new instance method "register: u" to class "ChatRoom" 16 -> Invocation tree 17 Add new instance method "unregister: u" to class "ChatRoom" 18 Add invocation "users remove: u"

1 Changes on ChatApp package: 2 Add new class "Guest" 3 Add new instance method "name" to class "Guest" 4 -> Invocation tree Added 5 Add new class "RegisteredUser" 6 Add new empty instance method "name" to class "RegisteredUser" 7 Add read access to behavioral entity "name" >> return value of variable "username" 8 Remove instance method "name" from class "User" 9 -> Invocation tree Removed

1 Changes on ChatApp package: 2 Add encryption for class "RegisteredUser" with function "f(x)= encrypt(x)" and "f(x)= decrypt(x)" 3 -> composite changes 4 Add encryption for class "Guest" with function "f(x)=x" and "f(x)=x" 5 -> composite changes

Page 54: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Change List by ChEOPS

22

Restricted Level Of Granularity

Term Overloading

Lack Of High-level Changes

No exploration facilities

1 Changes on ChatApp package: vegsoc.gif2 Add new class "User" 3 Add new instance method "receive: m from: s" to class "User" 4 -> Invocation tree 5 Add new instance variable "cr" to class "User" 6 Add new instance variable "username" to class "User" 7 Add new instance method "send: m" to class "User" 8 -> Invocation tree 9 Add new instance method "name" to class "User" 10 -> Add Read Access 11 Add new class "ChatRoom" 12 Add new instance variable "users" to class "ChatRoom" 13 Add new instance method "get: m from: s" to class "ChatRoom" 14 -> Invocation tree 15 Add new instance method "register: u" to class "ChatRoom" 16 -> Invocation tree 17 Add new instance method "unregister: u" to class "ChatRoom" 18 Add invocation "users remove: u"

1 Changes on ChatApp package: 2 Add new class "Guest" 3 Add new instance method "name" to class "Guest" 4 -> Invocation tree Added 5 Add new class "RegisteredUser" 6 Add new empty instance method "name" to class "RegisteredUser" 7 Add read access to behavioral entity "name" >> return value of variable "username" 8 Remove instance method "name" from class "User" 9 -> Invocation tree Removed

1 Changes on ChatApp package: 2 Add encryption for class "RegisteredUser" with function "f(x)= encrypt(x)" and "f(x)= decrypt(x)" 3 -> composite changes 4 Add encryption for class "Guest" with function "f(x)=x" and "f(x)=x" 5 -> composite changes

Page 55: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Discussion

23

ExtensionFine-grained changes v vComposable changes v v vDependent changes vIntensional changes v v

IDE support v v

Page 56: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Conclusion

• Support for Change-Oriented Software Engineering

• Current models of first-class changes are insufficient:

• The restricted level of granularity in the different types of changes

• The overloading of change types

• The lack of high-level changes

• The lack of program exploration facilities

• Extensions to the model overcome those issues

• Change- and Evolution-Oriented Programming Support

24

Page 57: Change-Oriented Software Engineering

Change-Oriented Software EngineeringESUG, august 27th 2007

Future Work

• COSE for component-oriented programming

• Provide other semantics to the changes

• Platform-specific code maintenance based on the changes

• Maintain the “raison d’être” of program entities

• Improved IDE support for COSE

25