Using Fuzzy Code Search to Link Code Fragments in Discussions to Source Code

Preview:

DESCRIPTION

Talk on Using Fuzzy Code Search to Link Code Fragments in Discussions to Source Code, given at the 16th European Conference on Software Maintenance and Reengineering (CSMR'12) in Hungary.

Citation preview

Using Fuzzy Code Search to Link Code Fragments in Discussions to

Source Code

Nicolas Bettenburg Stephen W. Thomas Ahmed E. HassanQueen’s University

Software Analysis and Intelligence Lab (SAIL)Kingston, Ontario, Canada

2

“Given enough eyeballs, all bugs are shallow.”

Eric S. Raymond - The Cathedral and the Bazaar

3

Which parts of the source code did

developers discuss?

Objective in this Study:

3

Which parts of the source code did

developers discuss?

Finding Associations of Discussions with Source Code Files

Objective in this Study:

Communication Repository

4

Source CodeArchive

Communication Repository

4

Source CodeArchive

Communication Repository

4

Source CodeArchive

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Communication Repository

4

Source CodeArchive

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

TraceabilityLinks

5

5

5

org.eclipse.swt/Eclipse_SWT/win32/org/eclipse/swt/widgets/Button.java

Approaches in the Past

6

3Change Log Analysis

Information Retrieval

Lightweight Textual Analysis

7

Change Log Analysis

LUCENE-2297: allow reader pooling to be enabled (through IndexWriterConfig) even if you're not pulling NRT reader.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

SVN

7

Change Log Analysis

LUCENE-2297: allow reader pooling to be enabled (through IndexWriterConfig) even if you're not pulling NRT reader.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

SVN

7

Change Log Analysis

LUCENE-2297: allow reader pooling to be enabled (through IndexWriterConfig) even if you're not pulling NRT reader.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

SVN

Bug Report #LUCENE-2297

7

Change Log Analysis

LUCENE-2297: allow reader pooling to be enabled (through IndexWriterConfig) even if you're not pulling NRT reader.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

SVN

Bug Report #LUCENE-2297

8

Map<Integer, BugReport> bugReports = dbc.getReportsConcurrent(bugIDs, Main.isCli_withDiscussions(), Main.isCli_withAttachments(), true); // Instantiate Output Class // This time we will need to use some XML Outputter for the Stacktraces Experiment_Structural_Logger logger = new Experiment_Structural_Logger (); DataExportUtility dexutil = new DataExportUtility(); XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat()); Element rootElement = new Element("CVS"); // Process the Reports if (Main.getCli_project().equalsIgnoreCase("eclipse")) { for (int id : bugIDs) { } BugReport currentReport = bugReports.get(id); Element reportElement = new Element("Report"); Code

DescriptionJared Burns 2002-11-01 14:56:40 ESTBuild 20021031(, 30, and 29)Linux-GTK

Very often (in recent builds), when I perform an action that requires establishing a connection to the dev.eclipse.org CVS server, the progress dialog appears but it stalls before any progress is made. I have to hit Cancel, wait 10+ seconds (I just switch apps), and then try again or it neverconnects.

This happens to me most often when I click the "Synchronize all CVSprojects..." button. The dialog appears and says "Authenticating overextssh", but the progress monitor never budges.

Discussion

Information Retrieval

8

Map<Integer, BugReport> bugReports = dbc.getReportsConcurrent(bugIDs, Main.isCli_withDiscussions(), Main.isCli_withAttachments(), true); // Instantiate Output Class // This time we will need to use some XML Outputter for the Stacktraces Experiment_Structural_Logger logger = new Experiment_Structural_Logger (); DataExportUtility dexutil = new DataExportUtility(); XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat()); Element rootElement = new Element("CVS"); // Process the Reports if (Main.getCli_project().equalsIgnoreCase("eclipse")) { for (int id : bugIDs) { } BugReport currentReport = bugReports.get(id); Element reportElement = new Element("Report"); Code

DescriptionJared Burns 2002-11-01 14:56:40 ESTBuild 20021031(, 30, and 29)Linux-GTK

Very often (in recent builds), when I perform an action that requires establishing a connection to the dev.eclipse.org CVS server, the progress dialog appears but it stalls before any progress is made. I have to hit Cancel, wait 10+ seconds (I just switch apps), and then try again or it neverconnects.

This happens to me most often when I click the "Synchronize all CVSprojects..." button. The dialog appears and says "Authenticating overextssh", but the progress monitor never budges.

Discussion

Information Retrieval

8

Map<Integer, BugReport> bugReports = dbc.getReportsConcurrent(bugIDs, Main.isCli_withDiscussions(), Main.isCli_withAttachments(), true); // Instantiate Output Class // This time we will need to use some XML Outputter for the Stacktraces Experiment_Structural_Logger logger = new Experiment_Structural_Logger (); DataExportUtility dexutil = new DataExportUtility(); XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat()); Element rootElement = new Element("CVS"); // Process the Reports if (Main.getCli_project().equalsIgnoreCase("eclipse")) { for (int id : bugIDs) { } BugReport currentReport = bugReports.get(id); Element reportElement = new Element("Report"); Code

DescriptionJared Burns 2002-11-01 14:56:40 ESTBuild 20021031(, 30, and 29)Linux-GTK

Very often (in recent builds), when I perform an action that requires establishing a connection to the dev.eclipse.org CVS server, the progress dialog appears but it stalls before any progress is made. I have to hit Cancel, wait 10+ seconds (I just switch apps), and then try again or it neverconnects.

This happens to me most often when I click the "Synchronize all CVSprojects..." button. The dialog appears and says "Authenticating overextssh", but the progress monitor never budges.

Discussion

Information Retrieval

8

Map<Integer, BugReport> bugReports = dbc.getReportsConcurrent(bugIDs, Main.isCli_withDiscussions(), Main.isCli_withAttachments(), true); // Instantiate Output Class // This time we will need to use some XML Outputter for the Stacktraces Experiment_Structural_Logger logger = new Experiment_Structural_Logger (); DataExportUtility dexutil = new DataExportUtility(); XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat()); Element rootElement = new Element("CVS"); // Process the Reports if (Main.getCli_project().equalsIgnoreCase("eclipse")) { for (int id : bugIDs) { } BugReport currentReport = bugReports.get(id); Element reportElement = new Element("Report"); Code

DescriptionJared Burns 2002-11-01 14:56:40 ESTBuild 20021031(, 30, and 29)Linux-GTK

Very often (in recent builds), when I perform an action that requires establishing a connection to the dev.eclipse.org CVS server, the progress dialog appears but it stalls before any progress is made. I have to hit Cancel, wait 10+ seconds (I just switch apps), and then try again or it neverconnects.

This happens to me most often when I click the "Synchronize all CVSprojects..." button. The dialog appears and says "Authenticating overextssh", but the progress monitor never budges.

Discussion

Information Retrieval

9

I20041130-0800

Wrong compiler error when interface overrides two methods with same signaturebut different thrown exceptions: The call to ij.m() is OK, but eclipse flags itwith "Unhandled exception type IOException".

public class Over { void x() throws ZipException { IandJ ij= new K(); ij.m(); //wrong compile error } void y() throws ZipException { K k= new K(); k.m(); }}

interface I { void m() throws IOException; }interface J { void m() throws ZipException; }interface IandJ extends I, J {} // swap I and J to make compile error disappearclass K implements IandJ { public void m() throws ZipException { } }

Lightweight Textual Analysis

9

I20041130-0800

Wrong compiler error when interface overrides two methods with same signaturebut different thrown exceptions: The call to ij.m() is OK, but eclipse flags itwith "Unhandled exception type IOException".

public class Over { void x() throws ZipException { IandJ ij= new K(); ij.m(); //wrong compile error } void y() throws ZipException { K k= new K(); k.m(); }}

interface I { void m() throws IOException; }interface J { void m() throws ZipException; }interface IandJ extends I, J {} // swap I and J to make compile error disappearclass K implements IandJ { public void m() throws ZipException { } }

Over.java

ZipException.java

IOException.java

I.java J.javaK.java

Lightweight Textual Analysis

10

10

Change Log AnalysisXOnly works for Bug ReportsGeneralizeability:

Associates complete discussion threadGranularity:Link to all files changed in commitPrecision:

Ignores the actual discussions!Conceptual Mismatch:

10

Change Log AnalysisXOnly works for Bug ReportsGeneralizeability:

Associates complete discussion threadGranularity:Link to all files changed in commitPrecision:

Ignores the actual discussions!Conceptual Mismatch:

Works for all kinds of documentsGeneralizeability:Which granularity level to choose?Granularity:

Lots and lots of false positives!Precision:Links unrelated documents!Conceptual Mismatch:

Information RetrievalX

10

Change Log AnalysisXOnly works for Bug ReportsGeneralizeability:

Associates complete discussion threadGranularity:Link to all files changed in commitPrecision:

Ignores the actual discussions!Conceptual Mismatch:

Works for all kinds of documentsGeneralizeability:Which granularity level to choose?Granularity:

Lots and lots of false positives!Precision:Links unrelated documents!Conceptual Mismatch:

Information RetrievalX

Works for all kinds of documentsGeneralizeability:Very fine-grainedGranularity:

Up to 95% precision [Bacchelli-ICSE10]Precision:Links to every class mentionedConceptual Mismatch:

Lightweight Textual AnalysisX

11

In this Paper:Fuzzy Code Search

I20041130-0800

Wrong compiler error when interface overrides two methods with same signaturebut different thrown exceptions: The call to ij.m() is OK, but eclipse flags itwith "Unhandled exception type IOException".

public class Over { void x() throws ZipException { IandJ ij= new K(); ij.m(); //wrong compile error } void y() throws ZipException { K k= new K(); k.m(); }}

interface I { void m() throws IOException; }interface J { void m() throws ZipException; }interface IandJ extends I, J {} // swap I and J to make compile error disappearclass K implements IandJ { public void m() throws ZipException { } }

Over.javaZipException.java

IOException.javaI.java J.javaK.java

11

In this Paper:Fuzzy Code Search

I20041130-0800

Wrong compiler error when interface overrides two methods with same signaturebut different thrown exceptions: The call to ij.m() is OK, but eclipse flags itwith "Unhandled exception type IOException".

public class Over { void x() throws ZipException { IandJ ij= new K(); ij.m(); //wrong compile error } void y() throws ZipException { K k= new K(); k.m(); }}

interface I { void m() throws IOException; }interface J { void m() throws ZipException; }interface IandJ extends I, J {} // swap I and J to make compile error disappearclass K implements IandJ { public void m() throws ZipException { } }

Over.javaZipException.java

IOException.javaI.java J.javaK.java

11

In this Paper:Fuzzy Code Search

I20041130-0800

Wrong compiler error when interface overrides two methods with same signaturebut different thrown exceptions: The call to ij.m() is OK, but eclipse flags itwith "Unhandled exception type IOException".

public class Over { void x() throws ZipException { IandJ ij= new K(); ij.m(); //wrong compile error } void y() throws ZipException { K k= new K(); k.m(); }}

interface I { void m() throws IOException; }interface J { void m() throws ZipException; }interface IandJ extends I, J {} // swap I and J to make compile error disappearclass K implements IandJ { public void m() throws ZipException { } }

X.java

Y.java

Over.javaZipException.java

IOException.javaI.java J.javaK.java

12

Discussion

Fuzzy Code SearchApproach

12

Discussion

infoZilla tool

Fuzzy Code SearchApproach

12

Discussion

infoZilla tool

Code Fragments

Fuzzy Code SearchApproach

12

Discussion

infoZilla tool

Code Fragments

Clone DetectionPage 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Page 2 of 4

Untitled 12-03-15 2:55 PM

this.opt_withObsolete = opt_withObsolete;}

/* (non-Javadoc) * @see main.IExperiment#getDescription() */public String getDescription() {

String description = "We want to run an experiment all those bug reports.\n\t"+ "We extract the complete stacktrace information to study fix

location and stacktrace interplay.\n\t";return description;

}

/* (non-Javadoc) * @see main.IExperiment#run() */public boolean run() {

final boolean DEBUG = Main.isCli_withDebugMessages();

// Select an appropriate database name on the server depending on the project demanded via command line options

String dbName = "";if (Main.getCli_project().equalsIgnoreCase("eclipse"))

dbName = "eclipse-december-2007";else {

System.out.println("We currently only support the Eclipse database!");

System.exit(0);}

// Create the Database ConnectionDatabaseConnector dbc = new DatabaseConnector(Main.getCli_dbHost(),

Main.getCli_dbUser(), Main.getCli_dbPass(), dbName);dbc.initialize();if (!dbc.connect()) {

System.out.println("Could not connect to database. Check host, port, username and password.");

System.exit(1);}

// Fetch a number of Bug Report unique IDs belonging to the following query

String setSelectionQuery = "SELECT DISTINCT bug_id FROM bugzilla_bugs WHERE bug_id > " + Main.getCli_startID() + " ORDER BY bug_id ASC LIMIT " + Main.getCli_amount();

int[] bugIDs = dbc.getIdSetByQuery(setSelectionQuery);int lastID = bugIDs[bugIDs.length -1];

if (DEBUG)System.out.println("* Attempting to fetch " + bugIDs.length + "

reports from " + Main.getCli_dbHost() + " starting with ID " + Main.getCli_startID());

// Collect the bug reports from the database using up to 100 parallel threads.

Fuzzy Code SearchApproach

13

Evaluation of our Approach

13

Evaluation of our Approach

1) QuantitativeDo developers talk about the things they end up changing?

13

Evaluation of our Approach

1) QuantitativeDo developers talk about the things they end up changing?

2) QualitativeWhich parts of the code do developers talk about the most?

A B14

Change-Log Analysis Fuzzy Code Search

Case Study: Eclipse 2.0 - 3.2

A B14

Change-Log Analysis Fuzzy Code Search

Case Study: Eclipse 2.0 - 3.2

16,722 23,079Discussions Files

A B14

Change-Log Analysis Fuzzy Code Search

Case Study: Eclipse 2.0 - 3.2

16,722 23,079Discussions Files

3,865Discussions

13,581Files

A BQ: Is A a Superset of B ?

14

Change-Log Analysis Fuzzy Code Search

Case Study: Eclipse 2.0 - 3.2

16,722 23,079Discussions Files

3,865Discussions

13,581Files

15

Bug Reports (211,843)

16

Bug Reports (211,843)

Bug Reports containing Code (33,301)

17

Bug Reports (211,843)

Bug Reports containing Code (33,301)

Clone DetectionBased Approach

(2,980)

A

18

Bug Reports (211,843)

Change Log AnalysisBased Approach

(16,722)

Bug Reports containing Code (33,301)

Clone DetectionBased Approach

(2,980)

A B

19

Bug Reports (211,843)

Change Log AnalysisBased Approach

(16,722)

Bug Reports containing Code (33,301)

507Clone DetectionBased Approach

(2,980)

A B

19

Bug Reports (211,843)

Change Log AnalysisBased Approach

(16,722)

Bug Reports containing Code (33,301)

507Clone DetectionBased Approach

(2,980)

A B

Very small overlap: Links are

conceptually different!

20

20

20

In Eclipse: heavy re-use of code

snippets to create regression tests.

21

Fuzzy Code Search

21

Fuzzy Code SearchFinds conceptually different links:

21

Fuzzy Code SearchFinds conceptually different links:

What Developers really talk about

21

Fuzzy Code SearchFinds conceptually different links:

What Developers really talk about

Not what they end up changing

21

Fuzzy Code SearchFinds conceptually different links:

What Developers really talk about

Not what they end up changing

Not what their code references

22

22

22

22

22

22

Thanks!

Recommended