skip to main content
research-article

Toward Better Evolutionary Program Repair: An Integrated Approach

Published:30 January 2020Publication History
Skip Abstract Section

Abstract

Bug repair is a major component of software maintenance, which requires a huge amount of manpower. Evolutionary computation, particularly genetic programming (GP), is a class of promising techniques for automating this time-consuming and expensive process. Although recent research in evolutionary program repair has made significant progress, major challenges still remain. In this article, we propose ARJA-e, a new evolutionary repair system for Java code that aims to address challenges for the search space, search algorithm, and patch overfitting. To determine a search space that is more likely to contain correct patches, ARJA-e combines two sources of fix ingredients (i.e., the statement-level redundancy assumption and repair templates) with contextual analysis-based search space reduction, thereby leveraging their complementary strengths. To encode patches in GP more properly, ARJA-e unifies the edits at different granularities into statement-level edits and then uses a lower-granularity patch representation that is characterized by the decoupling of statements for replacement and statements for insertion. ARJA-e also uses a finer-grained fitness function that can make full use of semantic information contained in the test suite, which is expected to better guide the search of GP. To alleviate patch overfitting, ARJA-e further includes a postprocessing tool that can serve the purposes of overfit detection and patch ranking. We evaluate ARJA-e on 224 real Java bugs from Defects4J and compare it with the state-of-the-art repair techniques. The evaluation results show that ARJA-e can correctly fix 39 bugs in terms of the patches ranked first, achieving substantial performance improvements over the state of the art. In addition, we analyze the effect of the components of ARJA-e qualitatively and quantitatively to demonstrate their effectiveness and advantages.

References

  1. Rui Abreu, Peter Zoeteweij, and Arjan J. C. Van Gemund. 2006. An evaluation of similarity coefficients for software fault localization. In Proceedings of the 12th Pacific Rim International Symposium on Dependable Computing. IEEE, 39--46.Google ScholarGoogle Scholar
  2. Thomas Ackling, Bradley Alexander, and Ian Grunert. 2011. Evolving patches for software repair. In Proceedings of the 13th Annual Conference on Genetic and Evolutionary Computation. ACM, 1427--1434.Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. Andrea Arcuri. 2010. It does matter how you normalise the branch distance in search based software testing. In Proceedings of the 3rd International Conference on Software Testing, Verification and Validation. IEEE, 205--214.Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. Andrea Arcuri. 2011. Evolutionary repair of faulty software. Applied Soft Computing 11, 4 (2011), 3494--3514.Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. Andrea Arcuri and Lionel Briand. 2011. A practical guide for using statistical tests to assess randomized algorithms in software engineering. In Proceedings of the 33rd International Conference on Software Engineering. IEEE, 1--10.Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. Andrea Arcuri and Xin Yao. 2008. A novel co-evolutionary approach to automatic software bug fixing. In Proceedings of the 2008 IEEE Congress on Evolutionary Computation. IEEE, 162--168.Google ScholarGoogle ScholarCross RefCross Ref
  7. Fatmah Yousef Assiri and James M. Bieman. 2017. Fault localization for automated program repair: Effectiveness, performance, repair correctness. Software Quality Journal 25, 1 (2017), 171--199.Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. Wolfgang Banzhaf, Peter Nordin, Robert E. Keller, and Frank D. Francone. 1998. Genetic Programming: An Introduction. Vol. 1. Morgan Kaufmann, San Francisco.Google ScholarGoogle Scholar
  9. Earl T. Barr, Yuriy Brun, Premkumar Devanbu, Mark Harman, and Federica Sarro. 2014. The plastic surgery hypothesis. In Proceedings of the 22nd International Symposium on Foundations of Software Engineering. ACM, 306--317.Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. Marcel Böhme, Ezekiel O. Soremekun, Sudipta Chattopadhyay, Emamurho Ugherughe, and Andreas Zeller. 2017. Where is the bug and how is it fixed? an experiment with practitioners. In Proceedings of the 11th Joint Meeting on Foundations of Software Engineering. ACM, 117--128.Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. Markus F. Brameier and Wolfgang Banzhaf. 2007. Linear Genetic Programming. Springer Science 8 Business Media.Google ScholarGoogle Scholar
  12. Eric Bruneton. 2011. ASM 4.0 A Java bytecode engineering library. Retrieved from https://asm.ow2.io/asm4-guide.pdf.Google ScholarGoogle Scholar
  13. Eduardo C. Campos and Marcelo A. Maia. 2017. Common bug-fix patterns: A large-scale observational study. In Proceedings of the 11th International Symposium on Empirical Software Engineering and Measurement. IEEE Press, 404--413.Google ScholarGoogle Scholar
  14. José Campos, André Riboira, Alexandre Perez, and Rui Abreu. 2012. GZoltar: An eclipse plug-in for testing and debugging. In Proceedings of the 27th IEEE/ACM International Conference on Automated Software Engineering. ACM, 378--381.Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. Liushan Chen, Yu Pei, and Carlo A. Furia. 2017. Contract-based program repair without the contracts. In Proceedings of the 32nd IEEE/ACM International Conference on Automated Software Engineering. IEEE, 637--647.Google ScholarGoogle Scholar
  16. JUnit Contributors. 2004. A Programmer-Oriented Testing Framework for Java. Retrieved from https://github.com/junit-team/junit4.Google ScholarGoogle Scholar
  17. Kryo Contributors. 2013. Java Binary Serialization and Cloning: Fast, Efficient, Automatic. Retrieved from https://github.com/EsotericSoftware/kryo.Google ScholarGoogle Scholar
  18. MSU HPCC Contributors. 2019. High performance computing at iCER. Retrieved from https://wiki.hpcc.msu.edu.Google ScholarGoogle Scholar
  19. Loris D’Antoni, Roopsha Samanta, and Rishabh Singh. 2016. Qlose: Program repair with quantitative objectives. In Proceedings of International Conference on Computer Aided Verification. Springer, 383--401.Google ScholarGoogle ScholarCross RefCross Ref
  20. Eduardo Faria de Souza, Claire Le Goues, and Celso Gonçalves Camilo-Junior. 2018. A novel fitness function for automated program repair based on source code checkpoints. In Proceedings of the 20th Annual Conference on Genetic and Evolutionary Computation. ACM, 1443--1450.Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. Kalyanmoy Deb, Amrit Pratap, Sameer Agarwal, and T. A. M. T. Meyarivan. 2002. A fast and elitist multiobjective genetic algorithm: NSGA-II. IEEE Transactions on Evolutionary Computation 6, 2 (2002), 182--197.Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. Vidroha Debroy and W. Eric Wong. 2010. Using mutation to automatically suggest fixes for faulty programs. In Proceedings of the 3rd International Conference on Software Testing, Verification and Validation. IEEE, 65--74.Google ScholarGoogle Scholar
  23. Thomas Durieux, Benoit Cornu, Lionel Seinturier, and Martin Monperrus. 2017. Dynamic patch generation for null pointer exceptions using metaprogramming. In Proceedings of the 24th International Conference on Software Analysis, Evolution and Reengineering. IEEE, 349--358.Google ScholarGoogle ScholarCross RefCross Ref
  24. Thomas Durieux, Fernanda Madeiral, Matias Martinez, and Rui Abreu. 2019. Empirical review of Java program repair tools: A large-scale experiment on 2,141 bugs and 23,551 repair attempts. In Proceedings of the 27th ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering. Retrieved from https://arxiv.org/abs/1905.11973.Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. Ethan Fast, Claire Le Goues, Stephanie Forrest, and Westley Weimer. 2010. Designing better fitness functions for automated program repair. In Proceedings of the 12th Annual Conference on Genetic and Evolutionary Computation. ACM, 965--972.Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. Stephanie Forrest, ThanhVu Nguyen, Westley Weimer, and Claire Le Goues. 2009. A genetic programming approach to automated software repair. In Proceedings of the 11th Annual Conference on Genetic and Evolutionary Computation. ACM, 947--954.Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. Gordon Fraser and Andrea Arcuri. 2013. Whole test suite generation. IEEE Transactions on Software Engineering 39, 2 (2013), 276--291.Google ScholarGoogle ScholarDigital LibraryDigital Library
  28. Luca Gazzola, Daniela Micucci, and Leonardo Mariani. 2019. Automatic software repair: A survey. IEEE Transactions on Software Engineering 45, 1 (2019), 34--67.Google ScholarGoogle ScholarDigital LibraryDigital Library
  29. Rahul Gupta, Soham Pal, Aditya Kanade, and Shirish Shevade. 2017. DeepFix: Fixing common C language errors by deep learning. In Proceedings of the 31st AAAI Conference on Artificial Intelligence. 1345--1351.Google ScholarGoogle ScholarDigital LibraryDigital Library
  30. Thomas Helmuth, Lee Spector, and James Matheson. 2015. Solving uncompromising problems with Lexicase selection. IEEE Transactions on Evolutionary Computation 19, 5 (2015), 630--643.Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. Jinru Hua, Mengshi Zhang, Kaiyuan Wang, and Sarfraz Khurshid. 2018. Towards practical program repair with on-demand candidate generation. In Proceedings of the 40th International Conference on Software Engineering. ACM, 12--23.Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. Yue Jia and Mark Harman. 2011. An analysis and survey of the development of mutation testing. IEEE Transactions on Software Engineering 37, 5 (2011), 649--678.Google ScholarGoogle ScholarDigital LibraryDigital Library
  33. Jiajun Jiang, Yingfei Xiong, Hongyu Zhang, Qing Gao, and Xiangqun Chen. 2018. Shaping program repair space with existing patches and similar code. In Proceedings of the 27th International Symposium on Software Testing and Analysis. ACM, 298--309.Google ScholarGoogle ScholarDigital LibraryDigital Library
  34. René Just, Darioush Jalali, and Michael D. Ernst. 2014. Defects4J: A database of existing faults to enable controlled testing studies for Java programs. In Proceedings of the 2014 International Symposium on Software Testing and Analysis. ACM, 437--440.Google ScholarGoogle Scholar
  35. René Just, Chris Parnin, Ian Drosos, and Michael D. Ernst. 2018. Comparing developer-provided to user-provided tests for fault localization and automated program repair. In Proceedings of the 27th International Symposium on Software Testing and Analysis. ACM, 287--297.Google ScholarGoogle Scholar
  36. Yalin Ke, Kathryn T. Stolee, Claire Le Goues, and Yuriy Brun. 2015. Repairing programs with semantic code search. In Proceedings of the 30th IEEE/ACM International Conference on Automated Software Engineering. IEEE, 295--306.Google ScholarGoogle ScholarDigital LibraryDigital Library
  37. Dongsun Kim, Jaechang Nam, Jaewoo Song, and Sunghun Kim. 2013. Automatic patch generation learned from human-written patches. In Proceedings of the 35th International Conference on Software Engineering. IEEE, 802--811.Google ScholarGoogle ScholarDigital LibraryDigital Library
  38. Xianglong Kong, Lingming Zhang, W. Eric Wong, and Bixin Li. 2015. Experience report: How do techniques, programs, and tests impact automated program repair? In Proceedings of the 26th International Symposium on Software Reliability Engineering. IEEE, 194--204.Google ScholarGoogle ScholarDigital LibraryDigital Library
  39. John R. Koza. 1992. Genetic Programming: On the Programming of Computers by Means of Natural Selection. Vol. 1. MIT Press.Google ScholarGoogle ScholarDigital LibraryDigital Library
  40. Xuan-Bach D. Le, Duc-Hiep Chu, David Lo, Claire Le Goues, and Willem Visser. 2017. JFix: Semantics-based repair of Java programs via symbolic PathFinder. In Proceedings of the 26th International Symposium on Software Testing and Analysis. ACM, 376--379.Google ScholarGoogle ScholarDigital LibraryDigital Library
  41. Xuan-Bach D. Le, Duc-Hiep Chu, David Lo, Claire Le Goues, and Willem Visser. 2017. S3: syntax-and semantic-guided repair synthesis via programming by examples. In Proceedings of the 11th Joint Meeting on Foundations of Software Engineering. ACM, 593--604.Google ScholarGoogle ScholarDigital LibraryDigital Library
  42. Xuan-Bach D. Le, David Lo, and Claire Le Goues. 2016. Empirical study on synthesis engines for semantics-based program repair. In Proceedings of the 2016 International Conference on Software Maintenance and Evolution. IEEE, 423--427.Google ScholarGoogle ScholarCross RefCross Ref
  43. Xuan Bach D. Le, David Lo, and Claire Le Goues. 2016. History driven program repair. In Proceedings of the 23rd International Conference on Software Analysis, Evolution, and Reengineering. IEEE, 213--224.Google ScholarGoogle ScholarCross RefCross Ref
  44. Xuan Bach D. Le, Ferdian Thung, David Lo, and Claire Le Goues. 2018. Overfitting in semantics-based automated program repair. Empirical Software Engineering 23, 5 (2018), 3007--3033.Google ScholarGoogle ScholarDigital LibraryDigital Library
  45. Claire Le Goues, Michael Dewey-Vogt, Stephanie Forrest, and Westley Weimer. 2012. A systematic study of automated program repair: Fixing 55 out of 105 bugs for $8 each. In Proceedings of the 34th International Conference on Software Engineering. IEEE, 3--13.Google ScholarGoogle ScholarDigital LibraryDigital Library
  46. Claire Le Goues, Stephanie Forrest, and Westley Weimer. 2013. Current challenges in automatic software repair. Software Quality Journal 21, 3 (2013), 421--443.Google ScholarGoogle ScholarDigital LibraryDigital Library
  47. Claire Le Goues, Neal Holtschulte, Edward K. Smith, Yuriy Brun, Premkumar Devanbu, Stephanie Forrest, and Westley Weimer. 2015. The manybugs and introclass benchmarks for automated repair of C programs. IEEE Transactions on Software Engineering 41, 12 (2015), 1236--1256.Google ScholarGoogle ScholarDigital LibraryDigital Library
  48. Claire Le Goues, ThanhVu Nguyen, Stephanie Forrest, and Westley Weimer. 2012. GenProg: A generic method for automatic software repair. IEEE Transactions on Software Engineering 38, 1 (2012), 54--72.Google ScholarGoogle ScholarDigital LibraryDigital Library
  49. Claire Le Goues, Westley Weimer, and Stephanie Forrest. 2012. Representations and operators for improving evolutionary software repair. In Proceedings of the 14th Annual Conference on Genetic and Evolutionary Computation. ACM, 959--966.Google ScholarGoogle ScholarDigital LibraryDigital Library
  50. Yanchuan Li and Gordon Fraser. 2011. Bytecode testability transformation. In Proceedings of the 2011 International Symposium on Search Based Software Engineering. Springer, 237--251.Google ScholarGoogle ScholarCross RefCross Ref
  51. Derrick Lin, James Koppel, Angela Chen, and Armando Solar-Lezama. 2017. QuixBugs: A multi-lingual program repair benchmark set based on the Quixey challenge. In Proceedings Companion of the 2017 ACM SIGPLAN International Conference on Systems, Programming, Languages, and Applications: Software for Humanity. ACM, 55--56.Google ScholarGoogle ScholarDigital LibraryDigital Library
  52. Kui Liu, Dongsun Kim, Anil Koyuncu, Li Li, Tegawendé F. Bissyandé, and Yves Le Traon. 2018. A closer look at real-world patches. In Proceedings of the 2018 IEEE International Conference on Software Maintenance and Evolution. IEEE, 275--286.Google ScholarGoogle ScholarCross RefCross Ref
  53. Xuliang Liu and Hao Zhong. 2018. Mining stackoverflow for program repair. In Proceedings of 25th International Conference on Software Analysis, Evolution and Reengineering. IEEE, 118--129.Google ScholarGoogle ScholarCross RefCross Ref
  54. Fan Long, Peter Amidon, and Martin Rinard. 2017. Automatic inference of code transforms for patch generation. In Proceedings of the 11th Joint Meeting on Foundations of Software Engineering. ACM, 727--739.Google ScholarGoogle ScholarDigital LibraryDigital Library
  55. Fan Long and Martin Rinard. 2015. Staged program repair with condition synthesis. In Proceedings of the 10th Joint Meeting on Foundations of Software Engineering. ACM, 166--178.Google ScholarGoogle ScholarDigital LibraryDigital Library
  56. Fan Long and Martin Rinard. 2016. An analysis of the search spaces for generate and validate patch generation systems. In Proceedings of the 38th International Conference on Software Engineering. IEEE, 702--713.Google ScholarGoogle ScholarDigital LibraryDigital Library
  57. Fan Long and Martin Rinard. 2016. Automatic patch generation by learning correct code. ACM SIGPLAN Notices 51, 1 (2016), 298--312.Google ScholarGoogle ScholarDigital LibraryDigital Library
  58. Fan Long, Stelios Sidiroglou-Douskos, and Martin Rinard. 2014. Automatic runtime error repair and containment via recovery shepherding. In ACM SIGPLAN Notices, Vol. 49. ACM, 227--238.Google ScholarGoogle ScholarDigital LibraryDigital Library
  59. Fernanda Madeiral, Simon Urli, Marcelo Maia, and Martin Monperrus. 2019. Bears: An extensible Java bug benchmark for automatic program repair studies. In Proceedings of the 26th International Conference on Software Analysis, Evolution and Reengineering. IEEE, 468--478.Google ScholarGoogle ScholarCross RefCross Ref
  60. Alexandru Marginean, Johannes Bader, Satish Chandra, Mark Harman, Yue Jia, Ke Mao, Alexander Mols, and Andrew Scott. 2019. SapFix: Automated end-to-end repair at scale. In Proceedings of the 41st International Conference on Software Engineering: Software Engineering in Practice. IEEE Press, 269--278.Google ScholarGoogle ScholarDigital LibraryDigital Library
  61. Matias Martinez, Thomas Durieux, Romain Sommerard, Jifeng Xuan, and Martin Monperrus. 2017. Automatic repair of real bugs in java: A large-scale experiment on the defects4j dataset. Empirical Software Engineering 22, 4 (2017), 1936--1964.Google ScholarGoogle ScholarDigital LibraryDigital Library
  62. Matias Martinez and Martin Monperrus. 2015. Mining software repair models for reasoning on the search space of automated program fixing. Empirical Software Engineering 20, 1 (2015), 176--205.Google ScholarGoogle ScholarDigital LibraryDigital Library
  63. Matias Martinez and Martin Monperrus. 2016. Astor: A program repair library for java. In Proceedings of the 25th International Symposium on Software Testing and Analysis. ACM, 441--444.Google ScholarGoogle ScholarDigital LibraryDigital Library
  64. Matias Martinez and Martin Monperrus. 2019. Astor: Exploring the design space of generate-and-validate program repair beyond GenProg. Journal of Systems and Software 151 (2019), 65--80.Google ScholarGoogle ScholarDigital LibraryDigital Library
  65. Matias Martinez, Westley Weimer, and Martin Monperrus. 2014. Do the fix ingredients already exist? An empirical inquiry into the redundancy assumptions of program repair approaches. In Companion Proceedings of the 36th International Conference on Software Engineering. ACM, 492--495.Google ScholarGoogle ScholarDigital LibraryDigital Library
  66. Phil McMinn. 2004. Search-based software test data generation: A survey. Software Testing, Verification and Reliability 14, 2 (2004), 105--156.Google ScholarGoogle ScholarCross RefCross Ref
  67. Sergey Mechtaev, Xiang Gao, Shin Hwei Tan, and Abhik Roychoudhury. 2018. Test-equivalence analysis for automatic patch generation. ACM Transactions on Software Engineering and Methodology 27, 4 (2018), 15.Google ScholarGoogle ScholarDigital LibraryDigital Library
  68. Sergey Mechtaev, Jooyong Yi, and Abhik Roychoudhury. 2015. DirectFix: Looking for simple program repairs. In Proceedings of the 37th International Conference on Software Engineering. IEEE Press, 448--458.Google ScholarGoogle ScholarDigital LibraryDigital Library
  69. Sergey Mechtaev, Jooyong Yi, and Abhik Roychoudhury. 2016. Angelix: Scalable multiline program patch synthesis via symbolic analysis. In Proceedings of the 38th International Conference on Software Engineering. ACM, 691--701.Google ScholarGoogle ScholarDigital LibraryDigital Library
  70. Martin Monperrus. 2018. Automatic software repair: A bibliography. Computing Surveys 51, 1 (2018), 17.Google ScholarGoogle ScholarDigital LibraryDigital Library
  71. Manish Motwani, Sandhya Sankaranarayanan, René Just, and Yuriy Brun. 2018. Do automated program repair techniques repair hard and important bugs? Empirical Software Engineering 23, 5 (2018), 2901--2947.Google ScholarGoogle ScholarDigital LibraryDigital Library
  72. Jean-Baptiste Mouret and Jeff Clune. 2015. Illuminating search spaces by mapping elites. arXiv preprint arXiv:1504.04909 (2015).Google ScholarGoogle Scholar
  73. Hoang Duong Thien Nguyen, Dawei Qi, Abhik Roychoudhury, and Satish Chandra. 2013. SemFix: Program repair via semantic analysis. In Proceedings of the 35th International Conference on Software Engineering. IEEE, 772--781.Google ScholarGoogle ScholarDigital LibraryDigital Library
  74. Vinicius Paulo L. Oliveira, Eduardo Faria de Souza, Claire Le Goues, and Celso G. Camilo-Junior. 2018. Improved representation and genetic operators for linear genetic programming for automated program repair. Empirical Software Engineering 23, 5 (2018), 2980--3006.Google ScholarGoogle ScholarDigital LibraryDigital Library
  75. Oracle. 2010. Java Object Serialization Specification: System Architecture. Retrieved from https://docs.oracle.com/javase/7/docs/platform/serialization/spec/serial-arch.html#7182.Google ScholarGoogle Scholar
  76. Kai Pan, Sunghun Kim, and E. James Whitehead. 2009. Toward an understanding of bug fix patterns. Empirical Software Engineering 14, 3 (2009), 286--315.Google ScholarGoogle ScholarDigital LibraryDigital Library
  77. Yuhua Qi, Xiaoguang Mao, Yan Lei, Ziying Dai, and Chengsong Wang. 2014. The strength of random search on automated program repair. In Proceedings of the 36th International Conference on Software Engineering. ACM, 254--265.Google ScholarGoogle ScholarDigital LibraryDigital Library
  78. Yuhua Qi, Xiaoguang Mao, Yan Lei, and Chengsong Wang. 2013. Using automated program repair for evaluating the effectiveness of fault localization techniques. In Proceedings of the 2013 International Symposium on Software Testing and Analysis. ACM, 191--201.Google ScholarGoogle ScholarDigital LibraryDigital Library
  79. Zichao Qi, Fan Long, Sara Achour, and Martin Rinard. 2015. An analysis of patch plausibility and correctness for generate-and-validate patch generation systems. In Proceedings of the 2015 International Symposium on Software Testing and Analysis. ACM, 24--36.Google ScholarGoogle ScholarDigital LibraryDigital Library
  80. Reudismam Rolim, Gustavo Soares, Loris D’Antoni, Oleksandr Polozov, Sumit Gulwani, Rohit Gheyi, Ryo Suzuki, and Björn Hartmann. 2017. Learning syntactic program transformations from examples. In Proceedings of the 39th International Conference on Software Engineering. IEEE Press, 404--415.Google ScholarGoogle ScholarDigital LibraryDigital Library
  81. Ripon Saha, Yingjun Lyu, Wing Lam, Hiroaki Yoshida, and Mukul Prasad. 2018. Bugs.jar: A large-scale, diverse dataset of real-world java bugs. In Proceedings of the 15th International Conference on Mining Software Repositories. IEEE, 10--13.Google ScholarGoogle ScholarDigital LibraryDigital Library
  82. Ripon K. Saha, Yingjun Lyu, Hiroaki Yoshida, and Mukul R. Prasad. 2017. ELIXIR: Effective object-oriented program repair. In Proceedings of the 32nd IEEE/ACM International Conference on Automated Software Engineering. IEEE, 648--659.Google ScholarGoogle Scholar
  83. Eric Schulte, Jonathan DiLorenzo, Westley Weimer, and Stephanie Forrest. 2013. Automated repair of binary and assembly programs for cooperating embedded devices. In ACM SIGPLAN Notices, Vol. 48. ACM, 317--328.Google ScholarGoogle ScholarDigital LibraryDigital Library
  84. Eric Schulte, Stephanie Forrest, and Westley Weimer. 2010. Automated program repair through the evolution of assembly code. In Proceedings of the IEEE/ACM International Conference on Automated Software Engineering. ACM, 313--316.Google ScholarGoogle ScholarDigital LibraryDigital Library
  85. Edward K. Smith, Earl T. Barr, Claire Le Goues, and Yuriy Brun. 2015. Is the cure worse than the disease? Overfitting in automated program repair. In Proceedings of the 10th Joint Meeting on Foundations of Software Engineering. ACM, 532--543.Google ScholarGoogle ScholarDigital LibraryDigital Library
  86. Victor Sobreira, Thomas Durieux, Fernanda Madeiral, Martin Monperrus, and Marcelo de Almeida Maia. 2018. Dissection of a bug dataset: Anatomy of 395 patches from defects4j. In Proceedings of the 25th International Conference on Software Analysis, Evolution and Reengineering. IEEE, 130--140.Google ScholarGoogle ScholarCross RefCross Ref
  87. Mauricio Soto, Ferdian Thung, Chu-Pan Wong, Claire Le Goues, and David Lo. 2016. A deeper look into bug fixes: Patterns, replacements, deletions, and additions. In Proceedings of the 13th International Conference on Mining Software Repositories. ACM, 512--515.Google ScholarGoogle ScholarDigital LibraryDigital Library
  88. Shin Hwei Tan, Jooyong Yi, Yulis, Sergey Mechtaev, and Abhik Roychoudhury. 2017. Codeflaws: A programming competition benchmark for evaluating automated program repair tools. In Proceedings of the 39th International Conference on Software Engineering Companion. IEEE Press, 180--182.Google ScholarGoogle Scholar
  89. Shin Hwei Tan, Hiroaki Yoshida, Mukul R. Prasad, and Abhik Roychoudhury. 2016. Anti-patterns in search-based program repair. In Proceedings of the 24th International Symposium on Foundations of Software Engineering. ACM, 727--738.Google ScholarGoogle ScholarDigital LibraryDigital Library
  90. Christopher Steven Timperley, Susan Stepney, and Claire Le Goues. 2017. An investigation into the use of mutation analysis for automated program repair. In Proceedings of the 2017 International Symposium on Search Based Software Engineering. Springer, 99--114.Google ScholarGoogle ScholarCross RefCross Ref
  91. Simon Urli, Zhongxing Yu, Lionel Seinturier, and Martin Monperrus. 2018. How to design a program repair bot?: Insights from the repairnator project. In Proceedings of the 40th International Conference on Software Engineering. ACM, 95--104.Google ScholarGoogle ScholarDigital LibraryDigital Library
  92. Westley Weimer, Stephanie Forrest, Claire Le Goues, and ThanhVu Nguyen. 2010. Automatic program repair with evolutionary computation. Communications of the ACM 53, 5 (2010), 109--116.Google ScholarGoogle ScholarDigital LibraryDigital Library
  93. Westley Weimer, Zachary P. Fry, and Stephanie Forrest. 2013. Leveraging program equivalence for adaptive program repair: Models and first results. In Proceedings of the 28th International Conference on Automated Software Engineering. IEEE, 356--366.Google ScholarGoogle ScholarDigital LibraryDigital Library
  94. Westley Weimer, ThanhVu Nguyen, Claire Le Goues, and Stephanie Forrest. 2009. Automatically finding patches using genetic programming. In Proceedings of the 31st International Conference on Software Engineering. IEEE, 364--374.Google ScholarGoogle ScholarDigital LibraryDigital Library
  95. Ming Wen, Junjie Chen, Rongxin Wu, Dan Hao, and Shing-Chi Cheung. 2017. An empirical analysis of the influence of fault space on search-based automated program repair. arXiv preprint arXiv:1707.05172 (2017).Google ScholarGoogle Scholar
  96. Ming Wen, Junjie Chen, Rongxin Wu, Dan Hao, and Shing-Chi Cheung. 2018. Context-aware patch generation for better automated program repair. In Proceedings of the 40th International Conference on Software Engineering. ACM, 1--11.Google ScholarGoogle ScholarDigital LibraryDigital Library
  97. Josh L. Wilkerson, Daniel R. Tauritz, and James M. Bridges. 2012. Multi-objective coevolutionary automated software correction. In Proceedings of the 14th Annual Conference on Genetic and Evolutionary Computation. ACM, 1229--1236.Google ScholarGoogle Scholar
  98. Qi Xin and Steven P. Reiss. 2017. Identifying test-suite-overfitted patches through test case generation. In Proceedings of the 26th International Symposium on Software Testing and Analysis. ACM, 226--236.Google ScholarGoogle Scholar
  99. Qi Xin and Steven P. Reiss. 2017. Leveraging syntax-related code for automated program repair. In Proceedings of the 32nd IEEE/ACM International Conference on Automated Software Engineering. IEEE Press, 660--670.Google ScholarGoogle Scholar
  100. Yingfei Xiong, Xinyuan Liu, Muhan Zeng, Lu Zhang, and Gang Huang. 2018. Identifying patch correctness in test-based program repair. In Proceedings of the 40th International Conference on Software Engineering. ACM, 789--799.Google ScholarGoogle ScholarDigital LibraryDigital Library
  101. Yingfei Xiong, Jie Wang, Runfa Yan, Jiachen Zhang, Shi Han, Gang Huang, and Lu Zhang. 2017. Precise condition synthesis for program repair. In Proceedings of the 39th International Conference on Software Engineering. IEEE Press, 416--426.Google ScholarGoogle ScholarDigital LibraryDigital Library
  102. Xuezheng Xu, Yulei Sui, Hua Yan, and Jingling Xue. 2019. VFix: Value-flow-guided precise program repair for null pointer dereferences. In Proceedings of the 41st International Conference on Software Engineering. IEEE Press, 512--523.Google ScholarGoogle ScholarDigital LibraryDigital Library
  103. Jifeng Xuan, Matias Martinez, Favio Demarco, Maxime Clement, Sebastian Lamelas Marcote, Thomas Durieux, Daniel Le Berre, and Martin Monperrus. 2017. Nopol: Automatic repair of conditional statement bugs in Java programs. IEEE Transactions on Software Engineering 43, 1 (2017), 34--55.Google ScholarGoogle ScholarDigital LibraryDigital Library
  104. Jinqiu Yang, Alexey Zhikhartsev, Yuefei Liu, and Lin Tan. 2017. Better test cases for better automated program repair. In Proceedings of the 11th Joint Meeting on Foundations of Software Engineering. ACM, 831--841.Google ScholarGoogle ScholarDigital LibraryDigital Library
  105. He Ye, Matias Martinez, Thomas Durieux, and Martin Monperrus. 2019. A comprehensive study of automatic program repair on the quixbugs benchmark. In Proceedings of the IEEE 1st International Workshop on Intelligent Bug Fixing. IEEE, 1--10.Google ScholarGoogle ScholarCross RefCross Ref
  106. Jooyong Yi, Shin Hwei Tan, Sergey Mechtaev, Marcel Böhme, and Abhik Roychoudhury. 2018. A correlation study between automated program repair and test-suite metrics. Empirical Software Engineering 23, 5 (2018), 2948--2979.Google ScholarGoogle ScholarDigital LibraryDigital Library
  107. Zhongxing Yu, Matias Martinez, Benjamin Danglot, Thomas Durieux, and Martin Monperrus. 2017. Test case generation for program repair: A study of feasibility and effectiveness. Arxiv Preprint Arxiv:1703.00198 (2017).Google ScholarGoogle Scholar
  108. Yuan Yuan and Wolfgang Banzhaf. 2018. ARJA: Automated repair of Java programs via multi-objective genetic programming. IEEE Transactions on Software Engineering (2018). Early Access. DOI:https://doi.org/10.1109/TSE.2018.2874648Google ScholarGoogle Scholar
  109. Yuan Yuan and Wolfgang Banzhaf. 2019. ARJA-e: A System for Better Evolutionary Program Repair. Retrieved from https://github.com/yyxhdy/arja/tree/arja-e.Google ScholarGoogle Scholar
  110. Yuan Yuan, Hua Xu, Bo Wang, and Xin Yao. 2016. A new dominance relation-based evolutionary algorithm for many-objective optimization. IEEE Transactions on Evolutionary Computation 20, 1 (2016), 16--37.Google ScholarGoogle ScholarDigital LibraryDigital Library
  111. Hao Zhong and Zhendong Su. 2015. An empirical study on real bug fixes. In Proceedings of the 37th International Conference on Software Engineering. IEEE Press, 913--923.Google ScholarGoogle ScholarCross RefCross Ref

Index Terms

  1. Toward Better Evolutionary Program Repair: An Integrated Approach

      Recommendations

      Comments

      Login options

      Check if you have access through your login credentials or your institution to get full access on this article.

      Sign in

      Full Access

      • Published in

        cover image ACM Transactions on Software Engineering and Methodology
        ACM Transactions on Software Engineering and Methodology  Volume 29, Issue 1
        January 2020
        317 pages
        ISSN:1049-331X
        EISSN:1557-7392
        DOI:10.1145/3375995
        • Editor:
        • Mauro Pezzè
        Issue’s Table of Contents

        Copyright © 2020 ACM

        Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]

        Publisher

        Association for Computing Machinery

        New York, NY, United States

        Publication History

        • Published: 30 January 2020
        • Accepted: 1 August 2019
        • Revised: 1 July 2019
        • Received: 1 April 2019
        Published in tosem Volume 29, Issue 1

        Permissions

        Request permissions about this article.

        Request Permissions

        Check for updates

        Qualifiers

        • research-article
        • Research
        • Refereed

      PDF Format

      View or Download as a PDF file.

      PDF

      eReader

      View online with eReader.

      eReader

      HTML Format

      View this article in HTML Format .

      View HTML Format