나는 프로그래머가되는 것을 좋아한다. 나는 말했다. 그러나 그 말로, 나는 최근에 실제로 버그 수정을 참을 수 없다는 것을 깨달았습니다 . 조금도.
실제로 무언가를 개발하는 동안 생산성이 매우 높습니다. 단위 테스트를 작성하고 내 개발에 대한 자체 테스트를 수행 할 때도 일반적으로 생산성이 높습니다. 집중할 수 있고 과제를 완수 할 수 있습니다.
그러나 QA 시간이 다가오고 버그를 수정하려고 할 때 영감을 얻으려면 엄청난 노력이 필요합니다. 나는 무언가를 끝내기 위해 매우 극단적 인 조치 (당신이 알고있는 BPM 음악, 과도한 양의 카페인 등)를 강요해야 합니다. 내 직업은 일반적으로 기존의 대규모 프로젝트를 시작하고 새로운 기능을 추가하거나 버그를 수정하는 것과 관련이 있으므로 모든 코드에 대해 단위 테스트를 작성하는 데 몇 주가 필요하다고 정확하게 고용주에게 알릴 수 없습니다. 우리가 자주 사용하는 서버 기술은 꽤 많은 Java 클래스 로더 문제가 있기 때문에 단위 및 통합 테스트 모두에 매우 금지되어 있습니다. 나는 버그 수정에 완전히 반대하지 않으며 때로는 재미있을 수도 있지만 전혀 재미 가 없습니다. 사소한 변경이 필요한 경우 (시스템 작동 방식으로 인해) 30 초에서 3 분 동안 기다렸다가 작동하는지 확인할 수 있습니다.
버그 수정시 생산성과 동기를 어떻게 향상시킬 수 있습니까? 이것은 대부분의 프로그래머가 다루는 것입니까?
답변
사소한 변경을하고 30 초에서 3 분 동안 기다려야 작동하는지 확인할 수 있습니다.
이것이 실제 문제입니다. 피드백을 너무 오래 기다려야한다면 비생산적인 느낌이들 것입니다. 아마도 더 많은 서비스를 위조하고 더 나은 테스트 도구를 만들어 즉각적인 피드백을 얻을 수 있습니다.
레거시 코드 단위 테스트는 비용이 많이 들거나 위험한 리팩토링과 관련 될 수 있습니다. 그러나 더 나은 테스트 픽스처를 작성하면 몇 분에 비해 몇 초 만에 손으로 테스트 할 수 있으며 새로운 단위 테스트 가능 코드를 사용하는 것과 거의 동일한 생산성을 얻을 수 있습니다.
버그 자체를 수정하는 행위가 아니라 피드백을 기다리는 시간이 지루하고 도전적입니다.
답변
버그 수정은 반드시 알아야하는 매우 중요한 기술입니다. 나는 어딘가에서 읽습니다. 일반적으로 응용 프로그램에서 문제의 20 %를 해결하는 데 80 %의 시간을 소비합니다.
나는 실수로부터 배우는 것을 믿으며, 버그 수정은 다른 실수로부터 배우는 기회 입니다. 당신은 그것을 배우고 미래에 더 나은 프로그래머가 될 수 있도록 도울 것입니다. 이것은 많은 버그를 수정 하고 코드를 리팩토링 하기 시작했을 때의 동기 입니다.
답변
개인적으로, 버그를 ‘작은 것’으로 생각하지 말고 몇 시간의 디버깅 후에 몇 줄의 코드를 변경하는 것만으로도 거대한 기능만큼 중요한 큰 쇼 토퍼처럼 생각하는 것이 도움이되었습니다. 그렇게하면 하루 종일 버그 추적기 항목 3 개를 죽이는 것이 덜 우울합니다.
동료와 함께 게임을 만드는 데 도움이 될 수 있습니다 ( 하루에 가장 많은 버그를 수정하는 사람은 누구입니까? 아니면 하루에 가장 적은 수의 재건을 한 사람은 누구입니까? )
답변
나는 당신의 신발에 있었다. 언제 어디서나 자동화 된 테스트를 구축하십시오. 한 번에 다있을 필요는 없습니다. 버그를 발견하면 잠시 시간을내어 테스트 사례를 프로그래밍하십시오. 테스트 사례를 프로그래밍 할 수없는 경우 수동 테스트 방법 (예 : 여기를 클릭, 입력 등)에 대한 빠른 설명을 작성하여 기술 자료에 저장하십시오.
디버깅은 매우 까다로울 수 있습니다. 특히 작성하지 않은 복잡한 코드의 경우 더욱 그렇습니다. 목표는 “금요일에 버그 13533 수정”입니다. 그런 다음 목표를 달성하면 “금요일 밤 친구와 파인트를 줘”보상을 설정하십시오. 이것은 좀 더 보람있는 데 도움이 될 것입니다.
그 외에는 때로는 일이 그저 일입니다.
답변
이런 상황에서는 창의적인 도전이 필요합니다. 일반적으로 코드를 작성하고 있지만 여기에는 없습니다.
그러나 모든 것이 손실되지는 않습니다. 메타 문제 해결을 위해 노력하고 그것에 에너지를 쏟아 부으십시오. 피드백을받는 데 30 초에서 3 분이 걸리는 이유 는 무엇 입니까? 어떻게 당신은 시간을 단축 할 수 있습니까? (아마도 체크인하지 않은 스크립트 또는 유틸리티 앱을 작성하면 도움이 될 수 있습니다). 이것이 새로운 문제 영역, 새로운 창의적 도전입니다.
개인적으로 결함을 고치기위한 단계에있을 때마다 신속하고 고통없이 처리 할 수있는 가장 큰 장벽을 찾아 내고 그 장벽을 제거하기 위해 자동화해야하는 작업을 자동화합니다. 이로 인해 생산성이 향상되고 개인 포트폴리오를 추가하여 부팅 할 수 있습니다.
요컨대 나는 “항상 개발 중”이라고 말하고 싶습니다. 🙂
답변
문제가 디버깅 또는 버그 수정입니까? 문제를 일으키는 구성 요소를 격리하기에 충분히 디버깅 할 수 있으면 새로운 개발 작업으로 살펴보십시오.
- 깨지기 쉬운 코드 조각에 대한 단위 테스트를 작성하십시오. 원하는 모든 기능과 특히 버그가있는 동작을 분리하는 기능을 검증하는 테스트가 있는지 확인하십시오.
- 방금 작성한 모든 테스트를 통과하는 새 코드를 작성하십시오.
- 이전 코드를 새 코드로 바꿉니다.
- 일부 통합 테스트를 실행하십시오. 여기서 3 분 동안 서버를 다시 부팅 할 수 있지만 1 ~ 3 단계를 제대로 수행하면 최소화해야합니다.
- 짜잔!
답변
아마도 1995 년 미국 과학자에 실린 기사 인 Brian Hayes의 Debugging Myself를 보아야 할 것입니다. 요다 조건을 습관적으로 사용하는 것과 같은 단계를 밟아서 당신이 생산하는 가장 혐오스러운 종류의 벌레를 줄이거 나 없앨 수 있습니다.
디버깅은 프로그래밍과는 다른 기술이지만 관련이 있다고 생각합니다. 특히 멀티 스레드 프로그램을 디버깅하는 것은 작성하는 것과 거의 완전히 다릅니다.