Hi Florin, you're in for some interesting questions :)
First, I did not have a methodology for finding the issue (or explaining the algorithm) when I started, and I didn't have one afterwards; you need to look into the WhyLine stuff for that (they do a lot better, but I don't have the time to reimplement their tool). But I noticed that understanding an algorithm is easy (relatively) when: - You can easily move repeatedly to any point in an execution stream of that algorithm (i.e. ubiquitous debugging: step forward, backward, jump at any point back and forth, any number of times). - At each point, you are given the precise point in the source code (debugger-like) - At each point, you get significant values: assignments, arguments, return values Representation is easy: an execution is a tree. A sequence in this execution is items at the same level in the tree. Calls are subtrees, as well as iterations. Gui is simple: a tree on the left, code pane on the right. See an example underway: I'm trying to find a bug in LayoutFrame, so I traced LayoutFrame>>transform: (without breaking Morphic). [image: Images intégrées 1] This is for exploration at the moment, and not comparing values. And on a single method, and highlighting is broken in Pharo 4 :( In the value tracking idea, what we thought then in the place I worked in at that time, is that we could study comparing / diffing trace trees to see where the two versions of the algorithm diverges. We didn't follow up and it wasn't published. I have new visualisations on Roassal now, but they are for static analysis of multitask C code. Does that give you ideas? Thierry 2014-10-06 15:08 GMT+02:00 Florin Mateoc <[email protected]>: > Hi Thierry, > > On 10/4/2014 5:32 PM, Thierry Goubier wrote: > > > >> I do have specific tools I can use in such circumstances > >> that you > >> don't have. > >> > >> > >> What kind of tools? I would be interested in learning about them > >> and the > >> analysis use cases they support. > >> > >> > >> I have a trace tool for those situations (and also for parser work). > >> > >> > >> What trace tool? Is an example available? > > > > > http://lists.gforge.inria.fr/pipermail/pharo-project/2012-July/067679.html > > > >> My original use case was: > >> - Finding the bug in an error correction decoding algorithm which > >> worked without error, but with non-satisfying results: lower than > >> expected SNR. > >> - Has then been used very successfully to explain the algorithm. > >> - Was then used as the basis for a hardware design methodology by > >> dynamic code traces of multithreaded programs > >> > > I am very interested in the "explaining the algorithm" aspect of your > tool. Could you please talk a little about that? > > I think I had a similar use case - improving an algorithm working over a > lot of data (so stepping through it with a > debugger was unrealistic) - and my approach was to run two versions in > parallel (the latest (best) available iteration > in the implementation, known to work, versus the bleeding edge), with > synchronization points for every iteration within > the algorithm execution, so that I would catch (through a halt) any > divergence as soon as it started, and from them on > using the debugger. > This worked quite well, but it did not help with explaining the working of > the algorithm and I kept wishing I had a > visualization that would help me get to an intuitive (and holistic, not > just of the subparts) understanding of how the > algorithm worked (in the style of Bret Victor's visualizations), but I did > not know how to get to it. So, if you did > manage to get to such a visualization (one that does not come from an > already (pre-existing for the creator of the > visualization) understanding of the algorithm), that would be fantastic > > Florin > >
