9 끔찍한 코드를 마스터하는 방법,빠른
당신은 오래된 코드베이스에 새로운 기능을 구현하는 작업을 부여했습니다,하지만 코드는 끔찍한 보인다. 어떻게 가능한 한 빨리 이해할 수 있습니까? 관련없는 세부 사항에서 길을 잃지 않고 새로운 코드의 중요한 부분을 배우는 데 도움이되는 몇 가지 단축키가 있습니다.
프로그래머로서,우리는 종종 새로운 프로젝트에 참여해야하고,코드의 품질은 모든 장소에있을 수 있습니다. 조직화 된 팀이 있더라도 중간 규모에서 대규모 프로젝트 전반에 걸쳐 코드 품질을 일관되게 유지하는 것은 어려운 일입니다.
그래서 가난한 코드를 빨리 이해하는 것이 가치있는 기술이 될 수 있습니다. 그것은 당신이 짧은 시간에 매우 생산적이 될 수 있도록하고 일반적으로 새로운 사람이되고 캐치 업을 재생하는 데 함께 제공되는 스트레스를 줄일 수 있습니다. 동료와 대화하고 그 사람이 시간의 절반에 대해 무엇을 말하고 있는지 알지 못하는 것은 끔찍한 느낌입니다.
반면에,이것은 고객이나 상사에게 자신의 가치를 보여줄 수있는 주요 기회이며,당신은 신속하게 속도를 내고 그들에게 깊은 인상을 줄 수 있습니다. 대부분의 개발자는 스스로 구축하지 않은 코드베이스로 생산성을 높이려면 몇 주에서 몇 달이 걸립니다.
끔찍한 코드를 빠르게 마스터하는 방법은 다음과 같습니다.
도움을 요청하십시오. 그것은 가장 효율적인 전략
다른 사람들은 이미 코드가 어떻게 작동하는지 배웠습니다. 당신은 당신이 초보자처럼 보이게 생각할 수도 있지만,호기심을 보여주는 것은 직원으로 이미지에 강한 영향을 미칠 수 있습니다. 당신의 상사의 기대는 당신이 질문을하지 않고 생산성을 빨리 얻을 수 있다면,그것은 그녀의 부분에 오판이다.
모두가 속도를 얻기 위해 시간이 걸립니다. 질문을 질문하거든,너는 팀웍을 위해 우측 태도가 있는 사람에는 감명줄 것이다.
대부분의 경우 원래 개발자는 이상하거나 예기치 않은 결정을 내렸을 것이며,코드를 읽는 것보다 코드에 대해 이야기하는 것이 훨씬 더 가치가있을 것입니다. 이 경우 문서가 부족한 경우 더욱 그렇습니다. 기존 개발자는 어디에도 기록되지 않은 귀중한 프로젝트 지식을 가지고 있음을 기억하십시오.
당신에게 이해가되지 않는 개념의 목록을 확인
당신에게 새로운 또는 지나치게 복잡한 비즈니스 개념이있을 수 있습니다. 이러한 개념을 처리하는 코드를 작업하기 전에 이해하는데 시간이 오래 걸릴 수 있는 오해를 피하기 위해 이에 대한 설명을 얻는 것이 중요합니다.
이러한 아이디어가 데이터베이스에서 예기치 않은 방식으로 잘못 표시되거나 표현되는 경우 일 수도 있습니다. 그래서 그 주위에 당신의 두뇌를 포장에 스트레스를 받고 피하고,그냥 소스에 가서 그것에 대해 동료들에게 물어.
같은 맥락에서 적절한 이름이없는 모듈,클래스 또는 엔터티가있을 수 있습니다. 그(것)들의 주를 만드십시오. 잘못 명명 된 요소는 큰 혼란을 초래할 수 있으므로 코드 작동 방식에 대해 생각하는 능력에 부정적인 영향을 줄 수있는 다른 것뿐만 아니라 조기에 문서화하십시오.
쉽게 버그를 재현 할 수 있도록
코드 버전 및 도커 나 방랑 같은 가상 컴퓨터를 추가하여,당신은 크게 버그를 재현하고 새로운 기능에 대한 작업을 테스트하는 데 걸리는 시간을 줄일 수 있습니다.
코드가 어떻게 작동하는지에 대한 어떤 종류의 오해라도 잘못된 것을 만드는 길로 인도 할 수 있습니다.
이 시점에서,당신은 당신의 프로젝트에 자식 버전 제어 할 수 있습니다. 그런 식으로 안정적인 릴리스로 돌아가거나 필요한 경우 폐기 할 수있는 별도의 브랜치에서 작업 할 수 있습니다.
추적하기 어려운 문제를 파헤 치는 동안 은닉을 사용하여 테스트 또는 디버깅 코드를 추가 할 수 있기 때문에 자식과의 재현성을 높일 수도 있습니다.
프로젝트의 아키텍처에 대해 알아보려면 초기에 구성 및 문서화 작업을 수행하십시오.
가상 머신과 재현성에 대해서도 마찬가지입니다. 그들은 어떤 현대 개발 팀에 대 한 유비 쿼터 스 되 했습니다,하지만 당신은 확실히 그들을 사용 하지 않는 프로젝트 또는 심지어 하나 안에 실행할 준비가 실행 됩니다. 때로는 새로운 팀 구성원으로서 첫 번째 단계는 환경을 작동시키기 위해 수행한 단계를 문서화하고 이러한 단계를 가상 머신 설정 스크립트로 전환하는 것입니다.
구성 요소 다이어그램 작성
비즈니스 개념의 마인드 맵,데이터베이스 테이블의 엔티티 관계형 다이어그램 및 코드 구성 요소의 간단한 다이어그램은 새로운 코드를 이해하는 고통을 줄이는 데 크게 도움이 될 수 있습니다. 무언가가 어떻게 작동하는지 기억하지 않습니까? 그 에드를 열어 두십시오.
사실,정보를 신속하게 소화하고 프로젝트를 10,000 피트 단위로 볼 수 있도록 도와주는 그래픽 도구는 가치가 있습니다. 당신을 도울 수있는 도구의 다른 예는 종속성 그래프,로그 및 프로젝트 기술 스택의 맵입니다.
개발에서 가장 큰 시간 소비자 중 하나는 시스템 간의 통합 지점입니다. 프로젝트 경관의 글로벌 뷰를 갖는 것은 당신이 검토 흥미로운 통합 지점을 식별하는 데 도움이됩니다. 그들은 그들에 넣어 대부분의 작업을 가지고 관광 명소,대부분의 버그입니다.
한편,기술은 빠르게 움직이며 코드베이스의 많은 부분을 보다 현대적이고 적절하게 통합된 솔루션으로 대체할 수 있는 기회가 있을 수 있다. 이전 프레임 워크는 문제를 해결하는 새롭고 공식적인 방법을 개발했을 수도 있고,더 나은 호환성을 염두에두고 완전히 새로운 라이브러리를 개발했을 수도 있습니다.
시각화 및 모델링 도구를 사용하여 큰 그림을 봅니다.
자동화 된 테스트 준비
물건을 깨기 시작하기 전에 관련 단위 테스트를 추가하는 것이 항상 신중합니다. 테스트 및 불량 코드의 문제점은 불량 코드가 일반적으로 단단히 결합되어 테스트하기가 어렵다는 것입니다(불가능하지는 않은 경우). 서로 얽혀 있고 분할 할 수없는 구성 요소는 분리 할 수 없습니다.
이 경우 한 걸음 뒤로 물러나서 멀리서 테스트하십시오. 일반적으로 사용 가능한 많은 도구가 통합 테스트를 수행하는 것을 의미합니다. 따라서 최소한 시스템이 동일한 입력에 동일한 방식으로 응답하는지 확인할 수 있습니다.
통합 테스트는 단위 테스트보다 성능이 훨씬 떨어집니다. 할 수있을 때마다 코드 변경에 대해 더 빠른 피드백을 얻을 수 있도록 단위 테스트를 구현하십시오. 이것이 가능하지 않은 경우 기능 또는 통합 테스트를 선택하십시오.
이 단계는 작업이 필요한 코드 부분을 밝혀야합니다. 많은 양의 긴밀하게 결합 된 코드가있는 경우 통합 테스트가 완료된 후 리팩토링을 수행 한 다음 나중에 단위 테스트를 수행하는 것이 좋습니다.
비정상적이거나 부적절한 코딩 전략 식별
리팩토링을 시작할 때이지만 어디서 시작합니까?
일반적으로 가장 좋은 장소는 상황이 이상하게 보이거나 개발 모범 사례를 따르지 않은 곳입니다. 웹 개발의 경우 모델 코드가 단단히 결합 된 지방 컨트롤러를 의미 할 수 있습니다.
같은 전략이 다른 곳에서 사용될 수 있음을 명심하십시오. 예를 들어,지방 컨트롤러가 존재한다는 것을 확인한다면,이전 개발자가 씬 컨트롤러를 시도하지 않았을 가능성이 높습니다. 당신은뿐만 아니라 다른 컨트롤러에서 같은 문제를 볼 것으로 예상 할 수있다,그 스타일이나 지금 전에 개발 프로세스의 단점을 반영하기 때문에.
처음에는 작은 작업
개념적으로 간단한 기능에 대한 작은 버그를 수정하는 것은 매우 계몽적이고 처음부터 생산성을 느끼는 데 도움이됩니다.
이것은 앤디 헌트와 데이브 토마스가 실용적인 프로그래머에서”추적 총알”이라고 부르는 것과 비슷한 생각입니다. 근본적인 논리는 동일물 이다:가능한 것을 너자신에게 시험하기 위하여 무언가에 일은,그때 저 처음 일에 진보적으로 향상한다.
“추적자 총알”접근. 신용:실용적인 프로그래머
당신이 할 수있는 간단한 개선의 종류의 좋은 예는 간단한 코드로 작은 리팩토링 단계를 수행하는 것입니다. 따르지 않는 일반적인 프로그래밍 관행을 확인하고 적용하십시오.
이에 대한 즐겨 찾기 중 하나는 조건부 블록을 중첩하지 않는 것입니다. 따라서 여러 개의 경우-경우-경우 블록을 갖는 대신 다른 블록 안에 하나씩 첫 번째 블록을 부정하고 반환하고 찾을 수있는 모든 유효성 검사 유형 검사에 대해 동일한 작업을 수행합니다. 이것은”만약”검사를 반전하고 일부 코드를 이동하는 것만 큼 간단 할 수 있으므로 위험은 거의 존재하지 않으며 플랫 코드는 읽기 쉬울 것입니다.
먼저 테스트하기 쉬운 리팩토링 기능에 대해 작업해야 합니다.
중요 코드
를 다루기 전에 익숙한 위치에 서십시오. 비즈니스 및 통합 코드의 가장 중요한 부분은 이해하고 수정하기가 가장 어렵습니다. 초기에 곤경에 점점 하지 마십시오.
일반적으로 프로젝트 또는 비즈니스 측면에 대해 현재보다 더 많이 알아야 할 비즈니스 문제를 피하십시오. 즉,일반적으로 익숙한 땅이 될 시작 때까지 멀리 트랜잭션,지불 또는 수학 무거운 코드에서 유지하는 것을 의미한다.
일단 당신이 생산적이 고,프로젝트에 대 한 코딩 스타일에 편안 하 게,그리고 아무 문제가 간단한 문제를 해결,그것은 어려운 물건에 작동 하는 시간—하지만 전에.
예를 들어 지불 문제를 해결하기위한 긴급 성이 있더라도 그러한 작업은 매우 위험 할 수 있습니다. 거기 과오는 계획사업을 귀중하게 요할 수 있고,저것은 너에 마찬가지로 이을 것이다. 절대적으로 모든 가능한 경우 초기에 위험이 높은 작업에 작업을 거부 합니다.
익숙하지 않은 기술 스택을 다루는 방법
마지막으로,내가 겪었던 일반적인 문제는 모든 새로운 프로젝트에 일반적으로 익숙하지 않은 기술이 포함되어 있다는 것입니다.
그렇게되면,나는 빠른 속도를 얻을 수 있도록 몇 가지 전략을 가지고있다. 배우기를 위한 명백한 경로는 문서를 읽고 신기술에 익숙해지고 있다. 그러나 구조에 대해 많은 것을 배우는 동안 그 경로는 일반적으로 경험과 함께 제공되는 코너 케이스를 배우는 데 도움이되지 않습니다. “코너 케이스”는 정상적인 작동 매개 변수 외부에서 발생하는 상황을 나타내는 엔지니어링 용어입니다.
이 경험을 얻는 과정을 가속화하는 한 가지 방법은 스택 오버플로 및 쿼라와 같은 질문 기반 리소스를 가져 와서 책처럼 읽는 것입니다. 당신이 배우고있는 라이브러리에 대한 가장 인기있는 질문을 찾아 다른 사람들이 일반적으로 실행 문제의 종류를 참조하십시오. 당신은 반드시 그들 자신으로 실행하지 않을거야,하지만 단지 가능한 것을 아는 것은 그 새로운 아이디어의 당신의 마음지도에 밝은 빛을 비추는 것과 같다.
스택 오버플로 질문을 활용하여 경험을 빠르게 얻을 수 있습니다. 제공:스택 오버플로
보다 타겟팅 된 접근 방식을 보려면 새 프로젝트에서 특별히 사용되는 라이브러리 기능에 대한 정보를 찾으십시오. 당신에게 새로운 사람들을 들여다보고 그 코드를 만지기 전에 미리 배우십시오.