SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

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
 

Tendances (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
 

En vedette

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
 

En vedette (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
 

Dernier

[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
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
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
"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
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
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
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
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
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
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
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 

Dernier (20)

[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
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
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
"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 ...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
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
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
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
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
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
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 

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.