버그를 재현하기 위한 정보는 어떻게 수집하나요?

안녕하세요.
버그 재현하기위한 방법이 궁금합니다.
(로깅에 관련된 글을 보고나니 문뜩 버그발생시 관련된 정보를 수집 할 수 있겠다는 생각이 드는군요.)


버그 재현이 왜 필요하고 어떻게 버그를 재현 할 수 있을까요?
이용자에게 버그(“나 이러이러한 버그를 겪었다”)를 통보 받았습니다.
버그를 바로잡고 싶어도 난감한 점은 해당 버그를 파악하기 힘듭니다.

버그 재현은 버그를 파악하고 수정하는데 많은 기여를 한다고 생각합니다.

  • 어떠한 상황과 환경에서 일어나는지 재현을 통해 “아 이러이러한 부분에서 버그가 발생하는구나”
    라고 유추 할 수 있다고 봅니다.

그래서 버그재현하기위해 어떤 것이 필요할까요?
버그가 발생된 같은 환경과 상황을 만들어주면 되겠죠.
하지만 이용자와 같은 경험이 없기 때문에 버그와 관련된 정보를 얻기 힘듭니다.

따라서 이용자에게 버그 발생시 어떤 상황(동작), 동작환경 등을 묻습니다.
(Window 11, 데스크탑 앱, “글을 작성하던 중 Alt + F4누르니 앱이 꺼졌어요”) 네 ??
이 것은 좋은 방법이긴 하나, 문제점으로는 이용자의 대답에 강력히 의존적이라는 것입니다.
만약 이용자가 잘못된 기억, 지식 등(또는 나의 문제로)
의사소통에 문제가 생긴다면 버그 재현이 힘들어 질 것입니다.

그럼 버그 재현하기 위해 또 다른 방법은 없을까요?
이 것이 고민입니다.
(정확히는 버그 제로?=> 그 것에 필요한 버그 재현입니다.)

  • 버그 재현을 위한 어떤 노력들이 있을까요?

:loudspeaker: 누군가는 로깅을 통해 버그가 발생된 환경에 대해 기록을하라고 합니다.

  • 버그 재현 하기 위해 로깅을하고
    재현이 불가능한 버그 혹은 간헐적인 버그 (10만번에 한 번 꼴)
    많은 시도 끝에 재현이 불가능하다면 버그를 잡기가 힘들고,
    무시해도 될 수준이기에 미해결로 남겨두는 것도 하나의 방법이라고 합니다.

:loudspeaker: 다른 누군가는 테스트를 통해 미리 버그걸러내라고 합니다.

  • 테스트를 통해 발생 가능한 버그를 파악하고 미리 수정합니다.
    => 버그 수정에 드는 비용을 줄이기 위해 테스트 자동화 시스템을 만들면 좋다고 합니다.

  • 테스트 자동화 환경과 개발 환경은 약간의 차이가 있기 때문에 로컬 환경에서 버그 재현이 힘들수도 있습니다.
    이 문제점을 해결하기 위해 테스트 자동화 및 개발 환경을 통합합니다.
    => Docker과 같은 가상화 플랫폼을 활용하여 통합환경을 구축합니다.

테스트 통합환경의 주요 이점입니다.

  1. 버그를 재현 (+ 디버그)
  2. 버그 수정
  3. 수정 사항 확인

마지막으로 검증되지 않은 자료 => 검색을 통해 얻은 내용을 짜집기 한 것으로 불확실한 내용포함되어 있습니다.

좋은 주말되세요 :grin:

좋아요 1

버그 재생산을 그냥 버그 재현으로 표현하는게 자연스러운 것 같습니다.

우선, 정보 수집을 잘 하셨네요. 보통 그렇게 버그를 재현합니다.

  • 버그가 발생한 사용자에게 정보 수집
  • 경고 또는 오류 로깅을 해서 버그가 발생한 사용자에게 로깅 정보를 요청
    • 수집한 정보에서 버그 발생 시각의 로그 정보를 이용해 버그를 재현
  • 테스트 자동화를 통해 버그 없는 코드 유지
    • 테스트 케이스를 상세히 구성해서 모든 테스트가 통과가 된 경우에만 배포
    • 하지만 버그를 현저히 줄일 수 있는 예방책이고 버그가 발생했을 때의 버그 재현과는 상관이 없음

어쨌든 버그가 발생한 사용자에게 재현 가능한 상당한 정보를 수집해야 하는 것은 맞습니다. 이때 질문 내용이라던가 수집된 정보를 이용해 버그를 재현하는 능력은 개발 경험이 어느정도 축적이 되어야 좀 잘할 수 있기는 합니다.

사용자 관점에서의 버그 재현은 사용자 버그가 발생한 상황을 잘 파악하는
의사소통 능력과 관련이 있고요,

프로그래머 관점에서의 버그 재현은 프로그램의 소스코드 이해도가 높아야 가능한데요, 동일한 패턴이 아니라 패턴을 알 수 없을 때 숨겨진 패턴을 파악해야 하기 때문입니다.

좋아요 2