문제 이해하기
문제 이해하기
오류나 문제는 언제나 발생함
문제를 잘 해결하면 생산성이 늘어나게됨
대부분의 문제 해결 기술들은 개인 경험과 같이 암묵지와 같은 노하우에 기반을 두고있음
문제를 해결하는데 상당한 수준의 개인적인 경험이 필요하고, 이미 겪은 문제들을 통해 유사 문제들을 빠르게 파악할 수 있음
프로덕션 환경에서 디버깅 도구를 사용할 수 없기 때문에 더 보편적인 방법들을 배우는것도 중요
문제를 해결하는데 개인적인 경험을 제외한, 적절히 사용할 수 있는 기술들을 알아보자
문제를 이해하는 기술
이해하기
문제를 해결하려면, 먼저 문제를 이해해야한다.
왜 제데로 동작하지 않는지 이해하지 못한다면, 일단 그 이유를 이해하는데 주력해야함
코드를 이해한다면 문제를 더 쉽게 해결할 확률이 높아짐
문제가 발생하면, 먼저 그 문제가 왜 일어나는지 이해하려고 해야함
대게는 뭐가 문제인지 어느정도 짐작하고 있을 것
예측을 통해 현재 문제를 실험해보고, 실험 결과와 예측을 비교하는 과정을 문제가 이해될 때까지 반복
작업의 목적이 문제를 해결하는것이 아니라 문제를 제데로 이해하는 것
단순화
일부 코드를 제거하면 문제가 사라질 수 있는지 생각해보기
코드를 단순하게 만듦으로써 생각보다 많은 문제를 해결할 수 있음
단순함을 유지하기 위해서는 소프트웨어 공학적인 부분(클린 코드, 설계 등)을 알아야함
코드 정리를 통해 문제를 해결할 수 있는지 항상 고민해보기
고무오리 디버깅
만일 문제에 대해 아무것도 떠오르지 않는다면?
문제를 설명하는 과정에서 새로운 통랓렭을 얻을 수 있음
동료들에게 도움을 요청해서, 문제를 설명해보는것도 도움이 됨 (없다면 고무오리를 준비하자)
시간 관리 & 휴식
시간을 관리하지 않으면 한 가지 문제에 너무 오랫동안 매달리게되고, 생각의 범위가 좁아지게됨
한 가지 문제에 대해 최대 25분을 할당하고, 이 시간이 지나도록 진척이 없으면 휴식을 취하자.
쉴 때는 최대한 컴퓨터와 멀리 떨어져서, 뇌에서 다른 생각이 떠오르도록 준비
일시적으로 문제에서 마음이 벗어나 새로운 관점을 가지게하는데 충분함
결함
결함을 해결하는데 있어서 가장 어려운 부분은 결함을 이해하고 재현하는것
결함의 수를 줄일 수는 있지만, 결함을 없앨수는 없음
자신에게 도움이 되는 방향으로, 결함이 쌓이게 두지 않기
'나중에 처리'하겠다며 미뤄두지 말자. '나중'은 절대 안한다와 같은 말
결함을 테스트로 재현하기
무엇이 문제인지 이해했다고 생각이 든다면 실험을 해봐야 한다.
가설을 세우고, 이를 바탕으로 테스트 케이스를 작성
실제로 테스트를 실행했을 때 테스트가 실패한다면 가설이 검증된 것
또는 테스트가 성공한다면 가설이 틀렸다는 의미, 검증될 때 까지 이 과정을 여러번 반복
테스트가 실패하면, 이제 테스트가 통과되도록만 만들면됨
결함을 고치는 것 자체는 쉽지만, 한 번 했던 실수는 다음에도 발생할 수 있기 때문에 이전의 버그가 다시 발생하는 회귀버그를 방지하는것이 중요
Last updated