SlideShare una empresa de Scribd logo
1 de 43
Capturing and Analyzing Low-Level Events
          from the Code Editor

              YoungSeok Yoon (youngseok@cs.cmu.edu)
              Institute for Software Research (ISR)

              Brad A. Myers (bam@cs.cmu.edu)
              Human-Computer Interaction Institute (HCII)


                     School of Computer Science
                     Carnegie Mellon University
Motivation
• When trying to understand what problems the
  developers have, researchers investigate…
  how frequently                              when / how do
     do those                               the developers use
  problems occur?   what kinds of            certain features?
                    problems do
                     developers
                       have?
in what context                          in what sequence do the
 does a certain                            developers complete
  event occur?                                certain tasks?




                          PLATEAU 2011                             2
Motivation
• When trying to evaluate existing tools…
                                how           how much
 do the developers                           time do they
                           frequently do
 actually use those                          spend using
                             developers
       tools?                                  the tools?
                           use the tools?



                           do the           what types of
  exactly how          developers use         errors do
 they are used          the tools as         they make?
    in detail?           expected?




                           PLATEAU 2011                     3
How do we answer these questions?
• Essentially, we are collecting the usage data
  from the developers

• The usage data can be collected by:
   ▪   asking the developers
   ▪   observing the developers
   ▪   mining software repositories
   ▪   logging the developers’ behavior


• However, previous tools make it difficult or impossible to
  get / analyze fine-grained code editing history

                               PLATEAU 2011                    4
Asking the developers
• Interviews, surveys, focus groups

• Limitations
   ▪ Responses may not be reliable
   ▪ Developers perform many operations quite automatically
      Maybe they might not remember the specific occasions




                          PLATEAU 2011                    5
Observing the developers
• Contextual inquiries, lab studies
• Think aloud + videotape

• Limitations
    ▪ Requires manual inspection of the videotape
       Can be time-consuming and error-prone

• [Coman2008], [Ko2003], [Ko2005], ...




                                PLATEAU 2011        6
Mining software repositories
• Has been used for studying software evolution

• Limitations
    ▪ Cannot know exactly what happened between two
      consecutive revisions
       we may miss some important user behavior
    ▪ Need to infer from the check-in comments and other clues

• [Aversano2007], [Bettenburg2009], [Kim2005], [Murphy-Hill2009], …



                                PLATEAU 2011                          7
Eclipse Usage Data Collector (UDC)
• Logging tool for aggregate data
• Collects usage information from all the Eclipse users
  who consented to upload their data to UDC

• Limitations
   ▪ Does not capture the sequences of events
   ▪ Misses some important commands executed
      • e.g., UDC ignores backspace, moving cursor with arrow keys, …
   ▪ Command-specific parameters are not captured


                              PLATEAU 2011                              8
Other Logging Tools
• Mylyn Monitor [Kersten2006]
   ▪ Textual level changes are not captured
   ▪ Focuses on more abstract user interaction data on the
     entire IDE


• Syde / Replay [Hattori2011]
   ▪ Only commands which change the source code are logged
   ▪ AST-level, not textual level



                           PLATEAU 2011                      9
Our new logging tool: FLUORITE
                    Full of
                    Low-level
                    User
                    Operations
                    Recorded
                    In
                    The
                    Editor
             PLATEAU 2011        10
Our new logging tool: FLUORITE
• FLUORITE is a publicly available Eclipse plug-in that
  captures low-level code editing events and
  produces XML log files

• This is a tool for the researchers

• Can be used to overcome the previously listed limitations

• For each event, FLUORITE logs:
   ▪ timestamp
   ▪ event type / command ID
   ▪ event-specific parameters

                            PLATEAU 2011                  11
Three types of events
• FLUORITE logs three different types of events:
   ▪ Commands: all the user events in the code editor
       • (e.g., typing new text, moving cursor, copying, …)
   ▪ Document Changes
       • logged whenever the active file is modified
       • contain the actual inserted/deleted code, resulting code length, …
       • makes it possible to reproduce snapshots of the files at any point
   ▪ Annotations
       • logged when the developer manually adds annotations to help the researcher




                                       PLATEAU 2011                                   12
An example




Click




           PLATEAU 2011   13
An example




Shift    ↓




             PLATEAU 2011   14
An example




Del




         PLATEAU 2011   15
An example




   PLATEAU 2011   16
Resulting FLUORITE log
<Command __id="2" _type="MoveCaretCommand" caretOffset="142"
    docOffset="142" timestamp="3977"/>
<Command __id="3" _type="EclipseCommand"
    commandID="eventLogger.styledTextCommand.SELECT_LINE_DOWN"
    timestamp="5598"/>
<DocumentChange __id="4" _type="Delete" docASTNodeCount="22"
    docActiveCodeLength="125" docExpressionCount="10" docLength="151"
    endLine="9" length="39" offset="142" startLine="8" timestamp="7186">
 <text>
   <![CDATA[              System.out.println("Hello World!");
]]>
 </text>
</DocumentChange>
<Command __id="5" _type="EclipseCommand"
    commandID="org.eclipse.ui.edit.delete" timestamp="7202"/>


                                PLATEAU 2011                           17
① Cursor was
              Resulting FLUORITE log                         moved by the
                                                             mouse clicking

<Command __id="2" _type="MoveCaretCommand" caretOffset="142"
    docOffset="142" timestamp="3977"/>
<Command __id="3" _type="EclipseCommand"
    commandID="eventLogger.styledTextCommand.SELECT_LINE_DOWN"
    timestamp="5598"/>
<DocumentChange __id="4" _type="Delete" docASTNodeCount="22"
    docActiveCodeLength="125" docExpressionCount="10" docLength="151"
    endLine="9" length="39" offset="142" startLine="8" timestamp="7186">
 <text>
   <![CDATA[              System.out.println("Hello World!");
]]>
 </text>
</DocumentChange>
<Command __id="5" _type="EclipseCommand"
    commandID="org.eclipse.ui.edit.delete" timestamp="7202"/>


                                PLATEAU 2011                            18
Resulting FLUORITE log
                 ② One line of code
<Command __id="2" _type="MoveCaretCommand" caretOffset="142"
                    was selected by
    docOffset="142" timestamp="3977"/>
                      SHIFT + ↓
<Command __id="3" _type="EclipseCommand"
    commandID="eventLogger.styledTextCommand.SELECT_LINE_DOWN"
    timestamp="5598"/>
<DocumentChange __id="4" _type="Delete" docASTNodeCount="22"
    docActiveCodeLength="125" docExpressionCount="10" docLength="151"
    endLine="9" length="39" offset="142" startLine="8" timestamp="7186">
 <text>
   <![CDATA[               System.out.println("Hello World!");
]]>
 </text>
</DocumentChange>
<Command __id="5" _type="EclipseCommand"
    commandID="org.eclipse.ui.edit.delete" timestamp="7202"/>


                                 PLATEAU 2011                          19
Resulting FLUORITE log
<Command __id="2" _type="MoveCaretCommand" caretOffset="142"
    docOffset="142" timestamp="3977"/>
<Command __id="3" _type="EclipseCommand"
    commandID="eventLogger.styledTextCommand.SELECT_LINE_DOWN"
    timestamp="5598"/>
<DocumentChange __id="4" _type="Delete" docASTNodeCount="22"
    docActiveCodeLength="125" docExpressionCount="10" docLength="151"
    endLine="9" length="39" offset="142" startLine="8" timestamp="7186">
 <text>
   <![CDATA[              System.out.println("Hello World!");
]]>
 </text>                                             ③ “Delete” key
</DocumentChange>                                       was pressed
<Command __id="5" _type="EclipseCommand"
    commandID="org.eclipse.ui.edit.delete" timestamp="7202"/>


                                PLATEAU 2011                           20
Resulting FLUORITE log
<Command __id="2" _type="MoveCaretCommand" caretOffset="142"
    docOffset="142" timestamp="3977"/>
<Command __id="3" _type="EclipseCommand"
    commandID="eventLogger.styledTextCommand.SELECT_LINE_DOWN"
    timestamp="5598"/>
                                                         ④ The actual
<DocumentChange __id="4" _type="Delete" docASTNodeCount="22" code
                                                           deleted by the
    docActiveCodeLength="125" docExpressionCount="10" docLength="151"
    endLine="9" length="39" offset="142" startLine="8" timestamp="7186">
                                                         “delete” command
 <text>
   <![CDATA[              System.out.println("Hello World!");
]]>
 </text>
</DocumentChange>
<Command __id="5" _type="EclipseCommand"
    commandID="org.eclipse.ui.edit.delete" timestamp="7202"/>


                                PLATEAU 2011                            21
FLUORITE log files
• The log files are written in XML format
   ▪ Anyone can build their own automatic analyzer!


• Is FLUORITE practical enough to use?
   ▪ Already has been useful for a couple of studies
       • Our own exploratory study with 12 developers
       • Dörner’s evaluation study of Euklas system
   ▪ Size of the logs
       • Average log size: 236.8KB / hr = 9.25MB / week
       • Could be reduced to 1MB / week if the logs were compressed
   ▪ Performance
       • There was no measurable performance loss during our study

                                PLATEAU 2011                          22
Built-in analyses
• We also provide a log analyzer which has
  several built-in analyses

• Our study focused on when and how the developers
  backtrack while editing code
   ▪ The analyses were built for this purpose




                            PLATEAU 2011             23
Example Analysis:
Command distribution report




                    PLATEAU 2011   24
Example Analysis:
Command distribution report




                    PLATEAU 2011   25
Example Analysis:
Command distribution report




                    PLATEAU 2011   26
Example Analysis:
Command distribution report




                    PLATEAU 2011   27
Example Analysis:
Keystroke distribution report




                    PLATEAU 2011   28
Example Analysis:
Keystroke distribution report




                    PLATEAU 2011   29
Example Analysis:
Keystroke distribution report




                    PLATEAU 2011   30
Example Analysis:
Keystroke distribution report




                    PLATEAU 2011   31
Example Analysis:
Code size growth graph




                    PLATEAU 2011   32
Events View




   PLATEAU 2011   33
Example Analysis:
Code editing pattern detection
• FLUORITE logs enable us to detect code editing patterns
  composed of sequences of events
• Examples (not all of them are implemented)
   ▪   Typo correction
   ▪   Parameter tuning
   ▪   Commenting out / uncommenting
   ▪   Cutting/copying and pasting within a project
   ▪   Manual refactoring (e.g., rename variable)
• Preliminary implementations
              Pattern           Counts             Rate      Precision
           Typo correction     274 / 288         13.6 / hr    95.14%
          Parameter tuning      52 / 98           2.6 / hr    53.06%


                                  PLATEAU 2011                           34
Conclusion
• FLUORITE web page:
  http://www.cs.cmu.edu/~fluorite/

• FLUORITE is publicly available, open-sourced tool for
  Eclipse which can be used when conducting studies
• FLUORITE turned out to be useful for our own study,
  and we hope that it will help you too!



                         PLATEAU 2011                     35
Questions?
• FLUORITE web page:
  http://www.cs.cmu.edu/~fluorite/




• Acknowledgements
  ▪ National Science Foundation (NSF) CCF-0811610
  ▪ Korea Foundation for Advanced Studies (KFAS)


                         PLATEAU 2011               36
References
•   [Aversano2007] Aversano, L., Cerulo, L. and Di Penta, M. 2007. How Clones are Maintained: An Empirical
    Study. In Proc. 11th European Conf. on Soft. Maint. and Reengineering (CSMR’07). 81-90.
•   [Bettenburg2009] Bettenburg, N., Weyi, S., Ibrahim, W., Adams, B., Ying, Z. and Hassan, A. E. 2009. An
    Empirical Study on Inconsistent Changes to Code Clones at Release Level. In Proc. 16th Working Conf. on
    Reverse Eng. (WCRE’09). 85-94.
•   [Coman2008] Coman, I. D. and Sillitti, A. 2008. Automated Identification of Tasks in Development Sessions.
    In Proc. 16th IEEE Int’l Conf. on Program Comprehension (ICPC’08). 212-217.
•   [Kersten2006] Kersten, M. and Murphy, G. C. 2006. Using task context to improve programmer
    productivity. In Proc. 14th ACM SIGSOFT Int’l Symp. on Foundations of Soft. Eng. (FSE’06). 1-11.
•   [Kim2005] Kim, M., Sazawal, V., Notkin, D. and Murphy, G. 2005. An empirical study of code clone
    genealogies. In Proc. 10th Euro. Soft. Eng. Conf. & 13th ACM SIGSOFT Int’l Symp. on Foundations of Soft.
    Eng. (ESEC/FSE’05). 187-196.
•   [Ko2003] Ko, A. J. and Myers, B. A. 2003. Development and evaluation of a model of programming errors.
    In Proc. IEEE Symp. on Human Centric Computing Languages and Environments (HCC’03). 7-14.
•   [Ko2005] Ko, A. J., Aung, H. H. and Myers, B. A. 2005. Design requirements for more flexible structured
    editors from a study of programmers’ text editing. In Proc. Extended Abstracts of CHI'2005. 1557-1560.
•   [Hattori2011] Hattori, L., D’Ambros, M., Lanza, M. and Lungu, M. 2011. Software Evolution
    Comprehension: Replay to the Rescue. In Proc. 19th IEEE Int’l Conf. on Program Comprehension (ICPC’11).
    161-170.
•   [Murphy-Hill2009] Murphy-Hill, E., Parnin, C. and Black, A. P. 2009. How we refactor, and how we know it.
    In Proc. 31st Int’l Conf. on Soft. Eng. (ICSE’09). 287-297.


                                                PLATEAU 2011                                                37
BACKUP SLIDES


                PLATEAU 2011   38
Longer example log
<Command __id="2" _type="MoveCaretCommand" caretOffset="103" docOffset="103"
     timestamp="11073"/>
<Command __id="3" _type="EclipseCommand"
     commandID="eventLogger.styledTextCommand.SELECT_LINE_DOWN" timestamp="13001"/>
<DocumentChange __id="4" _type="Delete" docASTNodeCount="15" docActiveCodeLength="86"
     docExpressionCount="4" docLength="112" endLine="8" length="39" offset="103" startLine="7"
     timestamp="14969">
<text><![CDATA[                  System.out.println("Hello World!");
]]></text>
</DocumentChange>
<Command __id="5" _type="EclipseCommand" commandID="org.eclipse.ui.edit.delete"
     timestamp="14985"/>
<DocumentChange __id="6" _type="Insert" docASTNodeCount="22" docActiveCodeLength="125"
     docExpressionCount="10" docLength="151" length="39" offset="103" timestamp="17564">
<text><![CDATA[                  System.out.println("Hello World!");
]]></text>
</DocumentChange>
<Command __id="7" _type="UndoCommand" timestamp="17570"/>




                                           PLATEAU 2011                                          39
Example Analysis:
Command distribution report




                    PLATEAU 2011   40
Example Analysis:
Command distribution report




                                    Command       Count (Percentage)
                                   InsertString     5797 (31.48%)
                                   LINE_DOWN        5693 (10.67%)
                                   DELETE_PREV      4495 (10.48%)
                                    MoveCaret       3586 (8.63%)
                                     LINE_UP        2751 (8.27%)

                    PLATEAU 2011                                    41
Example Analysis:
Keystroke distribution report




                    PLATEAU 2011   42
Example Analysis:
Keystroke distribution report




                                     Key       Count (Percentage)
                                      ↓          5797 (12.64%)
                                   Backspace     5693 (12.41%)
                                      ↑          4495 (9.80%)
                                      →          3586 (7.82%)
                                      ←          2751 (6.00%)

                    PLATEAU 2011                                 43

Más contenido relacionado

La actualidad más candente

20051019 automating regression testing for evolving gui software
20051019 automating regression testing for evolving gui software20051019 automating regression testing for evolving gui software
20051019 automating regression testing for evolving gui softwareWill Shen
 
Synchronization hardware
Synchronization hardwareSynchronization hardware
Synchronization hardwareSaeram Butt
 
Operating System Process Synchronization
Operating System Process SynchronizationOperating System Process Synchronization
Operating System Process SynchronizationHaziq Naeem
 
Mutual Exclusion using Peterson's Algorithm
Mutual Exclusion using Peterson's AlgorithmMutual Exclusion using Peterson's Algorithm
Mutual Exclusion using Peterson's AlgorithmSouvik Roy
 

La actualidad más candente (7)

20051019 automating regression testing for evolving gui software
20051019 automating regression testing for evolving gui software20051019 automating regression testing for evolving gui software
20051019 automating regression testing for evolving gui software
 
Synchronization hardware
Synchronization hardwareSynchronization hardware
Synchronization hardware
 
Operating System Process Synchronization
Operating System Process SynchronizationOperating System Process Synchronization
Operating System Process Synchronization
 
process creation OS
process creation OSprocess creation OS
process creation OS
 
SYNCHRONIZATION
SYNCHRONIZATIONSYNCHRONIZATION
SYNCHRONIZATION
 
Ipc feb4
Ipc feb4Ipc feb4
Ipc feb4
 
Mutual Exclusion using Peterson's Algorithm
Mutual Exclusion using Peterson's AlgorithmMutual Exclusion using Peterson's Algorithm
Mutual Exclusion using Peterson's Algorithm
 

Similar a PLATEAU 2011 - Capturing and Analyzing Low-Level Events from the Code Editor

Prometheus for Monitoring Metrics (Fermilab 2018)
Prometheus for Monitoring Metrics (Fermilab 2018)Prometheus for Monitoring Metrics (Fermilab 2018)
Prometheus for Monitoring Metrics (Fermilab 2018)Brian Brazil
 
Mage Titans USA 2016 - Mathew Beane - Edit Fully Stacked: Less OOPS, More OPS...
Mage Titans USA 2016 - Mathew Beane - Edit Fully Stacked: Less OOPS, More OPS...Mage Titans USA 2016 - Mathew Beane - Edit Fully Stacked: Less OOPS, More OPS...
Mage Titans USA 2016 - Mathew Beane - Edit Fully Stacked: Less OOPS, More OPS...Stacey Whitney
 
ALM@Work - Typical developer day
ALM@Work - Typical developer dayALM@Work - Typical developer day
ALM@Work - Typical developer dayDomusDotNet
 
Enabling IoT Devices’ Hardware and Software Interoperability, IPSO Alliance (...
Enabling IoT Devices’ Hardware and Software Interoperability, IPSO Alliance (...Enabling IoT Devices’ Hardware and Software Interoperability, IPSO Alliance (...
Enabling IoT Devices’ Hardware and Software Interoperability, IPSO Alliance (...Open Mobile Alliance
 
Why Browser Debugger is a Developer's Best Friend
Why Browser Debugger is a Developer's Best FriendWhy Browser Debugger is a Developer's Best Friend
Why Browser Debugger is a Developer's Best FriendOdoo
 
Everything XControls
Everything XControlsEverything XControls
Everything XControlsTeamstudio
 
An XPager's Guide to Process Server-Side Jobs on Domino
An XPager's Guide to Process Server-Side Jobs on DominoAn XPager's Guide to Process Server-Side Jobs on Domino
An XPager's Guide to Process Server-Side Jobs on DominoFrank van der Linden
 
ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®
ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®
ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®Serdar Basegmez
 
Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek PROIDEA
 
Docker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic StackDocker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic StackJakub Hajek
 
Stateful patterns in Azure Functions
Stateful patterns in Azure FunctionsStateful patterns in Azure Functions
Stateful patterns in Azure FunctionsMassimo Bonanni
 
Tool Development 01 - Introduction to Tool Development
Tool Development 01 - Introduction to Tool DevelopmentTool Development 01 - Introduction to Tool Development
Tool Development 01 - Introduction to Tool DevelopmentNick Pruehs
 
Implementing Event Sourcing in .NET
Implementing Event Sourcing in .NETImplementing Event Sourcing in .NET
Implementing Event Sourcing in .NETAndrea Saltarello
 
Odo improving the developer experience on OpenShift - hack &amp; sangria
Odo   improving the developer experience on OpenShift - hack &amp; sangriaOdo   improving the developer experience on OpenShift - hack &amp; sangria
Odo improving the developer experience on OpenShift - hack &amp; sangriaJorge Morales
 
Plug yourself in and your app will never be the same (1 hr edition)
Plug yourself in and your app will never be the same (1 hr edition)Plug yourself in and your app will never be the same (1 hr edition)
Plug yourself in and your app will never be the same (1 hr edition)Mikkel Flindt Heisterberg
 

Similar a PLATEAU 2011 - Capturing and Analyzing Low-Level Events from the Code Editor (20)

Drupal 7 ci and testing
Drupal 7 ci and testingDrupal 7 ci and testing
Drupal 7 ci and testing
 
Prometheus for Monitoring Metrics (Fermilab 2018)
Prometheus for Monitoring Metrics (Fermilab 2018)Prometheus for Monitoring Metrics (Fermilab 2018)
Prometheus for Monitoring Metrics (Fermilab 2018)
 
Mage Titans USA 2016 - Mathew Beane - Edit Fully Stacked: Less OOPS, More OPS...
Mage Titans USA 2016 - Mathew Beane - Edit Fully Stacked: Less OOPS, More OPS...Mage Titans USA 2016 - Mathew Beane - Edit Fully Stacked: Less OOPS, More OPS...
Mage Titans USA 2016 - Mathew Beane - Edit Fully Stacked: Less OOPS, More OPS...
 
ALM@Work - Typical developer day
ALM@Work - Typical developer dayALM@Work - Typical developer day
ALM@Work - Typical developer day
 
Typical Developer Day
Typical Developer DayTypical Developer Day
Typical Developer Day
 
Enabling IoT Devices’ Hardware and Software Interoperability, IPSO Alliance (...
Enabling IoT Devices’ Hardware and Software Interoperability, IPSO Alliance (...Enabling IoT Devices’ Hardware and Software Interoperability, IPSO Alliance (...
Enabling IoT Devices’ Hardware and Software Interoperability, IPSO Alliance (...
 
Why Browser Debugger is a Developer's Best Friend
Why Browser Debugger is a Developer's Best FriendWhy Browser Debugger is a Developer's Best Friend
Why Browser Debugger is a Developer's Best Friend
 
DevOps explained
DevOps explainedDevOps explained
DevOps explained
 
Everything XControls
Everything XControlsEverything XControls
Everything XControls
 
An XPager's Guide to Process Server-Side Jobs on Domino
An XPager's Guide to Process Server-Side Jobs on DominoAn XPager's Guide to Process Server-Side Jobs on Domino
An XPager's Guide to Process Server-Side Jobs on Domino
 
ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®
ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®
ICONUK 2013 - An XPager's Guide to Process Server-Side Jobs on IBM® Domino®
 
Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek
 
Docker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic StackDocker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic Stack
 
Stateful patterns in Azure Functions
Stateful patterns in Azure FunctionsStateful patterns in Azure Functions
Stateful patterns in Azure Functions
 
Tool Development 01 - Introduction to Tool Development
Tool Development 01 - Introduction to Tool DevelopmentTool Development 01 - Introduction to Tool Development
Tool Development 01 - Introduction to Tool Development
 
Implementing Event Sourcing in .NET
Implementing Event Sourcing in .NETImplementing Event Sourcing in .NET
Implementing Event Sourcing in .NET
 
Odo improving the developer experience on OpenShift - hack &amp; sangria
Odo   improving the developer experience on OpenShift - hack &amp; sangriaOdo   improving the developer experience on OpenShift - hack &amp; sangria
Odo improving the developer experience on OpenShift - hack &amp; sangria
 
Build Time Hacking
Build Time HackingBuild Time Hacking
Build Time Hacking
 
Plug yourself in and your app will never be the same (1 hr edition)
Plug yourself in and your app will never be the same (1 hr edition)Plug yourself in and your app will never be the same (1 hr edition)
Plug yourself in and your app will never be the same (1 hr edition)
 
tut0000021-hevery
tut0000021-heverytut0000021-hevery
tut0000021-hevery
 

Último

04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 

Último (20)

04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 

PLATEAU 2011 - Capturing and Analyzing Low-Level Events from the Code Editor

  • 1. Capturing and Analyzing Low-Level Events from the Code Editor YoungSeok Yoon (youngseok@cs.cmu.edu) Institute for Software Research (ISR) Brad A. Myers (bam@cs.cmu.edu) Human-Computer Interaction Institute (HCII) School of Computer Science Carnegie Mellon University
  • 2. Motivation • When trying to understand what problems the developers have, researchers investigate… how frequently when / how do do those the developers use problems occur? what kinds of certain features? problems do developers have? in what context in what sequence do the does a certain developers complete event occur? certain tasks? PLATEAU 2011 2
  • 3. Motivation • When trying to evaluate existing tools… how how much do the developers time do they frequently do actually use those spend using developers tools? the tools? use the tools? do the what types of exactly how developers use errors do they are used the tools as they make? in detail? expected? PLATEAU 2011 3
  • 4. How do we answer these questions? • Essentially, we are collecting the usage data from the developers • The usage data can be collected by: ▪ asking the developers ▪ observing the developers ▪ mining software repositories ▪ logging the developers’ behavior • However, previous tools make it difficult or impossible to get / analyze fine-grained code editing history PLATEAU 2011 4
  • 5. Asking the developers • Interviews, surveys, focus groups • Limitations ▪ Responses may not be reliable ▪ Developers perform many operations quite automatically  Maybe they might not remember the specific occasions PLATEAU 2011 5
  • 6. Observing the developers • Contextual inquiries, lab studies • Think aloud + videotape • Limitations ▪ Requires manual inspection of the videotape  Can be time-consuming and error-prone • [Coman2008], [Ko2003], [Ko2005], ... PLATEAU 2011 6
  • 7. Mining software repositories • Has been used for studying software evolution • Limitations ▪ Cannot know exactly what happened between two consecutive revisions  we may miss some important user behavior ▪ Need to infer from the check-in comments and other clues • [Aversano2007], [Bettenburg2009], [Kim2005], [Murphy-Hill2009], … PLATEAU 2011 7
  • 8. Eclipse Usage Data Collector (UDC) • Logging tool for aggregate data • Collects usage information from all the Eclipse users who consented to upload their data to UDC • Limitations ▪ Does not capture the sequences of events ▪ Misses some important commands executed • e.g., UDC ignores backspace, moving cursor with arrow keys, … ▪ Command-specific parameters are not captured PLATEAU 2011 8
  • 9. Other Logging Tools • Mylyn Monitor [Kersten2006] ▪ Textual level changes are not captured ▪ Focuses on more abstract user interaction data on the entire IDE • Syde / Replay [Hattori2011] ▪ Only commands which change the source code are logged ▪ AST-level, not textual level PLATEAU 2011 9
  • 10. Our new logging tool: FLUORITE Full of Low-level User Operations Recorded In The Editor PLATEAU 2011 10
  • 11. Our new logging tool: FLUORITE • FLUORITE is a publicly available Eclipse plug-in that captures low-level code editing events and produces XML log files • This is a tool for the researchers • Can be used to overcome the previously listed limitations • For each event, FLUORITE logs: ▪ timestamp ▪ event type / command ID ▪ event-specific parameters PLATEAU 2011 11
  • 12. Three types of events • FLUORITE logs three different types of events: ▪ Commands: all the user events in the code editor • (e.g., typing new text, moving cursor, copying, …) ▪ Document Changes • logged whenever the active file is modified • contain the actual inserted/deleted code, resulting code length, … • makes it possible to reproduce snapshots of the files at any point ▪ Annotations • logged when the developer manually adds annotations to help the researcher PLATEAU 2011 12
  • 13. An example Click PLATEAU 2011 13
  • 14. An example Shift ↓ PLATEAU 2011 14
  • 15. An example Del PLATEAU 2011 15
  • 16. An example PLATEAU 2011 16
  • 17. Resulting FLUORITE log <Command __id="2" _type="MoveCaretCommand" caretOffset="142" docOffset="142" timestamp="3977"/> <Command __id="3" _type="EclipseCommand" commandID="eventLogger.styledTextCommand.SELECT_LINE_DOWN" timestamp="5598"/> <DocumentChange __id="4" _type="Delete" docASTNodeCount="22" docActiveCodeLength="125" docExpressionCount="10" docLength="151" endLine="9" length="39" offset="142" startLine="8" timestamp="7186"> <text> <![CDATA[ System.out.println("Hello World!"); ]]> </text> </DocumentChange> <Command __id="5" _type="EclipseCommand" commandID="org.eclipse.ui.edit.delete" timestamp="7202"/> PLATEAU 2011 17
  • 18. ① Cursor was Resulting FLUORITE log moved by the mouse clicking <Command __id="2" _type="MoveCaretCommand" caretOffset="142" docOffset="142" timestamp="3977"/> <Command __id="3" _type="EclipseCommand" commandID="eventLogger.styledTextCommand.SELECT_LINE_DOWN" timestamp="5598"/> <DocumentChange __id="4" _type="Delete" docASTNodeCount="22" docActiveCodeLength="125" docExpressionCount="10" docLength="151" endLine="9" length="39" offset="142" startLine="8" timestamp="7186"> <text> <![CDATA[ System.out.println("Hello World!"); ]]> </text> </DocumentChange> <Command __id="5" _type="EclipseCommand" commandID="org.eclipse.ui.edit.delete" timestamp="7202"/> PLATEAU 2011 18
  • 19. Resulting FLUORITE log ② One line of code <Command __id="2" _type="MoveCaretCommand" caretOffset="142" was selected by docOffset="142" timestamp="3977"/> SHIFT + ↓ <Command __id="3" _type="EclipseCommand" commandID="eventLogger.styledTextCommand.SELECT_LINE_DOWN" timestamp="5598"/> <DocumentChange __id="4" _type="Delete" docASTNodeCount="22" docActiveCodeLength="125" docExpressionCount="10" docLength="151" endLine="9" length="39" offset="142" startLine="8" timestamp="7186"> <text> <![CDATA[ System.out.println("Hello World!"); ]]> </text> </DocumentChange> <Command __id="5" _type="EclipseCommand" commandID="org.eclipse.ui.edit.delete" timestamp="7202"/> PLATEAU 2011 19
  • 20. Resulting FLUORITE log <Command __id="2" _type="MoveCaretCommand" caretOffset="142" docOffset="142" timestamp="3977"/> <Command __id="3" _type="EclipseCommand" commandID="eventLogger.styledTextCommand.SELECT_LINE_DOWN" timestamp="5598"/> <DocumentChange __id="4" _type="Delete" docASTNodeCount="22" docActiveCodeLength="125" docExpressionCount="10" docLength="151" endLine="9" length="39" offset="142" startLine="8" timestamp="7186"> <text> <![CDATA[ System.out.println("Hello World!"); ]]> </text> ③ “Delete” key </DocumentChange> was pressed <Command __id="5" _type="EclipseCommand" commandID="org.eclipse.ui.edit.delete" timestamp="7202"/> PLATEAU 2011 20
  • 21. Resulting FLUORITE log <Command __id="2" _type="MoveCaretCommand" caretOffset="142" docOffset="142" timestamp="3977"/> <Command __id="3" _type="EclipseCommand" commandID="eventLogger.styledTextCommand.SELECT_LINE_DOWN" timestamp="5598"/> ④ The actual <DocumentChange __id="4" _type="Delete" docASTNodeCount="22" code deleted by the docActiveCodeLength="125" docExpressionCount="10" docLength="151" endLine="9" length="39" offset="142" startLine="8" timestamp="7186"> “delete” command <text> <![CDATA[ System.out.println("Hello World!"); ]]> </text> </DocumentChange> <Command __id="5" _type="EclipseCommand" commandID="org.eclipse.ui.edit.delete" timestamp="7202"/> PLATEAU 2011 21
  • 22. FLUORITE log files • The log files are written in XML format ▪ Anyone can build their own automatic analyzer! • Is FLUORITE practical enough to use? ▪ Already has been useful for a couple of studies • Our own exploratory study with 12 developers • Dörner’s evaluation study of Euklas system ▪ Size of the logs • Average log size: 236.8KB / hr = 9.25MB / week • Could be reduced to 1MB / week if the logs were compressed ▪ Performance • There was no measurable performance loss during our study PLATEAU 2011 22
  • 23. Built-in analyses • We also provide a log analyzer which has several built-in analyses • Our study focused on when and how the developers backtrack while editing code ▪ The analyses were built for this purpose PLATEAU 2011 23
  • 24. Example Analysis: Command distribution report PLATEAU 2011 24
  • 25. Example Analysis: Command distribution report PLATEAU 2011 25
  • 26. Example Analysis: Command distribution report PLATEAU 2011 26
  • 27. Example Analysis: Command distribution report PLATEAU 2011 27
  • 32. Example Analysis: Code size growth graph PLATEAU 2011 32
  • 33. Events View PLATEAU 2011 33
  • 34. Example Analysis: Code editing pattern detection • FLUORITE logs enable us to detect code editing patterns composed of sequences of events • Examples (not all of them are implemented) ▪ Typo correction ▪ Parameter tuning ▪ Commenting out / uncommenting ▪ Cutting/copying and pasting within a project ▪ Manual refactoring (e.g., rename variable) • Preliminary implementations Pattern Counts Rate Precision Typo correction 274 / 288 13.6 / hr 95.14% Parameter tuning 52 / 98 2.6 / hr 53.06% PLATEAU 2011 34
  • 35. Conclusion • FLUORITE web page: http://www.cs.cmu.edu/~fluorite/ • FLUORITE is publicly available, open-sourced tool for Eclipse which can be used when conducting studies • FLUORITE turned out to be useful for our own study, and we hope that it will help you too! PLATEAU 2011 35
  • 36. Questions? • FLUORITE web page: http://www.cs.cmu.edu/~fluorite/ • Acknowledgements ▪ National Science Foundation (NSF) CCF-0811610 ▪ Korea Foundation for Advanced Studies (KFAS) PLATEAU 2011 36
  • 37. References • [Aversano2007] Aversano, L., Cerulo, L. and Di Penta, M. 2007. How Clones are Maintained: An Empirical Study. In Proc. 11th European Conf. on Soft. Maint. and Reengineering (CSMR’07). 81-90. • [Bettenburg2009] Bettenburg, N., Weyi, S., Ibrahim, W., Adams, B., Ying, Z. and Hassan, A. E. 2009. An Empirical Study on Inconsistent Changes to Code Clones at Release Level. In Proc. 16th Working Conf. on Reverse Eng. (WCRE’09). 85-94. • [Coman2008] Coman, I. D. and Sillitti, A. 2008. Automated Identification of Tasks in Development Sessions. In Proc. 16th IEEE Int’l Conf. on Program Comprehension (ICPC’08). 212-217. • [Kersten2006] Kersten, M. and Murphy, G. C. 2006. Using task context to improve programmer productivity. In Proc. 14th ACM SIGSOFT Int’l Symp. on Foundations of Soft. Eng. (FSE’06). 1-11. • [Kim2005] Kim, M., Sazawal, V., Notkin, D. and Murphy, G. 2005. An empirical study of code clone genealogies. In Proc. 10th Euro. Soft. Eng. Conf. & 13th ACM SIGSOFT Int’l Symp. on Foundations of Soft. Eng. (ESEC/FSE’05). 187-196. • [Ko2003] Ko, A. J. and Myers, B. A. 2003. Development and evaluation of a model of programming errors. In Proc. IEEE Symp. on Human Centric Computing Languages and Environments (HCC’03). 7-14. • [Ko2005] Ko, A. J., Aung, H. H. and Myers, B. A. 2005. Design requirements for more flexible structured editors from a study of programmers’ text editing. In Proc. Extended Abstracts of CHI'2005. 1557-1560. • [Hattori2011] Hattori, L., D’Ambros, M., Lanza, M. and Lungu, M. 2011. Software Evolution Comprehension: Replay to the Rescue. In Proc. 19th IEEE Int’l Conf. on Program Comprehension (ICPC’11). 161-170. • [Murphy-Hill2009] Murphy-Hill, E., Parnin, C. and Black, A. P. 2009. How we refactor, and how we know it. In Proc. 31st Int’l Conf. on Soft. Eng. (ICSE’09). 287-297. PLATEAU 2011 37
  • 38. BACKUP SLIDES PLATEAU 2011 38
  • 39. Longer example log <Command __id="2" _type="MoveCaretCommand" caretOffset="103" docOffset="103" timestamp="11073"/> <Command __id="3" _type="EclipseCommand" commandID="eventLogger.styledTextCommand.SELECT_LINE_DOWN" timestamp="13001"/> <DocumentChange __id="4" _type="Delete" docASTNodeCount="15" docActiveCodeLength="86" docExpressionCount="4" docLength="112" endLine="8" length="39" offset="103" startLine="7" timestamp="14969"> <text><![CDATA[ System.out.println("Hello World!"); ]]></text> </DocumentChange> <Command __id="5" _type="EclipseCommand" commandID="org.eclipse.ui.edit.delete" timestamp="14985"/> <DocumentChange __id="6" _type="Insert" docASTNodeCount="22" docActiveCodeLength="125" docExpressionCount="10" docLength="151" length="39" offset="103" timestamp="17564"> <text><![CDATA[ System.out.println("Hello World!"); ]]></text> </DocumentChange> <Command __id="7" _type="UndoCommand" timestamp="17570"/> PLATEAU 2011 39
  • 40. Example Analysis: Command distribution report PLATEAU 2011 40
  • 41. Example Analysis: Command distribution report Command Count (Percentage) InsertString 5797 (31.48%) LINE_DOWN 5693 (10.67%) DELETE_PREV 4495 (10.48%) MoveCaret 3586 (8.63%) LINE_UP 2751 (8.27%) PLATEAU 2011 41
  • 43. Example Analysis: Keystroke distribution report Key Count (Percentage) ↓ 5797 (12.64%) Backspace 5693 (12.41%) ↑ 4495 (9.80%) → 3586 (7.82%) ← 2751 (6.00%) PLATEAU 2011 43

Notas del editor

  1. Thank you. Today, I’m going to talk about Capturing and Analyzing Low-Level Events from the Code Editor.In this talk, I will introduce our new logging tool called “Fluorite,” but let’s go over the motivations of this work first.
  2. Also, when we’re trying to evaluate existing tools, we ask many different questions such as…
  3. The resulting Fluorite log file looks like this.I do not expect you to read the details, but you can see that each event is logged as an XML element.
  4. For technical reasons, a document change event always precedes the causing command. That’s why the document change event appears as a thrid element instead of fourth.
  5. Please let us know if you have any ideas on other analyses that might be useful in general.We could implement those in our analyzer.
  6. Finally, Fluorite logs enable us to automatically detect some code editing patterns that are compused of sequences of events.We brainstormed what types of patterns could be detected, and here are some of the examples.
  7. Backup slide for Replay question.. the cursor position.. it would be tricky to replay it in Eclipse