자동 버그 수정
Automatic bug fixing자동 버그 수정은 인간 프로그래머의 [1][2]개입 없이 소프트웨어 버그를 자동으로 복구하는 것입니다.일반적으로 자동 패치 생성, 자동 버그 복구 또는 자동 프로그램 [3][4]복구라고도 합니다.이러한 기술의 일반적인 목표는 소프트웨어 [5]회귀를 일으키지 않고 소프트웨어 프로그램의 버그를 제거하기 위해 올바른 패치를 자동으로 생성하는 것입니다.
사양
자동 버그 수정은 예를 들어 정식 사양이나 테스트 [6]스위트 등 예상되는 동작의 사양에 따라 이루어집니다.
테스트 슈트 – 입력/출력 쌍은 프로그램의 기능을 지정합니다.어설션으로 캡처된 것은 검색을 실행하기 위한 테스트 오라클로 사용할 수 있습니다.이 오라클은 장애가 발생한 동작을 나타내는 버그 오라클과 프로그램 복구 방법이 유지해야 하는 기능을 캡슐화한 회귀 오라클로 나눌 수 있습니다.테스트 스위트는 일반적으로 불완전하며 가능한 모든 경우를 대상으로 하는 것은 아닙니다.따라서 검증된 패치가 테스트 스위트의 모든 입력에 대해 예상되는 출력을 생성하지만 다른 [7]입력에 대해서는 잘못된 출력을 생성하는 경우가 많습니다.이와 같이 검증되었지만 잘못된 패치의 존재는 생성 및 검증 [7]기술의 주요 과제입니다.최근의 성공적인 자동 버그 수정 기술은 검증된 [8]패치 간에 올바른 패치를 추가로 식별하기 위해 테스트 스위트 이외의 추가 정보에 의존하는 경우가 많습니다.
예상되는 동작을 특정하는 또 다른 방법은 정식[9][10] 사양을 사용하는 것입니다.기능을 포함한 전체 프로그램 동작을 규정하는 전체 사양에 대한 검증은 일반적으로 실제로 사용할 수 없고 검증의 계산 비용이 만만치 않기 때문에 일반적이지 않습니다.그러나 특정 오류 클래스의 경우 암묵적인 부분 사양을 사용할 수 있는 경우가 많습니다.예를 들어 패치 적용 프로그램이 동일한 실행 [11]경로에서 더 이상 오버플로 오류를 트리거할 수 없음을 검증하는 대상 버그 수정 기술이 있습니다.
기술
생성 및 검증
생성 및 검증 접근방식은 각 후보 패치를 컴파일 및 테스트하여 테스트 [6][7]스위트 내의 모든 입력에 대해 예상되는 출력을 생성하는 검증된 패치를 모두 수집합니다.이러한 기술은 일반적으로 프로그램의 테스트 스위트, 즉 테스트 케이스 세트로 시작되며,[6][8][12][13] 그 중 적어도 하나는 버그를 노출시킨다.초기 생성 및 검증 버그 [6]수정 시스템은 GenProg입니다.일반적으로 패치의 정확성을 [7][14]보증하지 않기 때문에 생성 및 검증 기법의 효율성은 여전히 논란의 여지가 있습니다.그럼에도 불구하고, 최근 보고된 최신 기술의 결과는 대체로 유망하다.예를 들어, 8개의 대형 C 소프트웨어 프로그램에서 69개의 실제 버그를 체계적으로 수집한 경우, 최첨단 버그 수정 시스템인 Project는 69개의 [8]버그 중 18개에 대해 올바른 패치를 생성합니다.
후보 패치를 생성하는 방법 중 하나는 원래 프로그램에 변환 연산자를 적용하는 것입니다.변환 연산자는 잠재적으로 추상 구문 트리 표현 또는 문 수준 또는 블록 수준에서 작동하는 것과 같은 보다 거친 표현을 통해 원래 프로그램을 조작합니다.이전의 유전자 개선 접근법은 문 수준에서 작동하며, 기존 문장의 삭제 또는 기존 문장의 동일한 소스 [6][15]파일 내의 다른 문장으로 대체 등의 간단한 삭제/바꾸기 작업을 수행합니다.최근의 접근법에서는 추상 구문 트리 수준에서 보다 세분화된 연산자를 사용하여 보다 다양한 후보 [13]패치 세트를 생성합니다.특히 문 삭제 변환 연산자 및 보다 일반적으로 코드 제거는 합리적인 복구 전략 또는 적어도 양호한 장애 위치 파악 [16][17]전략이다.
후보 패치를 생성하는 또 다른 방법은 수정 템플릿을 사용하는 것입니다.수정 템플릿은 일반적으로 특정 [18]버그 클래스를 수정하기 위해 미리 정의된 변경 사항입니다.수정 템플릿의 예로는 변수 값이 늘 포인터 예외를 수정하기 위해 늘인지 여부를 확인하는 조건문을 삽입하거나 정수 상수를 1개씩 변경하여 하나씩 오류를 [18]수정하는 것이 있습니다.또한 생성 및 검증 [19][20]접근 방식을 위한 수정 템플릿을 자동으로 마이닝할 수도 있습니다.
많은 생성 및 검증 기술은 용장성에 대한 통찰력에 의존합니다.패치의 코드는 어플리케이션의 다른 곳에 있습니다.이 아이디어는 Genprog 시스템에 도입되었으며, 두 운영자, 즉 AST 노드의 추가 및 교체는 다른 곳에서 가져온 코드(즉, 기존 AST 노드 추가)에 기반했다.이 아이디어는 상당한 비율의 커밋(3%-17%)이 기존 [21][22]코드로 구성된다는 것을 보여주는 두 개의 독립적인 연구를 통해 경험적으로 검증되었다.재사용 코드가 다른 곳에 존재한다는 사실 이외에도 잠재적 수리 구성요소의 맥락이 유용하다는 것이 입증되었습니다. 즉, 기증자의 맥락은 종종 수령자의 [23][24]맥락과 유사합니다.
합성 베이스
심볼릭 실행을 기반으로 하는 수리 기법이 존재합니다.예를[25] 들어 Semfix는 심볼 실행을 사용하여 복구 제약 조건을 추출합니다.Angelix는[26] 여러 줄의 패치를 다루기 위해 엔젤 포레스트 개념을 도입했습니다.
특정 가정 하에서 수리 문제를 합성 문제로 기술할 수 있습니다.SemFix와[25] Nopol은[27] 컴포넌트 기반 [28]합성을 사용합니다.Dynamoth는[29] 동적 [30]합성을 사용합니다.S3는[31] 구문 안내 [32]합성에 기초하고 있습니다.SearchRepair는 잠재적인[33] 패치를 SMT 공식으로 변환하고 패치 적용 프로그램이 제공된 모든 테스트 사례를 통과할 수 있는 후보 패치를 쿼리합니다.
데이터 중심
머신 러닝 기술은 자동 버그 수정 시스템의 [8]효과를 향상시킬 수 있습니다.이러한 기술의 한 예는 GitHub 및 SourceForge의 [8]오픈 소스 저장소에서 수집된 인간 개발자로부터 과거의 성공적인 패치로부터 학습한다.그런 다음 학습한 정보를 사용하여 생성된 모든 후보 [8]패치 중에서 잠재적으로 올바른 패치를 인식하고 우선순위를 부여합니다.또는 기존 소스에서 직접 패치를 채굴할 수도 있습니다.예를 들어, 기증자 애플리케이션[11] 또는 QA [34]웹 사이트에서 패치를 채굴하는 방법이 있습니다.온라인 학습(일명 지속적인 학습)은 오픈 소스 빌드 스트림에서 패치를 온라인으로 학습한 전례가 있습니다.[35]
SequenceR은 소스 코드에 대한 시퀀스 투 시퀀스 학습을 사용하여 한 줄의 [36]패치를 생성합니다.학습된 어휘에 없는 토큰을 사용하여 패치를 생성할 수 있는 복사 메커니즘과 함께 소스 코드에서 잘 작동하는 뉴럴 네트워크 아키텍처를 정의합니다.이러한 토큰은 복구 중인 Java 클래스의 코드에서 가져온 것입니다.
Getafix는[37] 언어에 구애받지 않는 접근법으로 개발되어 Facebook의 프로덕션에서 사용되고 있습니다.엔지니어가 특정 종류의 버그를 수정하는 코드 커밋의 샘플이 주어지면 향후 같은 종류의 버그에 적용되는 인간과 같은 수정 패턴을 학습합니다.Getafix는 Facebook의 자체 코드 저장소를 트레이닝 데이터로 사용하는 것 외에 오픈 소스 Java 저장소에서 몇 가지 수정을 배웠다.새로운 버그가 검출되면 Getafix는 이전에 학습한 패턴을 적용하여 후보 수정을 생성하고 몇 초 안에 순위를 매깁니다.툴이나 엔지니어에 의한 최종 검증에 의한 최상위 수정만 제시합니다.리소스를 절약하고 같은 버그를 수정하는 데 인적 시간을 들이지 않는 것이 이상적입니다.
다른.
타깃 자동 버그 수정 기술을 사용하면 늘 포인터[38][39][18] 예외 정수 오버플로,[11] 버퍼 오버플로,[11] 메모리 [40]누수 등 특정 클래스의 오류에 대한 복구가 생성됩니다.이러한 기술은 종종 경험적 수정 템플릿을 사용하여 대상 범위의 버그를 수정합니다.예를 들어 조건문을 삽입하여 변수 값이 늘인지[18] 확인하거나 누락된 메모리 할당 해제 [40]문을 삽입합니다.생성 및 검증 기술에 비해 대상 기술은 버그 수정 정확도는 높지만 [7][40]범위가 훨씬 좁습니다.
사용하다
자동 버그 수정에는 여러 가지 방법이 있습니다.
- 개발 환경의 경우:버그가 발견되면 개발자는 (예를 들어 버튼을 클릭하여) 패치를 검색하는 기능을 활성화합니다.이 검색은 [41]IDE가 개발자의 명시적인 조치를 기다리지 않고 잠재적인 문제에 대한 해결책을 능동적으로 검색할 때 백그라운드에서 발생할 수도 있습니다.
- 연속 통합 서버의 경우:지속적인 통합 중에 빌드가 실패하면 빌드가 실패하는 즉시 패치 검색을 시도할 수 있습니다.검색이 성공하면 [42]패치가 개발자에게 제공됩니다.합성 패치를 풀 요청으로 개발자에게 제안할 경우 코드 변경(풀 요청 제목 및 [43]설명 등) 외에 설명을 제공해야 합니다.실험에 따르면 생성된 패치는 오픈 소스 개발자에 의해 받아들여지고 코드 [44]저장소에 병합될 수 있습니다.
- 실행 시:런타임에 장애가 발생하면 바이너리 패치를 온라인으로 검색하여 적용할 수 있습니다.이러한 복구 시스템의 예로는 x86 코드에서 x86 바이너리 패치를 사용하여 [45]복구하는 ClearView가 있습니다.Itzal 시스템은[46] Clearview와는 다릅니다.실가동 시 복구 검색이 실행되지만 생성된 패치는 소스 코드 레벨입니다.BikiniProxy 시스템은 [47]브라우저에서 발생하는 JavaScript 오류를 온라인으로 복구합니다.
- 보안 공개에 대한 대응: 취약성이 발견되어 CVE로 등록되면 복구 시스템에 보안 [48]패치 생성을 요청할 수 있습니다.
서치 스페이스
기본적으로 자동 버그 수정은 연역 기반이든 휴리스틱 기반이든 검색 활동입니다.자동 버그 수정의 서치 공간은 프로그램에 대해 가능한 모든 편집으로 구성됩니다.이 서치 공간의 구조를 이해하기 위한 연구가 진행되어 왔습니다.Qi [49]등은 Genprog의 원래 피트니스 기능이 검색을 유도하기 위해 무작위 검색보다 낫지 않다는 것을 보여주었다.Martinez [50]등은 가능한 수리 조치 사이의 불균형을 조사하여 검색에 상당한 영향을 미쳤다.Long 등의 연구는[51] 올바른 패치가 탐색 공간에서 희박한 것으로 간주될 수 있으며 부정확한 과적합 패치가 훨씬 더 풍부하다는 것을 보여주었다(아래의 과적합에 대한 논의 참조).
수리 알고리즘에서 가능한 모든 변형을 명시적으로 열거하면 프로그램 복구를 [52]위한 설계 공간이 정의됩니다.각 변형은 수리 프로세스의 특정 지점에 관련된 알고리즘(예: 고장 위치 파악 알고리즘)을 선택하거나 다른 패치를 생성하는 특정 휴리스틱을 선택합니다.예를 들어 프로그램 수복 생성 및 검증의 설계 공간에서는 수정되는 프로그램 요소의 입도에 대해 식, 스테이트먼트, 블록 [52]등 하나의 변동점이 있다.
기존 서치 공간이 기존 [53]커밋을 포함하는지 여부도 분석할 수 있습니다.이러한 서치 공간 분석은 소프트웨어 저장소를 채굴하는 것을 의미하며, 이는 주어진 복구 알고리즘의 적용 가능성과 유용성에 대한 근사치를 산출합니다.
과적합
테스트 슈트 기반의 프로그램 수복에서는 툴이 테스트 스위트를 통과했지만 실제로는 올바르지 않은 패치를 생성하는 경우가 있습니다.이 문제를 "과적합"[54] 문제라고 합니다.이 문맥에서 "과적합"은 패치가 테스트 입력에 과적합한다는 사실을 의미합니다.과적합에는 [55]여러 종류가 있습니다.불완전한 고정은 일부 버그 입력만 고정되는 것을 의미합니다.회귀 도입은 패치 후에 이전에 동작하던 일부 기능이 파손되는 것을 의미합니다(테스트가 제대로 이루어지지 않았기 때문입니다).Manybugs C 벤치마크에서 Qi 등은 [7]104/110의 그럴듯한 GenProg 패치가 과적합했다고 보고했고, Defaults4J Java 벤치마크에서 Martinez [56]등은 73/84의 그럴듯한 패치가 과적합이라고 보고했습니다.합성 기반 복구의 맥락에서 Le [57]등은 80% 이상의 과적합 패치를 얻었다.
과적합을 방지하는 방법 중 하나는 생성된 패치를 필터링하는 것입니다.이 작업은 [59]동적 분석 또는 생성된 [58]패치의 정적 코드 분석을 기반으로 수행할 수 있습니다.참조 패치를 사용할 수 있는 경우 최신 기술은 패치가 적용된 버전에 따라 테스트를 생성하여 생성된 테스트가 예상되는 동작을 캡처하는 것입니다.테스트 생성에 의한 입력 도메인의 샘플링은 구조상 불완전하지만, 과적합 패치의 검출,[60] 패치의 수동 분류에 의한 인적 에러 검출에 효과적이다.
자동 버그 수정의 제한
테스트 스위트에 의존하는 자동 버그 수정 기술은 패치 수정 보증을 제공하지 않습니다.테스트 스위트가 불완전하고 모든 경우를 [7]커버하는 것은 아니기 때문입니다.테스트 스위트가 취약하면 검증 및 검증 기술을 통해 검증되었지만 잘못된 패치를 생성할 수 있습니다.이 패치에는 바람직한 기능 삭제, 메모리 누수의 원인, 보안 취약성 [7]도입 등의 부정적인 영향이 있습니다.하나의 가능한 접근방식은 불합격 테스트 스위트를 증폭시키는 것으로, 합격 또는 불합격으로 라벨이 붙여진 추가 테스트 케이스를 자동으로 생성할 수 있습니다.인간의 라벨 부착 노력을 최소화하기 위해 테스트 사례를 자동으로 합격 또는 불합격으로 분류하는 방법을 점진적으로 학습하고 불확실한 [61]사례에 대해서만 버그 보고 사용자를 참여시키는 자동 테스트 오라클을 훈련할 수 있다.
생성 및 검증 수리 시스템의 한계는 서치 공간의 [51]폭발입니다.프로그램의 경우 변경할 문장이 많고 각 문장에 대해 수정 가능한 문장이 많습니다.최첨단 시스템은 버그를 수정하는 데 약간의 수정만으로도 충분하다고 가정하여 이 문제를 해결하고 검색 공간을 줄입니다.
기호[25][26] 분석에 기초한 접근법의 한계는 특히 부작용이 있는 진술을 수정하기 위해 현실 세계의 프로그램이 다루기 어려울 정도로 큰 공식으로 변환되는 경우가 많다는 것이다.
Benchmarks
버그의 벤치마크는 일반적으로 하나의 특정 프로그래밍 언어에 초점을 맞춥니다.C에서 GenProg의 저자가 수집한 Manybugs 벤치마크에는 69개의 실제 결함이 포함되어 있으며 [15][8][13][26]C의 다른 많은 버그 수정 도구를 평가하는 데 널리 사용되고 있습니다.
Java에서 주요 벤치마크는 Defects4J로,[56] Martinez 등에 의해 최초로 조사되었으며,[24][62] 현재는 Java용 프로그램 복구에 관한 대부분의 연구 논문에서 광범위하게 사용되고 있습니다.Quixbugs [63]벤치마크와 같은 대체 벤치마크가 존재합니다.이 벤치마크에는 프로그램 [64]복구용 버그가 포함되어 있습니다.Java 버그의 다른 벤치마크에는 과거의 커밋에 근거한 Bugs.[65]jar와[66] 연속적인 통합 빌드 실패의 벤치마크인 BERS가 있습니다.
툴의 예
자동 버그 수정은 컴퓨터 과학에서 활발한 연구 주제입니다.특히 C 및 Java 프로그램에는 다양한 버그 수정 기술이 구현되어 있습니다.이러한 구현의 대부분은 기술을 입증하기 위한 연구 프로토타입입니다. 즉, 현재 구현이 산업용으로 사용될 준비가 되어 있는지 여부는 불분명합니다.
C
- ClearView:[45] 도입된 시스템의 바이너리 패치를 생성하는 생성 및 검증 도구입니다.10가지 보안 취약점 사례에 대해 평가합니다.이후 연구에서는 10건 [7]중 최소 4건에 대해 올바른 패치를 생성하는 것으로 나타났습니다.
- GenProg:[6][15] 버그 생성 및 검증에 필수적인 수정 도구입니다.이는 ManyBugs 벤치마크의 맥락에서 광범위하게 연구되어 왔다.
- SemFix:[25] C용 최초의 해결사 기반 버그 수정 도구입니다.
- 코드 페이지:[11]프로그램 간에 코드를 직접 전송하여 C 프로그램용 패치를 생성하는 최초의 버그 수정 도구입니다.C 패치를 생성하지만 소스 [11]코드 없이 바이너리 프로그램에서 코드를 추출할 수 있습니다.
- Leak Fix:[40] C 프로그램의 메모리 누수를 자동으로 수정하는 도구입니다.
- 예언자:[8]머신러닝 기술을 사용하여 과거 인적 패치에서 유용한 지식을 학습하고 올바른 패치를 인식하는 최초의 생성 및 검증 도구입니다.GenProg와 동일한 벤치마크에서 평가되며 69건 [8]중 18건에 대해 올바른 패치(인적 패치)를 생성합니다.
- 검색 복구:[33]다른 곳에서 가져온 코드 조각을 사용하여 버그 코드를 교체하는 도구입니다.IntroClass[67] 벤치마크에서 평가되며 GenProg, RSRepair 및 AE보다 훨씬 높은 품질의 패치를 생성합니다.
- Angelix:[26] 개량된 해결사 기반의 버그 수정 도구.GenProg 벤치마크에서 평가됩니다.69건 중 10건에 대해 인적 패치에 해당하는 패치를 생성합니다.
- Learn 2Fix:[61] 최초의 인간 루프 반자동 복구 도구.GenProg를 확장하여 버그를 보고하는 사용자에 대한 시스템 쿼리에 의해 의미 버그가 관찰되는 조건을 학습합니다.정수를 취하여 생성하는 프로그램에서만 작동합니다.
자바
- PAR:[18] 수동으로 정의된 수정 템플릿 세트를 사용하는 생성 및 검증 도구입니다.이후 연구에서는 [14]PAR에서 고정 템플릿의 일반화 가능성에 대한 우려가 제기되었습니다.
- NOPOL:[27] 조건문 수정에 초점을 맞춘 해결사 기반 도구입니다.
- QACrash Fix:[34] Q&A 웹사이트에서 수정을 마이닝하여 Java 크래시 버그를 수정하는 도구입니다.
- Astor:[68] JGenProg를 포함한 Java용 자동 복구 라이브러리. GenProg의 Java 구현입니다.
- ARJA:[69] 다목적 유전자 프로그래밍에 기반한 Java 복구 도구입니다.
- NpeFix:[70] Null Pointer용 자동 복구 도구Java의 예외, Github에서 사용 가능.
기타 언어
- AutoFixE:[9] Eiffel 언어용 버그 수정 도구입니다.생성된 패치를 검증하기 위해 Effel 프로그램의 계약서(즉, 정식 사양서 형식)를 사용합니다.
- Getafix:[37] 순수하게 AST 변환으로 작동하므로 파서와 포맷터만 필요합니다.페이스북에서는 Hack, Java, Objective-C에 적용되고 있습니다.
독자 사양
레퍼런스
- ^ Rinard, Martin C. (2008). "Technical perspective Patching program errors". Communications of the ACM. 51 (12): 86. doi:10.1145/1409360.1409381. S2CID 28629846.
- ^ Harman, Mark (2010). "Automated patching techniques". Communications of the ACM. 53 (5): 108. doi:10.1145/1735223.1735248. S2CID 9729944.
- ^ Monperrus, Martin (2018). "Automatic Software Repair". ACM Computing Surveys. 51 (1): 1–24. arXiv:1807.00515. doi:10.1145/3105906. S2CID 216145256.
- ^ Gazzola, Luca; Micucci, Daniela; Mariani, Leonardo (2019). "Automatic Software Repair: A Survey" (PDF). IEEE Transactions on Software Engineering. 45 (1): 34–67. doi:10.1109/TSE.2017.2755013. hdl:10281/184798. S2CID 57764123.
- ^ Tan, Shin Hwei; Roychoudhury, Abhik (2015). "relifix: Automated repair of software regressions". 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering. IEEE. pp. 471–482. doi:10.1109/ICSE.2015.65. ISBN 978-1-4799-1934-5. S2CID 17125466.
- ^ a b c d e f Weimer, Westley; Nguyen, ThanhVu; Le Goues, Claire; Forrest, Stephanie (2009). "Automatically finding patches using genetic programming". Proceedings of the 31st International Conference on Software Engineering. IEEE. pp. 364–374. CiteSeerX 10.1.1.147.8995. doi:10.1109/ICSE.2009.5070536. ISBN 978-1-4244-3453-4. S2CID 1706697.
- ^ a b c d e f g h i Qi, Zichao; Long, Fan; Achour, Sara; Rinard, Martin (2015). "An Anlysis of Patch Plausibility and Correctness for Generate-and-Validate Patch Generation Systems". Proceedings of the 2015 International Symposium on Software Testing and Analysis. ACM. CiteSeerX 10.1.1.696.5616. doi:10.1145/2771783.2771791. ISBN 978-1-4503-3620-8. S2CID 6845282.
- ^ a b c d e f g h i Long, Fan; Rinard, Martin (2016). "Automatic patch generation by learning correct code". Proceedings of the 43rd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. ACM. pp. 298–312. doi:10.1145/2837614.2837617. ISBN 978-1-4503-3549-2. S2CID 6091588.
- ^ a b Pei, Yu; Furia, Carlo A.; Nordio, Martin; Wei, Yi; Meyer, Bertrand; Zeller, Andreas (May 2014). "Automated Fixing of Programs with Contracts". IEEE Transactions on Software Engineering. 40 (5): 427–449. arXiv:1403.1117. Bibcode:2014arXiv1403.1117P. doi:10.1109/TSE.2014.2312918. S2CID 53302638.
- ^ "Contract-based Data Structure Repair Using Alloy". CiteSeerX 10.1.1.182.4390.
{{cite journal}}:Cite 저널 요구 사항journal=(도움말) - ^ a b c d e f Sidiroglou, Stelios; Lahtinen, Eric; Long, Fan; Rinard, Martin (2015). "Automatic Error Elimination by Multi-Application Code Transfer". Proceedings of the 36th ACM SIGPLAN Conference on Programming Language Design and Implementation.
- ^ Qi, Yuhua; Mao, Xiaoguang; Lei, Yan; Dai, Ziying; Wang, Chengsong (2014). "The Strength of Random Search on Automated Program Repair". Proceedings of the 36th International Conference on Software Engineering. ICSE 2014. Austin, Texas: ACM. pp. 254–265. doi:10.1145/2568225.2568254. ISBN 978-1-4503-2756-5. S2CID 14976851.
- ^ a b c Long, Fan; Rinard, Martin (2015). "Staged Program Repair with Condition Synthesis". Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering. ESEC/FSE 2015. Bergamo, Italy: ACM. pp. 166–178. CiteSeerX 10.1.1.696.9059. doi:10.1145/2786805.2786811. ISBN 978-1-4503-3675-8. S2CID 5987616.
- ^ a b Monperrus, Martin (2014). "A Critical Review of "Automatic Patch Generation Learned from Human-written Patches": Essay on the Problem Statement and the Evaluation of Automatic Software Repair". Proceedings of the 36th International Conference on Software Engineering. ICSE 2014. New York, New York: ACM. pp. 234–242. arXiv:1408.2103. doi:10.1145/2568225.2568324. ISBN 978-1-4503-2756-5. S2CID 13355761.
- ^ a b c Le Goues, Claire; Dewey-Vogt, Michael; Forrest, Stephanie; Weimer, Westley (2012). "A Systematic Study of Automated Program Repair: Fixing 55 out of 105 Bugs for $8 Each". 2012 34th International Conference on Software Engineering (ICSE). IEEE. pp. 3–13. CiteSeerX 10.1.1.661.9690. doi:10.1109/ICSE.2012.6227211. ISBN 978-1-4673-1067-3. S2CID 10987936.
- ^ Qi, Zichao; Long, Fan; Achour, Sara; Rinard, Martin (2015-07-13). "An analysis of patch plausibility and correctness for generate-and-validate patch generation systems". Proceedings of the 2015 International Symposium on Software Testing and Analysis. New York, NY, USA: ACM: 24–36. doi:10.1145/2771783.2771791. hdl:1721.1/101586. ISBN 9781450336208. S2CID 6845282.
- ^ Ginelli, Davide; Martinez, Matias; Mariani, Leonardo; Monperrus, Martin (2022). "A comprehensive study of code-removal patches in automated program repair". Empirical Software Engineering. 27 (4): 97. doi:10.1007/s10664-021-10100-7. ISSN 1382-3256. S2CID 228376263.
- ^ a b c d e Kim, Dongsun; Nam, Jaechang; Song, Jaewoo; Kim, Sunghun (2013). "Automatic Patch Generation Learned from Human-written Patches". Proceedings of the 2013 International Conference on Software Engineering. ICSE '13'. IEEE Press. pp. 802–811. ISBN 978-1-4673-3076-3.
- ^ Martinez, Matias; Monperrus, Martin (2018), "Ultra-Large Repair Search Space with Automatically Mined Templates: The Cardumen Mode of Astor", Search-Based Software Engineering, Springer International Publishing, pp. 65–86, arXiv:1712.03854, doi:10.1007/978-3-319-99241-9_3, ISBN 9783319992402, S2CID 49651730
- ^ Koyuncu, Anil; Liu, Kui; Bissyandé, Tegawendé F.; Kim, Dongsun; Klein, Jacques; Monperrus, Martin; Le Traon, Yves (2020). "FixMiner: Mining relevant fix patterns for automated program repair". Empirical Software Engineering. 25 (3): 1980–2024. arXiv:1810.01791. doi:10.1007/s10664-019-09780-z. S2CID 52915728.
- ^ Martinez, Matias; Weimer, Westley; Monperrus, Martin (2014). "Do the fix ingredients already exist? An empirical inquiry into the redundancy assumptions of program repair approaches". Proceedings of the 36th International Conference on Software Engineering. pp. 492–495. arXiv:1403.6322. doi:10.1145/2591062.2591114. ISBN 9781450327688. S2CID 9533437.
- ^ Barr, Earl T.; Brun, Yuriy; Devanbu, Premkumar; Harman, Mark; Sarro, Federica (2014). "The plastic surgery hypothesis". Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering - FSE 2014. pp. 306–317. CiteSeerX 10.1.1.646.9678. doi:10.1145/2635868.2635898. ISBN 9781450330565. S2CID 14002308.
- ^ White, Martin; Tufano, Michele; Martinez, Matias; Monperrus, Martin; Poshyvanyk, Denys (2019). "Sorting and Transforming Program Repair Ingredients via Deep Learning Code Similarities". 2019 IEEE 26th International Conference on Software Analysis, Evolution and Reengineering (SANER). pp. 479–490. arXiv:1707.04742. doi:10.1109/SANER.2019.8668043. ISBN 978-1-7281-0591-8. S2CID 13578285.
- ^ a b Wen, Ming; Chen, Junjie; Wu, Rongxin; Hao, Dan; Cheung, Shing-Chi (2018). "Context-aware patch generation for better automated program repair". Proceedings of the 40th International Conference on Software Engineering - ICSE '18. New York, New York, USA: ACM Press: 1–11. doi:10.1145/3180155.3180233. ISBN 9781450356381. S2CID 3374770.
- ^ a b c d Nguyen, Hoang Duong Thien; Qi, Dawei; Roychoudhury, Abhik; Chandra, Satish (2013). "SemFix: Program Repair via Semantic Analysis". Proceedings of the 2013 International Conference on Software Engineering. ICSE '13'. San Francisco, California: IEEE Press. pp. 772–781. ISBN 978-1-4673-3076-3.
- ^ a b c d Mechtaev, Sergey; Yi, Jooyong; Roychoudhury, Abhik (2016). "Angelix: scalable multiline program patch synthesis via symbolic analysis". Proceedings of the 38th International Conference on Software Engineering, ICSE 2016, Austin, Texas, May 14-22, 2016. pp. 691–701.
- ^ a b Xuan, Jifeng; Martinez, Matias; DeMarco, Favio; Clément, Maxime; Lamelas, Sebastian; Durieux, Thomas; Le Berre, Daniel; Monperrus, Martin (2016). "Nopol: Automatic Repair of Conditional Statement Bugs in Java Programs". IEEE Transactions on Software Engineering. 43: 34–55. arXiv:1811.04211. doi:10.1109/TSE.2016.2560811. S2CID 15132155.
- ^ Jha, Susmit; Gulwani, Sumit; Seshia, Sanjit A.; Tiwari, Ashish (2010-05-01). Oracle-guided component-based program synthesis. ACM. pp. 215–224. doi:10.1145/1806799.1806833. ISBN 9781605587196. S2CID 6344783.
- ^ Durieux, Thomas; Monperrus, Martin (2016-05-14). "DynaMoth". DynaMoth: dynamic code synthesis for automatic program repair (PDF). pp. 85–91. doi:10.1145/2896921.2896931. ISBN 9781450341516. S2CID 16025812.
- ^ Galenson, Joel; Reames, Philip; Bodik, Rastislav; Hartmann, Björn; Sen, Koushik (2014-05-31). CodeHint: dynamic and interactive synthesis of code snippets. ACM. pp. 653–663. doi:10.1145/2568225.2568250. ISBN 9781450327565. S2CID 10656182.
- ^ Le, Xuan-Bach D.; Chu, Duc-Hiep; Lo, David; Le Goues, Claire; Visser, Willem (2017-08-21). Proceedings of the 2017 11th Joint Meeting on Foundations of Software Engineering - ESEC/FSE 2017. ACM. pp. 593–604. doi:10.1145/3106237.3106309. ISBN 9781450351058. S2CID 1503790.
- ^ Alur, Rajeev; Bodik, Rastislav; Juniwal, Garvit; Martin, Milo M. K.; Raghothaman, Mukund; Seshia, Sanjit A.; Singh, Rishabh; Solar-Lezama, Armando; Torlak, Emina; Udupa, Abhishek (2013). "Syntax-guided synthesis". 2013 Formal Methods in Computer-Aided Design. pp. 1–8. CiteSeerX 10.1.1.377.2829. doi:10.1109/fmcad.2013.6679385. ISBN 9780983567837.
- ^ a b Ke, Yalin; Stolee, Kathryn; Le Goues, Claire; Brun, Yuriy (2015). "Repairing Programs with Semantic Code Search". Proceedings of the 2015 30th IEEE/ACM International Conference on Automated Software Engineering. ASE 2015. Lincoln, Nebraska: ACM. pp. 295–306. doi:10.1109/ASE.2015.60. ISBN 978-1-5090-0025-8. S2CID 16361458.
- ^ a b Gao, Qing; Zhang, Hansheng; Wang, Jie; Xiong, Yingfei; Zhang, Lu; Mei, Hong (2015). "Fixing Recurring Crash Bugs via Analyzing Q&A Sites". 2015 30th IEEE/ACM International Conference on Automated Software Engineering (ASE). IEEE. pp. 307–318. doi:10.1109/ASE.2015.81. ISBN 978-1-5090-0025-8. S2CID 2513924.
- ^ Baudry, Benoit; Chen, Zimin; Etemadi, Khashayar; Fu, Han; Ginelli, Davide; Kommrusch, Steve; Martinez, Matias; Monperrus, Martin; Ron Arteaga, Javier; Ye, He; Yu, Zhongxing (2021). "A Software-Repair Robot Based on Continual Learning". IEEE Software. 38 (4): 28–35. arXiv:2012.06824. doi:10.1109/MS.2021.3070743. ISSN 0740-7459. S2CID 229156186.
- ^ Chen, Zimin; Kommrusch, Steve James; Tufano, Michele; Pouchet, Louis-Noel; Poshyvanyk, Denys; Monperrus, Martin (2019). "SEQUENCER: Sequence-to-Sequence Learning for End-to-End Program Repair". IEEE Transactions on Software Engineering: 1. arXiv:1901.01808. doi:10.1109/TSE.2019.2940179. ISSN 0098-5589. S2CID 57573711.
- ^ a b Bader, Johannes; Scott, Andrew; Pradel, Michael; Chandra, Satish (2019-10-10). "Getafix: learning to fix bugs automatically". Proceedings of the ACM on Programming Languages. 3 (OOPSLA): 159:1–159:27. doi:10.1145/3360585.
- ^ Long, Fan; Sidiroglou-Douskos, Stelios; Rinard, Martin (2014). "Automatic Runtime Error Repair and Containment via Recovery Shepherding". Proceedings of the 35th ACM SIGPLAN Conference on Programming Language Design and Implementation. PLDI '14'. New York, New York: ACM. pp. 227–238. doi:10.1145/2594291.2594337. ISBN 978-1-4503-2784-8. S2CID 6252501.
- ^ Dobolyi, Kinga; Weimer, Westley (2008). "Changing Java's Semantics for Handling Null Pointer Exceptions". 2008 19th International Symposium on Software Reliability Engineering (ISSRE). pp. 47–56. CiteSeerX 10.1.1.147.6158. doi:10.1109/ISSRE.2008.59. S2CID 1454939.
- ^ a b c d Gao, Qing; Xiong, Yingfei; Mi, Yaqing; Zhang, Lu; Yang, Weikun; Zhou, Zhaoping; Xie, Bing; Mei, Hong (2015). "Safe Memory-leak Fixing for C Programs". Proceedings of the 37th International Conference on Software Engineering – Volume 1. ICSE '15'. Piscataway, New Jersey: IEEE Press. pp. 459–470. ISBN 978-1-4799-1934-5.
- ^ Muşlu, Kıvanç; Brun, Yuriy; Holmes, Reid; Ernst, Michael D.; Notkin, David; Muşlu, Kıvanç; Brun, Yuriy; Holmes, Reid; Ernst, Michael D.; Notkin, David (19 October 2012). "Speculative analysis of integrated development environment recommendations, Speculative analysis of integrated development environment recommendations". ACM SIGPLAN Notices. 47 (10): 669, 669–682, 682. CiteSeerX 10.1.1.259.6341. doi:10.1145/2384616.2384665. ISSN 0362-1340. S2CID 5795141.
- ^ Urli, Simon; Yu, Zhongxing; Seinturier, Lionel; Monperrus, Martin (27 May 2018). "How to design a program repair bot?". How to design a program repair bot?: insights from the repairnator project. pp. 95–104. arXiv:1811.09852. doi:10.1145/3183519.3183540. ISBN 9781450356596. S2CID 49237449.
- ^ Monperrus, Martin (2019). "Explainable Software Bot Contributions: Case Study of Automated Bug Fixes". 2019 IEEE/ACM 1st International Workshop on Bots in Software Engineering (BotSE). pp. 12–15. arXiv:1905.02597. Bibcode:2019arXiv190502597M. doi:10.1109/BotSE.2019.00010. ISBN 978-1-7281-2262-5. S2CID 146808763.
- ^ Monperrus, Martin; Urli, Simon; Durieux, Thomas; Martinez, Matias; Baudry, Benoit; Seinturier, Lionel (2019). "Repairnator patches programs automatically". Ubiquity. 2019 (July): 1–12. arXiv:1910.06247. Bibcode:2019arXiv191006247M. doi:10.1145/3349589. S2CID 198986312.
- ^ a b Perkins, Jeff H.; et al. (2009). "Automatically patching errors in deployed software". Proceedings of the ACM SIGOPS 22nd symposium on Operating systems principles. ACM. pp. 87–102. CiteSeerX 10.1.1.157.5877. doi:10.1145/1629575.1629585. ISBN 978-1-60558-752-3. S2CID 7597529.
- ^ Durieux, Thomas; Hamadi, Youssef; Monperrus, Martin (2017). "Production-driven patch generation". 2017 IEEE/ACM 39th International Conference on Software Engineering: New Ideas and Emerging Technologies Results Track (ICSE-NIER). pp. 23–26. arXiv:1812.04475. doi:10.1109/icse-nier.2017.8. ISBN 978-1-5386-2675-7. S2CID 7737476.
- ^ Durieux, Thomas; Hamadi, Youssef; Monperrus, Martin (2018). "Fully Automated HTML and Javascript Rewriting for Constructing a Self-Healing Web Proxy". 2018 IEEE 29th International Symposium on Software Reliability Engineering (ISSRE). pp. 1–12. arXiv:1803.08725. Bibcode:2018arXiv180308725D. doi:10.1109/ISSRE.2018.00012. ISBN 978-1-5386-8321-7. S2CID 4268784.
- ^ Chen, Zimin; Kommrusch, Steve James; Monperrus, Martin (2022). "Neural Transfer Learning for Repairing Security Vulnerabilities in C Code". IEEE Transactions on Software Engineering: 1. doi:10.1109/TSE.2022.3147265. ISSN 0098-5589. S2CID 233296471.
- ^ Qi, Yuhua; Mao, Xiaoguang; Lei, Yan; Dai, Ziying; Wang, Chengsong (2014-05-31). The strength of random search on automated program repair. ACM. pp. 254–265. doi:10.1145/2568225.2568254. ISBN 9781450327565. S2CID 14976851.
- ^ Martinez, Matias; Monperrus, Martin (2013-11-28). "Mining software repair models for reasoning on the search space of automated program fixing". Empirical Software Engineering. 20 (1): 176–205. arXiv:1311.3414. Bibcode:2013arXiv1311.3414M. doi:10.1007/s10664-013-9282-8. ISSN 1382-3256. S2CID 1676168.
- ^ a b Long, Fan; Rinard, Martin (2016). "An Analysis of the Search Spaces for Generate and Validate Patch Generation Systems". Proceedings of the 38th International Conference on Software Engineering. ICSE '16. New York, New York: ACM. pp. 702–713. arXiv:1602.05643. doi:10.1145/2884781.2884872. hdl:1721.1/113656. ISBN 978-1-4503-3900-1. S2CID 7426809.
- ^ a b Martinez, Matias; Monperrus, Martin (2019). "Astor: Exploring the design space of generate-and-validate program repair beyond GenProg". Journal of Systems and Software. 151: 65–80. arXiv:1802.03365. doi:10.1016/j.jss.2019.01.069. S2CID 3619320.
- ^ Etemadi, Khashayar; Tarighat, Niloofar; Yadav, Siddharth; Martinez, Matias; Monperrus, Martin (2022). "Estimating the potential of program repair search spaces with commit analysis". Journal of Systems and Software. 188: 111263. doi:10.1016/j.jss.2022.111263. S2CID 246485882.
- ^ Smith, Edward K.; Barr, Earl T.; Le Goues, Claire; Brun, Yuriy (2015). "Is the Cure Worse Than the Disease? Overfitting in Automated Program Repair". Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering. ESEC/FSE 2015. New York, New York: ACM. pp. 532–543. doi:10.1145/2786805.2786825. ISBN 978-1-4503-3675-8. S2CID 6300790.
- ^ Yu, Zhongxing; Martinez, Matias; Danglot, Benjamin; Durieux, Thomas; Monperrus, Martin (2018). "Alleviating patch overfitting with automatic test generation: a study of feasibility and effectiveness for the Nopol repair system". Empirical Software Engineering. 24: 33–67. arXiv:1810.10614. Bibcode:2018arXiv181010614Y. doi:10.1007/s10664-018-9619-4. ISSN 1382-3256. S2CID 21659819.
- ^ a b Martinez, Matias; Durieux, Thomas; Sommerard, Romain; Xuan, Jifeng; Monperrus, Martin (2016-10-25). "Automatic repair of real bugs in java: a large-scale experiment on the defects4j dataset". Empirical Software Engineering. 22 (4): 1936–1964. arXiv:1811.02429. doi:10.1007/s10664-016-9470-4. ISSN 1382-3256. S2CID 24538587.
- ^ Le, Xuan Bach D.; Thung, Ferdian; Lo, David; Goues, Claire Le (2018-03-02). "Overfitting in semantics-based automated program repair". Empirical Software Engineering. 23 (5): 3007–3033. doi:10.1007/s10664-017-9577-2. ISSN 1382-3256. S2CID 3635768.
- ^ Xin, Qi; Reiss, Steven P. (2017-07-10). "Identifying test-suite-overfitted patches through test case generation". Proceedings of the 26th ACM SIGSOFT International Symposium on Software Testing and Analysis. New York, NY, USA: ACM: 226–236. doi:10.1145/3092703.3092718. ISBN 978-1-4503-5076-1. S2CID 20562134.
- ^ Ye, He; Gu, Jian; Martinez, Matias; Durieux, Thomas; Monperrus, Martin (2021). "Automated Classification of Overfitting Patches with Statically Extracted Code Features". IEEE Transactions on Software Engineering: 1. arXiv:1910.12057. doi:10.1109/tse.2021.3071750. ISSN 0098-5589. S2CID 204954907.
- ^ Ye, He; Martinez, Matias; Monperrus, Martin (2021). "Automated patch assessment for program repair at scale". Empirical Software Engineering. 26 (2): 20. arXiv:1909.13694. doi:10.1007/s10664-020-09920-w. ISSN 1382-3256. S2CID 203594006.
- ^ a b Böhme, Marcel; Geethal, Charaka; Pham, Van-Thuan (2020). "Human-In-The-Loop Automatic Program Repair". Proceedings of the 13th International Conference on Software Testing, Validation and Verification. ICST 2020. Porto, Portugal: IEEE. pp. 274–285. arXiv:1912.07758. doi:10.1109/ICST46399.2020.00036. ISBN 978-1-7281-5778-8. S2CID 209386817.
- ^ Hua, Jinru; Zhang, Mengshi; Wang, Kaiyuan; Khurshid, Sarfraz (2018). "Towards practical program repair with on-demand candidate generation". Proceedings of the 40th International Conference on Software Engineering - ICSE '18. New York, New York, USA: ACM Press: 12–23. doi:10.1145/3180155.3180245. ISBN 9781450356381. S2CID 49666327.
- ^ Lin, Derrick; Koppel, James; Chen, Angela; Solar-Lezama, Armando (2017). "QuixBugs: a multi-lingual program repair benchmark set based on the quixey challenge". Proceedings Companion of the 2017 ACM SIGPLAN International Conference on Systems, Programming, Languages, and Applications: Software for Humanity - SPLASH Companion 2017. New York, New York, USA: ACM Press: 55–56. doi:10.1145/3135932.3135941. ISBN 9781450355148.
- ^ Ye, He; Martinez, Matias; Durieux, Thomas; Monperrus, Martin (2021). "A comprehensive study of automatic program repair on the QuixBugs benchmark". Journal of Systems and Software. 171: 110825. arXiv:1805.03454. doi:10.1016/j.jss.2020.110825. ISSN 0164-1212. S2CID 221978135.
- ^ Saha, Ripon K.; Lyu, Yingjun; Lam, Wing; Yoshida, Hiroaki; Prasad, Mukul R. (2018). "Bugs.jar: a large-scale, diverse dataset of real-world Java bugs". Proceedings of the 15th International Conference on Mining Software Repositories. MSR '18: 10–13. doi:10.1145/3196398.3196473. ISBN 9781450357166. S2CID 50770093.
- ^ Madeiral, Fernanda; Urli, Simon; Maia, Marcelo; Monperrus, Martin (2019). "BEARS: An Extensible Java Bug Benchmark for Automatic Program Repair Studies". 2019 IEEE 26th International Conference on Software Analysis, Evolution and Reengineering (SANER). pp. 468–478. arXiv:1901.06024. doi:10.1109/SANER.2019.8667991. ISBN 978-1-7281-0591-8. S2CID 58028949.
- ^ Le Goues, Claire; Holtschulte, Neal; Smith, Edward; Brun, Yuriy; Devanbu, Premkumar; Forrest, Stephanie; Weimer, Westley (2015). "The Many Bugs and Intro Class Benchmarks for Automated Repair of C Programs". IEEE Transactions on Software Engineering. 41 (12): 1236–1256. doi:10.1109/TSE.2015.2454513.
- ^ Martinez, Matias; Monperrus, Martin (2016). "ASTOR: A Program Repair Library for Java" (PDF). Proceedings of ISSTA, Demonstration Track. pp. 441–444. doi:10.1145/2931037.2948705. ISBN 978-1-4503-4390-9. S2CID 7322935.
- ^ Yuan, Yuan; Banzhaf, Wolfgang (2020). "ARJA: Automated Repair of Java Programs via Multi-Objective Genetic Programming". IEEE Transactions on Software Engineering. 46 (10): 1040–1067. arXiv:1712.07804. doi:10.1109/TSE.2018.2874648. S2CID 25222219.
- ^ Durieux, Thomas (2017). "Dynamic Patch Generation for Null Pointer Exceptions Using Metaprogramming". 2017 IEEE 24th International Conference on Software Analysis, Evolution and Reengineering (SANER). pp. 349–358. arXiv:1812.00409. doi:10.1109/SANER.2017.7884635. ISBN 978-1-5090-5501-2. S2CID 2736203.
- ^ "AI is coming for your coding job". Sifted. 13 March 2019. Retrieved 2019-04-15.
외부 링크
- 자동화된 프로그램 수리 조사와 관련된 program-repair.org 데이터 세트, 도구 등