SlideShare uma empresa Scribd logo
1 de 57
Baixar para ler offline
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

Mais conteúdo relacionado

Semelhante a 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
 

Semelhante a 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
 

Mais de 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
 

Mais de 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
 

Último

Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 

Último (20)

Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 

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