Tihomir Gvero

dblp:15/2242 · DBLP profile ↗
← Back
9ranked-venue papers
5as first author
0since 2021 · last 2015
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 9 · 5 first-authorTheory of computation · 1 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
8 papers
Program synthesis and code generation · 60% Software testing · 14% Debugging and program repair · 13%

Topics — the 16 heaviest of 17, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program synthesis and code generation
code assistance
0.422015
Synthesizing Java expressions from free-form queries · OOPSLA 2015
Interactive Synthesis Using Free-Form Queries · ICSE (2) 2015
Program synthesis and code generation
interactive program synthesis
0.322015
Interactive Synthesis Using Free-Form Queries · ICSE (2) 2015
Interactive Synthesis of Code Snippets · CAV 2011
Debugging and program repair
automated program repair
0.222011
ReAssert: a tool for repairing broken unit tests · ICSE 2011
On test repair using symbolic execution · ISSTA 2010
Software testing
test repair
0.222011
ReAssert: a tool for repairing broken unit tests · ICSE 2011
On test repair using symbolic execution · ISSTA 2010
Program synthesis and code generation
code generation from natural language
0.212015
Synthesizing Java expressions from free-form queries · OOPSLA 2015
Program synthesis and code generation
code completion
0.212013
Complete completion using types and weights · PLDI 2013
Program synthesis and code generation
type-directed synthesis
0.212013
Complete completion using types and weights · PLDI 2013
Program synthesis and code generation › type-directed synthesis
type inhabitation
0.212013
Complete completion using types and weights · PLDI 2013
Program synthesis and code generation › code generation from natural language
code snippet synthesis
0.112011
Interactive Synthesis of Code Snippets · CAV 2011
Programming languages and type systems
language design
0.112010
Test generation through programming in UDITA · ICSE (1) 2010
Debugging and program repair › automated program repair
test code repair
0.112010
On test repair using symbolic execution · ISSTA 2010
Software testing
test generation
0.112010
Test generation through programming in UDITA · ICSE (1) 2010
Program verification › model checking
explicit-state model checking
0.112008
State extensions for java pathfinder · ICSE 2008
Program verification
model checking
0.112008
State extensions for java pathfinder · ICSE 2008
Software testing
unit testing
0.012011
ReAssert: a tool for repairing broken unit tests · ICSE 2011
Runtime systems and virtual machines › virtual machine implementation
java virtual machine
0.012008
State extensions for java pathfinder · ICSE 2008

Methods — techniques the papers use, named apart from their topics

probabilistic context-free grammar · 0.4natural language processing · 0.4type inhabitation · 0.2corpus-based ranking · 0.2automated repair · 0.1symbolic execution · 0.1non-deterministic execution space exploration · 0.1state comparison · 0.1backtracking · 0.1
YearPublicationVenuePosition
2015 Interactive Synthesis Using Free-Form Queries
abstract
We present a new code assistance tool for integrated development environments. Our system accepts free-form queries allowing a mixture of English and Java as an input, and produces Java code fragments that take the query into account and respect syntax, types, and scoping rules of Java as well as statistical usage patterns. The returned results need not have the structure of any previously seen code fragment. As part of our system we have constructed a probabilistic context free grammar for Java constructs and library invocations, as well as an algorithm that uses a customized natural language processing tool chain to extract information from free-form text queries. The evaluation results show that our technique can tolerate much of the flexibility present in natural language, and can also be used to repair incorrect Java expressions that contain useful information about the developer's intent. Our demo video is available at http://youtu.be/tx4-XgAZkKU.
Tihomir Gvero, Viktor Kuncak
ICSE (2)1
2015 Synthesizing Java expressions from free-form queries
abstract
We present a new code assistance tool for integrated development environments. Our system accepts as input free-form queries containing a mixture of English and Java, and produces Java code expressions that take the query into account and respect syntax, types, and scoping rules of Java, as well as statistical usage patterns. In contrast to solutions based on code search, the results returned by our tool need not directly correspond to any previously seen code fragment. As part of our system we have constructed a probabilistic context free grammar for Java constructs and library invocations, as well as an algorithm that uses a customized natural language processing tool chain to extract information from free-form text queries. We present the results on a number of examples showing that our technique (1) often produces the expected code fragments, (2) tolerates much of the flexibility of natural language, and (3) can repair incorrect Java expressions that use, for example, the wrong syntax or missing arguments.
Tihomir Gvero, Viktor Kuncak
OOPSLA1
2013 Complete completion using types and weights
abstract
Developing modern software typically involves composing functionality from existing libraries. This task is difficult because libraries may expose many methods to the developer. To help developers in such scenarios, we present a technique that synthesizes and suggests valid expressions of a given type at a given program point. As the basis of our technique we use type inhabitation for lambda calculus terms in long normal form. We introduce a succinct representation for type judgements that merges types into equivalence classes to reduce the search space, then reconstructs any desired number of solutions on demand. Furthermore, we introduce a method to rank solutions based on weights derived from a corpus of code. We implemented the algorithm and deployed it as a plugin for the Eclipse IDE for Scala. We show that the techniques we incorporated greatly increase the effectiveness of the approach. Our evaluation benchmarks are code examples from programming practice; we make them available for future comparisons.
Tihomir Gvero, Viktor Kuncak, Ivan Kuraj, Ruzica Piskac
PLDI1
2011 Interactive Synthesis of Code Snippets
Tihomir Gvero, Viktor Kuncak, Ruzica Piskac
CAV1
2011 ReAssert: a tool for repairing broken unit tests
abstract
Successful software systems continuously change their requirements and thus code. When this happens, some existing tests get broken because they no longer reflect the intended behavior, and thus they need to be updated. Repairing broken tests can be time-consuming and difficult.
Brett Daniel, Danny Dig, Tihomir Gvero, Vilas Jagannath, Johnston Jiaa, Damion Mitchell, Jurand Nogiec, Shin Hwei Tan, Darko Marinov
ICSE3
2010 Test generation through programming in UDITA
abstract
We present an approach for describing tests using non-deterministic test generation programs. To write such programs, we introduce UDITA, a Java-based language with non-deterministic choice operators and an interface for generating linked structures. We also describe new algorithms that generate concrete tests by efficiently exploring the space of all executions of non-deterministic UDITA programs.
Milos Gligoric 0001, Tihomir Gvero, Vilas Jagannath, Sarfraz Khurshid, Viktor Kuncak, Darko Marinov
ICSE (1)2
2010 On test repair using symbolic execution
abstract
When developers change a program, regression tests can fail not only due to faults in the program but also due to out-of-date test code that does not reflect the desired behavior of the program. When this occurs, it is necessary to repair test code such that the tests pass. Repairing tests manually is difficult and time consuming. We recently developed ReAssert, a tool that can automatically repair broken unit tests, but only if they lack complex control flow or operations on expected values.
Brett Daniel, Tihomir Gvero, Darko Marinov
ISSTA2
2009 Optimizing Generation of Object Graphs in Java PathFinder
abstract
Java PathFinder (JPF) is a popular model checker for Java programs. JPF was used to generate object graphs as test inputs for object-oriented programs. Specifically, JPF was used as an implementation engine for the Korat algorithm. Korat takes two inputs---a Java predicate that encodes properties of desired object graphs and a bound on the size of the graph---and generates all graphs (within the given bound) that satisfy the encoded properties. Korat uses a systematic search to explore the bounded state space of object graphs. Korat search was originally implemented in JPF using a simple instrumentation of the Java predicate. However, JPF is a general-purpose model checker and such direct implementation results in an unnecessarily slow search. We present our results on speeding up Korat search in JPF. The experiments on ten data structure subjects show that our modifications of JPF reduce the search time by over an order of magnitude.
Milos Gligoric 0001, Tihomir Gvero, Steven Lauterburg, Darko Marinov, Sarfraz Khurshid
ICST2
2008 State extensions for java pathfinder
abstract
Java PathFinder (JPF) is an explicit-state model checker for Java programs. JPF implements a backtrackable Java Virtual Machine (JVM) that provides non-deterministic choices and control over thread scheduling. JPF is itself implemented in Java and runs on top of a host JVM. JPF represents the JVM state of the program being checked and performs three main operations on this state representation: bytecode execution, state backtracking, and state comparison. This paper summarizes four extensions that we have developed to the JPF state representation and operations. One extension provides a new functionality to JPF, and three extensions improve performance of JPF in various scenarios. Some of our code has already been included in publicly available JPF.
Tihomir Gvero, Milos Gligoric 0001, Steven Lauterburg, Marcelo d'Amorim, Darko Marinov, Sarfraz Khurshid
ICSE1