Change-Oriented Software Engineering Peter Ebraert, Jorge Vallejos, - - PowerPoint PPT Presentation

change oriented software engineering
SMART_READER_LITE
LIVE PREVIEW

Change-Oriented Software Engineering Peter Ebraert, Jorge Vallejos, - - PowerPoint PPT Presentation

Change-Oriented Software Engineering Peter Ebraert, Jorge Vallejos, Pascal Costanza, Ellen Van Paesschen and Theo DHondt Change-oriented SW Eng. Software Development Writing a text Constructing a system by means of building


slide-1
SLIDE 1

Change-Oriented Software Engineering

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

slide-2
SLIDE 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

slide-3
SLIDE 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

slide-4
SLIDE 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

slide-5
SLIDE 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

slide-6
SLIDE 6

Change-Oriented Software Engineering

ESUG, august 27th 2007

Change-Oriented Support

3

slide-7
SLIDE 7

Change-Oriented Software Engineering

ESUG, august 27th 2007

Change-Oriented Support

3

slide-8
SLIDE 8

Change-Oriented Software Engineering

ESUG, august 27th 2007

Change-Oriented Support?

4

slide-9
SLIDE 9

Change-Oriented Software Engineering

ESUG, august 27th 2007

Change-Oriented Support?

4

slide-10
SLIDE 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

slide-11
SLIDE 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
slide-12
SLIDE 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
slide-13
SLIDE 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
slide-14
SLIDE 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

slide-15
SLIDE 15

Change-Oriented Software Engineering

ESUG, august 27th 2007

Example case

7

slide-16
SLIDE 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

slide-17
SLIDE 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

slide-18
SLIDE 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

slide-19
SLIDE 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

slide-20
SLIDE 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 Granularity

7 User send: (change) 30 User send: (change)

slide-21
SLIDE 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

slide-22
SLIDE 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

slide-23
SLIDE 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

slide-24
SLIDE 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

slide-25
SLIDE 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

slide-26
SLIDE 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”

slide-27
SLIDE 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

slide-28
SLIDE 28

Change-Oriented Software Engineering

ESUG, august 27th 2007

Fine-grained Changes

11

slide-29
SLIDE 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

slide-30
SLIDE 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 Refactorings High level changes

slide-31
SLIDE 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

slide-32
SLIDE 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

  • ldInstancevariables
  • lsClassVariables

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

slide-33
SLIDE 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

  • ldInstancevariables
  • lsClassVariables

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

slide-34
SLIDE 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

  • ldInstancevariables
  • lsClassVariables

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

slide-35
SLIDE 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

slide-36
SLIDE 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)

slide-37
SLIDE 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)

slide-38
SLIDE 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

slide-39
SLIDE 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

slide-40
SLIDE 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

slide-41
SLIDE 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

slide-42
SLIDE 42

Change-Oriented Software Engineering

ESUG, august 27th 2007

Change-Oriented IDE

19

Chronologically

slide-43
SLIDE 43

Change-Oriented Software Engineering

ESUG, august 27th 2007

20

Change-Oriented IDE

As a high-level change hierarchy

slide-44
SLIDE 44

Change-Oriented Software Engineering

ESUG, august 27th 2007

Change-Oriented IDE

21

As a dependent change hierarchy

slide-45
SLIDE 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

slide-46
SLIDE 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

slide-47
SLIDE 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

slide-48
SLIDE 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

slide-49
SLIDE 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

slide-50
SLIDE 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

slide-51
SLIDE 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

slide-52
SLIDE 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

slide-53
SLIDE 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

slide-54
SLIDE 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

slide-55
SLIDE 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

slide-56
SLIDE 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

slide-57
SLIDE 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
  • n the changes
  • Maintain the “raison d’être” of program

entities

  • Improved IDE support for COSE

25