  Developers spend a significant amount of time searching for code: e.g., to
understand how to complete, correct, or adapt their own code for a new context.
Unfortunately, the state of the art in code search has not evolved much beyond
text search over tokenized source. Code has much richer structure and semantics
than normal text, and this property can be exploited to specialize the
code-search process for better querying, searching, and ranking of code-search
results.
  We present a new code-search engine named Source Forager. Given a query in
the form of a C/C++ function, Source Forager searches a pre-populated code
database for similar C/C++ functions. Source Forager preprocesses the database
to extract a variety of simple code features that capture different aspects of
code. A search returns the $k$ functions in the database that are most similar
to the query, based on the various extracted code features.
  We tested the usefulness of Source Forager using a variety of code-search
queries from two domains. Our experiments show that the ranked results returned
by Source Forager are accurate, and that query-relevant functions can be
reliably retrieved even when searching through a large code database that
contains very few query-relevant functions.
  We believe that Source Forager is a first step towards much-needed tools that
provide a better code-search experience.
