An Interactive System for Data Structure Development

Data structure algorithms are of fundamental importance in teaching and software development, yet are difficult to understand. We propose a new approach for understanding, debugging and developing heap manipulating data structures. The key technical idea of our work is to combine deep parametric abstraction techniques emerging from the area of static analysis with interactive abstraction manipulation. Our approach bridges program analysis with HCI and enables new capabilities not possible before: i) online automatic visualization of the data structure in a way which captures its essential operation, thus enabling powerful local reasoning, and ii) fine grained pen and touch gestures allowing for interactive control of the abstraction -- at any point the developer can pause the program, graphically interact with the data, and continue program execution. These features address some of the most pressing challenges in developing data structures. We implemented our approach in a Java-based system called FluiEdt and evaluated it with $27$ developers. The results indicate that FluiEdt is more effective in helping developers find data structure errors than existing state of the art IDEs (e.g. Eclipse) or pure visualization based approaches.

[1]  Reinhard Wilhelm,et al.  Parametric shape analysis via 3-valued logic , 2002, TOPL.

[2]  Robert DeLine,et al.  Code canvas: zooming towards better development environments , 2010, 2010 ACM/IEEE 32nd International Conference on Software Engineering.

[3]  Philip J. Guo,et al.  Two studies of opportunistic programming: interleaving web foraging, learning, and writing code , 2009, CHI.

[4]  Joel Brandt,et al.  Codelets: linking interactive documentation and example code in the editor , 2012, CHI.

[5]  James Fogarty,et al.  Assieme: finding and leveraging implicit references in a web search interface for programmers , 2007, UIST '07.

[6]  Reinhard Wilhelm,et al.  Parametric shape analysis via 3-valued logic , 1999, POPL '99.

[7]  Robert C. Zeleznik,et al.  Hands-on math: a page-based multi-touch and pen desktop for technical work and problem solving , 2010, UIST.

[8]  Lena Mamykina,et al.  Design lessons from the fastest q&a site in the west , 2011, CHI.

[9]  J.T. Stasko,et al.  Tango: a framework and system for algorithm animation , 1990, Computer.

[10]  Lauri Malmi,et al.  A Review of Generic Program Visualization Systems for Introductory Programming Education , 2013, TOCE.

[11]  César Sánchez,et al.  Abstracting runtime heaps for program understanding , 2013, IEEE Transactions on Software Engineering.

[12]  Scott R. Klemmer,et al.  Iterative design and evaluation of an event architecture for pen-and-paper interfaces , 2008, UIST '08.

[13]  Koushik Sen,et al.  CodeHint: dynamic and interactive synthesis of code snippets , 2014, ICSE.

[14]  Françoise Détienne,et al.  Software Design — Cognitive Aspects , 2001, Practitioner Series.

[15]  Aniket Kittur,et al.  Kinetica: naturalistic multi-touch data visualization , 2014, CHI.

[16]  Roel Vertegaal,et al.  SnipMatch: using source code context to enhance snippet retrieval and parameterization , 2012, UIST.

[17]  John R. Anderson,et al.  Debugging: An Analysis of Bug-Location Strategies , 1987, Hum. Comput. Interact..

[18]  Rob Miller,et al.  Addressing misconceptions about code with always-on programming visualizations , 2014, CHI.

[19]  Björn Hartmann,et al.  Stacksplorer: call graph navigation helps increasing code maintenance efficiency , 2011, UIST.

[20]  Thomas W. Reps,et al.  Recency-Abstraction for Heap-Allocated Storage , 2006, SAS.

[21]  Sara L. Su,et al.  Heapviz: interactive heap visualization for program understanding and debugging , 2010, SOFTVIS '10.

[22]  Richard E. Mayer,et al.  The Psychology of How Novices Learn Computer Programming , 1981, CSUR.

[23]  Björn Hartmann,et al.  HyperSource: bridging the gap between source and code-related web sites , 2010, UIST '10.

[24]  Brad A. Myers,et al.  Six Learning Barriers in End-User Programming Systems , 2004, 2004 IEEE Symposium on Visual Languages - Human Centric Computing.

[25]  Scott R. Klemmer,et al.  Example-centric programming: integrating web search into the development environment , 2010, CHI.

[26]  Brad A. Myers,et al.  Extracting and answering why and why not questions about Java program output , 2010, TSEM.

[27]  Marc Najork,et al.  Algorithm animation using 3D interactive graphics , 1993, UIST '93.

[28]  Björn Hartmann,et al.  HyperSource: bridging the gap between source and code-related web sites , 2011, CHI.

[29]  Philip J. Guo Online python tutor: embeddable web-based program visualization for cs education , 2013, SIGCSE '13.

[30]  Mark Weiser,et al.  Programmers use slices when debugging , 1982, CACM.

[31]  John R. Anderson,et al.  Debugging: An Analysis of Bug-Location Strategies (Abstract Only) , 1989, SGCH.

[32]  Joseph J. LaViola,et al.  Code bubbles: a working set-based interface for code understanding and maintenance , 2010, CHI.

[33]  David J. Gilmore Models of Debugging , 1990, PPIG.