SlideShare ist ein Scribd-Unternehmen logo
1 von 57
Downloaden Sie, um offline zu lesen
Change-Oriented Software
Engineering
Peter Ebraert, Jorge Vallejos, Pascal Costanza, Ellen
Van Paesschen and Theo D’Hondt
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change-oriented SW Eng.
• Software Development
• ≠Writing a text
• Constructing a system by means of building
blocks
2
Change-Oriented Software Engineering
ESUG, 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
Change-Oriented Software Engineering
ESUG, 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
Change-Oriented Software Engineering
ESUG, 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
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change-Oriented Support
3
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change-Oriented Support
3
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change-Oriented Support?
4
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change-Oriented Support?
4
Change-Oriented Software Engineering
ESUG, 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
Change-Oriented Software Engineering
ESUG, 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
Change-Oriented Software Engineering
ESUG, 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
Change-Oriented Software Engineering
ESUG, 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
Change-Oriented Software Engineering
ESUG, 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
Change-Oriented Software Engineering
ESUG, august 27th 2007
Example case
7
Change-Oriented Software Engineering
ESUG, august 27th 2007
Example case
7
send:(m: String)
receive:from:(m: String, s: User)
name()
username
User
users
get: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
Change-Oriented Software Engineering
ESUG, 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()
username
RegisteredUser
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)
username
User
users
get: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
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 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
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 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
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 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)
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 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
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 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 User
6 define User
24 define User
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 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
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 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
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 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
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 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”
Change-Oriented Software Engineering
ESUG, august 27th 2007 10
Model of First-class Changes
Fine-grained Changes
Composable Changes
Dependent Changes
Intensional Changes
Change-oriented IDE
Change-Oriented Software Engineering
ESUG, august 27th 2007
Fine-grained Changes
11
Change-Oriented Software Engineering
ESUG, august 27th 2007 12
Model of First-class Changes
Fine-grained Changes
Composable Changes
Dependent Changes
Intensional Changes
Change-oriented IDE
Change-Oriented Software Engineering
ESUG, august 27th 2007
Composable Changes
13
when
where
. . .
Change
when
where
. . .
AtomicChang
e
when
where
. . .
CompositeCh
ange
changes
Hierarchy of Atomic
Change Classes
RefactoringsHigh level
changes
Change-Oriented Software Engineering
ESUG, august 27th 2007 14
Model of First-class Changes
Fine-grained Changes
Composable Changes
Dependent Changes
Intensional Changes
Change-oriented IDE
Change-Oriented Software Engineering
ESUG, august 27th 2007
Dependent Changes
15
anAddClass
timestamp
subchanges
isApplied
name
belongsTo
definition
classObject
isAbstract
accessor
anAddMethod
timestamp
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
anAddAttribute
timestamp
subchanges
isApplied
name
belongsTo
definition
classObject
oldInstancevariables
olsClassVariables
isInstanceVariable
initialisationValue
anAddAccess
Change
timestamp
subchanges
isApplied
initiatorName
initiatorObject
linenr
accesses
scope
read
write
value
isReturnValue
anAddInvocation
Change
timestamp
subchanges
isApplied
initiatorName
initiatorObject
linenr
receiver
receiverType
message
arguments
argumentTypes
isReturnValue
anAddAccess
Change
timestamp
subchanges
isApplied
initiatorName
initiatorObject
linenr
accesses
scope
read
write
value
isReturnValue
Change-Oriented Software Engineering
ESUG, august 27th 2007
Dependent Changes
15
anAddClass
timestamp
subchanges
isApplied
name
belongsTo
definition
classObject
isAbstract
accessor
anAddMethod
timestamp
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
anAddAttribute
timestamp
subchanges
isApplied
name
belongsTo
definition
classObject
oldInstancevariables
olsClassVariables
isInstanceVariable
initialisationValue
anAddAccess
Change
timestamp
subchanges
isApplied
initiatorName
initiatorObject
linenr
accesses
scope
read
write
value
isReturnValue
anAddInvocation
Change
timestamp
subchanges
isApplied
initiatorName
initiatorObject
linenr
receiver
receiverType
message
arguments
argumentTypes
isReturnValue
anAddAccess
Change
timestamp
subchanges
isApplied
initiatorName
initiatorObject
linenr
accesses
scope
read
write
value
isReturnValue
Change-Oriented Software Engineering
ESUG, august 27th 2007
Dependent Changes
15
anAddClass
timestamp
subchanges
isApplied
name
belongsTo
definition
classObject
isAbstract
accessor
anAddMethod
timestamp
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
anAddAttribute
timestamp
subchanges
isApplied
name
belongsTo
definition
classObject
oldInstancevariables
olsClassVariables
isInstanceVariable
initialisationValue
anAddAccess
Change
timestamp
subchanges
isApplied
initiatorName
initiatorObject
linenr
accesses
scope
read
write
value
isReturnValue
anAddInvocation
Change
timestamp
subchanges
isApplied
initiatorName
initiatorObject
linenr
receiver
receiverType
message
arguments
argumentTypes
isReturnValue
anAddAccess
Change
timestamp
subchanges
isApplied
initiatorName
initiatorObject
linenr
accesses
scope
read
write
value
isReturnValue
Change-Oriented Software Engineering
ESUG, august 27th 2007 16
Model of First-class Changes
Fine-grained Changes
Composable Changes
Dependent Changes
Intensional Changes
Change-oriented IDE
Change-Oriented Software Engineering
ESUG, august 27th 2007
Intensional Changes
17
send:(m: String)
receive:from:(m: String, s: User)
encrypt:(m: String)
decrypt:(m: String)
User
users
get:from:(m: String, s: User)
register(u: User)
unregister(u: User)
Chatroom
cr
name()
username
RegisteredUser
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)
Change-Oriented Software Engineering
ESUG, 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
users
get:from:(m: String, s: User)
register(u: User)
unregister(u: User)
Chatroom
cr
name()
username
RegisteredUser
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)
Change-Oriented Software Engineering
ESUG, august 27th 2007
Intensional Changes
17
send:(m: String)
receive:from:(m: String, s: User)
encrypt:(m: String)
decrypt:(m: String)
User
users
get:from:(m: String, s: User)
register(u: User)
unregister(u: User)
Chatroom
cr
name()
username
RegisteredUser
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
Change-Oriented Software Engineering
ESUG, august 27th 2007
Intensional Changes
17
send:(m: String)
receive:from:(m: String, s: User)
encrypt:(m: String)
decrypt:(m: String)
User
users
get:from:(m: String, s: User)
register(u: User)
unregister(u: User)
Chatroom
cr
name()
username
RegisteredUser
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
Change-Oriented Software Engineering
ESUG, august 27th 2007
Intensional Changes
17
send:(m: String)
receive:from:(m: String, s: User)
encrypt:(m: String)
decrypt:(m: String)
User
users
get:from:(m: String, s: User)
register(u: User)
unregister(u: User)
Chatroom
cr
name()
username
RegisteredUser
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
Change-Oriented Software Engineering
ESUG, august 27th 2007 18
Model of First-class Changes
Fine-grained Changes
Composable Changes
Dependent Changes
Intensional Changes
Change-oriented IDE
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change-Oriented IDE
19
Chronologically
Change-Oriented Software Engineering
ESUG, august 27th 2007 20
Change-Oriented IDE
As a high-level change hierarchy
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change-Oriented IDE
21
As a dependent change hierarchy
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change List by ChEOPS
22
1 Changes on ChatApp package: vegsoc.gif
2 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
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change List by ChEOPS
22
Restricted Level Of Granularity
1 Changes on ChatApp package: vegsoc.gif
2 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
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change List by ChEOPS
22
Restricted Level Of Granularity
1 Changes on ChatApp package: vegsoc.gif
2 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
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change List by ChEOPS
22
Restricted Level Of Granularity
Term Overloading
1 Changes on ChatApp package: vegsoc.gif
2 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
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change List by ChEOPS
22
Restricted Level Of Granularity
Term Overloading
1 Changes on ChatApp package: vegsoc.gif
2 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
Change-Oriented Software Engineering
ESUG, 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.gif
2 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
Change-Oriented Software Engineering
ESUG, 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.gif
2 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
Change-Oriented Software Engineering
ESUG, 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.gif
2 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
Change-Oriented Software Engineering
ESUG, 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.gif
2 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
Change-Oriented Software Engineering
ESUG, 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.gif
2 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
Change-Oriented Software Engineering
ESUG, august 27th 2007
Discussion
23
Extension
Fine-grained
changes v v
Composable
changes v v v
Dependent
changes v
Intensional
changes v v
IDE support v v
Change-Oriented Software Engineering
ESUG, 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
Change-Oriented Software Engineering
ESUG, 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

Weitere ähnliche Inhalte

Ähnlich wie Change-Oriented Software Engineering

Analyzing Changes in Software Systems From ChangeDistiller to FMDiff
Analyzing Changes in Software Systems From ChangeDistiller to FMDiffAnalyzing Changes in Software Systems From ChangeDistiller to FMDiff
Analyzing Changes in Software Systems From ChangeDistiller to FMDiffMartin Pinzger
 
Patterns for Open Source Success
Patterns for Open Source SuccessPatterns for Open Source Success
Patterns for Open Source SuccessStephen Walli
 
A Framework for Open Source Software Success
A Framework for Open Source Software SuccessA Framework for Open Source Software Success
A Framework for Open Source Software SuccessPaula Hunter
 
FluentMigrator - Dayton .NET - July 2023
FluentMigrator - Dayton .NET - July 2023FluentMigrator - Dayton .NET - July 2023
FluentMigrator - Dayton .NET - July 2023Matthew Groves
 
IFESFinal58
IFESFinal58IFESFinal58
IFESFinal58anish h
 
.Net december 2017 updates - Tamir Dresher
.Net december 2017 updates - Tamir Dresher.Net december 2017 updates - Tamir Dresher
.Net december 2017 updates - Tamir DresherTamir Dresher
 
Essential Tools for Modern PHP
Essential Tools for Modern PHPEssential Tools for Modern PHP
Essential Tools for Modern PHPAlex Weissman
 
Socio-technical evolution and migration in the Ruby ecosystem
Socio-technical evolution and migration in the Ruby ecosystemSocio-technical evolution and migration in the Ruby ecosystem
Socio-technical evolution and migration in the Ruby ecosystemTom Mens
 
Code Refactoring or Rewrite: How to Properly Dispose of Legacy Code
Code Refactoring or Rewrite: How to Properly Dispose of Legacy CodeCode Refactoring or Rewrite: How to Properly Dispose of Legacy Code
Code Refactoring or Rewrite: How to Properly Dispose of Legacy CodeRoman Labunsky
 
Strategies for Rule-Based Program Transformation
Strategies for Rule-Based Program TransformationStrategies for Rule-Based Program Transformation
Strategies for Rule-Based Program TransformationEelco Visser
 
Design patters java_meetup_slideshare [compatibility mode]
Design patters java_meetup_slideshare [compatibility mode]Design patters java_meetup_slideshare [compatibility mode]
Design patters java_meetup_slideshare [compatibility mode]Dimitris Dranidis
 
Q1 Southern California Session Slides
Q1 Southern California Session SlidesQ1 Southern California Session Slides
Q1 Southern California Session SlidesHarold Wong
 
Windows 2008 R2 & Windows7
Windows 2008 R2 & Windows7Windows 2008 R2 & Windows7
Windows 2008 R2 & Windows7Gabe Akisanmi
 

Ähnlich wie Change-Oriented Software Engineering (20)

Tic tac toe game code
Tic tac toe game codeTic tac toe game code
Tic tac toe game code
 
Tic tac toe
Tic tac toeTic tac toe
Tic tac toe
 
Of Changes and Their History
Of Changes and Their HistoryOf Changes and Their History
Of Changes and Their History
 
Analyzing Changes in Software Systems From ChangeDistiller to FMDiff
Analyzing Changes in Software Systems From ChangeDistiller to FMDiffAnalyzing Changes in Software Systems From ChangeDistiller to FMDiff
Analyzing Changes in Software Systems From ChangeDistiller to FMDiff
 
Patterns for Open Source Success
Patterns for Open Source SuccessPatterns for Open Source Success
Patterns for Open Source Success
 
A Framework for Open Source Software Success
A Framework for Open Source Software SuccessA Framework for Open Source Software Success
A Framework for Open Source Software Success
 
Final Algos
Final AlgosFinal Algos
Final Algos
 
FluentMigrator - Dayton .NET - July 2023
FluentMigrator - Dayton .NET - July 2023FluentMigrator - Dayton .NET - July 2023
FluentMigrator - Dayton .NET - July 2023
 
IFESFinal58
IFESFinal58IFESFinal58
IFESFinal58
 
.Net december 2017 updates - Tamir Dresher
.Net december 2017 updates - Tamir Dresher.Net december 2017 updates - Tamir Dresher
.Net december 2017 updates - Tamir Dresher
 
Essential Tools for Modern PHP
Essential Tools for Modern PHPEssential Tools for Modern PHP
Essential Tools for Modern PHP
 
Socio-technical evolution and migration in the Ruby ecosystem
Socio-technical evolution and migration in the Ruby ecosystemSocio-technical evolution and migration in the Ruby ecosystem
Socio-technical evolution and migration in the Ruby ecosystem
 
Code Refactoring or Rewrite: How to Properly Dispose of Legacy Code
Code Refactoring or Rewrite: How to Properly Dispose of Legacy CodeCode Refactoring or Rewrite: How to Properly Dispose of Legacy Code
Code Refactoring or Rewrite: How to Properly Dispose of Legacy Code
 
Strategies for Rule-Based Program Transformation
Strategies for Rule-Based Program TransformationStrategies for Rule-Based Program Transformation
Strategies for Rule-Based Program Transformation
 
reverse(1)
reverse(1)reverse(1)
reverse(1)
 
Design patters java_meetup_slideshare [compatibility mode]
Design patters java_meetup_slideshare [compatibility mode]Design patters java_meetup_slideshare [compatibility mode]
Design patters java_meetup_slideshare [compatibility mode]
 
Tech talks#6: Code Refactoring
Tech talks#6: Code RefactoringTech talks#6: Code Refactoring
Tech talks#6: Code Refactoring
 
Q1 Southern California Session Slides
Q1 Southern California Session SlidesQ1 Southern California Session Slides
Q1 Southern California Session Slides
 
ELAVARASAN.pdf
ELAVARASAN.pdfELAVARASAN.pdf
ELAVARASAN.pdf
 
Windows 2008 R2 & Windows7
Windows 2008 R2 & Windows7Windows 2008 R2 & Windows7
Windows 2008 R2 & Windows7
 

Mehr von ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector TuningESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FutureESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the DebuggerESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing ScoreESUG
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsESUG
 

Mehr von ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Kürzlich hochgeladen

Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 

Kürzlich hochgeladen (20)

Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 

Change-Oriented Software Engineering

  • 1. Change-Oriented Software Engineering Peter Ebraert, Jorge Vallejos, Pascal Costanza, Ellen Van Paesschen and Theo D’Hondt
  • 2. Change-Oriented Software Engineering ESUG, august 27th 2007 Change-oriented SW Eng. • Software Development • ≠Writing a text • Constructing a system by means of building blocks 2
  • 3. Change-Oriented Software Engineering ESUG, 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
  • 4. Change-Oriented Software Engineering ESUG, 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
  • 5. Change-Oriented Software Engineering ESUG, 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
  • 6. Change-Oriented Software Engineering ESUG, august 27th 2007 Change-Oriented Support 3
  • 7. Change-Oriented Software Engineering ESUG, august 27th 2007 Change-Oriented Support 3
  • 8. Change-Oriented Software Engineering ESUG, august 27th 2007 Change-Oriented Support? 4
  • 9. Change-Oriented Software Engineering ESUG, august 27th 2007 Change-Oriented Support? 4
  • 10. Change-Oriented Software Engineering ESUG, 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
  • 11. Change-Oriented Software Engineering ESUG, 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
  • 12. Change-Oriented Software Engineering ESUG, 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
  • 13. Change-Oriented Software Engineering ESUG, 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
  • 14. Change-Oriented Software Engineering ESUG, 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
  • 15. Change-Oriented Software Engineering ESUG, august 27th 2007 Example case 7
  • 16. Change-Oriented Software Engineering ESUG, august 27th 2007 Example case 7 send:(m: String) receive:from:(m: String, s: User) name() username User users get: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
  • 17. Change-Oriented Software Engineering ESUG, 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() username RegisteredUser 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) username User users get: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
  • 18. Change-Oriented Software Engineering ESUG, august 27th 2007 ChangeList’s Change Log 1 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
  • 19. Change-Oriented Software Engineering ESUG, august 27th 2007 ChangeList’s Change Log 1 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
  • 20. Change-Oriented Software Engineering ESUG, august 27th 2007 ChangeList’s Change Log 1 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)
  • 21. Change-Oriented Software Engineering ESUG, august 27th 2007 ChangeList’s Change Log 1 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
  • 22. Change-Oriented Software Engineering ESUG, august 27th 2007 ChangeList’s Change Log 1 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 User 6 define User 24 define User
  • 23. Change-Oriented Software Engineering ESUG, august 27th 2007 ChangeList’s Change Log 1 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
  • 24. Change-Oriented Software Engineering ESUG, august 27th 2007 ChangeList’s Change Log 1 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
  • 25. Change-Oriented Software Engineering ESUG, august 27th 2007 ChangeList’s Change Log 1 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
  • 26. Change-Oriented Software Engineering ESUG, august 27th 2007 ChangeList’s Change Log 1 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”
  • 27. Change-Oriented Software Engineering ESUG, august 27th 2007 10 Model of First-class Changes Fine-grained Changes Composable Changes Dependent Changes Intensional Changes Change-oriented IDE
  • 28. Change-Oriented Software Engineering ESUG, august 27th 2007 Fine-grained Changes 11
  • 29. Change-Oriented Software Engineering ESUG, august 27th 2007 12 Model of First-class Changes Fine-grained Changes Composable Changes Dependent Changes Intensional Changes Change-oriented IDE
  • 30. Change-Oriented Software Engineering ESUG, august 27th 2007 Composable Changes 13 when where . . . Change when where . . . AtomicChang e when where . . . CompositeCh ange changes Hierarchy of Atomic Change Classes RefactoringsHigh level changes
  • 31. Change-Oriented Software Engineering ESUG, august 27th 2007 14 Model of First-class Changes Fine-grained Changes Composable Changes Dependent Changes Intensional Changes Change-oriented IDE
  • 32. Change-Oriented Software Engineering ESUG, august 27th 2007 Dependent Changes 15 anAddClass timestamp subchanges isApplied name belongsTo definition classObject isAbstract accessor anAddMethod timestamp 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 anAddAttribute timestamp subchanges isApplied name belongsTo definition classObject oldInstancevariables olsClassVariables isInstanceVariable initialisationValue anAddAccess Change timestamp subchanges isApplied initiatorName initiatorObject linenr accesses scope read write value isReturnValue anAddInvocation Change timestamp subchanges isApplied initiatorName initiatorObject linenr receiver receiverType message arguments argumentTypes isReturnValue anAddAccess Change timestamp subchanges isApplied initiatorName initiatorObject linenr accesses scope read write value isReturnValue
  • 33. Change-Oriented Software Engineering ESUG, august 27th 2007 Dependent Changes 15 anAddClass timestamp subchanges isApplied name belongsTo definition classObject isAbstract accessor anAddMethod timestamp 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 anAddAttribute timestamp subchanges isApplied name belongsTo definition classObject oldInstancevariables olsClassVariables isInstanceVariable initialisationValue anAddAccess Change timestamp subchanges isApplied initiatorName initiatorObject linenr accesses scope read write value isReturnValue anAddInvocation Change timestamp subchanges isApplied initiatorName initiatorObject linenr receiver receiverType message arguments argumentTypes isReturnValue anAddAccess Change timestamp subchanges isApplied initiatorName initiatorObject linenr accesses scope read write value isReturnValue
  • 34. Change-Oriented Software Engineering ESUG, august 27th 2007 Dependent Changes 15 anAddClass timestamp subchanges isApplied name belongsTo definition classObject isAbstract accessor anAddMethod timestamp 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 anAddAttribute timestamp subchanges isApplied name belongsTo definition classObject oldInstancevariables olsClassVariables isInstanceVariable initialisationValue anAddAccess Change timestamp subchanges isApplied initiatorName initiatorObject linenr accesses scope read write value isReturnValue anAddInvocation Change timestamp subchanges isApplied initiatorName initiatorObject linenr receiver receiverType message arguments argumentTypes isReturnValue anAddAccess Change timestamp subchanges isApplied initiatorName initiatorObject linenr accesses scope read write value isReturnValue
  • 35. Change-Oriented Software Engineering ESUG, august 27th 2007 16 Model of First-class Changes Fine-grained Changes Composable Changes Dependent Changes Intensional Changes Change-oriented IDE
  • 36. Change-Oriented Software Engineering ESUG, august 27th 2007 Intensional Changes 17 send:(m: String) receive:from:(m: String, s: User) encrypt:(m: String) decrypt:(m: String) User users get:from:(m: String, s: User) register(u: User) unregister(u: User) Chatroom cr name() username RegisteredUser 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)
  • 37. Change-Oriented Software Engineering ESUG, 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 users get:from:(m: String, s: User) register(u: User) unregister(u: User) Chatroom cr name() username RegisteredUser 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)
  • 38. Change-Oriented Software Engineering ESUG, august 27th 2007 Intensional Changes 17 send:(m: String) receive:from:(m: String, s: User) encrypt:(m: String) decrypt:(m: String) User users get:from:(m: String, s: User) register(u: User) unregister(u: User) Chatroom cr name() username RegisteredUser 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
  • 39. Change-Oriented Software Engineering ESUG, august 27th 2007 Intensional Changes 17 send:(m: String) receive:from:(m: String, s: User) encrypt:(m: String) decrypt:(m: String) User users get:from:(m: String, s: User) register(u: User) unregister(u: User) Chatroom cr name() username RegisteredUser 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
  • 40. Change-Oriented Software Engineering ESUG, august 27th 2007 Intensional Changes 17 send:(m: String) receive:from:(m: String, s: User) encrypt:(m: String) decrypt:(m: String) User users get:from:(m: String, s: User) register(u: User) unregister(u: User) Chatroom cr name() username RegisteredUser 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
  • 41. Change-Oriented Software Engineering ESUG, august 27th 2007 18 Model of First-class Changes Fine-grained Changes Composable Changes Dependent Changes Intensional Changes Change-oriented IDE
  • 42. Change-Oriented Software Engineering ESUG, august 27th 2007 Change-Oriented IDE 19 Chronologically
  • 43. Change-Oriented Software Engineering ESUG, august 27th 2007 20 Change-Oriented IDE As a high-level change hierarchy
  • 44. Change-Oriented Software Engineering ESUG, august 27th 2007 Change-Oriented IDE 21 As a dependent change hierarchy
  • 45. Change-Oriented Software Engineering ESUG, august 27th 2007 Change List by ChEOPS 22 1 Changes on ChatApp package: vegsoc.gif 2 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
  • 46. Change-Oriented Software Engineering ESUG, august 27th 2007 Change List by ChEOPS 22 Restricted Level Of Granularity 1 Changes on ChatApp package: vegsoc.gif 2 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
  • 47. Change-Oriented Software Engineering ESUG, august 27th 2007 Change List by ChEOPS 22 Restricted Level Of Granularity 1 Changes on ChatApp package: vegsoc.gif 2 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
  • 48. Change-Oriented Software Engineering ESUG, august 27th 2007 Change List by ChEOPS 22 Restricted Level Of Granularity Term Overloading 1 Changes on ChatApp package: vegsoc.gif 2 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
  • 49. Change-Oriented Software Engineering ESUG, august 27th 2007 Change List by ChEOPS 22 Restricted Level Of Granularity Term Overloading 1 Changes on ChatApp package: vegsoc.gif 2 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
  • 50. Change-Oriented Software Engineering ESUG, 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.gif 2 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
  • 51. Change-Oriented Software Engineering ESUG, 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.gif 2 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
  • 52. Change-Oriented Software Engineering ESUG, 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.gif 2 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
  • 53. Change-Oriented Software Engineering ESUG, 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.gif 2 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
  • 54. Change-Oriented Software Engineering ESUG, 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.gif 2 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
  • 55. Change-Oriented Software Engineering ESUG, august 27th 2007 Discussion 23 Extension Fine-grained changes v v Composable changes v v v Dependent changes v Intensional changes v v IDE support v v
  • 56. Change-Oriented Software Engineering ESUG, 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
  • 57. Change-Oriented Software Engineering ESUG, 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