trace4d

Visualization of program traces through animated 2.5D object maps. Research prototype.

https://github.com/linqlover/trace4d

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 4 DOI reference(s) in README
  • Academic publication links
    Links to: researchgate.net
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (7.4%) to scientific vocabulary

Keywords

omniscient-debugging program-comprehension program-exploration smalltalk software-visualization squeak threejs visualization
Last synced: 6 months ago · JSON representation ·

Repository

Visualization of program traces through animated 2.5D object maps. Research prototype.

Basic Info
Statistics
  • Stars: 0
  • Watchers: 2
  • Forks: 0
  • Open Issues: 0
  • Releases: 1
Topics
omniscient-debugging program-comprehension program-exploration smalltalk software-visualization squeak threejs visualization
Created almost 3 years ago · Last pushed almost 2 years ago
Metadata Files
Readme License Citation

README.md

trace4d

This project aims to improve program comprehension by visualizing traces of object-oriented programs through animated 2.5D object maps. Program traces are created in Squeak using the TraceDebugger and visualized in the browser using three.js.

Screenshot of trace4d

View more examples here.

Repository Structure

Setup

Backend (Squeak)

  • Get Squeak (tested on Squeak 6.1Alpha #22599, but should technically work in Squeak 6.0)
  • Load the trace4d backend:
    • via Metacello: smalltalk Metacello new baseline: 'Trace4D'; repository: 'github://LinqLover/trace4d/packages'; load.
    • or manually:
    • Install the TraceDebugger
    • Open the Git Browser (Tools in the world main docking bar)
    • Clone this repository and check out the Trace4D package

Frontend (JavaScript)

See packages/frontend/README.md.

Usage

Creating a Program Trace

For example, open a workspace and execute the following code (Cmd + A, Cmd + D):

smalltalk trace := T4DTrace forBlock: ['\d|\w+' asRegex]. trace storeJsonInFileNamed: 'parseRegex.json'.

Find more inspiration in docs/traces.md and in the class comment and examples of the T4DTrace class.

Visualization

Open the visualization: self-hosted or on GitHub Pages.

You can customize much of it through optional URL parameters:

  • trace: path or URL to a trace file (e.g., traces/regexParse.json or https://raw.githubusercontent.com/LinqLover/trace4d/main/assets/traces/regexParse.json)
  • autoStart: flag to automatically start the animation (default: not set)
  • countFPS: flag to turn on FPS/MS/MB display (default: not set)
  • measureFPS: flag to log FPS/MS/MB in traceMap.stats.logs (default: not set, requires countFPS)
  • measureStartTime: flag to display the start-up time after loading (default: not set)
  • obsolete:
    • style: flatFDG (default) or hierarchical (package/class organization, no longer fully supported)

Examples:

If you have an own trace file, you can select it on the landing page.

Navigation

  • Navigate through the scene using the mouse (drag to move, Ctrl + drag to rotate, scroll to zoom) or the keyboard (arrow keys to move, Ctrl + arrow keys to rotate).
  • Inspect an object/field by clicking on it.
  • Override the layout by moving objects around (Shift + drag) or unpin objects again (Ctrl + click).
  • Press Esc to stop the layout simulation (recommended before starting the animation for performance reasons!).
  • To control the animation, use the play/pause button in the timeline at the bottom, click on the timeline to jump to a specific point in time, or use the keyboard shortcuts (Space to play/pause, Home to reset the animation).
  • To explore the call tree of the program trace, expand the flame graph by resizing the timeline and click/hover interesting frames.

Configuration

You can customize the visualization dynamically to change the visible objects and the layout. To this end, open the Chrome DevTools (F12) and use the traceMap object in the console like this:

```js // force layout: traceMap.entityBuilder.forceWeights.references = 0.5 traceMap.entityBuilder.forceWeights.organization.sameClass = 0.1 traceMap.entityBuilder.forceWeights.globalFactor = 0.5 traceMap.entityBuilder.forceWeights.repulsion = 0.3 // object filtering: traceMap.entityBuilder.excludedObjectNames.push("'an Object'") traceMap.entityBuilder.excludedClassNames.push('ByteString') traceMap.entityBuilder.excludeClasses = false traceMap.reloadTrace()

traceMap.player.stepsPerSecond = 100 ```

For the full protocol, please rely on the autocompletion or dig into the the FlatFDGEntityBuilder implementation.

Future Work and Issues

See IDEAS.md.

Acknowledgments

This project was conducted in the Methods & Techniques for Visual Analytics seminar offered by the Computer Graphics Systems Group at the Hasso Plattner Institute. Thanks to Willy Scheibel (@scheibel) for supervising this project and providing countless ideas and feedback!

Citing

If you would like to cite this project or learn more about the research behind it, please refer to the following publication:

Christoph Thiede, Willy Scheibel, and Jürgen Döllner: Bringing Objects to Life: Supporting Program Comprehension through Animated 2.5D Object Maps from Program Traces. In Proceedings of the 15th International Conference on Information Visualization Theory and Applications (IVAPP 2024), February 27–29, Rome, Italy. SciTePress, 9 pages. DOI: 10.5220/0012393900003660. 🔗 Preprint 🔗 Poster 🔗 Slides

BibTeX
@inproceedings{thiede2024bringing,
  author = {Thiede, Christoph and Scheibel, Willy and D{\"o}llner, J{\"u}rgen},
  title = {Bringing Objects to Life: Supporting Program Comprehension through Animated 2.5D Object Maps from Program Traces},
  booktitle = {Proceedings of the 19th International Joint Conference on Computer Vision, Imaging and Computer Graphics Theory and Applications -- Volume 1: GRAPP, HUCAPP and IVAPP},
  year = {2024},
  series = {IVAPP '24},
  month = {2},
  days = {27--29},
  publisher = {SciTePress},
  organization = {INSTICC},
  isbn = {978-989-758-679-8},
  issn = {2184-4321},
  doi = {10.5220/0012393900003660},
  pages = {661--669},
  location = {Rome, Italy}
}

Owner

  • Name: Christoph Thiede
  • Login: LinqLover
  • Kind: user
  • Location: Berlin
  • Company: Hasso Plattner Institute | @hpi-swa | @Museum-Barberini-gGmbH

Student of IT-Systems Engineering

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software/work in your research, please cite it as follows:"
title: "trace4d"
authors:
  - family-names: "Thiede"
    given-names: "Christoph"
    orcid: https://orcid.org/0000-0002-7442-8216
version: "In press."
preferred-citation:
  type: conference-paper
  authors:
  - family-names: "Thiede"
    given-names: "Christoph"
    orcid: https://orcid.org/0000-0002-7442-8216
  - family-names: "Scheibel"
    given-names: "Willy"
    orcid: https://orcid.org/0000-0002-7885-9857
  - family-names: "Döllner"
    given-names: "Jürgen"
    orcid: https://orcid.org/0000-0002-8981-8583
  title: "Bringing Objects to Life: Supporting Program Comprehension through Animated 2.5D Object Maps from Program Traces"
  collection-title: "Proceedings of the 19th International Conference on Information Visualization Theory and Applications (IVAPP 2024)"
  abstract: |
    Program comprehension is a key activity in software development.
    Several visualization approaches such as software maps have been proposed to support programmers in exploring the architecture of software systems.
    However, for the exploration of program behavior, programmers still rely on traditional code browsing and debugging tools to build a mental model of a system’s behavior.
    We propose a novel approach to visualizing program behavior through animated 2.5D object maps that depict particular objects and their interactions from a program trace.
    We describe our implementation and evaluate it for different program traces through an experience report and performance measurements.
    Our results indicate that our approach can benefit program comprehension tasks, but further research is needed to improve scalability and usability.
  month: 2
  year: 2024
  volume: 3
  pages: 9
  location: "Rome, Italy"
  publisher: "SciTePress"
  organization: "INSTICC"
  doi: 10.5220/0012393900003660
  keywords:
    - software visualization
    - software maps
    - program comprehension
    - omniscient debugging

GitHub Events

Total
Last Year

Committers

Last synced: 11 months ago

All Time
  • Total Commits: 213
  • Total Committers: 1
  • Avg Commits per committer: 213.0
  • Development Distribution Score (DDS): 0.0
Past Year
  • Commits: 1
  • Committers: 1
  • Avg Commits per committer: 1.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Christoph Thiede c****e@s****e 213
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 11 months ago

All Time
  • Total issues: 0
  • Total pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Total issue authors: 0
  • Total pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels

Dependencies

.github/workflows/exposé.yml actions
  • actions/checkout v2 composite
  • actions/upload-artifact master composite
  • peaceiris/actions-gh-pages v3 composite
  • xu-cheng/texlive-action/full v1 composite
.github/workflows/frontend.yml actions
  • actions/checkout v3 composite
  • actions/setup-node v3 composite
  • peaceiris/actions-gh-pages v3 composite
.github/workflows/paper.yml actions
  • actions/checkout v2 composite
  • actions/upload-artifact master composite
  • peaceiris/actions-gh-pages v3 composite
  • xu-cheng/latex-action v2-texlive2022 composite
packages/frontend/package.json npm
  • vite ^4.3.9 development
  • @fortawesome/fontawesome-free ^6.4.2
  • collect.js ^4.36.1
  • d3 ^7.8.5
  • d3-flame-graph ^4.1.3
  • d3-force ^3.0.0
  • d3-random ^3.0.1
  • d3-tip ^0.9.1
  • eventemitter3 ^5.0.1
  • stats.js ^0.17.0
  • three ^0.156.0
packages/frontend/yarn.lock npm
  • @esbuild/android-arm 0.17.19
  • @esbuild/android-arm64 0.17.19
  • @esbuild/android-x64 0.17.19
  • @esbuild/darwin-arm64 0.17.19
  • @esbuild/darwin-x64 0.17.19
  • @esbuild/freebsd-arm64 0.17.19
  • @esbuild/freebsd-x64 0.17.19
  • @esbuild/linux-arm 0.17.19
  • @esbuild/linux-arm64 0.17.19
  • @esbuild/linux-ia32 0.17.19
  • @esbuild/linux-loong64 0.17.19
  • @esbuild/linux-mips64el 0.17.19
  • @esbuild/linux-ppc64 0.17.19
  • @esbuild/linux-riscv64 0.17.19
  • @esbuild/linux-s390x 0.17.19
  • @esbuild/linux-x64 0.17.19
  • @esbuild/netbsd-x64 0.17.19
  • @esbuild/openbsd-x64 0.17.19
  • @esbuild/sunos-x64 0.17.19
  • @esbuild/win32-arm64 0.17.19
  • @esbuild/win32-ia32 0.17.19
  • @esbuild/win32-x64 0.17.19
  • @fortawesome/fontawesome-free 6.4.2
  • collect.js 4.36.1
  • commander 7.2.0
  • d3 7.8.5
  • d3-array 3.2.4
  • d3-axis 3.0.0
  • d3-brush 3.0.0
  • d3-chord 3.0.1
  • d3-collection 1.0.7
  • d3-color 3.1.0
  • d3-contour 4.0.2
  • d3-delaunay 6.0.4
  • d3-dispatch 3.0.1
  • d3-drag 3.0.0
  • d3-dsv 3.0.1
  • d3-ease 3.0.1
  • d3-fetch 3.0.1
  • d3-flame-graph 4.1.3
  • d3-force 3.0.0
  • d3-format 3.1.0
  • d3-geo 3.1.0
  • d3-hierarchy 3.1.2
  • d3-interpolate 3.0.1
  • d3-path 3.1.0
  • d3-polygon 3.0.1
  • d3-quadtree 3.0.1
  • d3-random 3.0.1
  • d3-scale 4.0.2
  • d3-scale-chromatic 3.0.0
  • d3-selection 1.4.2
  • d3-selection 3.0.0
  • d3-shape 3.2.0
  • d3-time 3.1.0
  • d3-time-format 4.1.0
  • d3-timer 3.0.1
  • d3-tip 0.9.1
  • d3-transition 3.0.1
  • d3-zoom 3.0.0
  • delaunator 5.0.0
  • esbuild 0.17.19
  • eventemitter3 5.0.1
  • fsevents 2.3.2
  • iconv-lite 0.6.3
  • internmap 2.0.3
  • nanoid 3.3.6
  • picocolors 1.0.0
  • postcss 8.4.23
  • robust-predicates 3.0.2
  • rollup 3.23.0
  • rw 1.3.3
  • safer-buffer 2.1.2
  • source-map-js 1.0.2
  • stats.js 0.17.0
  • three 0.156.0
  • vite 4.3.9
docs/exposé/requirements.txt pypi
  • pandoc-fignos *