220 likes | 305 Views
valeria murgia product design lead - caesar systems leandro caniglia director of development - caesar systems. Making the most of user changes. Demo. Use the software Generate some changes Show the changes browser Replay them. Logging user changes. wrapper. Composite Pane. model.
E N D
valeriamurgia product design lead - caesar systems leandrocaniglia director of development - caesar systems Making the most of user changes
Demo • Use the software • Generate some changes • Show the changes browser • Replay them
Logging user changes wrapper Composite Pane model message message wrapper ChangeLog Changes the model? yes
Command logging message wrapper GUI change Changes collection Validates? change !! Warning! store message file out Change(text) model
Change structure change changeLog timestamp author command(selector) receivername arguments not nil not empty not nil resolvable arguments size=command arity responds tocommand
Naming objects r a b2 b1 c1 a: b2: c2 c2
Creating changes nil ModelObjectWrapper doesNotUnderstand: aMessage | selector | selector := aMessage selector. (self shouldBuildMethodFor: selector) ifTrue: [self buildMethodFor: selector] ifFalse: [aMessage receiver: wrappee]. ^aMessage perform wrappee changeLog ― private ― doesNotUnderstand: ―all user commands― add: newThis: newThat: remove: renameTo: … renameTo: arg changeLognewChange wrappee: wrappee command: #renameTo: argument: arg. ^wrappeerenameTo: arg
Classes involved ModelObjectWrapper ChangeLog UserChange ChangeValidator
Replaying changes change changeLog Change(text) file in Validates? yes Execute the change perform | receiver wrapper | receiver := self resolve: receiverName. wrapper := self wrap: receiver. ^wrapper perform: command withArguments: arguments no !!
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-out • download a project from the database • work at home • 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
Decision analysis: scenarios Basemodel • Copy the base model 1st changeset • keep the changes 2nd changeset 3rd changeset 4th changeset 5th changeset 6th changeset kth changeset Copy change-set Every change-set represents a scenario Scenario Let the user edit the copy • forget the scenario
Scenarios continued Basemodel • Copy the base model • Locate the change set 1st changeset 2nd changeset 3rd changeset 4th changeset 5th changeset 6th changeset kth changeset Copy 3rd changeset • Apply the changes to the copy Scenario 3 Parent / child relationship
Demo • Decision Tree demo
Decision trees Parent Object Object Child A Child C Child B Child D Parentchanges Child Achanges Child Cchanges Child Bchanges 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
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?