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 te...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change-oriented SW Eng.
• Software Development
• ≠Writing a te...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change-oriented SW Eng.
• Software Development
• ≠Writing a te...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change-oriented SW Eng.
• Software Development
• ≠Writing a te...
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
...
Change-Oriented Software Engineering
ESUG, august 27th 2007
What do we want?
• Support for changes in forward engineering
...
Change-Oriented Software Engineering
ESUG, august 27th 2007
What do we want?
• Support for changes in forward engineering
...
Change-Oriented Software Engineering
ESUG, august 27th 2007
What do we want?
• Support for changes in forward engineering
...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Is there a solution around?
• Centralise Change in the develop...
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: Us...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Evolution scenario
8
users
send:(m: String)
receive:from:(m: S...
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 Created package ChatApp
2 define User...
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 Created package ChatApp
2 define User...
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 Created package ChatApp
2 define User...
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 Created package ChatApp
2 define User...
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 Created package ChatApp
2 define User...
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 Created package ChatApp
2 define User...
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 Created package ChatApp
2 define User...
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 Created package ChatApp
2 define User...
Change-Oriented Software Engineering
ESUG, august 27th 2007
ChangeList’s Change Log
1 Created package ChatApp
2 define User...
Change-Oriented Software Engineering
ESUG, august 27th 2007 10
Model of First-class Changes
Fine-grained Changes
Composabl...
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
Composabl...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Composable Changes
13
when
where
. . .
Change
when
where
. . ....
Change-Oriented Software Engineering
ESUG, august 27th 2007 14
Model of First-class Changes
Fine-grained Changes
Composabl...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Dependent Changes
15
anAddClass
timestamp
subchanges
isApplied...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Dependent Changes
15
anAddClass
timestamp
subchanges
isApplied...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Dependent Changes
15
anAddClass
timestamp
subchanges
isApplied...
Change-Oriented Software Engineering
ESUG, august 27th 2007 16
Model of First-class Changes
Fine-grained Changes
Composabl...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Intensional Changes
17
send:(m: String)
receive:from:(m: Strin...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Intensional Changes
• Rename method Refactoring:
• Change the ...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Intensional Changes
17
send:(m: String)
receive:from:(m: Strin...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Intensional Changes
17
send:(m: String)
receive:from:(m: Strin...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Intensional Changes
17
send:(m: String)
receive:from:(m: Strin...
Change-Oriented Software Engineering
ESUG, august 27th 2007 18
Model of First-class Changes
Fine-grained Changes
Composabl...
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....
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change List by ChEOPS
22
Restricted Level Of Granularity
1 Cha...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change List by ChEOPS
22
Restricted Level Of Granularity
1 Cha...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change List by ChEOPS
22
Restricted Level Of Granularity
Term ...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change List by ChEOPS
22
Restricted Level Of Granularity
Term ...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change List by ChEOPS
22
Restricted Level Of Granularity
Term ...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change List by ChEOPS
22
Restricted Level Of Granularity
Term ...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change List by ChEOPS
22
Restricted Level Of Granularity
Term ...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change List by ChEOPS
22
Restricted Level Of Granularity
Term ...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Change List by ChEOPS
22
Restricted Level Of Granularity
Term ...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Discussion
23
Extension
Fine-grained
changes v v
Composable
ch...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Conclusion
• Support for Change-Oriented Software Engineering
...
Change-Oriented Software Engineering
ESUG, august 27th 2007
Future Work
• COSE for component-oriented programming
• Provid...
Upcoming SlideShare
Loading in …5
×

Change-Oriented Software Engineering

406 views

Published on

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

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
406
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Change-Oriented Software Engineering

  1. 1. Change-Oriented Software Engineering Peter Ebraert, Jorge Vallejos, Pascal Costanza, Ellen Van Paesschen and Theo D’Hondt
  2. 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. 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. 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. 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. 6. Change-Oriented Software Engineering ESUG, august 27th 2007 Change-Oriented Support 3
  7. 7. Change-Oriented Software Engineering ESUG, august 27th 2007 Change-Oriented Support 3
  8. 8. Change-Oriented Software Engineering ESUG, august 27th 2007 Change-Oriented Support? 4
  9. 9. Change-Oriented Software Engineering ESUG, august 27th 2007 Change-Oriented Support? 4
  10. 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. 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. 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. 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. 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. 15. Change-Oriented Software Engineering ESUG, august 27th 2007 Example case 7
  16. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 28. Change-Oriented Software Engineering ESUG, august 27th 2007 Fine-grained Changes 11
  29. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 42. Change-Oriented Software Engineering ESUG, august 27th 2007 Change-Oriented IDE 19 Chronologically
  43. 43. Change-Oriented Software Engineering ESUG, august 27th 2007 20 Change-Oriented IDE As a high-level change hierarchy
  44. 44. Change-Oriented Software Engineering ESUG, august 27th 2007 Change-Oriented IDE 21 As a dependent change hierarchy
  45. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×