단위 7 / 11

인공 지능을 이용한 디버깅 및 충돌 분석

이득:

  • 관련 코드 및 시나리오 컨텍스트를 사용하여 인공 지능에 충돌 기록(스택 추적)을 제공하여 가능한 근본 원인을 신속하게 좁힐 수 있는 기능
  • AI의 진단을 코드의 가설로 검증하고 증상을 테스트하고 침묵시키는 것이 아니라 근본 원인을 영구적으로 해결하는 능력
  • 충돌 기록 및 로그에서 개인 데이터를 마스킹하여 디버깅하는 동안 개인 정보 보호

모든 응용프로그램에서 오류가 발생합니다. 좋은 개발자를 구별하는 것은 얼마나 빨리 버그를 찾아 수정하는지입니다. 문제의 원인을 찾고 해결하는 모바일 디버깅은 사용자의 디바이스에서, 눈으로 볼 수 없는 환경에서 오류가 발생하기 때문에 특히 어렵습니다. 대부분의 경우, 여러분이 갖고 있는 것은 충돌 로그(충돌 로그/스택 추적 - 응용 프로그램이 충돌했을 때 어디로 갔는지에 대한 기술적인 분석)뿐입니다. AI는 이러한 비밀스러운 기록을 읽고, 가능한 원인을 나열하고, 솔루션을 제안하는 데 매우 강력합니다. 이번 단원에서는 AI를 "버그 탐지"로 사용하는 방법을 배우지만 최종 진단을 확인하고 수정하는 책임은 사용자에게 맡깁니다.

충돌 로그 읽기: AI가 가장 빛나는 곳

충돌 로그는 길고 위협적인 텍스트입니다. 경험이 부족한 개발자는 어디를 봐야할지 모릅니다. AI는 이 텍스트를 몇 초 안에 구문 분석합니다. 어느 줄에서 충돌이 발생했는지, 어떤 예외가 발생했는지, 가능한 이유는 무엇입니까? 일반적인 모바일 오류는 명백하며 AI는 이를 신속하게 인식합니다. Android에서는 NullPointerException(null 값에 액세스하려고 시도), IndexOutOfBoundsException(존재하지 않는 목록 요소에 액세스), iOS에서는 EXC_BAD_ACCESS(해제된 메모리 액세스), 예기치 않게 nil이 발견되었습니다(nil 선택 사항 강제 적용).

가장 일반적인 모바일 충돌 유형과 일반적인 원인은 다음과 같습니다.

오류(예외)

플랫폼

전형적인 원인

NullPointer예외

안드로이드

null 값에 액세스

IndexOutOfBoundsException

안드로이드

존재하지 않는 목록 요소에 액세스 중

예기치 않게 0을 찾았습니다.

iOS

nil 선택사항(!)을 강제로 풀기

EXC_BAD_ACCESS

iOS

해제된 메모리에 액세스

ANR/정지

안드로이드

메인 스레드에서의 길고 무거운 처리

단계별 디버깅 흐름:

  1. 기록을 수집하세요. 가능하면 충돌 로그, 오류 메시지 및 재현 단계를 함께 작성하십시오.
  2. AI 컨텍스트를 제공합니다. 오류뿐만 아니라 관련 코드 부분과 충돌 원인도 알려주십시오.
  3. 가능한 원인을 물어보세요. “가장 가능성이 높은 원인 3가지와 각각을 확인하는 방법을 알려주세요.”
  4. 확인하다. 코드와 테스트에서 제안된 이유를 확인합니다. 추측으로 해결하지 마세요.
  5. 수정하고 다시 테스트해보세요. 오류가 실제로 사라졌는지, 새로운 오류가 생성되지 않았는지 확인하세요.
팁: AI에 충돌 로그를 제공할 때 관련 코드 조각도 포함하세요. AI는 스택 추적을 통해서만 일반적인 예측을 수행합니다. 코드를 보면 정확한 라인과 실제 원인을 찾을 확률이 크게 높아집니다. 상황에 따라 진단의 질이 결정됩니다.

개인 데이터 트랩

충돌 로그 및 로그에는 이메일, 사용자 ID, 위치, 양식 콘텐츠 등의 사용자 데이터가 포함되는 경우가 많습니다. 이 기록을 그대로 AI에 붙여 넣는 것은 개인 데이터를 제3자에게 유출하는 것이며 KVKK/GDPR을 위반하는 것입니다. 녹음을 제출하기 전에 개인 영역을 지웁니다(마스크). 또한 처음부터 애플리케이션 로그에 개인 데이터를 쓰지 않도록 주의하세요. 좋은 로그는 문제를 설명하지만 그 정체를 드러내지는 않습니다.

주의: AI가 제안한 수정 사항은 "버그를 침묵"시킬 수 있지만 근본 원인을 해결하지는 못할 수도 있습니다. 예를 들어 NullPointerException을 null 검사로 래핑하면 충돌이 중지되지만 값이 null인 이유를 파악하지 못하면 실제 논리 오류가 계속 발생합니다. 증상이 아닌 질병을 치료하십시오.

근본 원인 분석

전문적인 디버깅의 목적은 오류를 침묵시키는 것이 아니라 근본 원인을 찾는 것입니다. 나는 AI에게 "이것이 왜 null일 수 있고, 데이터 흐름에서 어디에서 손실되었을 수 있습니까?"라고 물었습니다. “이걸 어떻게 침묵시키나요?”라고 묻습니다. 묻는 것보다 훨씬 더 가치가 있습니다. 근본 원인을 찾으면 동일한 오류에 대한 수십 가지 변형이 한 번에 해결됩니다. AI는 이러한 연쇄 추론에 능숙합니다. 입력에서 출력까지 데이터를 추적하고 데이터가 어디에서 분석되는지 생각하도록 요청합니다.

세 개의 미니 케이스

사례 1 — 10분 안에 2시간의 작업. 개발자는 특정 삼성 모델에서만 충돌이 발생하는 버그를 검색하는 데 2시간을 소비했습니다. 충돌 로그(개인 영역 삭제)를 AI에 제공합니다. YZ는 이 오류가 해당 장치의 다른 카메라 해상도에서 발생하는 메모리 오버플로를 가리킨다고 말했습니다. 단서로 10분만에 원인을 찾아냈습니다. AI는 검색을 가속화하고 인간은 솔루션을 검증했습니다.

사례 2 - 침묵 버그가 돌아왔습니다. 한 팀은 AI 제안을 사용하여 이를 잡아내도록 하여 반복되는 충돌을 침묵시켰습니다. 충돌은 멈췄지만 사용자들은 "데이터가 저장되지 않습니다"라고 불평하기 시작했습니다. 실제 문제(데이터베이스 연결)가 여전히 남아 있었기 때문에 눈에 보이지 않게 되었습니다. 근본 원인이 발견되면 충돌과 데이터 손실이 모두 해결되었습니다. 교훈: 침묵은 해결되지 않습니다.

사례 3 — 로그에서 데이터가 유출되었습니다. 감사 결과 사용자의 전체 이름과 전화번호가 앱의 충돌 로그에 기록된 것으로 나타났습니다. 개발자들은 정기적으로 이러한 로그를 AI에 붙여넣고 버그를 수정했습니다. 그래서 개인 데이터는 몇 달 동안 유출되었습니다. 로그가 마스킹되었으며 프로세스가 수정되었습니다. 교훈: 디버깅할 때도 기밀성은 적용됩니다.

약한 프롬프트 / 강한 프롬프트

잘못된 프롬프트: "왜 이 오류가 발생합니까? [스택 추적]"

강력한 프롬프트: "이 충돌은 내 Android 앱에서 발생합니다. 컨텍스트: - 수행 중: 사용자가 제품 세부 정보에서 장바구니에 추가 중 - 일부 장치에서만, RAM이 낮은 모델에서만 - 관련 코드: [ViewModel 및 저장소 부분] - 충돌 로그(개인 데이터 삭제됨): [스택 추적] 가장 가능성이 높은 3가지 근본 원인을 나열하십시오. 각 원인에 대해:1) 확인 방법, 2) 영구 수정(침묵 아님). 확실하지 않은 경우 가정을 기술하십시오."

복사 가능한 템플릿

충돌 분석 템플릿: "다음 충돌을 분석합니다. 컨텍스트: [현재 수행 중인 작업, 어떤 장치/버전]. 관련 코드: [코드]. 충돌 로그(개인 데이터 삭제됨): [추적]. 가장 가능성이 높은 3가지 근본 원인 및 확인 + 각각에 대한 영구 수정 사항을 제공합니다. 또한 증상을 침묵시키는 해결 방법을 표시합니다."

근본 원인 템플릿: "이 값은 예기치 않게 [null/false]로 나타납니다. 입력에서 이 지점까지의 데이터 흐름을 따르십시오. 어디가 손실되거나 손상될 수 있습니까? 각 단계에서 어디를 확인해야 하는지 알려주십시오. [코드]"

로그 읽기 템플릿: "이 로그 출력 해석: 어떤 이벤트가 순서대로 발생했는지, 이상이 있는 곳은 어디인지, 오류가 발생하기 전 마지막 정상 단계는 무엇이었습니까? [로그 - 개인 데이터가 삭제됨]"

재현 템플릿: "이 오류를 안정적으로 재현하려면 어떤 단계, 장치 상태 및 데이터를 시도해야 합니까? 오류를 유발할 수 있는 조건을 확률 순으로 나열하십시오. [설명]"

일반적인 실수

  • 컨텍스트 없는 스택 추적을 제공합니다. 관련 코드와 시나리오가 없으면 AI가 일반적인 예측을 합니다.
  • 개인 데이터를 로그와 함께 AI에 붙여 넣습니다. 기밀 유지 위반 먼저 마스크.
  • 증상을 침묵시키십시오. try-catch로 충돌을 숨기면 근본 문제는 사라지고 새로운 문제가 발생합니다.
  • 첫 번째 제안을 확인하지 않고 적용합니다. AI 진단은 가설이다. 코드에서 확인하세요.
  • 에뮬레이터에서 재현하려고 합니다. 일부 오류는 실제 장치/조건에서만 나타납니다.
  • 수정 후 재테스트를 하지 않습니다. 수정으로 인해 다른 문제가 발생했을 수 있습니다. 회귀를 확인하세요.

요약하면

AI가 뛰어난 영역 중 하나는 충돌 로그를 읽고 가능한 원인을 분류하는 것입니다. 상황이 제공되면 진단의 질이 크게 향상됩니다. 그러나 최종 진단과 수정은 인간에게 속합니다. AI의 제안은 코드와 테스트를 통해 검증된 가설입니다. 목표는 증상을 침묵시키는 것이 아니라 근본 원인을 해결하는 것입니다. 침묵 오류는 일반적으로 다른 형식으로 반환됩니다. 충돌 로그에는 개인 데이터가 포함될 수 있습니다. AI에 제공하기 전에 마스크를 쓰고 처음부터 로그에 개인 데이터를 기록하지 마십시오.

응용과제

가지고 있는 충돌 로그(또는 AI에서 생성한 샘플)를 가져와서 그 안에 있는 개인/고유 데이터를 가리고 "충돌 분석 템플릿"을 사용하여 AI에 제공합니다. AI 목록의 근본 원인 중 실제 수정 사항과 침묵하는 원인을 구별하세요. 선택한 영구 수정 사항을 적용하고 오류가 사라졌으며 새로운 문제가 발생하지 않는지 확인하십시오.

체크리스트

  • [ ] 관련 코드 및 시나리오 컨텍스트가 포함된 충돌 로그를 제공했습니다.
  • [ ] 로그에서 개인/고유 데이터를 마스킹했습니다.
  • [ ] AI에게 침묵이 아닌 근본 원인과 영구적인 수정을 요청했습니다.
  • [ ] 코드와 테스팅으로 진단을 확인했고, 맹목적으로 적용하지는 않았습니다.
  • [ ] 수정 후 오류가 사라지고 회귀 현상이 발생하지 않는지 테스트했습니다.
  • [ ] 내 애플리케이션이 로그에 개인 데이터를 기록하지 않는 것을 확인했습니다.