Upload
rodger-ferguson
View
218
Download
2
Embed Size (px)
Citation preview
MAKING THE MOST OF USER CHANGES
valeria murgiaproduct design lead - caesar systems
leandro canigliadirector of development - caesar systems
Demo
Use the software Generate some changes Show the changes browser Replay them
Logging user changes
messagemodel
wrapperComposite Pane
message
Changes the model? Change
Log
yes
wrapper
Command loggingmessage
change
Validates? change
Changes collection
!!Warning! store
message
model
wrapperGUI
Change(text)
file out
Change structure
change
timestamp author command(selector)
receivername arguments
not nil not empty not nil resolvable
responds tocommand
arguments size=
command arity
changeLog
Naming objects
a
c1
b2
r
c2
b1
a: b2: c2
Creating changes
ModelObjectWrapper
wrappeechangeLog
doesNotUnderstand: aMessage| selector |selector := aMessage selector.(self shouldBuildMethodFor: selector)
ifTrue: [self buildMethodFor: selector]ifFalse: [aMessage receiver: wrappee].
^aMessage perform
― private ―doesNotUnderstand:―all user commands―add:newThis:newThat:remove:renameTo:…
renameTo: argchangeLog newChange
wrappee: wrappeecommand: #renameTo:argument: arg.
^wrappee renameTo: arg
nil
Classes involved
ModelObjectWrapper ChangeLog
ChangeValidatorUserChange
Replaying changes
Change(text) change
file in
Validates?
perform | receiver wrapper |receiver := self resolve: receiverName.wrapper := self wrap: receiver.^wrapper
perform: commandwithArguments: arguments
Execute the changeyes
!!
no
changeLog
Applications
Recovery log all the time save every change on disk
Auditing who changed what, when and how
Local redo (can be used for undo) right click on any object and list all its
changes Scripting
use the changes system as a scripting language
Applications continued
Demos & Tutorials demo your system by replaying changes
Overcome back compatibility issues recreate old projects from their changes
Merging merging changes is easier than merging
objects User support
solve the user’s problem and send back the changes
Applications continued
Bug reporting send the changes that exhibit a defect don’t know what you did? look at the
changes! Testing
look at the changes to write unit tests Regression
build a library of scripts to test your system Learning (new programmers)
use the changes as debugging entry points
Applications continued
Metrics count the number of commands your
users can perform how many keystrokes does your
software require? measure user dedication and
productivity which areas of your software are more
heavily used? understand users’ workflows discover bad practice patterns
Applications continued
Teamwork combine changes from different contributors
into the same model Database conflicts
let users recover conflicting changes that did not get committed
Database: automated check-in/check-out1.download a project from the database2.work at home3.apply your changes back to the repository
Demo
Open a project Make some few changes Create two scenarios Edit & change the scenarios Show the changes
1st changeset
Decision analysis: scenarios
Basemodel
Copy
Scenario
1. Copy the base model
2. Let the user edit the copy
Every change-set represents a scenario
3. forget the scenario
change-set
2nd changeset3rd change
set4th changeset5th change
set6th changesetkth change
set
4. keep the changes
1st changeset
Scenarios continued
Basemodel
Copy
Scenario 3
1. Copy the base model
3rd changeset
2nd changeset3rd change
set4th changeset5th change
set6th changesetkth change
set
2. Locate the change set
3. Apply the changes to the copy
Parent / child relationship
Demo
Decision Tree demo
ObjectParentObject
Decision trees
Child A
Child B
Child C
Child D
Parentchanges
Child Achanges
Child Bchanges
Child Cchanges
Child Dchanges
Applications continued
Scenarios associate change sets with scenarios for
what-if analysis Decision trees
Organize change sets under a hierarchical structure
Monte Carlo simulations create one scenario for every random
sample
Influences
Changes System
Smalltalk Change
log
Squeak Event
Recorder II (M & C)
PetroVR Action
Recorder (Vuletich)
Squeak Event Recorder I
(Ingalls)
Questions
Have you implemented all the applications described here?
Have you used the changes system to analyze the workflow of end-users?
Does the changes system impact the performance?
What's the overhead for programmers? What if arguments are not literals? Can your system log any user action?