debugging

5 posts

main 브랜치가 깨졌습니다. 200개의 커밋을 뒤져야 합니다.

git bisect은 수동 커밋 탐색을 자동화된 이진 검색으로 바꿉니다. 모든 커밋을 하나씩 checkout하지 않고 버그를 도입한 정확한 커밋을 찾는 방법을 알아보세요.

main에서 CI가 빨간불이지만 어제는 초록불이었습니다. 그사이 어딘가에 버그가 기어들어왔습니다. 200개의 커밋을 스크롤하며 디프를 읽고 추측할 수 있습니다. Slack에 물어보고 누군가 관련 코드를 건드렸던 것을 기억하길 바랄 수 있습니다. 아니면 Git에게 일을 맡길 수도…

에러 추적기는 어디서 죽었는지 압니다. 하지만 재현은 도와주지 않습니다

stack trace는 크래시가 어디서 발생했는지 알려주지만, 원인은 알려주지 않습니다. 프로덕션 크래시를 실제로 디버깅할 수 있는 로컬 테스트 케이스로 바꾸는 capture-and-replay 패턴을 소개합니다.

프로덕션에서 정확히 어디서 크래시가 났는지 압니다. stack trace가 의 147행을 가리킵니다. 예외는 에 대한 입니다. 코드를 pull하고 테스트를 실행하면 모두 통과합니다. 샘플 페이로드로 endpoint를 수동으로 호출해도 잘 작동합니다. 버그는 실재합니다. 고객들이 이를…

크래시 상관관계는 거짓말한다. 진짜 버그를 가리키게 만드는 방법

Statistical debugging은 크래시와 연관된 predicate를 찾지만, 상관관계는 파일과 줄 번호가 아니다. 상관관계 점수에서 실제 버그 위치까지 순위 매기기, 필터링, 삼각 측량하는 방법이다.

Statistical debugging은 근본 원인이 아닌 predicate의 정렬된 목록을 준다. 모든 분기와 null check를 계측하고, 십만 번의 실행을 돌리면, 알고리즘이 점수판을 건네준다. 의 의 중요도는 0.94다. 의 도 마찬가지다. 하나는 버그고, 다른 하나는…

Statistical debugging은 printf 디버깅을 끝낼 거라 했다. 대부분의 팀은 결국 작동시키지 못했다

Statistical debugging은 프로그램 동작과 실패를 연관 지어 버그를 정확히 찍어주겠다고 약속했다. 이 아이디어가 연구 논문에서 운영 환경 시스템으로 건너오지 못한 이유를 설명한다.

Statistical debugging은 시대를 끝낼 예정이었다. 코드를 계측하고, 수천 번의 실행에서 트레이스를 수집하고, 상관관계 분석을 실행하면, 도구가 크래시를 유발할 가능성 순으로 모든 분기와 null check를 순위 매기는 것을 지켜볼 수 있을 것이다. 2000년대 중반의…

Mutant가 무엇을 바꿨는지 모를 때 Surviving Mutant를 죽이는 방법

Mutation testing이 survivor를 찾았는데, 그 mutation이 도대체 무엇을 하는지 전혀 모르겠다. Mutant를 먼저 이해하지 않고도 올바른 테스트를 작성하는 단계별 방법이다.

Mutation testing 리포트는 survivor로 가득 차 있고, 그중 최소 하나는 도저히 이해할 수 없는 상태다. 도구는 47번째 줄의 를 로 뒤집었거나, 전체 조걸문 블록을 로 바꿨거나, 테스트 대상인지도 몰랐던 문자열 리터럴을 mutate했다고 말한다. diff를 세…