trace4d
Visualization of program traces through animated 2.5D object maps. Research prototype.
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
Repository
Visualization of program traces through animated 2.5D object maps. Research prototype.
Basic Info
- Host: GitHub
- Owner: LinqLover
- License: other
- Language: JavaScript
- Default Branch: main
- Homepage: https://linqlover.github.io/trace4d/
- Size: 29.4 MB
Statistics
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
- Releases: 1
Topics
Metadata Files
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.

Repository Structure
.github/workflows/: GitHub Actions workflows for CIassets/:assets/examples.md: Screenshots and screencasts of visualizing example program tracesassets/traces/: Prepared serialized program traces of different Squeak programs (seedocs/traces.md)
docs/: Documentational artifactsdocs/paper/: LaTeX sources of our paper preprint (older version)docs/exposé/: LaTeX sources of our original exposédocs/benchmarking.md: Instructions for reproducing our benchmarking resultsdocs/experience-report.md: Instructions and results of our experience reportdocs/traces.md: Descriptions of the provided traces
packages/: Sources of the trace4d prototypepackages/BaselineOfTrace4D.package/: Metacello baseline for loading the trace4d backend in Squeakpackages/Trace4D.package/: Squeak backend (serialization of traces)packages/frontend/: Browser visualization (three.js)
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
Trace4Dpackage
- via Metacello:
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.jsonorhttps://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 intraceMap.stats.logs(default: not set, requirescountFPS)measureStartTime: flag to display the start-up time after loading (default: not set)- obsolete:
style:flatFDG(default) orhierarchical(package/class organization, no longer fully supported)
Examples:
- https://linqlover.github.io/trace4d/app.html
- https://linqlover.github.io/trace4d/app.html?trace=traces/regexMatch.json&countFPS
- http://localhost:5173/app.html?trace=https://raw.githubusercontent.com/LinqLover/trace4d/main/assets/traces/displayScanner.json?measureStartTime
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
- Twitter: LinqLover
- Repositories: 13
- Profile: https://github.com/LinqLover
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
Top Committers
| Name | 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
- actions/checkout v2 composite
- actions/upload-artifact master composite
- peaceiris/actions-gh-pages v3 composite
- xu-cheng/texlive-action/full v1 composite
- actions/checkout v3 composite
- actions/setup-node v3 composite
- peaceiris/actions-gh-pages v3 composite
- actions/checkout v2 composite
- actions/upload-artifact master composite
- peaceiris/actions-gh-pages v3 composite
- xu-cheng/latex-action v2-texlive2022 composite
- 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
- @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
- pandoc-fignos *