SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
Automatic Identification of Bug-
    Introducing Changes
   Kim, Zimmermann, Pan, Whitehead

                                            Presented By**:
                              Arnamoy Bhattacharyya
                                     University of Alberta




                   **some slides are taken from the presentation of Nicolas Bettenburg
Control Development

Multi User Access

 Change History


   Capture Problems
   Multi User Access

   Error History
Bug Report #5612 reports an error

Error fixed in version 0.13


Commit Message in 0.13 : "Fixed Bug #5612"
Finding changes that have repaired a bug


searching for keywords such as "Fixed" or "Bug"



                       searching for references to bug reports
                       like “#42233”
when?




        who?
1: public void bar() {     1: public void foo() {   1: public void foo() {
2: // print report         2: // print report       2: // print out report
3: if (report == null) {   3: if (report == null)   3: if (report != null)
4: println(report);        4: {                     4: {
5:      }                  5: println(report);      5: println(report);
6: }                       6: }                     6: }
                           7: }                     7. }


Revision 0.11              Revision 0.12            Revision 0.13
1: public void bar() {             1: public void foo() {      1: public void foo() {
2: // print report                 2: // print report          2: // print out report
3: if (report == null) {           3: if (report == null)      3: if (report != null)
4: println(report);                4: {                        4: {
5:                                 5: println(report);         5: println(report);
6: }                               6:      }                   6: }
                                   7: }


Revision 0.11                      Revision 0.12               Revision 0.13




                           Running diff tool between 0.12 and 0.13
1: public void bar() {       0.12 sam 1: public void foo() {     public void foo() {
2: // print report           0.11 kim 2: // print report         // print out report
3: if (report == null) {     0.12 sam 3: if (report == null)     3: if (report != null)
4: println(report);          0.12 sam 4: {                       4: {
5:      }                    0.11 kim 5: println(report);        5: println(report);
6: }                         0.11 kim 6:     }                   6: }
                             0.11 kim 7: }                       7: }
Revision 0.11                Revision 0.12                     Revision 0.13




                      $ cvs annotate –r 0.12 Foo.java
1: public void bar() {     0.12 sam 1: public void foo() {     public void foo() {
2: // print report         0.11 kim 2: // print report         // print out report
3: if (report == null) {   0.12 sam 3: if (report == null)     3: if (report != null)
4: println(report);        0.12 sam 4: {                       4: {
5:      }                  0.11 kim 5: println(report);        5: println(report);
6: }                       0.11 kim 6:     }                   6: }
                           0.11 kim 7: }                       7: }
Revision 0.11              Revision 0.12                     Revision 0.13




                 Not                 Necessary                         Not
               Necessary            but WRONG                        Necessary
Use Annotation Graphs
1: public void bar() {     1: public void foo() {   1: public void foo() {
2: // print report         2: // print report       2: // print out report
3: if (report == null) {   3: if (report == null)   3: if (report != null)
4: println(report);        4: {                     4: {
5:}                        5: println(report);      5: println(report);
6: }                       6: }                     6: }
                           7: }                     7. }
Revision 0.11              Revision 0.12            Revision 0.13
1: public void bar() {     1: public void foo() {   1: public void foo() {
2: // print report         2: // print report       2: // print out report
3: if (report == null) {   3: if (report == null)   3: if (report != null)
4: println(report);        4: {                     4: {
5:                         5: println(report);      5: println(report);
6: }                       6: -----                 6: }
                           7: }
Revision 0.11              Revision 0.12            Revision 0.13




 Detect
 function name
                                                       Find Bug Inducing
 changes
                                                       Change
4.1. Using Annotation Graph




False Positive - Indicated as Bug Inducing Change but actually not

False Negative- NOT Indicated as Bug Inducing Change but
actually is one
4.2. Non Behavior Changes


           1. Comments
    2. Changes to source code format
                3. Addition/removal of blank lines




    1: public void bar() {       1: public void bar() {
    2: if (report == null) {     2: // print report Addition of comment
    3: println(report);          3: if (report == null)
    4: }                         4: {      Change of Source code format
                                 5: println(report);
                                 6:        Addition of Blank Lines
                                 7: }
Ignoring Blank Lines and Comments




       removes 14%~20% of false positives
Ignoring Source Code Format Changes




removes 18%~25% of false positives and 13%~14% of false
negatives.
4.4. Remove Fix Revision Outliers
most of the changes are method name and parameter name changes

       ignoring outlier revisions removes 7%~16% of false positives
possible that we are ignoring changes are real bug-fixes
4.5. Manual Fix Hunk Verification


            how many bug-fix hunks are true bug-fixes???
Not perfect BUT Close Enough!!
Train Data
Help HATARI
Automatic Identification of  bug inducing changes

Weitere ähnliche Inhalte

Was ist angesagt?

C lecture 4 nested loops and jumping statements slideshare
C lecture 4 nested loops and jumping statements slideshareC lecture 4 nested loops and jumping statements slideshare
C lecture 4 nested loops and jumping statements slideshareGagan Deep
 
Looping Statement And Flow Chart
 Looping Statement And Flow Chart Looping Statement And Flow Chart
Looping Statement And Flow ChartRahul Sahu
 
BOTTLE LINE SIMULLATION IN LOGIXPRO
BOTTLE LINE SIMULLATION IN LOGIXPROBOTTLE LINE SIMULLATION IN LOGIXPRO
BOTTLE LINE SIMULLATION IN LOGIXPROMohan Tangudu
 
Analyzing ReactOS One More Time
Analyzing ReactOS One More TimeAnalyzing ReactOS One More Time
Analyzing ReactOS One More TimePVS-Studio
 
Btech i pic u-3 handling input output and control statements
Btech i pic u-3 handling input output and control statementsBtech i pic u-3 handling input output and control statements
Btech i pic u-3 handling input output and control statementsRai University
 
Diploma ii cfpc u-3 handling input output and control statements
Diploma ii  cfpc u-3 handling input output and control statementsDiploma ii  cfpc u-3 handling input output and control statements
Diploma ii cfpc u-3 handling input output and control statementsRai University
 
1584503386 1st chap
1584503386 1st chap1584503386 1st chap
1584503386 1st chapthuhiendtk4
 
Microcontroller lec 3
Microcontroller  lec 3Microcontroller  lec 3
Microcontroller lec 3Ibrahim Reda
 
Mca i pic u-3 handling input output and control statements
Mca i pic u-3 handling input output and control statementsMca i pic u-3 handling input output and control statements
Mca i pic u-3 handling input output and control statementsRai University
 
Control and conditional statements
Control and conditional statementsControl and conditional statements
Control and conditional statementsrajshreemuthiah
 
Bsc cs pic u-3 handling input output and control statements
Bsc cs  pic u-3 handling input output and control statementsBsc cs  pic u-3 handling input output and control statements
Bsc cs pic u-3 handling input output and control statementsRai University
 

Was ist angesagt? (17)

C lecture 4 nested loops and jumping statements slideshare
C lecture 4 nested loops and jumping statements slideshareC lecture 4 nested loops and jumping statements slideshare
C lecture 4 nested loops and jumping statements slideshare
 
Looping Statement And Flow Chart
 Looping Statement And Flow Chart Looping Statement And Flow Chart
Looping Statement And Flow Chart
 
Looping in c++
Looping in c++Looping in c++
Looping in c++
 
Looping
LoopingLooping
Looping
 
BOTTLE LINE SIMULLATION IN LOGIXPRO
BOTTLE LINE SIMULLATION IN LOGIXPROBOTTLE LINE SIMULLATION IN LOGIXPRO
BOTTLE LINE SIMULLATION IN LOGIXPRO
 
Analyzing ReactOS One More Time
Analyzing ReactOS One More TimeAnalyzing ReactOS One More Time
Analyzing ReactOS One More Time
 
Btech i pic u-3 handling input output and control statements
Btech i pic u-3 handling input output and control statementsBtech i pic u-3 handling input output and control statements
Btech i pic u-3 handling input output and control statements
 
Diploma ii cfpc u-3 handling input output and control statements
Diploma ii  cfpc u-3 handling input output and control statementsDiploma ii  cfpc u-3 handling input output and control statements
Diploma ii cfpc u-3 handling input output and control statements
 
1584503386 1st chap
1584503386 1st chap1584503386 1st chap
1584503386 1st chap
 
Microcontroller lec 3
Microcontroller  lec 3Microcontroller  lec 3
Microcontroller lec 3
 
Control statements
Control statementsControl statements
Control statements
 
Controls & Loops in C
Controls & Loops in C Controls & Loops in C
Controls & Loops in C
 
Loop c++
Loop c++Loop c++
Loop c++
 
Mca i pic u-3 handling input output and control statements
Mca i pic u-3 handling input output and control statementsMca i pic u-3 handling input output and control statements
Mca i pic u-3 handling input output and control statements
 
Control and conditional statements
Control and conditional statementsControl and conditional statements
Control and conditional statements
 
7 stacksqueues
7 stacksqueues7 stacksqueues
7 stacksqueues
 
Bsc cs pic u-3 handling input output and control statements
Bsc cs  pic u-3 handling input output and control statementsBsc cs  pic u-3 handling input output and control statements
Bsc cs pic u-3 handling input output and control statements
 

Andere mochten auch

664 eclipse plugin
664 eclipse plugin664 eclipse plugin
664 eclipse pluginarnamoy10
 
Stiltemoment 16/03/2012
Stiltemoment 16/03/2012Stiltemoment 16/03/2012
Stiltemoment 16/03/2012vbeb
 
Mining Email Social Networks
Mining Email Social NetworksMining Email Social Networks
Mining Email Social Networksarnamoy10
 
Online Scams: How To Avoid Getting Fooled
Online Scams: How To Avoid Getting FooledOnline Scams: How To Avoid Getting Fooled
Online Scams: How To Avoid Getting Fooledlmccorkell
 
Stream Processing
Stream ProcessingStream Processing
Stream Processingarnamoy10
 
Big data architectures
Big data architecturesBig data architectures
Big data architecturesDaan Gerits
 
Start small bigger biggest
Start small bigger biggestStart small bigger biggest
Start small bigger biggestDaan Gerits
 
Big data, why care
Big data, why careBig data, why care
Big data, why careDaan Gerits
 
BigBoards.io Strata Ignite
BigBoards.io Strata IgniteBigBoards.io Strata Ignite
BigBoards.io Strata IgniteDaan Gerits
 
(340)radicalismo evanescente vs centralidad economica
(340)radicalismo evanescente vs centralidad economica(340)radicalismo evanescente vs centralidad economica
(340)radicalismo evanescente vs centralidad economicaManfredNolte
 
Big Data BluePrint
Big Data BluePrintBig Data BluePrint
Big Data BluePrintDaan Gerits
 
(327)long porque ha ganado donald trump
(327)long porque ha ganado donald trump(327)long porque ha ganado donald trump
(327)long porque ha ganado donald trumpManfredNolte
 

Andere mochten auch (13)

664 eclipse plugin
664 eclipse plugin664 eclipse plugin
664 eclipse plugin
 
Stiltemoment 16/03/2012
Stiltemoment 16/03/2012Stiltemoment 16/03/2012
Stiltemoment 16/03/2012
 
Mining Email Social Networks
Mining Email Social NetworksMining Email Social Networks
Mining Email Social Networks
 
Online Scams: How To Avoid Getting Fooled
Online Scams: How To Avoid Getting FooledOnline Scams: How To Avoid Getting Fooled
Online Scams: How To Avoid Getting Fooled
 
Stream Processing
Stream ProcessingStream Processing
Stream Processing
 
Big data architectures
Big data architecturesBig data architectures
Big data architectures
 
IoT and BigData
IoT and BigDataIoT and BigData
IoT and BigData
 
Start small bigger biggest
Start small bigger biggestStart small bigger biggest
Start small bigger biggest
 
Big data, why care
Big data, why careBig data, why care
Big data, why care
 
BigBoards.io Strata Ignite
BigBoards.io Strata IgniteBigBoards.io Strata Ignite
BigBoards.io Strata Ignite
 
(340)radicalismo evanescente vs centralidad economica
(340)radicalismo evanescente vs centralidad economica(340)radicalismo evanescente vs centralidad economica
(340)radicalismo evanescente vs centralidad economica
 
Big Data BluePrint
Big Data BluePrintBig Data BluePrint
Big Data BluePrint
 
(327)long porque ha ganado donald trump
(327)long porque ha ganado donald trump(327)long porque ha ganado donald trump
(327)long porque ha ganado donald trump
 

Kürzlich hochgeladen

CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
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...Martijn de Jong
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 

Kürzlich hochgeladen (20)

CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
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...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 

Automatic Identification of bug inducing changes

  • 1. Automatic Identification of Bug- Introducing Changes Kim, Zimmermann, Pan, Whitehead Presented By**: Arnamoy Bhattacharyya University of Alberta **some slides are taken from the presentation of Nicolas Bettenburg
  • 2.
  • 3. Control Development Multi User Access Change History Capture Problems Multi User Access Error History
  • 4.
  • 5. Bug Report #5612 reports an error Error fixed in version 0.13 Commit Message in 0.13 : "Fixed Bug #5612"
  • 6. Finding changes that have repaired a bug searching for keywords such as "Fixed" or "Bug" searching for references to bug reports like “#42233”
  • 7. when? who?
  • 8.
  • 9.
  • 10. 1: public void bar() { 1: public void foo() { 1: public void foo() { 2: // print report 2: // print report 2: // print out report 3: if (report == null) { 3: if (report == null) 3: if (report != null) 4: println(report); 4: { 4: { 5: } 5: println(report); 5: println(report); 6: } 6: } 6: } 7: } 7. } Revision 0.11 Revision 0.12 Revision 0.13
  • 11. 1: public void bar() { 1: public void foo() { 1: public void foo() { 2: // print report 2: // print report 2: // print out report 3: if (report == null) { 3: if (report == null) 3: if (report != null) 4: println(report); 4: { 4: { 5: 5: println(report); 5: println(report); 6: } 6: } 6: } 7: } Revision 0.11 Revision 0.12 Revision 0.13 Running diff tool between 0.12 and 0.13
  • 12. 1: public void bar() { 0.12 sam 1: public void foo() { public void foo() { 2: // print report 0.11 kim 2: // print report // print out report 3: if (report == null) { 0.12 sam 3: if (report == null) 3: if (report != null) 4: println(report); 0.12 sam 4: { 4: { 5: } 0.11 kim 5: println(report); 5: println(report); 6: } 0.11 kim 6: } 6: } 0.11 kim 7: } 7: } Revision 0.11 Revision 0.12 Revision 0.13 $ cvs annotate –r 0.12 Foo.java
  • 13. 1: public void bar() { 0.12 sam 1: public void foo() { public void foo() { 2: // print report 0.11 kim 2: // print report // print out report 3: if (report == null) { 0.12 sam 3: if (report == null) 3: if (report != null) 4: println(report); 0.12 sam 4: { 4: { 5: } 0.11 kim 5: println(report); 5: println(report); 6: } 0.11 kim 6: } 6: } 0.11 kim 7: } 7: } Revision 0.11 Revision 0.12 Revision 0.13 Not Necessary Not Necessary but WRONG Necessary
  • 14.
  • 16. 1: public void bar() { 1: public void foo() { 1: public void foo() { 2: // print report 2: // print report 2: // print out report 3: if (report == null) { 3: if (report == null) 3: if (report != null) 4: println(report); 4: { 4: { 5:} 5: println(report); 5: println(report); 6: } 6: } 6: } 7: } 7. } Revision 0.11 Revision 0.12 Revision 0.13
  • 17. 1: public void bar() { 1: public void foo() { 1: public void foo() { 2: // print report 2: // print report 2: // print out report 3: if (report == null) { 3: if (report == null) 3: if (report != null) 4: println(report); 4: { 4: { 5: 5: println(report); 5: println(report); 6: } 6: ----- 6: } 7: } Revision 0.11 Revision 0.12 Revision 0.13 Detect function name Find Bug Inducing changes Change
  • 18.
  • 19. 4.1. Using Annotation Graph False Positive - Indicated as Bug Inducing Change but actually not False Negative- NOT Indicated as Bug Inducing Change but actually is one
  • 20. 4.2. Non Behavior Changes 1. Comments 2. Changes to source code format 3. Addition/removal of blank lines 1: public void bar() { 1: public void bar() { 2: if (report == null) { 2: // print report Addition of comment 3: println(report); 3: if (report == null) 4: } 4: { Change of Source code format 5: println(report); 6: Addition of Blank Lines 7: }
  • 21. Ignoring Blank Lines and Comments removes 14%~20% of false positives
  • 22. Ignoring Source Code Format Changes removes 18%~25% of false positives and 13%~14% of false negatives.
  • 23. 4.4. Remove Fix Revision Outliers
  • 24. most of the changes are method name and parameter name changes ignoring outlier revisions removes 7%~16% of false positives
  • 25. possible that we are ignoring changes are real bug-fixes
  • 26. 4.5. Manual Fix Hunk Verification how many bug-fix hunks are true bug-fixes???
  • 27.
  • 28. Not perfect BUT Close Enough!!
  • 29.
  • 30.
  • 31.