SlideShare a Scribd company logo
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

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 variabilityRa'Fat Al-Msie'deen
 
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 GMURaffi Khatchadourian
 
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-13Coen De Roover
 
Aspect-Oriented Programming and Depedency Injection
Aspect-Oriented Programming and Depedency InjectionAspect-Oriented Programming and Depedency Injection
Aspect-Oriented Programming and Depedency InjectionRobert Lemke
 
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 SearchShinpei Hayashi
 
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...Coen De Roover
 
Chapter 9 & chapter 10 solutions
Chapter 9 & chapter 10 solutionsChapter 9 & chapter 10 solutions
Chapter 9 & chapter 10 solutionsSaeed Iqbal
 
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 MethodsRaffi Khatchadourian
 
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...Raffi Khatchadourian
 
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_07Niit Care
 
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...Make Mannan
 
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 LanguageWongyos Keardsri
 
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 TransformationCoen De Roover
 
45 aop-programming
45 aop-programming45 aop-programming
45 aop-programmingdaotuan85
 
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 InterfacesRaffi Khatchadourian
 
Javainterview
JavainterviewJavainterview
JavainterviewAmarjit03
 
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...Raffi Khatchadourian
 

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

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 SatisfactionShinpei Hayashi
 
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 AnalysisShinpei Hayashi
 
Refactoring Edit History of Source Code
Refactoring Edit History of Source CodeRefactoring Edit History of Source Code
Refactoring Edit History of Source CodeShinpei Hayashi
 
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 AnalysisHiroshi Kazato
 
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 RequirementsShinpei Hayashi
 
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 GQMShinpei Hayashi
 
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 ...Shinpei Hayashi
 
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 CodeHiroshi Kazato
 
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 OntologiesShinpei Hayashi
 
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 RefactoringShinpei Hayashi
 
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 EffectsShinpei Hayashi
 
FOSE2010 ミニチュートリアル 「データマイニング技術を応用したソフトウェア構築・保守支援」
FOSE2010 ミニチュートリアル 「データマイニング技術を応用したソフトウェア構築・保守支援」FOSE2010 ミニチュートリアル 「データマイニング技術を応用したソフトウェア構築・保守支援」
FOSE2010 ミニチュートリアル 「データマイニング技術を応用したソフトウェア構築・保守支援」Takashi Kobayashi
 

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

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)Ovidiu Farauanu
 
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_argumentsRuth Marvin
 
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 LinuxJITENDRA LENKA
 
OORPT Dynamic Analysis
OORPT Dynamic AnalysisOORPT Dynamic Analysis
OORPT Dynamic Analysislienhard
 
Functional Programming in JavaScript & ESNext
Functional Programming in JavaScript & ESNextFunctional Programming in JavaScript & ESNext
Functional Programming in JavaScript & ESNextUnfold UI
 
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 Languagesfranciscoortin
 
JavaDiff - Java source code diff tool
JavaDiff - Java source code diff toolJavaDiff - Java source code diff tool
JavaDiff - Java source code diff toolEnrico Micco
 
object oriented programming part inheritance.pptx
object oriented programming part inheritance.pptxobject oriented programming part inheritance.pptx
object oriented programming part inheritance.pptxurvashipundir04
 
Interoduction to c++
Interoduction to c++Interoduction to c++
Interoduction to c++Amresh Raj
 
Terraform modules restructured
Terraform modules restructuredTerraform modules restructured
Terraform modules restructuredAmi Mahloof
 
Terraform Modules Restructured
Terraform Modules RestructuredTerraform Modules Restructured
Terraform Modules RestructuredDoiT International
 
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 McCabeIMGS
 
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-1Tekendra Nath Yogi
 
Example Of Import Java
Example Of Import JavaExample Of Import Java
Example Of Import JavaMelody Rios
 
Nt1310 Unit 3 Language Analysis
Nt1310 Unit 3 Language AnalysisNt1310 Unit 3 Language Analysis
Nt1310 Unit 3 Language AnalysisNicole 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_ivNico Ludwig
 
Chapter One Function.pptx
Chapter One Function.pptxChapter One Function.pptx
Chapter One Function.pptxmiki304759
 
chapter 1 software design.pptx
chapter 1 software design.pptxchapter 1 software design.pptx
chapter 1 software design.pptxrecoveraccount1
 

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

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 RecommendationShinpei Hayashi
 
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 LocalizationShinpei Hayashi
 
RefactorHub: A Commit Annotator for Refactoring
RefactorHub: A Commit Annotator for RefactoringRefactorHub: A Commit Annotator for Refactoring
RefactorHub: A Commit Annotator for RefactoringShinpei Hayashi
 
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?Shinpei Hayashi
 
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 SlicingShinpei Hayashi
 
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 CodeShinpei Hayashi
 
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 MVC2Shinpei Hayashi
 
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 AnalysisShinpei Hayashi
 
ソフトウェア工学勉強会への誘い
ソフトウェア工学勉強会への誘いソフトウェア工学勉強会への誘い
ソフトウェア工学勉強会への誘い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

FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...Product School
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...Product School
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Product School
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlPeter Udo Diehl
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Product School
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...Product School
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupCatarinaPereira64715
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesThousandEyes
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Alison B. Lowndes
 
НАДІЯ ФЕДЮШКО БАЦ «Професійне зростання QA спеціаліста»
НАДІЯ ФЕДЮШКО БАЦ  «Професійне зростання QA спеціаліста»НАДІЯ ФЕДЮШКО БАЦ  «Професійне зростання QA спеціаліста»
НАДІЯ ФЕДЮШКО БАЦ «Професійне зростання QA спеціаліста»QADay
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
 
КАТЕРИНА АБЗЯТОВА «Ефективне планування тестування ключові аспекти та практ...
КАТЕРИНА АБЗЯТОВА  «Ефективне планування тестування  ключові аспекти та практ...КАТЕРИНА АБЗЯТОВА  «Ефективне планування тестування  ключові аспекти та практ...
КАТЕРИНА АБЗЯТОВА «Ефективне планування тестування ключові аспекти та практ...QADay
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
 

Recently uploaded (20)

FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
НАДІЯ ФЕДЮШКО БАЦ «Професійне зростання QA спеціаліста»
НАДІЯ ФЕДЮШКО БАЦ  «Професійне зростання QA спеціаліста»НАДІЯ ФЕДЮШКО БАЦ  «Професійне зростання QA спеціаліста»
НАДІЯ ФЕДЮШКО БАЦ «Професійне зростання QA спеціаліста»
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
КАТЕРИНА АБЗЯТОВА «Ефективне планування тестування ключові аспекти та практ...
КАТЕРИНА АБЗЯТОВА  «Ефективне планування тестування  ключові аспекти та практ...КАТЕРИНА АБЗЯТОВА  «Ефективне планування тестування  ключові аспекти та практ...
КАТЕРИНА АБЗЯТОВА «Ефективне планування тестування ключові аспекти та практ...
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.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 ?