Content deleted Content added
→Limitations of automatic bug-fixing: MOS:LAYOUT no need for short sections |
Makeitahabit (talk | contribs) Adding Facebook's "Getafix" to the section of data-driven approaches. All claims should be covered by the cited paper. (I am not working at Facebook.) |
||
Line 41:
SequenceR uses [[Neural machine translation|sequence-to-sequence learning]] on source code in order to generate one-line patches.<ref>{{Cite journal|last1=Chen|first1=Zimin|last2=Kommrusch|first2=Steve James|last3=Tufano|first3=Michele|last4=Pouchet|first4=Louis-Noel|last5=Poshyvanyk|first5=Denys|last6=Monperrus|first6=Martin|date=2019|title=SEQUENCER: Sequence-to-Sequence Learning for End-to-End Program Repair|journal=IEEE Transactions on Software Engineering|pages=1|doi=10.1109/TSE.2019.2940179|issn=0098-5589|arxiv=1901.01808|s2cid=57573711}}</ref> It defines a neural network architecture that works well with source code, with the copy mechanism that allows to produce patches with tokens that are not in the learned vocabulary. Those tokens are taken from the code of the Java class under repair.
Getafix<ref name=":0">{{Cite journal|last=Bader|first=Johannes|last2=Scott|first2=Andrew|last3=Pradel|first3=Michael|last4=Chandra|first4=Satish|date=2019-10-10|title=Getafix: learning to fix bugs automatically|url=https://doi.org/10.1145/3360585|journal=Proceedings of the ACM on Programming Languages|volume=3|issue=OOPSLA|pages=159:1–159:27|doi=10.1145/3360585}}</ref> is a language-agnostic approach developed and used in production at [[Facebook, Inc.|Facebook]]. Given a sample of [[Commit (version control)|code commits]] where engineers fixed a certain kind of bug, it learns human-like fix patterns that apply to future bugs of the same kind. Besides using Facebook's own [[Repository (version control)|code repositories]] as training data, Getafix learnt some fixes from [[open source]] Java repositories. When new bugs get detected, Getafix applies its previously learnt patterns to produce candidate fixes and ranks them within seconds. It presents only the top-ranked fix for final validation by tools or an engineer, in order to save resources and ideally be so fast that no human time was spent on fixing the same bug, yet.
=== Other ===
Line 103 ⟶ 105:
* AutoFixE:<ref name=autofixe /> A bug-fixing tool for [[Eiffel programming language|Eiffel language]]. It relies the contracts (i.e., a form of formal specification) in Eiffel programs to validate generated patches.
*Getafix:<ref name=":0" /> Operates purely on [[Abstract syntax tree|AST]] transformations and thus requires only a [[parser]] and formatter. At Facebook it has been applied to [[Hack (programming language)|Hack]], [[Java (programming language)|Java]] and [[Objective-C]].
=== Proprietary ===
|