Making Examples Tangible: Tool Building for Program Comprehension

  • Marcel TaeumelEmail author
  • Robert Hirschfeld
Part of the Understanding Innovation book series (UNDINNO)


Best practices in design thinking suggest creating and working with tangible prototypes. In software engineering, programmers interact with source code more than with customers. Their intent is to understand the effects of abstract source code on programs in execution. Existing tools for program exploration, however, are tailored to general programming language concepts instead of domain-specific characteristics and programmer’s system knowledge. In this chapter, we establish the need for adapting programming tools in use when navigating, viewing, and collecting examples to increase tangibility, that is, clarity of a concept or idea based on what can be experienced on screen. We present our Vivide tool-building environment, which is a data-driven, scriptable approach to constructing graphical tools with low effort. By exploring common programming scenarios, we conclude that tool building does not have to be a detached, effortful activity but can be accomplished by the same programmers who detect deficiencies during their programming tasks. Then exemplary information about software systems can become tangible.


Building Tools Preceding Source Code Programming Tools Interactive Widgets Software Artifacts 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


  1. Cohn M (2004) User stories applied. Pearson Education Inc., Boston, MAGoogle Scholar
  2. Courage C, Baxter K (2005) Understanding your users: a practical guide to user requirements. Elsevier, San FranciscoGoogle Scholar
  3. Csikszentmihalyi M (2008) Flow: the psychology of optimal experience. Harper Perennial Modern Classics, New YorkGoogle Scholar
  4. Hutchins EL, Hollan JD, Norman DA (1985) Direct manipulation interfaces. Hum-Comput Interact 1(4):311–338CrossRefGoogle Scholar
  5. Kersten M, Murphy GC (2006) Using task context to improve programmer productivity. In: Proceedings of the 14th international symposium on foundations of software engineering (FSE)Google Scholar
  6. Myers BA (1988) A taxonomy of window manager user interfaces. IEEE Comput Graph Appl 8(5):65–84CrossRefGoogle Scholar
  7. Norman DA (2002) The design of everyday things. Basic Books, New YorkGoogle Scholar
  8. Rӧthlisberger D, Nierstrasz O, Ducasse S (2009) Autumn leaves: curing the window plague in IDEs. In: Proceedings of the 16th working conference on reverse engineeringGoogle Scholar
  9. Shneiderman B, Plaisant C (2010) Designing the user interfaces: strategies for effective human-computer interaction. Addison-Wesley, Reading, MAGoogle Scholar
  10. Sillito J, Murphy GC, De Volder K (2008) Asking and answering questions during a programming change task. IEEE Trans Softw Eng 34(4):434–451CrossRefGoogle Scholar
  11. Taeumel M, Perscheid M, Steinert B, Lincke J, Hirschfeld R (2014) Interleaving of modification and use in data-driven tool development. In: Proceedings of the 2014 ACM international symposium on new ideas, new paradigms, and reflections on programming & softwareGoogle Scholar
  12. Von Mayrhauser A, Vans AM (1995) Program comprehension during software maintenance and evolution. IEEE Comput 28(8):44–55CrossRefGoogle Scholar
  13. Weiser M (1987) Source code. IEEE Comput 20(11):66–73CrossRefGoogle Scholar
  14. Wright J, Oppenheim D, Jameson D, Pazel D, Fuhrer R (1997) CyberBand: a ‘Hands On’ music composition program. In: Proceedings of the international computer music conferenceGoogle Scholar

Copyright information

© Springer International Publishing Switzerland 2016

Authors and Affiliations

  1. 1.Software Architecture Group, Hasso Plattner InstituteUniversity of PotsdamPotsdamGermany

Personalised recommendations