Understanding Feature Requests by Leveraging Heuristic and Semantic Analysis

Online System: Feature Request Analyzer


Project Summary

In open software development environment, a large number of feature requests with mixed quality are often posted by stakeholders and usually managed in issue tracking systems. Thoroughly understanding and analyzing the real intents that feature requests imply is a labor-intensive and challenging task. In this paper, we introduce an approach to understand feature requests automatically. We generate a set of fuzzy rules based on natural language processing techniques that classify each sentence in feature requests into a set of categories: Intent, Explanation, Benefit, Drawback, Example and Trivia. Consequently, the feature requests can be automatically structured based on the classification results. We conduct experiments on 2,112 sentences taken from 602 feature requests of nine popular open source projects. The results show that our method can reach a high performance on classifying sentences from feature requests. Moreover, when applying fuzzy rules on machine learning methods, the performance can be improved significantly.

The paper submitted to ASE 2017.

Subjects

  • Phpmyadmin(PMA: A web-based MySQL management tools written in PHP.
  • Mopidy: An extensible music server written in Python.
  • Activemq: An open source message broker written in Java.
  • AspectJ: An aspect-oriented programming (AOP) extension created at PARC for the Java programming language.
  • Hibernate ORM: An object-relational mapping tool for the Java programming language, written in Java.
  • SWT: A UI toolkit used by the Eclipse Platform and most other Eclipse projects written in Java.
  • Log4j: A Java-based logging utility.
  • HDFS: The primary storage system used by Hadoop applications.
  • Archiva: An extensible repository management software written in Java.
PMA Mopidy Activemq AspectJ ORM SWT Log4j HDFS archiva
Community github github apache eclipse hibernate eclipse apache apache apache
Domain database tool music server message broker programming mapping tool UI toolkit logging storage repository tool
#FRs 1740 312 486 472 778 1540 177 402 137
#selected FRs 57 62 62 96 82 44 59 98 42
#Sentences 193 189 167 362 299 147 249 394 112

Feature Request Analyzer Tool:

Online System: Feature Request Analyzer

API

The API should be accessed by HTTP request and POST method, and it will return the parsing results as JSON.

APIhttp://research.task.ac.cn/featureRequest.html
Request TypePOST

The following table shows the parameters for API requests.

Attribute Type Required Description
name String no The name or alias of the system that the feature requests post to
FRTitle String yes The title of the feature requests
FRDes String yes The detail description of the feature requests

API Usage Example in PHP:

    
//params
$post_data = array(
	'name' 		=> 'Phpmyadmin',
	'FRTitle' 	=> 'option to disable JS-Windows for errors',
	'FRDes' 	=> '<p>Please add an option to redisplay the "old" error-div if something failed.<br/>If you have a long (text) sql-query failing, you get an totally undersized js-error dialog which is hard to read and closes on an accidential click.<br/>I suggest: add an div on top of the page, containing the error, have the query-section (with inline) under it.<br/>Having this, you can see the error on full monitor width, second you can change the query to make it work and maybe you can put a structured output above it.<br/>Sometimes only a quote or brace is missing, which you must find.<br/>Best Regards,<br/>Thanks!</p>',
	);
$postdata = http_build_query($post_data);
$options = array(
	'http' => array(
		'method' 	=> 'POST',
		'header' 	=> 'Content-type:application/x-www-form-urlencoded',
		'content' 	=> http_build_query($post_data),
		'timeout' 	=> 15 * 60)
	);
$context = stream_context_create($options);
//send http POST request
$ret = file_get_contents('http://research.task.ac.cn/featureRequest.html', false, $context);
echo $ret;
    

Run the sample php file, it will output the parsing result in JSON format:

     
{
    "title": {
        "content": "option to disable JS-Windows for errors"
    },
    "attributes": [
        {
            "intent": {
                "content": "Please add an option to redisplay the "old" error-div if something failed"
            },
            "attributes": [
                {
                    "drawback": {
                        "content": "If you have a long (text) sql-query failing, you get an totally undersized js-error dialog which is hard to read and closes on an accidential click"
                    }
                }
            ]
        },
        {
            "intent": {
                "content": "I suggest: add an div on top of the page, containing the error, have the query-section (with inline) under it"
            },
            "attributes": [
                {
                    "benefit": {
                        "content": "Having this, you can see the error on full monitor width, second you can change the query to make it work and maybe you can put a structured output above it"
                    }
                },
                {
                    "drawback": {
                        "content": "Sometimes only a quote or brace is missing, which you must find"
                    }
                },
                {
                    "trivia": {
                        "content": "Best Regards,Thanks"
                    }
                }
            ]
        }
    ]
}
     

Evaluation

Download

activemq.txt (21.4k) May 2, 2017, 19:52 PM V1.0
archiva.txt (13.3k) May 2, 2017, 19:52 PM V1.0
aspectj.txt (47.7k) May 2, 2017, 19:52 PM V1.0
hdfs.txt (51.3k) May 2, 2017, 19:52 PM V1.0
hibernate.txt (35.0k) May 2, 2017, 19:52 PM V1.0
log4j.txt (30.9k) May 2, 2017, 19:52 PM V1.0
mopidy.txt (22.1k) May 2, 2017, 19:52 PM V1.0
pma.txt (22.6k) May 2, 2017, 19:52 PM V1.0
swt.txt (16.6k) May 2, 2017, 19:52 PM V1.0