SlideShare a Scribd company logo
1 of 18
Download to read offline
Toward Understanding
How Developers Recognize
Features in Source Code
from Descriptions
Shinpei Hayashi†,Takashi Ishio‡,
Hiroshi Kazato*, andTsuyoshi Oshima**
†Tokyo Institute of Technology ‡Osaka University
*NTT DATA CORPORATION **NTT Software Innovation Center
1
Feature Location (FL)
 A first step of software maintenance
– Which modules/functions/methods implement a
feature?
– How they interact?
 Feature location process (for Java)
– A feature description  A list of relevant methods
– Search keywords to find seed methods
– Explore the seed methods and their neighbors
 Many automated FL techniques proposed
2
Feature Boundary
 Our aim:To clarify the boundary of features
– Or:To specify features by description, etc.
 Why?
– For analysts:Writing a clear change specification for
another implementer
– For researchers: Building a better FL benchmark
4
feature
(description)
set of modules
FL Benchmark
 A basic infrastructure for comparing/evaluating
FL techniques
 Content: Input of FL and corresponding output
– Source code
– A set of features
• Name of feature
• Natural language description explaining the feature
– Oracle: location of the feature
• e.g., Set of modules (methods in Java)
5
Usage of FL Benchmark
6
Benchmark
FL techniqueFL user/
researcher
Source
code
Feature name/
description
Dynamic trace
(for dynamic FL)
Input
Output
Set of modules
(ordered/unordered)
Set of modules
(Oracle)
Compare
Precision/Recall
effectiveness measure,
etc.
Current FL Benchmark
 Based on change history and issue tracking
– Assumes that modules modified when adding the
feature will implement the feature
– Associating features and modules by analyzing change
history- and issue-repositories
7
Change
historySVN
ITS
Release ofVer. 2.0
Extracting
source code
#123: Feature XXX
It would be nice if XXX...
r456: Implementing #123.
class Foo {
void foo() {
bar();
+ baz();
} ...
Location of Feature XXX: { Foo.foo(), ... }
Features:
• XXX
• ...
10
Gaps
(1) Feature description vs. Feature
– The description from ITS do not always describe
only the feature introduced by the revision.
(2) Feature vs. Change history
– Change history do not always record only the
changes related the the target feature.
Developer FeatureFeature
description
SVN
Change
history
read
(1)
(2)
Research Question
 Does a clearer description of a feature enable
developers to identify the same set of modules?
Developer Source
code
Feature
description
Developer Source
code
Clearer Feature
description
Output
Set of modules
Output
Set of modules
?
11
Original Description
 The description in the benchmark
–Extracted from ITS
12
As suggested in the [http://www.mucommander.
com/forums/viewtopic.php?f=2&t=938 forums]:
adding a “Skip all” button when an error occurs in
a multiple file move / copy operation would be a
nice feature to have.
muCommander Feature #231:
“Skip all” for errors that occur during a file transfer operation
Refined Description
 2 paragraphs for explaining base/core separately
muCommander has a feature that copies/moves
files selected by a user.When a user tries to
execute a copy, muCommander shows a dialog to
specify a destination directory. Pushing the Copy
button in the dialog starts a copy process. If an
error occurred during the copying of a file, then an
error dialog shows a message and asks the user to
skip the file, retry to copy the file, or cancel the
copy process.
The new feature is “Skip All.”The dialog to specify a
destination directory has a new check box with the
caption is “Skip errors.” If a user checked the box,
then muCommander automatically skips a file if an
error occurred, without showing a dialog.The error
message dialog also has a new button “Skip all.” If
the button is pushed, then muCommander shows
no error dialog in further errors, as “Skip errors” is
checked.
Base behavior:
Explanation of basic
behavior which exists
before implementing the
target feature
Core behavior:
Explanation of the target
feature based on the
recorded change
13
Controlled Experiment
 Task: Read a description and vote for modules
 2 rounds
– One for Feature 1 w/ {original, refined} description
– One for Feature 2 w/ {original, refined} description
 Accumulates the votes of all subjects
Subject
Feature
description
Input
Source
code
Output
Votes
This module is
- relevant.
- useful (for understanding).
- irrelevant.
14
Subjects and Dataset
 Subjects
– 18 subjects (Students in Osaka U. + in Tokyo Tech.)
 Dataset: using Dit et al.’s Benchmark
– Feature 1: jEdit #1747300
– Feature 2: muCommander #231
 Obtained treatments
– 9 of Feature 1 w/ original description
– 9 of Feature 1 w/ refined description
– 9 of Feature 2 w/ original description
– 9 of Feature 2 w/ refined description
15
Result
16
GutterOptionPane.addFoldStyleChooser()
Gutter.Gutter(TextArea)
Gutter.paintLine(Graphics2D,...)
TriangleFoldPainter.paintFoldEnd(Gutter,...)
TriangleFoldPainter.paintFoldStart(Gutter,...)
GutterOptionPane._init()
GutterOptionPane._save()
TriangleFoldPainter.paintFoldMiddle(Gutter,...)
EditPane.propertiesChanged()
Gutter.setFoldPainter(FoldPainter)
StandaloneTextArea.StandaloneTextArea(IPropertyManager)
ShapedFoldPainter.paintFoldStart(Gutter,...)
ShapedFoldPainter.paintFoldEnd(Gutter,...)
FoldPainter.paintFoldStart(Gutter,...)
FoldPainter.paintFoldEnd(Gutter,...)
FoldPainter.paintFoldMiddle(Gutter,...)
JEditTextArea.getFoldPainterName()
JEditTextArea.getFoldPainter()
TextArea.getFoldPainter()
ServiceManager.getServiceNames(String)
AbstractOptionPane.save()
DummyFoldHandler.DummyFoldHandler()
ExplicitFoldHandler.ExplicitFoldHandler()
IndentFoldHandler.IndentFoldHandler()
JEditBuffer.propertiesChanged()
MouseHandler.mousePressed(MouseEvent)
JEditTextArea.JEditTextArea(View)
DefaultFoldHandlerProvider.DefaultFoldHandlerProvider()
ExplicitFoldHandler.getFoldLevel(JEditBuffer,...)
ServiceManager.getService(String,...)
Gutter.updateBorder()
CircleFoldPainter.CircleFoldPainter()
Gutter.setBorder(Border)
SquareFoldPainter.SquareFoldPainter()
StandaloneTextArea.initPainter()
TextAreaPainter.setFoldLineStyle(SyntaxStyle[])
TriangleFoldPainter.TriangleFoldPainter()
CircleFoldPainter.paintFoldShape(Graphics2D,...)
SquareFoldPainter.paintFoldShape(Graphics2D,...)
ShapedFoldPainter.paintFoldMiddle(Gutter,...)
Gutter.paintComponent(Graphics)
MouseHandler.getFoldEndOffset(int)
DefaultFoldHandlerProvider.addFoldHandler(FoldHandler)
StandaloneTextArea.initGutter()
ShapedFoldPainter.paintFoldShape(Graphics2D,...)
JEditBuffer.JEditBuffer()
DisplayManager.expandFolds(int)
Gutter.setGutterEnabled(boolean)
Included in
the goldset
Not included in
the goldset
630369
PreferencesDialog.setCommitButtonsEnabled(boolean)
GeneralPreferencesDialog.setCommitButtonsEnabled(boolean)
PreferencesDialog.initUI()
GeneralPreferencesDialog.componentChanged(PrefComponent)
PreferencesDialog.commit()
ThemeEditorDialog.componentChanged(PrefComponent)
PrefTextField.addDialogListener(PreferencesDialog)
PrefComboBox.addDialogListener(PreferencesDialog)
GeneralPreferencesDialog.GeneralPreferencesDialog()
PrefCheckBox.addDialogListener(PreferencesDialog)
PrefRadioButton.addDialogListener(PreferencesDialog)
ColorButton.setCurrentColor(Color,...)
FoldersPanel.FoldersPanel(PreferencesDialog)
GeneralPanel.GeneralPanel(PreferencesDialog)
MailPanel.MailPanel(PreferencesDialog)
MiscPanel.MiscPanel(PreferencesDialog)
ThemeFontChooserListener.stateChanged(ChangeEvent)
GeneralPreferencesDialog.commit()
PreferencesDialog.actionPerformed(ActionEvent)
PreferencesDialog.PreferencesDialog(Frame,...)
PrefEncodingSelectBox.addDialogListener(PreferencesDialog)
PreferencesDialog.PreferencesDialog(Dialog,...)
ThemeEditorDialog.commit()
PreferencesDialog.componentChanged(PrefComponent)
ThemeEditorDialog.ThemeEditorDialog(Dialog,...)
ShowPreferencesAction.performAction()
PreferencesDialog.checkCommit()
PrefTable.addDialogListener(PreferencesDialog)
AbstractButton.setEnabled(boolean)
ThemeEditorDialog.checkCommit()
ThemeData.isIdentical(ThemeData)
AppearancePanel.AppearancePanel(PreferencesDialog)
CustomizeDialog.initUI()
TransferDestinationDialog.TransferDestinationDialog(MainFrame,...)
ShortcutsPanel.ShortcutsPanel(PreferencesDialog)
CommandBarDialog.createCustomizationPanel()
CustomizeDialog.actionPerformed(ActionEvent)
LicenseDialog.createLicensePanel()
PrefComponent.hasChanged()
QuitDialog.QuitDialog(MainFrame)
InitialSetupDialog.InitialSetupDialog(Frame)
AboutDialog.createCreditsPanel()
Included in
the goldset
Not included in
the goldset useful (original)
relevant (original)
relevant (refined)
useful (refined)
jEdit muCommander
Result
17
GutterOptionPane.addFoldStyleChooser()
Gutter.Gutter(TextArea)
Gutter.paintLine(Graphics2D,...)
TriangleFoldPainter.paintFoldEnd(Gutter,...)
TriangleFoldPainter.paintFoldStart(Gutter,...)
GutterOptionPane._init()
GutterOptionPane._save()
TriangleFoldPainter.paintFoldMiddle(Gutter,...)
EditPane.propertiesChanged()
Gutter.setFoldPainter(FoldPainter)
StandaloneTextArea.StandaloneTextArea(IPropertyManager)
ShapedFoldPainter.paintFoldStart(Gutter,...)
ShapedFoldPainter.paintFoldEnd(Gutter,...)
FoldPainter.paintFoldStart(Gutter,...)
FoldPainter.paintFoldEnd(Gutter,...)
FoldPainter.paintFoldMiddle(Gutter,...)
JEditTextArea.getFoldPainterName()
JEditTextArea.getFoldPainter()
TextArea.getFoldPainter()
ServiceManager.getServiceNames(String)
AbstractOptionPane.save()
DummyFoldHandler.DummyFoldHandler()
ExplicitFoldHandler.ExplicitFoldHandler()
IndentFoldHandler.IndentFoldHandler()
JEditBuffer.propertiesChanged()
MouseHandler.mousePressed(MouseEvent)
JEditTextArea.JEditTextArea(View)
DefaultFoldHandlerProvider.DefaultFoldHandlerProvider()
ExplicitFoldHandler.getFoldLevel(JEditBuffer,...)
ServiceManager.getService(String,...)
Gutter.updateBorder()
CircleFoldPainter.CircleFoldPainter()
Gutter.setBorder(Border)
SquareFoldPainter.SquareFoldPainter()
StandaloneTextArea.initPainter()
TextAreaPainter.setFoldLineStyle(SyntaxStyle[])
TriangleFoldPainter.TriangleFoldPainter()
CircleFoldPainter.paintFoldShape(Graphics2D,...)
SquareFoldPainter.paintFoldShape(Graphics2D,...)
ShapedFoldPainter.paintFoldMiddle(Gutter,...)
Gutter.paintComponent(Graphics)
MouseHandler.getFoldEndOffset(int)
DefaultFoldHandlerProvider.addFoldHandler(FoldHandler)
StandaloneTextArea.initGutter()
ShapedFoldPainter.paintFoldShape(Graphics2D,...)
JEditBuffer.JEditBuffer()
DisplayManager.expandFolds(int)
Gutter.setGutterEnabled(boolean)
Included in
the goldset
Not included in
the goldset
630369
PreferencesDialog.setCommitButtonsEnabled(
GeneralPreferencesDialog.setCommitButtonsEPre
GeneralPreferencesDialog.comp
ThemeEdito
Modules included
in the goldset
Modules do not included
in the goldset
# votes when using
original description
# votes when using
refined description
More vs. Less votes
 Differences of # votes to modules in goldset
– Voted by many subjects: actually relevant?
– Voted by less subjects: actually irrelevant?
 Unsuitableness in the benchmark?
18
e.addFoldStyleChooser()
Gutter.Gutter(TextArea)
Gutter.paintLine(Graphics2D,...)
TriangleFoldPainter.paintFoldEnd(Gutter,...)
TriangleFoldPainter.paintFoldStart(Gutter,...)
GutterOptionPane._init()
GutterOptionPane._save()
TriangleFoldPainter.paintFoldMiddle(Gutter,...)
EditPane.propertiesChanged()
Gutter.setFoldPainter(FoldPainter)
StandaloneTextArea.StandaloneTextArea(IPropertyManager)
ShapedFoldPainter.paintFoldStart(Gutter,...)
ShapedFoldPainter.paintFoldEnd(Gutter,...)
FoldPainter.paintFoldStart(Gutter,...)
FoldPainter.paintFoldEnd(Gutter,...)
FoldPainter.paintFoldMiddle(Gutter,...)
JEditTextArea.getFoldPainterName()
JEditTextArea.getFoldPainter()
TextArea.getFoldPainter()
ServiceManager.getServiceNames(String)
AbstractOptionPane.save()
DummyFoldHandler.DummyFoldHandler()
ExplicitFoldHandler.ExplicitFoldHandler()
IndentFoldHandler.IndentFoldHandler()
JEditBuffer.propertiesChanged()
MouseHandler.mousePressed(MouseEvent)
JEditTextArea.JEditTextArea(View)
DefaultFoldHandlerProvider.DefaultFoldHandlerProvider()
ExplicitFoldHandler.getFoldLevel(JEditBuffer,...)
ServiceManager.getService(String,...)
Gutter.updateBorder()
CircleFoldPainter.CircleFoldPainter()
Gutter.setBorder(Border)
SquareFoldPainter.SquareFoldPainter()
StandaloneTextArea.initPainter()
TextAreaPainter.setFoldLineStyle(SyntaxStyle[])
TriangleFoldPainter.TriangleFoldPainter()
CircleFoldPainter.paintFoldShape(Graphics2D,...)
SquareFoldPainter.paintFoldShape(Graphics2D,...)
ShapedFoldPainter.paintFoldMiddle(Gutter,...)
Gutter.paintComponent(Graphics)
MouseHandler.getFoldEndOffset(int)
DefaultFoldHandlerProvider.addFoldHandler(FoldHandler)
StandaloneTextArea.initGutter()
ShapedFoldPainter.paintFoldShape(Graphics2D,...)
JEditBuffer.JEditBuffer()
DisplayManager.expandFolds(int)
Gutter.setGutterEnabled(boolean)
Included in
the goldset
Not included in
the goldset
PreferencesDialog.setCommitButtonsEnabled(boolean)
GeneralPreferencesDialog.setCommitButtonsEnabled(boolean)
PreferencesDialog.initUI()
GeneralPreferencesDialog.componentChanged(PrefComponent)
PreferencesDialog.commit()
ThemeEditorDialog.componentChanged(PrefComponent)
PrefTextField.addDialogListener(PreferencesDialog)
PrefComboBox.addDialogListener(PreferencesDialog)
GeneralPreferencesDialog.GeneralPreferencesDialog()
PrefCheckBox.addDialogListener(PreferencesDialog)
PrefRadioButton.addDialogListener(PreferencesDialog)
ColorButton.setCurrentColor(Color,...)
FoldersPanel.FoldersPanel(PreferencesDialog)
GeneralPanel.GeneralPanel(PreferencesDialog)
MailPanel.MailPanel(PreferencesDialog)
MiscPanel.MiscPanel(PreferencesDialog)
ThemeFontChooserListener.stateChanged(ChangeEvent)
GeneralPreferencesDialog.commit()
PreferencesDialog.actionPerformed(ActionEvent)
PreferencesDialog.PreferencesDialog(Frame,...)
PrefEncodingSelectBox.addDialogListener(PreferencesDialog)
PreferencesDialog.PreferencesDialog(Dialog,...)
ThemeEditorDialog.commit()
PreferencesDialog.componentChanged(PrefComponent)
ThemeEditorDialog.ThemeEditorDialog(Dialog,...)
ShowPreferencesAction.performAction()
PreferencesDialog.checkCommit()
PrefTable.addDialogListener(PreferencesDialog)
AbstractButton.setEnabled(boolean)
ThemeEditorDialog.checkCommit()
ThemeData.isIdentical(ThemeData)
AppearancePanel.AppearancePanel(PreferencesDialog)
CustomizeDialog.initUI()
TransferDestinationDialog.TransferDestinationDialog(MainFrame,...)
ShortcutsPanel.ShortcutsPanel(PreferencesDialog)
CommandBarDialog.createCustomizationPanel()
CustomizeDialog.actionPerformed(ActionEvent)
LicenseDialog.createLicensePanel()
PrefComponent.hasChanged()
QuitDialog.QuitDialog(MainFrame)
InitialSetupDialog.InitialSetupDialog(Frame)
AboutDialog.createCreditsPanel()
Included in
the goldset
Not included in
the goldset useful (original)
relevant (original)
relevant (refined)
useful (refined)
16 votes 1 vote
Finding 1:
Original vs. Refined
 More subjects voted some modules in goldset
using refined description
 Refined description contributed for
some modules?
19
e.addFoldStyleChooser()
Gutter.Gutter(TextArea)
Gutter.paintLine(Graphics2D,...)
TriangleFoldPainter.paintFoldEnd(Gutter,...)
TriangleFoldPainter.paintFoldStart(Gutter,...)
GutterOptionPane._init()
GutterOptionPane._save()
TriangleFoldPainter.paintFoldMiddle(Gutter,...)
EditPane.propertiesChanged()
Gutter.setFoldPainter(FoldPainter)
StandaloneTextArea.StandaloneTextArea(IPropertyManager)
ShapedFoldPainter.paintFoldStart(Gutter,...)
ShapedFoldPainter.paintFoldEnd(Gutter,...)
FoldPainter.paintFoldStart(Gutter,...)
FoldPainter.paintFoldEnd(Gutter,...)
FoldPainter.paintFoldMiddle(Gutter,...)
JEditTextArea.getFoldPainterName()
JEditTextArea.getFoldPainter()
TextArea.getFoldPainter()
ServiceManager.getServiceNames(String)
AbstractOptionPane.save()
DummyFoldHandler.DummyFoldHandler()
ExplicitFoldHandler.ExplicitFoldHandler()
IndentFoldHandler.IndentFoldHandler()
JEditBuffer.propertiesChanged()
MouseHandler.mousePressed(MouseEvent)
JEditTextArea.JEditTextArea(View)
DefaultFoldHandlerProvider.DefaultFoldHandlerProvider()
ExplicitFoldHandler.getFoldLevel(JEditBuffer,...)
ServiceManager.getService(String,...)
Gutter.updateBorder()
CircleFoldPainter.CircleFoldPainter()
Gutter.setBorder(Border)
SquareFoldPainter.SquareFoldPainter()
StandaloneTextArea.initPainter()
TextAreaPainter.setFoldLineStyle(SyntaxStyle[])
TriangleFoldPainter.TriangleFoldPainter()
CircleFoldPainter.paintFoldShape(Graphics2D,...)
SquareFoldPainter.paintFoldShape(Graphics2D,...)
ShapedFoldPainter.paintFoldMiddle(Gutter,...)
Gutter.paintComponent(Graphics)
MouseHandler.getFoldEndOffset(int)
DefaultFoldHandlerProvider.addFoldHandler(FoldHandler)
StandaloneTextArea.initGutter()
ShapedFoldPainter.paintFoldShape(Graphics2D,...)
JEditBuffer.JEditBuffer()
DisplayManager.expandFolds(int)
Gutter.setGutterEnabled(boolean)
Included in
the goldset
Not included in
the goldset
PreferencesDialog.setCommitButtonsEnabled(boolean)
GeneralPreferencesDialog.setCommitButtonsEnabled(boolean)
PreferencesDialog.initUI()
GeneralPreferencesDialog.componentChanged(PrefComponent)
PreferencesDialog.commit()
ThemeEditorDialog.componentChanged(PrefComponent)
PrefTextField.addDialogListener(PreferencesDialog)
PrefComboBox.addDialogListener(PreferencesDialog)
GeneralPreferencesDialog.GeneralPreferencesDialog()
PrefCheckBox.addDialogListener(PreferencesDialog)
PrefRadioButton.addDialogListener(PreferencesDialog)
ColorButton.setCurrentColor(Color,...)
FoldersPanel.FoldersPanel(PreferencesDialog)
GeneralPanel.GeneralPanel(PreferencesDialog)
MailPanel.MailPanel(PreferencesDialog)
MiscPanel.MiscPanel(PreferencesDialog)
ThemeFontChooserListener.stateChanged(ChangeEvent)
GeneralPreferencesDialog.commit()
PreferencesDialog.actionPerformed(ActionEvent)
PreferencesDialog.PreferencesDialog(Frame,...)
PrefEncodingSelectBox.addDialogListener(PreferencesDialog)
PreferencesDialog.PreferencesDialog(Dialog,...)
ThemeEditorDialog.commit()
PreferencesDialog.componentChanged(PrefComponent)
ThemeEditorDialog.ThemeEditorDialog(Dialog,...)
ShowPreferencesAction.performAction()
PreferencesDialog.checkCommit()
PrefTable.addDialogListener(PreferencesDialog)
AbstractButton.setEnabled(boolean)
ThemeEditorDialog.checkCommit()
ThemeData.isIdentical(ThemeData)
AppearancePanel.AppearancePanel(PreferencesDialog)
CustomizeDialog.initUI()
TransferDestinationDialog.TransferDestinationDialog(MainFrame,...)
ShortcutsPanel.ShortcutsPanel(PreferencesDialog)
CommandBarDialog.createCustomizationPanel()
CustomizeDialog.actionPerformed(ActionEvent)
LicenseDialog.createLicensePanel()
PrefComponent.hasChanged()
QuitDialog.QuitDialog(MainFrame)
InitialSetupDialog.InitialSetupDialog(Frame)
AboutDialog.createCreditsPanel()
Included in
the goldset
Not included in
the goldset useful (original)
relevant (original)
relevant (refined)
useful (refined)
Finding 2:
Votes and Goldset
 Many votes to some modules out of the goldset
– Including the ones mostly using refined description
 Actually relevant?
20
e.addFoldStyleChooser()
Gutter.Gutter(TextArea)
Gutter.paintLine(Graphics2D,...)
TriangleFoldPainter.paintFoldEnd(Gutter,...)
TriangleFoldPainter.paintFoldStart(Gutter,...)
GutterOptionPane._init()
GutterOptionPane._save()
TriangleFoldPainter.paintFoldMiddle(Gutter,...)
EditPane.propertiesChanged()
Gutter.setFoldPainter(FoldPainter)
StandaloneTextArea.StandaloneTextArea(IPropertyManager)
ShapedFoldPainter.paintFoldStart(Gutter,...)
ShapedFoldPainter.paintFoldEnd(Gutter,...)
FoldPainter.paintFoldStart(Gutter,...)
FoldPainter.paintFoldEnd(Gutter,...)
FoldPainter.paintFoldMiddle(Gutter,...)
JEditTextArea.getFoldPainterName()
JEditTextArea.getFoldPainter()
TextArea.getFoldPainter()
ServiceManager.getServiceNames(String)
AbstractOptionPane.save()
DummyFoldHandler.DummyFoldHandler()
ExplicitFoldHandler.ExplicitFoldHandler()
IndentFoldHandler.IndentFoldHandler()
JEditBuffer.propertiesChanged()
MouseHandler.mousePressed(MouseEvent)
JEditTextArea.JEditTextArea(View)
DefaultFoldHandlerProvider.DefaultFoldHandlerProvider()
ExplicitFoldHandler.getFoldLevel(JEditBuffer,...)
ServiceManager.getService(String,...)
Gutter.updateBorder()
CircleFoldPainter.CircleFoldPainter()
Gutter.setBorder(Border)
SquareFoldPainter.SquareFoldPainter()
StandaloneTextArea.initPainter()
TextAreaPainter.setFoldLineStyle(SyntaxStyle[])
TriangleFoldPainter.TriangleFoldPainter()
CircleFoldPainter.paintFoldShape(Graphics2D,...)
SquareFoldPainter.paintFoldShape(Graphics2D,...)
ShapedFoldPainter.paintFoldMiddle(Gutter,...)
Gutter.paintComponent(Graphics)
MouseHandler.getFoldEndOffset(int)
DefaultFoldHandlerProvider.addFoldHandler(FoldHandler)
StandaloneTextArea.initGutter()
ShapedFoldPainter.paintFoldShape(Graphics2D,...)
JEditBuffer.JEditBuffer()
DisplayManager.expandFolds(int)
Gutter.setGutterEnabled(boolean)
Included in
the goldset
Not included in
the goldset
PreferencesDialog.setCommitButtonsEnabled(boolean)
GeneralPreferencesDialog.setCommitButtonsEnabled(boolean)
PreferencesDialog.initUI()
GeneralPreferencesDialog.componentChanged(PrefComponent)
PreferencesDialog.commit()
ThemeEditorDialog.componentChanged(PrefComponent)
PrefTextField.addDialogListener(PreferencesDialog)
PrefComboBox.addDialogListener(PreferencesDialog)
GeneralPreferencesDialog.GeneralPreferencesDialog()
PrefCheckBox.addDialogListener(PreferencesDialog)
PrefRadioButton.addDialogListener(PreferencesDialog)
ColorButton.setCurrentColor(Color,...)
FoldersPanel.FoldersPanel(PreferencesDialog)
GeneralPanel.GeneralPanel(PreferencesDialog)
MailPanel.MailPanel(PreferencesDialog)
MiscPanel.MiscPanel(PreferencesDialog)
ThemeFontChooserListener.stateChanged(ChangeEvent)
GeneralPreferencesDialog.commit()
PreferencesDialog.actionPerformed(ActionEvent)
PreferencesDialog.PreferencesDialog(Frame,...)
PrefEncodingSelectBox.addDialogListener(PreferencesDialog)
PreferencesDialog.PreferencesDialog(Dialog,...)
ThemeEditorDialog.commit()
PreferencesDialog.componentChanged(PrefComponent)
ThemeEditorDialog.ThemeEditorDialog(Dialog,...)
ShowPreferencesAction.performAction()
PreferencesDialog.checkCommit()
PrefTable.addDialogListener(PreferencesDialog)
AbstractButton.setEnabled(boolean)
ThemeEditorDialog.checkCommit()
ThemeData.isIdentical(ThemeData)
AppearancePanel.AppearancePanel(PreferencesDialog)
CustomizeDialog.initUI()
TransferDestinationDialog.TransferDestinationDialog(MainFrame,...)
ShortcutsPanel.ShortcutsPanel(PreferencesDialog)
CommandBarDialog.createCustomizationPanel()
CustomizeDialog.actionPerformed(ActionEvent)
LicenseDialog.createLicensePanel()
PrefComponent.hasChanged()
QuitDialog.QuitDialog(MainFrame)
InitialSetupDialog.InitialSetupDialog(Frame)
AboutDialog.createCreditsPanel()
Included in
the goldset
Not included in
the goldset useful (original)
relevant (original)
relevant (refined)
useful (refined)
Finding 3:
Further Directions
 More investigations about descriptions
 Fuzzy benchmark
– Likelihood values are added based on votes
 Support for writing clearer descriptions
22
• PreferenecsDialog.initUI():0.7 (7 of 10 developers answered relevant)
...
List of
modules
fragile against
changes
Abstract
description
insufficient to
recognize
?

More Related Content

What's hot

05 iec t1_s1_oo_ps_session_07
05 iec t1_s1_oo_ps_session_0705 iec t1_s1_oo_ps_session_07
05 iec t1_s1_oo_ps_session_07
Niit Care
 
SysProg-Tutor 01 Introduction to C Programming Language
SysProg-Tutor 01 Introduction to C Programming LanguageSysProg-Tutor 01 Introduction to C Programming Language
SysProg-Tutor 01 Introduction to C Programming Language
Wongyos Keardsri
 
45 aop-programming
45 aop-programming45 aop-programming
45 aop-programming
daotuan85
 

What's hot (19)

Concept lattices: a representation space to structure software variability
Concept lattices: a representation space to structure software variabilityConcept lattices: a representation space to structure software variability
Concept lattices: a representation space to structure software variability
 
Automated Refactoring of Legacy Java Software to Default Methods Talk at GMU
Automated Refactoring of Legacy Java Software to Default Methods Talk at GMUAutomated Refactoring of Legacy Java Software to Default Methods Talk at GMU
Automated Refactoring of Legacy Java Software to Default Methods Talk at GMU
 
Multi-dimensional exploration of API usage - ICPC13 - 21-05-13
Multi-dimensional exploration of API usage - ICPC13 - 21-05-13Multi-dimensional exploration of API usage - ICPC13 - 21-05-13
Multi-dimensional exploration of API usage - ICPC13 - 21-05-13
 
Java swing 1
Java swing 1Java swing 1
Java swing 1
 
Understanding Annotations in Java
Understanding Annotations in JavaUnderstanding Annotations in Java
Understanding Annotations in Java
 
Aspect-Oriented Programming and Depedency Injection
Aspect-Oriented Programming and Depedency InjectionAspect-Oriented Programming and Depedency Injection
Aspect-Oriented Programming and Depedency Injection
 
Detecting Occurrences of Refactoring with Heuristic Search
Detecting Occurrences of Refactoring with Heuristic SearchDetecting Occurrences of Refactoring with Heuristic Search
Detecting Occurrences of Refactoring with Heuristic Search
 
A Logic Meta-Programming Foundation for Example-Driven Pattern Detection in O...
A Logic Meta-Programming Foundation for Example-Driven Pattern Detection in O...A Logic Meta-Programming Foundation for Example-Driven Pattern Detection in O...
A Logic Meta-Programming Foundation for Example-Driven Pattern Detection in O...
 
Chapter 9 & chapter 10 solutions
Chapter 9 & chapter 10 solutionsChapter 9 & chapter 10 solutions
Chapter 9 & chapter 10 solutions
 
Poster on Automated Refactoring of Legacy Java Software to Default Methods
Poster on Automated Refactoring of Legacy Java Software to Default MethodsPoster on Automated Refactoring of Legacy Java Software to Default Methods
Poster on Automated Refactoring of Legacy Java Software to Default Methods
 
Automated Refactoring of Legacy Java Software to Default Methods Talk at ICSE...
Automated Refactoring of Legacy Java Software to Default Methods Talk at ICSE...Automated Refactoring of Legacy Java Software to Default Methods Talk at ICSE...
Automated Refactoring of Legacy Java Software to Default Methods Talk at ICSE...
 
05 iec t1_s1_oo_ps_session_07
05 iec t1_s1_oo_ps_session_0705 iec t1_s1_oo_ps_session_07
05 iec t1_s1_oo_ps_session_07
 
Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org) (usef...
Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org)  (usef...Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org)  (usef...
Lab manual object oriented technology (it 303 rgpv) (usefulsearch.org) (usef...
 
SysProg-Tutor 01 Introduction to C Programming Language
SysProg-Tutor 01 Introduction to C Programming LanguageSysProg-Tutor 01 Introduction to C Programming Language
SysProg-Tutor 01 Introduction to C Programming Language
 
A Recommender System for Refining Ekeko/X Transformation
A Recommender System for Refining Ekeko/X TransformationA Recommender System for Refining Ekeko/X Transformation
A Recommender System for Refining Ekeko/X Transformation
 
45 aop-programming
45 aop-programming45 aop-programming
45 aop-programming
 
Automatic Migration of Legacy Java Method Implementations to Interfaces
Automatic Migration of Legacy Java Method Implementations to InterfacesAutomatic Migration of Legacy Java Method Implementations to Interfaces
Automatic Migration of Legacy Java Method Implementations to Interfaces
 
Javainterview
JavainterviewJavainterview
Javainterview
 
Towards Improving Interface Modularity in Legacy Java Software Through Automa...
Towards Improving Interface Modularity in Legacy Java Software Through Automa...Towards Improving Interface Modularity in Legacy Java Software Through Automa...
Towards Improving Interface Modularity in Legacy Java Software Through Automa...
 

Viewers also liked

Viewers also liked (12)

Class Responsibility Assignment as Fuzzy Constraint Satisfaction
Class Responsibility Assignment as Fuzzy Constraint SatisfactionClass Responsibility Assignment as Fuzzy Constraint Satisfaction
Class Responsibility Assignment as Fuzzy Constraint Satisfaction
 
Establishing Regulatory Compliance in Goal-Oriented Requirements Analysis
Establishing Regulatory Compliance in Goal-Oriented Requirements AnalysisEstablishing Regulatory Compliance in Goal-Oriented Requirements Analysis
Establishing Regulatory Compliance in Goal-Oriented Requirements Analysis
 
Refactoring Edit History of Source Code
Refactoring Edit History of Source CodeRefactoring Edit History of Source Code
Refactoring Edit History of Source Code
 
Feature Location for Multi-Layer System Based on Formal Concept Analysis
Feature Location for Multi-Layer System Based on Formal Concept AnalysisFeature Location for Multi-Layer System Based on Formal Concept Analysis
Feature Location for Multi-Layer System Based on Formal Concept Analysis
 
Modeling and Utilizing Security Knowledge for Eliciting Security Requirements
Modeling and Utilizing Security Knowledge for Eliciting Security RequirementsModeling and Utilizing Security Knowledge for Eliciting Security Requirements
Modeling and Utilizing Security Knowledge for Eliciting Security Requirements
 
How Can You Improve Your As-is Models? Requirements Analysis Methods Meet GQM
How Can You Improve Your As-is Models? Requirements Analysis Methods Meet GQMHow Can You Improve Your As-is Models? Requirements Analysis Methods Meet GQM
How Can You Improve Your As-is Models? Requirements Analysis Methods Meet GQM
 
Terminology Matching of Requirements Specification Documents and Regulations ...
Terminology Matching of Requirements Specification Documents and Regulations ...Terminology Matching of Requirements Specification Documents and Regulations ...
Terminology Matching of Requirements Specification Documents and Regulations ...
 
Incremental Feature Location and Identification in Source Code
Incremental Feature Location and Identification in Source CodeIncremental Feature Location and Identification in Source Code
Incremental Feature Location and Identification in Source Code
 
Sentence-to-Code Traceability Recovery with Domain Ontologies
Sentence-to-Code Traceability Recovery with Domain OntologiesSentence-to-Code Traceability Recovery with Domain Ontologies
Sentence-to-Code Traceability Recovery with Domain Ontologies
 
Historef: A Tool for Edit History Refactoring
Historef: A Tool  for Edit History RefactoringHistoref: A Tool  for Edit History Refactoring
Historef: A Tool for Edit History Refactoring
 
Understanding Source Code Differences by Separating Refactoring Effects
Understanding Source Code Differences by Separating Refactoring EffectsUnderstanding Source Code Differences by Separating Refactoring Effects
Understanding Source Code Differences by Separating Refactoring Effects
 
FOSE2010 ミニチュートリアル 「データマイニング技術を応用したソフトウェア構築・保守支援」
FOSE2010 ミニチュートリアル 「データマイニング技術を応用したソフトウェア構築・保守支援」FOSE2010 ミニチュートリアル 「データマイニング技術を応用したソフトウェア構築・保守支援」
FOSE2010 ミニチュートリアル 「データマイニング技術を応用したソフトウェア構築・保守支援」
 

Similar to Toward Understanding How Developers Recognize Features in Source Code from Descriptions

torque - Automation Testing Tool for C-C++ on Linux
torque -  Automation Testing Tool for C-C++ on Linuxtorque -  Automation Testing Tool for C-C++ on Linux
torque - Automation Testing Tool for C-C++ on Linux
JITENDRA LENKA
 
OORPT Dynamic Analysis
OORPT Dynamic AnalysisOORPT Dynamic Analysis
OORPT Dynamic Analysis
lienhard
 
object oriented programming part inheritance.pptx
object oriented programming part inheritance.pptxobject oriented programming part inheritance.pptx
object oriented programming part inheritance.pptx
urvashipundir04
 
Nt1310 Unit 3 Language Analysis
Nt1310 Unit 3 Language AnalysisNt1310 Unit 3 Language Analysis
Nt1310 Unit 3 Language Analysis
Nicole Gomez
 
New c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNew c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_iv
Nico Ludwig
 
Chapter One Function.pptx
Chapter One Function.pptxChapter One Function.pptx
Chapter One Function.pptx
miki304759
 

Similar to Toward Understanding How Developers Recognize Features in Source Code from Descriptions (20)

Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)
Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)
Functional Patterns for C++ Multithreading (C++ Dev Meetup Iasi)
 
Mastering Python lesson 4_functions_parameters_arguments
Mastering Python lesson 4_functions_parameters_argumentsMastering Python lesson 4_functions_parameters_arguments
Mastering Python lesson 4_functions_parameters_arguments
 
torque - Automation Testing Tool for C-C++ on Linux
torque -  Automation Testing Tool for C-C++ on Linuxtorque -  Automation Testing Tool for C-C++ on Linux
torque - Automation Testing Tool for C-C++ on Linux
 
OORPT Dynamic Analysis
OORPT Dynamic AnalysisOORPT Dynamic Analysis
OORPT Dynamic Analysis
 
Functional Programming in JavaScript & ESNext
Functional Programming in JavaScript & ESNextFunctional Programming in JavaScript & ESNext
Functional Programming in JavaScript & ESNext
 
Extending Rotor with Structural Reflection to support Reflective Languages
Extending Rotor with Structural Reflection to support Reflective LanguagesExtending Rotor with Structural Reflection to support Reflective Languages
Extending Rotor with Structural Reflection to support Reflective Languages
 
JavaDiff - Java source code diff tool
JavaDiff - Java source code diff toolJavaDiff - Java source code diff tool
JavaDiff - Java source code diff tool
 
object oriented programming part inheritance.pptx
object oriented programming part inheritance.pptxobject oriented programming part inheritance.pptx
object oriented programming part inheritance.pptx
 
Interoduction to c++
Interoduction to c++Interoduction to c++
Interoduction to c++
 
Terraform modules restructured
Terraform modules restructuredTerraform modules restructured
Terraform modules restructured
 
Terraform Modules Restructured
Terraform Modules RestructuredTerraform Modules Restructured
Terraform Modules Restructured
 
FME World Tour 2015 - FME & Data Migration Simon McCabe
FME World Tour 2015 -  FME & Data Migration Simon McCabeFME World Tour 2015 -  FME & Data Migration Simon McCabe
FME World Tour 2015 - FME & Data Migration Simon McCabe
 
B.sc CSIT 2nd semester C++ unit-1
B.sc CSIT  2nd semester C++ unit-1B.sc CSIT  2nd semester C++ unit-1
B.sc CSIT 2nd semester C++ unit-1
 
Example Of Import Java
Example Of Import JavaExample Of Import Java
Example Of Import Java
 
Nt1310 Unit 3 Language Analysis
Nt1310 Unit 3 Language AnalysisNt1310 Unit 3 Language Analysis
Nt1310 Unit 3 Language Analysis
 
New c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNew c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_iv
 
Chapter One Function.pptx
Chapter One Function.pptxChapter One Function.pptx
Chapter One Function.pptx
 
10071756.ppt
10071756.ppt10071756.ppt
10071756.ppt
 
T4 presentation
T4 presentationT4 presentation
T4 presentation
 
chapter 1 software design.pptx
chapter 1 software design.pptxchapter 1 software design.pptx
chapter 1 software design.pptx
 

More from Shinpei Hayashi

More from Shinpei Hayashi (9)

Revisiting the Effect of Branch Handling Strategies on Change Recommendation
Revisiting the Effect of Branch Handling Strategies on Change RecommendationRevisiting the Effect of Branch Handling Strategies on Change Recommendation
Revisiting the Effect of Branch Handling Strategies on Change Recommendation
 
An Extensive Study on Smell Aware Bug Localization
An Extensive Study on Smell Aware Bug LocalizationAn Extensive Study on Smell Aware Bug Localization
An Extensive Study on Smell Aware Bug Localization
 
RefactorHub: A Commit Annotator for Refactoring
RefactorHub: A Commit Annotator for RefactoringRefactorHub: A Commit Annotator for Refactoring
RefactorHub: A Commit Annotator for Refactoring
 
Can Automated Impact Analysis Technique Help Predicting Decaying Modules?
Can Automated Impact Analysis Technique Help Predicting Decaying Modules?Can Automated Impact Analysis Technique Help Predicting Decaying Modules?
Can Automated Impact Analysis Technique Help Predicting Decaying Modules?
 
The Impact of Systematic Edits in History Slicing
The Impact of Systematic Edits in History SlicingThe Impact of Systematic Edits in History Slicing
The Impact of Systematic Edits in History Slicing
 
ChangeMacroRecorder: Recording Fine-Grained Textual Changes of Source Code
ChangeMacroRecorder: Recording Fine-Grained Textual Changes of Source CodeChangeMacroRecorder: Recording Fine-Grained Textual Changes of Source Code
ChangeMacroRecorder: Recording Fine-Grained Textual Changes of Source Code
 
Inference-Based Detection of Architectural Violations in MVC2
Inference-Based Detection of Architectural Violations in MVC2Inference-Based Detection of Architectural Violations in MVC2
Inference-Based Detection of Architectural Violations in MVC2
 
Detecting Bad Smells of Refinement in Goal-Oriented Requirements Analysis
Detecting Bad Smells of Refinement in Goal-Oriented Requirements AnalysisDetecting Bad Smells of Refinement in Goal-Oriented Requirements Analysis
Detecting Bad Smells of Refinement in Goal-Oriented Requirements Analysis
 
ソフトウェア工学勉強会への誘い
ソフトウェア工学勉強会への誘いソフトウェア工学勉強会への誘い
ソフトウェア工学勉強会への誘い
 

Recently uploaded

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Recently uploaded (20)

Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 

Toward Understanding How Developers Recognize Features in Source Code from Descriptions

  • 1. Toward Understanding How Developers Recognize Features in Source Code from Descriptions Shinpei Hayashi†,Takashi Ishio‡, Hiroshi Kazato*, andTsuyoshi Oshima** †Tokyo Institute of Technology ‡Osaka University *NTT DATA CORPORATION **NTT Software Innovation Center 1
  • 2. Feature Location (FL)  A first step of software maintenance – Which modules/functions/methods implement a feature? – How they interact?  Feature location process (for Java) – A feature description  A list of relevant methods – Search keywords to find seed methods – Explore the seed methods and their neighbors  Many automated FL techniques proposed 2
  • 3. Feature Boundary  Our aim:To clarify the boundary of features – Or:To specify features by description, etc.  Why? – For analysts:Writing a clear change specification for another implementer – For researchers: Building a better FL benchmark 4 feature (description) set of modules
  • 4. FL Benchmark  A basic infrastructure for comparing/evaluating FL techniques  Content: Input of FL and corresponding output – Source code – A set of features • Name of feature • Natural language description explaining the feature – Oracle: location of the feature • e.g., Set of modules (methods in Java) 5
  • 5. Usage of FL Benchmark 6 Benchmark FL techniqueFL user/ researcher Source code Feature name/ description Dynamic trace (for dynamic FL) Input Output Set of modules (ordered/unordered) Set of modules (Oracle) Compare Precision/Recall effectiveness measure, etc.
  • 6. Current FL Benchmark  Based on change history and issue tracking – Assumes that modules modified when adding the feature will implement the feature – Associating features and modules by analyzing change history- and issue-repositories 7 Change historySVN ITS Release ofVer. 2.0 Extracting source code #123: Feature XXX It would be nice if XXX... r456: Implementing #123. class Foo { void foo() { bar(); + baz(); } ... Location of Feature XXX: { Foo.foo(), ... } Features: • XXX • ...
  • 7. 10 Gaps (1) Feature description vs. Feature – The description from ITS do not always describe only the feature introduced by the revision. (2) Feature vs. Change history – Change history do not always record only the changes related the the target feature. Developer FeatureFeature description SVN Change history read (1) (2)
  • 8. Research Question  Does a clearer description of a feature enable developers to identify the same set of modules? Developer Source code Feature description Developer Source code Clearer Feature description Output Set of modules Output Set of modules ? 11
  • 9. Original Description  The description in the benchmark –Extracted from ITS 12 As suggested in the [http://www.mucommander. com/forums/viewtopic.php?f=2&t=938 forums]: adding a “Skip all” button when an error occurs in a multiple file move / copy operation would be a nice feature to have. muCommander Feature #231: “Skip all” for errors that occur during a file transfer operation
  • 10. Refined Description  2 paragraphs for explaining base/core separately muCommander has a feature that copies/moves files selected by a user.When a user tries to execute a copy, muCommander shows a dialog to specify a destination directory. Pushing the Copy button in the dialog starts a copy process. If an error occurred during the copying of a file, then an error dialog shows a message and asks the user to skip the file, retry to copy the file, or cancel the copy process. The new feature is “Skip All.”The dialog to specify a destination directory has a new check box with the caption is “Skip errors.” If a user checked the box, then muCommander automatically skips a file if an error occurred, without showing a dialog.The error message dialog also has a new button “Skip all.” If the button is pushed, then muCommander shows no error dialog in further errors, as “Skip errors” is checked. Base behavior: Explanation of basic behavior which exists before implementing the target feature Core behavior: Explanation of the target feature based on the recorded change 13
  • 11. Controlled Experiment  Task: Read a description and vote for modules  2 rounds – One for Feature 1 w/ {original, refined} description – One for Feature 2 w/ {original, refined} description  Accumulates the votes of all subjects Subject Feature description Input Source code Output Votes This module is - relevant. - useful (for understanding). - irrelevant. 14
  • 12. Subjects and Dataset  Subjects – 18 subjects (Students in Osaka U. + in Tokyo Tech.)  Dataset: using Dit et al.’s Benchmark – Feature 1: jEdit #1747300 – Feature 2: muCommander #231  Obtained treatments – 9 of Feature 1 w/ original description – 9 of Feature 1 w/ refined description – 9 of Feature 2 w/ original description – 9 of Feature 2 w/ refined description 15
  • 13. Result 16 GutterOptionPane.addFoldStyleChooser() Gutter.Gutter(TextArea) Gutter.paintLine(Graphics2D,...) TriangleFoldPainter.paintFoldEnd(Gutter,...) TriangleFoldPainter.paintFoldStart(Gutter,...) GutterOptionPane._init() GutterOptionPane._save() TriangleFoldPainter.paintFoldMiddle(Gutter,...) EditPane.propertiesChanged() Gutter.setFoldPainter(FoldPainter) StandaloneTextArea.StandaloneTextArea(IPropertyManager) ShapedFoldPainter.paintFoldStart(Gutter,...) ShapedFoldPainter.paintFoldEnd(Gutter,...) FoldPainter.paintFoldStart(Gutter,...) FoldPainter.paintFoldEnd(Gutter,...) FoldPainter.paintFoldMiddle(Gutter,...) JEditTextArea.getFoldPainterName() JEditTextArea.getFoldPainter() TextArea.getFoldPainter() ServiceManager.getServiceNames(String) AbstractOptionPane.save() DummyFoldHandler.DummyFoldHandler() ExplicitFoldHandler.ExplicitFoldHandler() IndentFoldHandler.IndentFoldHandler() JEditBuffer.propertiesChanged() MouseHandler.mousePressed(MouseEvent) JEditTextArea.JEditTextArea(View) DefaultFoldHandlerProvider.DefaultFoldHandlerProvider() ExplicitFoldHandler.getFoldLevel(JEditBuffer,...) ServiceManager.getService(String,...) Gutter.updateBorder() CircleFoldPainter.CircleFoldPainter() Gutter.setBorder(Border) SquareFoldPainter.SquareFoldPainter() StandaloneTextArea.initPainter() TextAreaPainter.setFoldLineStyle(SyntaxStyle[]) TriangleFoldPainter.TriangleFoldPainter() CircleFoldPainter.paintFoldShape(Graphics2D,...) SquareFoldPainter.paintFoldShape(Graphics2D,...) ShapedFoldPainter.paintFoldMiddle(Gutter,...) Gutter.paintComponent(Graphics) MouseHandler.getFoldEndOffset(int) DefaultFoldHandlerProvider.addFoldHandler(FoldHandler) StandaloneTextArea.initGutter() ShapedFoldPainter.paintFoldShape(Graphics2D,...) JEditBuffer.JEditBuffer() DisplayManager.expandFolds(int) Gutter.setGutterEnabled(boolean) Included in the goldset Not included in the goldset 630369 PreferencesDialog.setCommitButtonsEnabled(boolean) GeneralPreferencesDialog.setCommitButtonsEnabled(boolean) PreferencesDialog.initUI() GeneralPreferencesDialog.componentChanged(PrefComponent) PreferencesDialog.commit() ThemeEditorDialog.componentChanged(PrefComponent) PrefTextField.addDialogListener(PreferencesDialog) PrefComboBox.addDialogListener(PreferencesDialog) GeneralPreferencesDialog.GeneralPreferencesDialog() PrefCheckBox.addDialogListener(PreferencesDialog) PrefRadioButton.addDialogListener(PreferencesDialog) ColorButton.setCurrentColor(Color,...) FoldersPanel.FoldersPanel(PreferencesDialog) GeneralPanel.GeneralPanel(PreferencesDialog) MailPanel.MailPanel(PreferencesDialog) MiscPanel.MiscPanel(PreferencesDialog) ThemeFontChooserListener.stateChanged(ChangeEvent) GeneralPreferencesDialog.commit() PreferencesDialog.actionPerformed(ActionEvent) PreferencesDialog.PreferencesDialog(Frame,...) PrefEncodingSelectBox.addDialogListener(PreferencesDialog) PreferencesDialog.PreferencesDialog(Dialog,...) ThemeEditorDialog.commit() PreferencesDialog.componentChanged(PrefComponent) ThemeEditorDialog.ThemeEditorDialog(Dialog,...) ShowPreferencesAction.performAction() PreferencesDialog.checkCommit() PrefTable.addDialogListener(PreferencesDialog) AbstractButton.setEnabled(boolean) ThemeEditorDialog.checkCommit() ThemeData.isIdentical(ThemeData) AppearancePanel.AppearancePanel(PreferencesDialog) CustomizeDialog.initUI() TransferDestinationDialog.TransferDestinationDialog(MainFrame,...) ShortcutsPanel.ShortcutsPanel(PreferencesDialog) CommandBarDialog.createCustomizationPanel() CustomizeDialog.actionPerformed(ActionEvent) LicenseDialog.createLicensePanel() PrefComponent.hasChanged() QuitDialog.QuitDialog(MainFrame) InitialSetupDialog.InitialSetupDialog(Frame) AboutDialog.createCreditsPanel() Included in the goldset Not included in the goldset useful (original) relevant (original) relevant (refined) useful (refined) jEdit muCommander
  • 14. Result 17 GutterOptionPane.addFoldStyleChooser() Gutter.Gutter(TextArea) Gutter.paintLine(Graphics2D,...) TriangleFoldPainter.paintFoldEnd(Gutter,...) TriangleFoldPainter.paintFoldStart(Gutter,...) GutterOptionPane._init() GutterOptionPane._save() TriangleFoldPainter.paintFoldMiddle(Gutter,...) EditPane.propertiesChanged() Gutter.setFoldPainter(FoldPainter) StandaloneTextArea.StandaloneTextArea(IPropertyManager) ShapedFoldPainter.paintFoldStart(Gutter,...) ShapedFoldPainter.paintFoldEnd(Gutter,...) FoldPainter.paintFoldStart(Gutter,...) FoldPainter.paintFoldEnd(Gutter,...) FoldPainter.paintFoldMiddle(Gutter,...) JEditTextArea.getFoldPainterName() JEditTextArea.getFoldPainter() TextArea.getFoldPainter() ServiceManager.getServiceNames(String) AbstractOptionPane.save() DummyFoldHandler.DummyFoldHandler() ExplicitFoldHandler.ExplicitFoldHandler() IndentFoldHandler.IndentFoldHandler() JEditBuffer.propertiesChanged() MouseHandler.mousePressed(MouseEvent) JEditTextArea.JEditTextArea(View) DefaultFoldHandlerProvider.DefaultFoldHandlerProvider() ExplicitFoldHandler.getFoldLevel(JEditBuffer,...) ServiceManager.getService(String,...) Gutter.updateBorder() CircleFoldPainter.CircleFoldPainter() Gutter.setBorder(Border) SquareFoldPainter.SquareFoldPainter() StandaloneTextArea.initPainter() TextAreaPainter.setFoldLineStyle(SyntaxStyle[]) TriangleFoldPainter.TriangleFoldPainter() CircleFoldPainter.paintFoldShape(Graphics2D,...) SquareFoldPainter.paintFoldShape(Graphics2D,...) ShapedFoldPainter.paintFoldMiddle(Gutter,...) Gutter.paintComponent(Graphics) MouseHandler.getFoldEndOffset(int) DefaultFoldHandlerProvider.addFoldHandler(FoldHandler) StandaloneTextArea.initGutter() ShapedFoldPainter.paintFoldShape(Graphics2D,...) JEditBuffer.JEditBuffer() DisplayManager.expandFolds(int) Gutter.setGutterEnabled(boolean) Included in the goldset Not included in the goldset 630369 PreferencesDialog.setCommitButtonsEnabled( GeneralPreferencesDialog.setCommitButtonsEPre GeneralPreferencesDialog.comp ThemeEdito Modules included in the goldset Modules do not included in the goldset # votes when using original description # votes when using refined description
  • 15. More vs. Less votes  Differences of # votes to modules in goldset – Voted by many subjects: actually relevant? – Voted by less subjects: actually irrelevant?  Unsuitableness in the benchmark? 18 e.addFoldStyleChooser() Gutter.Gutter(TextArea) Gutter.paintLine(Graphics2D,...) TriangleFoldPainter.paintFoldEnd(Gutter,...) TriangleFoldPainter.paintFoldStart(Gutter,...) GutterOptionPane._init() GutterOptionPane._save() TriangleFoldPainter.paintFoldMiddle(Gutter,...) EditPane.propertiesChanged() Gutter.setFoldPainter(FoldPainter) StandaloneTextArea.StandaloneTextArea(IPropertyManager) ShapedFoldPainter.paintFoldStart(Gutter,...) ShapedFoldPainter.paintFoldEnd(Gutter,...) FoldPainter.paintFoldStart(Gutter,...) FoldPainter.paintFoldEnd(Gutter,...) FoldPainter.paintFoldMiddle(Gutter,...) JEditTextArea.getFoldPainterName() JEditTextArea.getFoldPainter() TextArea.getFoldPainter() ServiceManager.getServiceNames(String) AbstractOptionPane.save() DummyFoldHandler.DummyFoldHandler() ExplicitFoldHandler.ExplicitFoldHandler() IndentFoldHandler.IndentFoldHandler() JEditBuffer.propertiesChanged() MouseHandler.mousePressed(MouseEvent) JEditTextArea.JEditTextArea(View) DefaultFoldHandlerProvider.DefaultFoldHandlerProvider() ExplicitFoldHandler.getFoldLevel(JEditBuffer,...) ServiceManager.getService(String,...) Gutter.updateBorder() CircleFoldPainter.CircleFoldPainter() Gutter.setBorder(Border) SquareFoldPainter.SquareFoldPainter() StandaloneTextArea.initPainter() TextAreaPainter.setFoldLineStyle(SyntaxStyle[]) TriangleFoldPainter.TriangleFoldPainter() CircleFoldPainter.paintFoldShape(Graphics2D,...) SquareFoldPainter.paintFoldShape(Graphics2D,...) ShapedFoldPainter.paintFoldMiddle(Gutter,...) Gutter.paintComponent(Graphics) MouseHandler.getFoldEndOffset(int) DefaultFoldHandlerProvider.addFoldHandler(FoldHandler) StandaloneTextArea.initGutter() ShapedFoldPainter.paintFoldShape(Graphics2D,...) JEditBuffer.JEditBuffer() DisplayManager.expandFolds(int) Gutter.setGutterEnabled(boolean) Included in the goldset Not included in the goldset PreferencesDialog.setCommitButtonsEnabled(boolean) GeneralPreferencesDialog.setCommitButtonsEnabled(boolean) PreferencesDialog.initUI() GeneralPreferencesDialog.componentChanged(PrefComponent) PreferencesDialog.commit() ThemeEditorDialog.componentChanged(PrefComponent) PrefTextField.addDialogListener(PreferencesDialog) PrefComboBox.addDialogListener(PreferencesDialog) GeneralPreferencesDialog.GeneralPreferencesDialog() PrefCheckBox.addDialogListener(PreferencesDialog) PrefRadioButton.addDialogListener(PreferencesDialog) ColorButton.setCurrentColor(Color,...) FoldersPanel.FoldersPanel(PreferencesDialog) GeneralPanel.GeneralPanel(PreferencesDialog) MailPanel.MailPanel(PreferencesDialog) MiscPanel.MiscPanel(PreferencesDialog) ThemeFontChooserListener.stateChanged(ChangeEvent) GeneralPreferencesDialog.commit() PreferencesDialog.actionPerformed(ActionEvent) PreferencesDialog.PreferencesDialog(Frame,...) PrefEncodingSelectBox.addDialogListener(PreferencesDialog) PreferencesDialog.PreferencesDialog(Dialog,...) ThemeEditorDialog.commit() PreferencesDialog.componentChanged(PrefComponent) ThemeEditorDialog.ThemeEditorDialog(Dialog,...) ShowPreferencesAction.performAction() PreferencesDialog.checkCommit() PrefTable.addDialogListener(PreferencesDialog) AbstractButton.setEnabled(boolean) ThemeEditorDialog.checkCommit() ThemeData.isIdentical(ThemeData) AppearancePanel.AppearancePanel(PreferencesDialog) CustomizeDialog.initUI() TransferDestinationDialog.TransferDestinationDialog(MainFrame,...) ShortcutsPanel.ShortcutsPanel(PreferencesDialog) CommandBarDialog.createCustomizationPanel() CustomizeDialog.actionPerformed(ActionEvent) LicenseDialog.createLicensePanel() PrefComponent.hasChanged() QuitDialog.QuitDialog(MainFrame) InitialSetupDialog.InitialSetupDialog(Frame) AboutDialog.createCreditsPanel() Included in the goldset Not included in the goldset useful (original) relevant (original) relevant (refined) useful (refined) 16 votes 1 vote Finding 1:
  • 16. Original vs. Refined  More subjects voted some modules in goldset using refined description  Refined description contributed for some modules? 19 e.addFoldStyleChooser() Gutter.Gutter(TextArea) Gutter.paintLine(Graphics2D,...) TriangleFoldPainter.paintFoldEnd(Gutter,...) TriangleFoldPainter.paintFoldStart(Gutter,...) GutterOptionPane._init() GutterOptionPane._save() TriangleFoldPainter.paintFoldMiddle(Gutter,...) EditPane.propertiesChanged() Gutter.setFoldPainter(FoldPainter) StandaloneTextArea.StandaloneTextArea(IPropertyManager) ShapedFoldPainter.paintFoldStart(Gutter,...) ShapedFoldPainter.paintFoldEnd(Gutter,...) FoldPainter.paintFoldStart(Gutter,...) FoldPainter.paintFoldEnd(Gutter,...) FoldPainter.paintFoldMiddle(Gutter,...) JEditTextArea.getFoldPainterName() JEditTextArea.getFoldPainter() TextArea.getFoldPainter() ServiceManager.getServiceNames(String) AbstractOptionPane.save() DummyFoldHandler.DummyFoldHandler() ExplicitFoldHandler.ExplicitFoldHandler() IndentFoldHandler.IndentFoldHandler() JEditBuffer.propertiesChanged() MouseHandler.mousePressed(MouseEvent) JEditTextArea.JEditTextArea(View) DefaultFoldHandlerProvider.DefaultFoldHandlerProvider() ExplicitFoldHandler.getFoldLevel(JEditBuffer,...) ServiceManager.getService(String,...) Gutter.updateBorder() CircleFoldPainter.CircleFoldPainter() Gutter.setBorder(Border) SquareFoldPainter.SquareFoldPainter() StandaloneTextArea.initPainter() TextAreaPainter.setFoldLineStyle(SyntaxStyle[]) TriangleFoldPainter.TriangleFoldPainter() CircleFoldPainter.paintFoldShape(Graphics2D,...) SquareFoldPainter.paintFoldShape(Graphics2D,...) ShapedFoldPainter.paintFoldMiddle(Gutter,...) Gutter.paintComponent(Graphics) MouseHandler.getFoldEndOffset(int) DefaultFoldHandlerProvider.addFoldHandler(FoldHandler) StandaloneTextArea.initGutter() ShapedFoldPainter.paintFoldShape(Graphics2D,...) JEditBuffer.JEditBuffer() DisplayManager.expandFolds(int) Gutter.setGutterEnabled(boolean) Included in the goldset Not included in the goldset PreferencesDialog.setCommitButtonsEnabled(boolean) GeneralPreferencesDialog.setCommitButtonsEnabled(boolean) PreferencesDialog.initUI() GeneralPreferencesDialog.componentChanged(PrefComponent) PreferencesDialog.commit() ThemeEditorDialog.componentChanged(PrefComponent) PrefTextField.addDialogListener(PreferencesDialog) PrefComboBox.addDialogListener(PreferencesDialog) GeneralPreferencesDialog.GeneralPreferencesDialog() PrefCheckBox.addDialogListener(PreferencesDialog) PrefRadioButton.addDialogListener(PreferencesDialog) ColorButton.setCurrentColor(Color,...) FoldersPanel.FoldersPanel(PreferencesDialog) GeneralPanel.GeneralPanel(PreferencesDialog) MailPanel.MailPanel(PreferencesDialog) MiscPanel.MiscPanel(PreferencesDialog) ThemeFontChooserListener.stateChanged(ChangeEvent) GeneralPreferencesDialog.commit() PreferencesDialog.actionPerformed(ActionEvent) PreferencesDialog.PreferencesDialog(Frame,...) PrefEncodingSelectBox.addDialogListener(PreferencesDialog) PreferencesDialog.PreferencesDialog(Dialog,...) ThemeEditorDialog.commit() PreferencesDialog.componentChanged(PrefComponent) ThemeEditorDialog.ThemeEditorDialog(Dialog,...) ShowPreferencesAction.performAction() PreferencesDialog.checkCommit() PrefTable.addDialogListener(PreferencesDialog) AbstractButton.setEnabled(boolean) ThemeEditorDialog.checkCommit() ThemeData.isIdentical(ThemeData) AppearancePanel.AppearancePanel(PreferencesDialog) CustomizeDialog.initUI() TransferDestinationDialog.TransferDestinationDialog(MainFrame,...) ShortcutsPanel.ShortcutsPanel(PreferencesDialog) CommandBarDialog.createCustomizationPanel() CustomizeDialog.actionPerformed(ActionEvent) LicenseDialog.createLicensePanel() PrefComponent.hasChanged() QuitDialog.QuitDialog(MainFrame) InitialSetupDialog.InitialSetupDialog(Frame) AboutDialog.createCreditsPanel() Included in the goldset Not included in the goldset useful (original) relevant (original) relevant (refined) useful (refined) Finding 2:
  • 17. Votes and Goldset  Many votes to some modules out of the goldset – Including the ones mostly using refined description  Actually relevant? 20 e.addFoldStyleChooser() Gutter.Gutter(TextArea) Gutter.paintLine(Graphics2D,...) TriangleFoldPainter.paintFoldEnd(Gutter,...) TriangleFoldPainter.paintFoldStart(Gutter,...) GutterOptionPane._init() GutterOptionPane._save() TriangleFoldPainter.paintFoldMiddle(Gutter,...) EditPane.propertiesChanged() Gutter.setFoldPainter(FoldPainter) StandaloneTextArea.StandaloneTextArea(IPropertyManager) ShapedFoldPainter.paintFoldStart(Gutter,...) ShapedFoldPainter.paintFoldEnd(Gutter,...) FoldPainter.paintFoldStart(Gutter,...) FoldPainter.paintFoldEnd(Gutter,...) FoldPainter.paintFoldMiddle(Gutter,...) JEditTextArea.getFoldPainterName() JEditTextArea.getFoldPainter() TextArea.getFoldPainter() ServiceManager.getServiceNames(String) AbstractOptionPane.save() DummyFoldHandler.DummyFoldHandler() ExplicitFoldHandler.ExplicitFoldHandler() IndentFoldHandler.IndentFoldHandler() JEditBuffer.propertiesChanged() MouseHandler.mousePressed(MouseEvent) JEditTextArea.JEditTextArea(View) DefaultFoldHandlerProvider.DefaultFoldHandlerProvider() ExplicitFoldHandler.getFoldLevel(JEditBuffer,...) ServiceManager.getService(String,...) Gutter.updateBorder() CircleFoldPainter.CircleFoldPainter() Gutter.setBorder(Border) SquareFoldPainter.SquareFoldPainter() StandaloneTextArea.initPainter() TextAreaPainter.setFoldLineStyle(SyntaxStyle[]) TriangleFoldPainter.TriangleFoldPainter() CircleFoldPainter.paintFoldShape(Graphics2D,...) SquareFoldPainter.paintFoldShape(Graphics2D,...) ShapedFoldPainter.paintFoldMiddle(Gutter,...) Gutter.paintComponent(Graphics) MouseHandler.getFoldEndOffset(int) DefaultFoldHandlerProvider.addFoldHandler(FoldHandler) StandaloneTextArea.initGutter() ShapedFoldPainter.paintFoldShape(Graphics2D,...) JEditBuffer.JEditBuffer() DisplayManager.expandFolds(int) Gutter.setGutterEnabled(boolean) Included in the goldset Not included in the goldset PreferencesDialog.setCommitButtonsEnabled(boolean) GeneralPreferencesDialog.setCommitButtonsEnabled(boolean) PreferencesDialog.initUI() GeneralPreferencesDialog.componentChanged(PrefComponent) PreferencesDialog.commit() ThemeEditorDialog.componentChanged(PrefComponent) PrefTextField.addDialogListener(PreferencesDialog) PrefComboBox.addDialogListener(PreferencesDialog) GeneralPreferencesDialog.GeneralPreferencesDialog() PrefCheckBox.addDialogListener(PreferencesDialog) PrefRadioButton.addDialogListener(PreferencesDialog) ColorButton.setCurrentColor(Color,...) FoldersPanel.FoldersPanel(PreferencesDialog) GeneralPanel.GeneralPanel(PreferencesDialog) MailPanel.MailPanel(PreferencesDialog) MiscPanel.MiscPanel(PreferencesDialog) ThemeFontChooserListener.stateChanged(ChangeEvent) GeneralPreferencesDialog.commit() PreferencesDialog.actionPerformed(ActionEvent) PreferencesDialog.PreferencesDialog(Frame,...) PrefEncodingSelectBox.addDialogListener(PreferencesDialog) PreferencesDialog.PreferencesDialog(Dialog,...) ThemeEditorDialog.commit() PreferencesDialog.componentChanged(PrefComponent) ThemeEditorDialog.ThemeEditorDialog(Dialog,...) ShowPreferencesAction.performAction() PreferencesDialog.checkCommit() PrefTable.addDialogListener(PreferencesDialog) AbstractButton.setEnabled(boolean) ThemeEditorDialog.checkCommit() ThemeData.isIdentical(ThemeData) AppearancePanel.AppearancePanel(PreferencesDialog) CustomizeDialog.initUI() TransferDestinationDialog.TransferDestinationDialog(MainFrame,...) ShortcutsPanel.ShortcutsPanel(PreferencesDialog) CommandBarDialog.createCustomizationPanel() CustomizeDialog.actionPerformed(ActionEvent) LicenseDialog.createLicensePanel() PrefComponent.hasChanged() QuitDialog.QuitDialog(MainFrame) InitialSetupDialog.InitialSetupDialog(Frame) AboutDialog.createCreditsPanel() Included in the goldset Not included in the goldset useful (original) relevant (original) relevant (refined) useful (refined) Finding 3:
  • 18. Further Directions  More investigations about descriptions  Fuzzy benchmark – Likelihood values are added based on votes  Support for writing clearer descriptions 22 • PreferenecsDialog.initUI():0.7 (7 of 10 developers answered relevant) ... List of modules fragile against changes Abstract description insufficient to recognize ?