Current precision and recall

June 30, 2026 ยท View on GitHub

Java Benchmark 1

Source: Nikolaos Tsantalis, Ameya Ketkar, and Danny Dig, "RefactoringMiner 2.0," IEEE Transactions on Software Engineering, vol. 48, no. 3, pp. 930-950, March 2022.

Properties: 547 commits from 188 open-source projects

Commit dates: between June 8th and August 7th, 2015

File: data.json

The original benchmark has been extended by adding newly supported refactoring types by RefactoringMiner. As of June 29, 2026 the precision and recall of RefactoringMiner on this benchmark is:

Refactoring TypeTPFPFNPrecisionRecall
Total12706132110.9990.984
Extract Method10201200.9990.981
Rename Class56021.0000.966
Move Attribute260081.0000.970
Move And Rename Attribute12001.0001.000
Replace Attribute1001.0001.000
Rename Method4062190.9950.955
Inline Method120011.0000.992
Move Method391350.9920.987
Move And Rename Method131041.0000.970
Pull Up Method287051.0000.983
Move Class1095041.0000.996
Move And Rename Class38011.0000.974
Move Source Folder3001.0001.000
Pull Up Attribute147011.0000.993
Push Down Attribute35001.0001.000
Push Down Method47001.0001.000
Extract Interface22001.0001.000
Extract Superclass76001.0001.000
Extract Subclass4001.0001.000
Extract Class109001.0001.000
Extract And Move Method1350591.0000.696
Move And Inline Method12041.0000.750
Replace Anonymous With Class8001.0001.000
Rename Package16001.0001.000
Move Package10001.0001.000
Extract Variable327001.0001.000
Extract Attribute32001.0001.000
Inline Variable147001.0001.000
Inline Attribute9001.0001.000
Rename Variable3482110.9940.969
Rename Parameter5112240.9960.955
Rename Attribute149081.0000.949
Merge Variable6001.0001.000
Merge Parameter28001.0001.000
Merge Attribute5001.0001.000
Split Parameter7001.0001.000
Split Attribute2001.0001.000
Replace Variable With Attribute127001.0001.000
Replace Attribute With Variable32011.0000.970
Parameterize Variable117001.0001.000
Localize Parameter31001.0001.000
Parameterize Attribute25001.0001.000
Change Return Type4450121.0000.974
Change Variable Type818170.9990.992
Change Parameter Type6621100.9980.985
Change Attribute Type246031.0000.988
Add Method Annotation329001.0001.000
Remove Method Annotation81001.0001.000
Modify Method Annotation29001.0001.000
Add Attribute Annotation62011.0000.984
Remove Attribute Annotation18001.0001.000
Modify Attribute Annotation7001.0001.000
Add Class Annotation49001.0001.000
Remove Class Annotation19001.0001.000
Modify Class Annotation35001.0001.000
Add Parameter Annotation34001.0001.000
Remove Parameter Annotation4001.0001.000
Modify Parameter Annotation2001.0001.000
Add Parameter859110.9990.999
Remove Parameter329001.0001.000
Reorder Parameter9001.0001.000
Add Variable Annotation2001.0001.000
Remove Variable Annotation4001.0001.000
Add Thrown Exception Type40001.0001.000
Remove Thrown Exception Type273001.0001.000
Change Thrown Exception Type9001.0001.000
Change Method Access Modifier336001.0001.000
Change Attribute Access Modifier234001.0001.000
Encapsulate Attribute53001.0001.000
Add Method Modifier90001.0001.000
Remove Method Modifier112001.0001.000
Add Attribute Modifier142001.0001.000
Remove Attribute Modifier143001.0001.000
Add Variable Modifier135001.0001.000
Add Parameter Modifier134001.0001.000
Remove Variable Modifier68001.0001.000
Remove Parameter Modifier41001.0001.000
Change Class Access Modifier78001.0001.000
Add Class Modifier37001.0001.000
Remove Class Modifier45001.0001.000
Split Package4001.0001.000
Merge Package2001.0001.000
Change Type Declaration Kind6001.0001.000
Collapse Hierarchy1001.0001.000
Replace Loop With Pipeline36001.0001.000
Replace Pipeline With Loop2001.0001.000
Replace Anonymous With Lambda45001.0001.000
Merge Class5001.0001.000
Split Class3001.0001.000
Split Conditional19001.0001.000
Invert Condition50001.0001.000
Merge Conditional14001.0001.000
Merge Catch2001.0001.000
Merge Method3001.0001.000
Split Method6001.0001.000
Move Code23001.0001.000
Assert Throws14001.0001.000
Try With Resources4001.0001.000
Replace Generic With Diamond77001.0001.000
Replace Conditional With Ternary8001.0001.000
Extract Fixture3001.0001.000
Move Annotation22001.0001.000

Java Benchmark 2

Source: Bo Liu, Hui Liu, Nan Niu, Yuxia Zhang, Guangjie Li, He Jiang, and Yanjie Jiang, "An Automated Approach to Discovering Software Refactorings by Comparing Successive Versions," IEEE Transactions on Software Engineering, 2025.

Properties: 400 commits from 20 open-source projects (20 commits per project)

Commit dates: March 28, 2024 or newer

Files: tse-dataset

The original benchmark has been re-validated and corrected by Nikolaos Tsantalis. The validation process is still in progress. Moreover, the benchmark has been extended with valid instances for the following refactoring types:

  • Replace Variable With Attribute
  • Replace Attribute With Variable
  • Extract Attribute
  • Change Type Declaration Kind
  • Replace Pipeline With Loop
  • Replace Loop With Pipeline
  • Merge Method
  • Split Method
  • Replace Anonymous With Class
  • Move Code
  • Split Class
  • Merge Variable
  • Merge Parameter
  • Invert Condition

As of June 29, 2026 the precision and recall of RefactoringMiner on this benchmark is:

Refactoring TypeTPFPFNPrecisionRecall
Total355240750.9890.979
Extract Method375140.9970.989
Rename Class233011.0000.996
Move Attribute72071.0000.911
Move And Rename Attribute7011.0000.875
Rename Method300750.9770.984
Inline Method70320.9590.972
Move Method266100.9961.000
Move And Rename Method26300.8971.000
Pull Up Method47001.0001.000
Move Class144110.9930.993
Move And Rename Class28001.0001.000
Pull Up Attribute12001.0001.000
Push Down Attribute6001.0001.000
Push Down Method22001.0001.000
Extract Interface16200.8891.000
Extract Superclass8001.0001.000
Extract Subclass8001.0001.000
Extract Class45140.9780.918
Extract And Move Method131150.9920.963
Move And Inline Method28160.9660.824
Replace Anonymous With Class5001.0001.000
Extract Variable293160.9970.980
Extract Attribute7001.0001.000
Inline Variable1260101.0000.926
Rename Variable309560.9840.981
Rename Attribute112460.9660.949
Merge Variable4001.0001.000
Merge Parameter11001.0001.000
Replace Variable With Attribute11001.0001.000
Replace Attribute With Variable59001.0001.000
Change Return Type169160.9940.966
Change Variable Type380620.9840.995
Change Attribute Type164230.9880.982
Change Type Declaration Kind4001.0001.000
Replace Loop With Pipeline4001.0001.000
Replace Pipeline With Loop3001.0001.000
Split Class1001.0001.000
Invert Condition23001.0001.000
Merge Method1001.0001.000
Split Method8001.0001.000
Move Code11001.0001.000
Move Annotation3001.0001.000

Python Benchmark

Source: Hassan Atwi, Bin Lin, Nikolaos Tsantalis, Yutaro Kashiwa, Yasutaka Kamei, Naoyasu Ubayashi, Gabriele Bavota, and Michele Lanza, "PyRef: Refactoring Detection in Python Projects," 21st IEEE International Working Conference on Source Code Analysis and Manipulation (SCAM'2021), Engineering Track, Luxembourg City, Luxembourg, September 27-28, 2021.

Properties: 202 commits from 3 open-source projects

Commit dates: January 2013 - October 2020

File: python-dataset

The original benchmark has been re-validated by Nikolaos Tsantalis. The validation process is still in progress. Moreover, the benchmark has been extended with valid instances for the following refactoring types:

  • Rename Class
  • Move Class
  • Move And Rename Class
  • Rename Attribute
  • Move Attribute
  • Pull Up Attribute
  • Push Down Attribute
  • Move And Rename Method
  • Extract Class
  • Extract Superclass
  • Extract Subclass
  • Extract And Move Method
  • Rename Variable
  • Extract Variable
  • Inline Variable
  • Replace Variable With Attribute
  • Replace Attribute With Variable
  • Parameterize Variable
  • Localize Parameter
  • Parameterize Attribute
  • Change Variable Type
  • Add Method Annotation
  • Remove Method Annotation
  • Add Class Annotation
  • Reorder Parameter
  • Split Conditional
  • Move Code
  • Encapsulate Attribute
  • Invert Condition
  • Split Parameter

As of June 29, 2026 the precision and recall of RefactoringMiner on this benchmark is:

Refactoring TypeTPFPFNPrecisionRecall
Total1129430.9960.997
Extract Method38001.0001.000
Rename Class13001.0001.000
Move Attribute5001.0001.000
Rename Method140011.0000.993
Inline Method6001.0001.000
Move Method22001.0001.000
Move And Rename Method9001.0001.000
Pull Up Method9001.0001.000
Move Class13001.0001.000
Move And Rename Class10001.0001.000
Pull Up Attribute4001.0001.000
Push Down Attribute1001.0001.000
Push Down Method3001.0001.000
Extract Superclass4001.0001.000
Extract Subclass2001.0001.000
Extract Class3001.0001.000
Extract And Move Method15001.0001.000
Extract Variable59100.9831.000
Inline Variable21001.0001.000
Rename Variable120011.0000.992
Rename Parameter139100.9931.000
Rename Attribute28001.0001.000
Split Parameter3001.0001.000
Replace Variable With Attribute1001.0001.000
Replace Attribute With Variable3001.0001.000
Parameterize Variable12001.0001.000
Localize Parameter9001.0001.000
Parameterize Attribute1001.0001.000
Change Variable Type26200.9291.000
Add Method Annotation26001.0001.000
Remove Method Annotation19001.0001.000
Add Class Annotation1001.0001.000
Add Parameter251011.0000.996
Remove Parameter78001.0001.000
Reorder Parameter18001.0001.000
Encapsulate Attribute3001.0001.000
Split Conditional3001.0001.000
Invert Condition2001.0001.000
Move Code9001.0001.000

Important notes: Commit asyml/texar@36f4b18 has been skipped due to a parsing error, i.e., a missing comma after parameter w_ppl=1. of function append in file examples/tsf/stats.py

def append(self, loss, g, ppl, d, d0, d1,
             w_loss=1., w_g=1., w_ppl=1. w_d=1, w_d0=1., w_d1=1.):

Python commits may not always be syntactically valid, leading to parsing errors. Make sure to consult the System.error logs printed by the tool for parsing errors, as commits with parsing errors may include incorrect refactoring information.

Kotlin Benchmark

Source: Iman Hemati Moghadam, Mohammad Mehdi Afkhami, Parsa Kamalipour, and Vadim Zaytsev, "Extending Refactoring Detection to Kotlin: A Dataset and Comparative Study," 2024 IEEE International Conference on Software Analysis, Evolution and Reengineering (SANER), Rovaniemi, Finland, 2024, pp. 267-271, doi: 10.1109/SANER60148.2024.00034

Properties: 63 commits from 3 open-source projects

File: kotlin-dataset

As of June 29, 2026 the precision and recall of RefactoringMiner on this benchmark is:

Refactoring TypeTPFPFNPrecisionRecall
Total2044500.9981.000
Extract Method11001.0001.000
Rename Class43001.0001.000
Move Attribute53001.0001.000
Move And Rename Attribute2001.0001.000
Rename Method137001.0001.000
Inline Method15001.0001.000
Move Method91001.0001.000
Move And Rename Method8001.0001.000
Pull Up Method46001.0001.000
Move Class179001.0001.000
Move And Rename Class15001.0001.000
Pull Up Attribute17001.0001.000
Push Down Attribute4001.0001.000
Push Down Method15001.0001.000
Extract Interface5001.0001.000
Extract Superclass9001.0001.000
Extract Subclass2001.0001.000
Extract Class13001.0001.000
Extract And Move Method23100.9581.000
Move And Inline Method25001.0001.000
Rename Package3001.0001.000
Move Package5001.0001.000
Extract Variable18001.0001.000
Inline Variable14100.9331.000
Inline Attribute3001.0001.000
Rename Variable53100.9811.000
Rename Parameter77001.0001.000
Rename Attribute75100.9871.000
Merge Parameter1001.0001.000
Split Parameter1001.0001.000
Replace Variable With Attribute3001.0001.000
Replace Attribute With Variable2001.0001.000
Parameterize Variable5001.0001.000
Localize Parameter7001.0001.000
Parameterize Attribute1001.0001.000
Change Return Type118001.0001.000
Change Variable Type136001.0001.000
Change Parameter Type150001.0001.000
Change Attribute Type69100.9861.000
Add Method Annotation24001.0001.000
Remove Method Annotation14001.0001.000
Add Attribute Annotation11001.0001.000
Remove Attribute Annotation5001.0001.000
Add Class Annotation21001.0001.000
Remove Class Annotation7001.0001.000
Add Parameter Annotation1001.0001.000
Remove Parameter Annotation2001.0001.000
Add Parameter144001.0001.000
Remove Parameter111001.0001.000
Reorder Parameter2001.0001.000
Remove Variable Annotation1001.0001.000
Remove Thrown Exception Type34001.0001.000
Change Method Access Modifier51001.0001.000
Change Attribute Access Modifier81001.0001.000
Encapsulate Attribute1001.0001.000
Remove Method Modifier1001.0001.000
Remove Variable Modifier10001.0001.000
Change Class Access Modifier31001.0001.000
Add Class Modifier7001.0001.000
Remove Class Modifier1001.0001.000
Change Type Declaration Kind12001.0001.000
Replace Loop With Pipeline9001.0001.000
Merge Class1001.0001.000
Invert Condition2001.0001.000
Merge Conditional2001.0001.000
Move Code4001.0001.000