8 research outputs found
Find Unique Usages: Helping Developers Understand Common Usages
When working in large and complex codebases, developers face challenges using
\textit{Find Usages} to understand how to reuse classes and methods. To better
understand these challenges, we conducted a small exploratory study with 4
participants. We found that developers often wasted time reading long lists of
similar usages or prematurely focused on a single usage. Based on these
findings, we hypothesized that clustering usages by the similarity of their
surrounding context might enable developers to more rapidly understand how to
use a function. To explore this idea, we designed and implemented \textit{Find
Unique Usages}, which extracts usages, computes a diff between pairs of usages,
generates similarity scores, and uses these scores to form usage clusters. To
evaluate this approach, we conducted a controlled experiment with 12
participants. We found that developers with Find Unique Usages were
significantly faster, completing their task in 35% less time
Interaction-aware development environments: recording, mining, and leveraging IDE interactions to analyze and support the development flow
Nowadays, software development is largely carried out using Integrated Development Environments, or IDEs. An IDE is a collection of tools and facilities to support the most diverse software engineering activities, such as writing code, debugging, and program understanding. The fact that they are integrated enables developers to find all the tools needed for the development in the same place. Each activity is composed of many basic events, such as clicking on a menu item in the IDE, opening a new user interface to browse the source code of a method, or adding a new statement in the body of a method. While working, developers generate thousands of these interactions, that we call fine-grained IDE interaction data. We believe this data is a valuable source of information that can be leveraged to enable better analyses and to offer novel support to developers. However, this data is largely neglected by modern IDEs. In this dissertation we propose the concept of "Interaction-Aware Development Environments": IDEs that collect, mine, and leverage the interactions of developers to support and simplify their workflow. We formulate our thesis as follows: Interaction-Aware Development Environments enable novel and in- depth analyses of the behavior of software developers and set the ground to provide developers with effective and actionable support for their activities inside the IDE. For example, by monitoring how developers navigate source code, the IDE could suggest the program entities that are potentially relevant for a particular task. Our research focuses on three main directions: 1. Modeling and Persisting Interaction Data. The first step to make IDEs aware of interaction data is to overcome its ephemeral nature. To do so we have to model this new source of data and to persist it, making it available for further use. 2. Interpreting Interaction Data. One of the biggest challenges of our research is making sense of the millions of interactions generated by developers. We propose several models to interpret this data, for example, by reconstructing high-level development activities from interaction histories or measure the navigation efficiency of developers. 3. Supporting Developers with Interaction Data. Novel IDEs can use the potential of interaction data to support software development. For example, they can identify the UI components that are potentially unnecessary for the future and suggest developers to close them, reducing the visual cluttering of the IDE
Human-Centric Tools for Navigating Code
All software failures are fundamentally the fault of humansthe software\u27s design was flawed. The high cost of such failures ultimately results in developers having to design, implement, and test fixes, which all take considerable time and effort, and may result in more failures. As developers work on software maintenance tasks, they must navigate enormous codebases that may comprise millions of lines of code organized across thousands of modules. However, navigating code carries with it a plethora of problems for developers. In the hopes of addressing these navigation barriers, modern code editor and development environments provide a variety of features to aid in navigation; however, they are not without their limitations. Code navigations take many forms, and in this work I focus on three key types of code navigation in modern software development: navigating the working set, navigating among versions of code, and navigating the code structure. To address the challenges of navigating code, I designed three novel software development tools, one to enhance each type of navigation. First, I designed and implemented Patchworks, a code editor interface to support developers in navigating the working set. Patchworks aims to make these more efficient by providing a fixed grid of open code fragments that developers can quickly navigate. Second, I designed and implemented Yestercode, a code editor extension to support navigating among versions of code. Yestercode does so by providing a comparison view of the current code and a previous version of the same code. Third, I designed and implemented Wandercode, a code editor extension to enable developers to efficiently navigate the structure of their code. Wandercode aims to do so by providing a visualization of the code\u27s call graph overlayed on the code editor. My approach to designing these tools for more efficient code navigation was a human-centric onethat is, based on the needs of actual developers performing real software development tasks. Through user study evaluations, I found that these tools significantly improved developer productivity by reducing developers\u27 time spent navigating and mental effort during software maintenance tasks
Eye gaze and interaction contexts for change tasks – Observations and potential
The more we know about software developers’ detailed navigation behavior for change tasks, the better we are able to provide effective tool support. Currently, most empirical studies on developers performing change tasks are, however, limited to very small code snippets or limited by the granularity and detail of the data collected on developer’s navigation behavior. In our research, we extend this work by combining user interaction monitoring to gather interaction context – the code elements a developer selects and edits – with eye-tracking to gather more detailed and fine-granular gaze context-code elements a developer looked at. In a study with 12 professional and 10 student developers we gathered interaction and gaze contexts from participants working on three change tasks of an open source system. Based on an analysis of the data we found, amongst other results, that gaze context captures different aspects than interaction context and that developers only read small portions of code elements. We further explore the potential of the more detailed and fine-granular data by examining the use of the captured change task context to predict perceived task difficulty and to provide better and more fine-grained navigation recommendations. We discuss our findings and their implications for better tool support
The Culture of Dis/simulation in Sixteenth- and Seventeenth-Century Europe
The dissertation examines early modern perceptions of the twin notions of simulation and dissimulation - which I refer to jointly as 'dis/simulation' - in various literary, social and semantic contexts and from a pan-European perspective. I look at how this thorny and controversial moral issue was addressed and discussed in a wide range of genres and texts and how it was disseminated to a broader readership.
The introduction explains my approach to the subject, provides an overview of previous scholarship and includes a short excursus on three literary genres not discussed in detail in the dissertation. In the first chapter, I analyse the varied treatment of dis/simulation in emblem books. In the following chapter I explore the link between the problem of dis/simulation and early modern reform plans for poor relief, focusing on debates in Spain. Chapter 3 looks at texts from other European countries and establishes he connection between, on the one hand, learned and scholarly discussions of the problem of mendicancy, and, on the other, popular literature in which the deceptions and disguises of beggars, rogues and tricksters were a recurrent theme. The next chapter deals with the contemporary perceptions of courtesans and analyses the nexus between love, passions and dis/simulation.
The last two chapters show that the problem of feigning and disguise became increasingly important in medical and physiognomical literature. I investigate how both genres addressed a cluster of relevant intellectual contexts relevant, including the possibility of reading the human countenance, the limits of dis/simulation and the morality of employing deception in the interest of healing. I conclude by considering the main contexts, themes and implications of early modern debates on dis/simulation and their gradual decline in the seventeenth century