정보가 거의없는 디버깅을위한 팁? [닫은]


11

나는 상당히 큰 코드베이스로 프로젝트를 물려 받았으며 원래 개발자는 거의 이메일에 답장하지 않습니다. 그것에 몇 가지 일을 할 수있는 다양한 방법이 있으며, 나는 그것들을 모두 모른다. 이 경로를 따라 많은 중복 코드 (예 : 상대적으로 동일한 5 페이지, 5 페이지에 복사 된 코드)에 포함 된 기능 및 데이터베이스의 일부 미묘한 문제 (우리 모두 스파게티 코드에 대해 들어 보았습니다) 그러나 스파게티 데이터베이스에 대해 들어 본 적이 있습니까?)

이 모든 것은 대부분 문제없이 처리 할 수 ​​있습니다.

문제는 클라이언트가 어딘가에서 버그를 발견했을 때입니다. 그들은 보통 종료 문제의 스크린 샷을 보내며 "이걸 좀 볼 수 있을까요?"라고 말합니다. 페이지에서 잘못된 부분을 강조하고 때로는 예상했던 부분을 강조 표시합니다. 더 많은 정보가 제공되며, 그들과 대화하고 더 많은 것을 얻으려고 노력하는 것 (예 : 결과를 얻기 위해 한 것)은이를 당기는 것과 같습니다.

기본적으로 다음과 같이 요약됩니다.

  • 100 % 익숙하지 않은 크고 복잡한 코드 기반
  • 일이 잘못 될 수있는 많은 방법
  • 버그가 어떻게 발생했는지에 대한 정보는 거의 없습니다.

아무도 이런 종류의 디버깅 방법에 대한 팁, 요령, 제안 등이 있습니까?


"스파게티 데이터베이스에 대해 들어 보셨습니까?" 한 번은 제품 데이터베이스가 10 년 이상 지속적으로 발전하고있는 작업에서 일했으며 요구 사항이 증가 (및 성장, 성장 및 성장)함에 따라 리팩토링에 거의 노력을 기울이지 않았습니다. 나는 전체 작업이 "데이터베이스 이해, 유용한 것을 추출하기위한 SQL 쿼리 생성"으로 정리 된 동료를 가졌으며 그녀는 필수 불가결했습니다. 네 아픔이 느껴져.
BlairHippo

보완책으로 [Raymond Chen의 블로그에있는 "심령 디버깅"게시물 ( goo.gl/2KIH )을 읽어보십시오 !
Wizard79

코드베이스는 얼마나 큽니까? 10 개의 KLOC 또는 50 MLOC?
Basile Starynkevitch

답변:


11

그런 것을 얻으면 보통 더 많은 정보를 요구합니다. 어떻게 작동하는지 잘 모르겠지만 여기에서 문제를 로컬로 재현하기에 충분한 정보가 없으면 자세한 정보를 요청하여 재현 할 수 없음으로 표시된 티켓을 다시 보낼 수 있습니다. 나는 그것을 끝낼 수있다.

고객이 단계를 설명하는 데 문제가 있으면 스크린 캡 비디오를 요청하십시오. Jing 과 같이 제품을 만들 수있는 몇 가지 무료 제품이 있습니다 . 그들이하고있는 것을 정확하게 볼 수있을 때 훨씬 쉬워집니다.

편집 : 몇 년 전에 이것을 썼을 때 징은 좋은 생각이었습니다. 그 이후로 그들은 요청하지 않은 "보너스"스크랩웨어로 시스템을로드하도록 설치 프로그램을 수정 했으므로 더 이상 권장하지 않습니다. 그래도 주변에는 괜찮은 스크린 레코더가 많이 있습니다.


2
+1 건전한 조언, 그리고 그것을 확장시킬 것입니다 : 그들은 버그가 안정적으로 일어날 수 있습니까, 아니면 간헐적입니까? 그것이 확실하게 일어나고 있다면, 그들은 거기에 도달하기 위해 취한 단계를 안내해 줄 수 있습니까?
BlairHippo

1
로그 파일을 살펴보면 약간 도움이 될 수 있습니다.
pramodc84

11

이 좋은 출발점이 될 것 입니다 .

대체 텍스트

개발자가 더 이상 지원하지 않는 것처럼 들리므로 아래 정의를 사용하고 있습니다.

레거시 코드는 더 이상 지원되지 않는 소스 코드입니다.


슬픈 부분은 레거시 코드조차도 아닙니다. 나는 내가하고있는 일의 대부분이 올해 초에 시작되었다고 확신한다.
Tarka

3
@Slokun-이 책에서 "레거시 코드"의 정의는 기존의 정의와 완전히 동일하지 않습니다. 아주 좋은 책입니다.
Austin Salonen

4

몇 년 전에 비슷한 문제가 있었고 생산성과 코드 정리가 크게 향상되어 버그 추적을 시스템에 통합했습니다.

우리는 Fogbugz를 사용했습니다 (여전히 Fogcreek를하고 있다고 가정합니다!). 예외가 발생할 때마다 사용자가 버튼을 누르고 즉시 시스템에 로그인 할 수있는 예외 처리 메커니즘을 구축 할 수있었습니다. 더 이상 스크린 샷이 없습니다. 이 옵션을 사용하면 사용자로부터 정보를 추출하지 않고 필요한 정보를 얻을 수 있습니다. 변형과 같은 소리, 특히 스크린 샷 캡처 옵션을 사용하면 좋을 것입니다.

시작하고 싶은 다른 것은 로깅 추가를 시작하는 것입니다. 인수 값을 사용하여 모든 메소드 호출을 로깅하는 것이 좋습니다. 레거시 코드 (테스트가없는 코드)로 작업하는 것처럼 들리므로이 로깅을 사용하면 적절한 단위 테스트를 추가하여 문제를 반복하지 않아도됩니다.


기존의 대규모 코드 기반의 경우 좋은 로깅을 추가하면 많은 작업이 필요합니다. 버그가 간헐적 인 경우 유일하게 실행 가능한 옵션이 될 수 있기 때문에 +1입니다.
BlairHippo

@BlairHippo : 내 경험에 따르면, 그것은 그가 설명하는 코드베이스로 지불하는 가격입니다. 이러한 코드베이스에서 작업하는 것만큼이나 비참합니다.
Austin Salonen

로깅이 어렵습니다. 자동화 된 예외 로깅을 추가하는 것은 사소한 일이며 수천 번의 (최소한) 노력의 가치가 있습니다. 또는 적어도 델파이에 있습니다. 다른 언어에 어떤 솔루션이 있는지 확실하지 않지만 적절한 예외 처리가 가능한 언어에는 그렇게 어렵지 않아야합니다.
메이슨 휠러

1

가장 진지한 조언은 가능한 리팩토링을 시작하는 것입니다. 전체 사본이 100 %가 아님을 알기 위해 기능의 재 복사를 본 횟수는 셀 수 없습니다. 사본은 99.9 % 였고 사소한 작은 실수로 버그가 발생했습니다. 모든 것에 단위 테스트를 추가하고 QA 부서가 있다면 작업중인 코드 부분에 대해 자동화 된 테스트 스크립트를 가져 오십시오.

반면, 코드에 얼마나 많은 로깅을 삽입 할 수 있는지 확인하십시오. 즉, 로깅 방법이 많지 않은 경우 코드에 플래그를 추가하여 자체 디버깅 목적으로 더 자세한 로깅을 선택할 수 있습니다. 이것은 대화 상자가 표시되면 사용자가 켜고 끌 수있는 것입니다. 내가 셀 수있는 것보다 더 많은 시간이 도움이되었습니다. 나는 보통 문제의 그림없이 "작동하지 않습니다"라는 메시지를받습니다. 그냥 "로그 파일 보내기"라고 말합니다.


0

단위 테스트를 작성하여 시작하십시오. 클래스 또는 함수를 선택하고 어떻게 작동해야하는지에 따라 테스트 세트를 작성하십시오. 테스트가 실패하면 이유를 알아 내십시오. 버그 인 경우 수정하십시오. 당신의 기대가 틀린 것으로 판명되면, 실제로 무엇을하는지 파악하고 테스트를 적절히 수정하십시오.

적절한 단위 테스트가 완료되면 코드를 더 깨끗하게 만들기 위해 리팩토링을 수행 할 수있는 안전망이 생깁니다.

코드베이스를 이해할 때까지 반복하십시오.

말할 필요도없이, 이것은 버그 리포트에 대한 응답이 아니라 미리해야 할 일입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.