SurfClipse

Abstract: Despite various debugging supports of the existing IDEs for programming errors and exceptions, software developers often look at web for working solutions or any up-to-date information. Traditional web search does not consider thecontext of the problems that they search solutions for, and thus it often does not help much in problem solving. In this paper, we propose a context-aware meta search tool, SurfClipse, that analyzes an encountered exception andits context in the IDE, and recommends not only suitable search queries but also relevant web pages for the exception (and its context). The tool collects results from three popular search engines and a programming Q & A site against the exception in the IDE, refines the results for relevance against the context of the exception, and then ranks them before recommendation. It provides two working modes--interactive and proactive to meet the versatile needs of the developers, and one can browse the result pages using a customized embedded browser provided by the tool.

Replication Packages

System Requirements


  • Required JDK: JDK 7.0.21 and later. (This is a must)
  • Supported OS: Windows 7+, Ubuntu Linux 12+, did not test with Mac OSX 10, but should work if JDK specification is met
  • Supported Eclipse IDE: Indigo 3.7+, Juno 4.2+, Kepler 4.3+ (This is a must)
  • Required External Libraries: Get Libs (if required)

So far, I tested with those configurations, but other versions are likely to support if JDK 7.0.21+ installed and Eclipse IDE is of upper versions.

Important Resource Links


Thanks for your interest. Since we started working on the journal version, the dataset will be expanded, and will be made public soon. Nonetheless, we uploaded some sample datasets for the testing of our prototype which you might be interested in.
Tool Installation:
  1. Download surfclipse-exec.jar, query, strace, ccontext, sclipseIndex, site-rank, solution, and docsource from Google Drive.
  2. Keep all four items in the same directory.
  3. Make an output folder search-output in the same directory
  4. Unzip docsource.7z in the same directory

Running SurfClipse:

Recommending Webpages: Execute the following command with your custom parameters:

java -jar surfclipse-exec.jar -caseNo 20 -query query -strace strace -ccontext ccontext -output search-output -topk 10
  • -caseNo : The query ID to be executed. For example, the above command will execute the query #20. If you want all queries to be executed, then REMOVE -caseNo parameter from your command.
  • -query : The folder that contains search queries. Each file contain one query and the corresponding query is identified by its file name.
  • -strace : The folder that contains stack traces associated with each of the input queries.
  • -ccontext : The folder that contains contextual code segment associated with each of the input queries.
  • -output : The output folder that contains the search results.
  • -topk : The number of Top-K results to be returned by SurfClipse
  • -task : Task to be performed. In this case, use search. The default operation is search

Executing single query

Executing all queries from the dataset

Evaluating SurfClipse: Execute the following command with your custom parameters:

java -jar surfclipse-exec.jar -totalcase 50 -output search-output -goldset solution -topk 10 -task evaluate
  • -totalcase : Total number of cases for the evaluation. Right now, the sample dataset contains 50 queries
  • -output : The output folder that contains the search results provided by SurfClipse.
  • -goldset : Ground truth for each of the queries.
  • -topk : The number of Top-K results to be considered for evaluation
  • -task : Task to be performed. In this case, use evaluate

Library name: ca.usask.cs.srlab.surfclipse.prototype

Executing the queries using SurfClipse


		int caseID = 20;
		String queryFolder = "query";
		String straceFolder = "strace";
		String codeFolder = "ccontext";
		int topk = 10;
		String outputFolder = "search-output";
		new DemoSCRunner(caseID, queryFolder, straceFolder, codeFolder,
				outputFolder, topk).executeAllQueries();

Evaluating the search results of SurfClipse


		int caseSize = 75;
		String resultFolder = "search-output";
		String goldsetFolder = "solution";
		int topk = 10;
		new PerformanceCalc(caseSize, goldsetFolder, resultFolder, topk)
				.calculatePerformance();

Related Papers


@INPROCEEDINGS{csmrwcre2014masud, 
author={M. M. Rahman and S. Yeasmin and C. K. Roy}, 
booktitle={Proc. CSMR-WCRE}, 
title={Towards a context-aware IDE-based meta search engine for recommendation about programming errors and exceptions}, 
year={2014}, 
pages={194-203} } 
@INPROCEEDINGS{icsme2014masud, 
author={M. M. Rahman and C. K. Roy}, 
booktitle={Proc. ICSME}, 
title={SurfClipse: Context-Aware Meta-search in the IDE}, 
year={2014}, 
pages={617-620} } 
@INPROCEEDINGS{wcre2013masud, 
author={M. M. Rahman and S. Yeasmin and C. K. Roy}, 
booktitle={Proc. WCRE}, 
title={An IDE-based context-aware meta search engine}, 
year={2013}, 
pages={467-471} }

← Check out other tools by Masud Rahman


© Masud Rahman, Computer Science, University of Saskatchewan, Canada.