팀의 리팩토링 우선 순위를 어떻게 정할 수 있습니까? 방법의 이름이 잘못되었습니다”와 같은 수많은 주석이 없으며

매일 작업하는 코드베이스에는 자동화 된 테스트, 일관성없는 이름 지정 및 “이 이유는 무엇입니까?”, “필요한지 확실하지 않음”또는 “이 방법의 이름이 잘못되었습니다”와 같은 수많은 주석이 없으며 코드가 소스 컨트롤을 사용한다는 사실에도 불구하고 “변경 로그” 우리의 코드베이스는 리팩토링을 사용할 수 있습니다.

우리는 항상 버그를 수정하거나 새로운 기능을 추가하는 작업을 수행하므로 코드를 더 효율적이고 모듈화하기 위해 코드를 리팩토링 할 시간을 허비하지 않으며 우선 순위가 높은 것으로 보이지 않습니다.

작업 목록에 추가되도록 리팩토링의 가치를 어떻게 증명할 수 있습니까? 내가 가기 전에 리팩터링하여 허가보다는 용서를 구하는 것이 가치가 있습니까?



답변

“허가보다 용서를 구하는 것이 낫다”는 것이 사실입니다.

왜 걱정합니까? 가장 끔찍한 부분을 리팩터링하십시오.

가장 비싼 오류가 무엇인지 이미 알고 있습니까?

그렇지 않은 경우 1 단계는 비용이 많이 들고 복잡하며 오류가 발생하며 버그가 많은 문제 코드를 긍정적이고 명확하게 정의하는 것입니다.

문제점 티켓 수, 디버깅 시간 및 기타 매우 구체적이고 측정 가능한 비용을 식별하십시오 .

그런 다음 고비용 문제 목록에서 무언가를 수정하십시오 .

용서를 구해야 할 때 비용 절감을 가리킬 수 있습니다.


모르는 경우 리팩토링을 수행 하려면 전후 테스트가 일치하는지 확인하기 위해 단위 테스트가 필요합니다 . 이상적으로는 자동화 된 코딩 테스트 (예 : 단위 테스트) 여야합니다.

이것은 가지를 선택하는 것을 의미 합니다. 단위 테스트를 작성하십시오. 한 가지 수정하십시오. 두 가지 개선되었습니다. (1) 테스트를 작성하고 (2) 코드를 수정했습니다.

반복합니다.


답변

보이 스카우트 규칙을 따르십시오. 캠프장 (코드)을 찾은 것보다 조금 더 잘 두십시오. 나는 “그들이 거기에있는 동안”작은 코드 개선을 위해 작성된 글을 한 번도 들어 본 적이 없다.


답변

아마도 지나치게 냉소적 인 관점을 취하겠습니다.

리팩토링은 삼키기 어려운 약입니다. 책임과 비난을 받으면 노동의 결실은 종종 깨끗한 코드 기반을 구축하는 다른 사람에게갑니다.

그러한 엔지니어링 관행이 회사의 문화가 되었다면 더 높은 수준에서 싸워야 할 수도 있습니다. 리팩토링을 위해 싸우는 것이 아니라 공학적 우수성을 위해 싸우는 것입니다. 그것은 경영진이 직면 할 때에 만 일어날 수있는 변화입니다. 이 시나리오에서 그들은 아마도 모범 사례를 찾기 위해 외부를 살펴볼 것이며, 당신의 모든 훌륭한 아이디어는 어쨌든 포함됩니다.

엔지니어링 업무를보다 진지하게 받아들이는 다른 회사에 가입하는 것을 고려하십시오.


답변

나는 여기에 많은 포스터가 경영상의 문제를 확신하고있는 것처럼 보이는데, 그 질문에 대해서는 언급하지 않았다.

나는 그것보다 더 나아갈 것이다 : 내 의견으로는 거칠고 코드베이스는 거의 직접 관리의 결함이 아니다. 경영진은 개발자가 작성한 코드를 작성하지 않았습니다 (현재 회사의 일부 경영진이 실제로 초기 코드베이스를 작성한 일부 예외가 있습니다). 따라서 문화 문제는 개발자들에게 있습니다. 만약 문화가 바뀌기를 원한다면, 그들 스스로 변화해야합니다.

나는이 실현과 태도의 변화를 “나의”개발자들에게 전하려고 노력한다. 그들이 “언제 리팩터링 할 시간이 있습니까?” 코드베이스를 건강하게 유지할 수 있다고 믿는 유일한 방법은 세 가지입니다.

  1. 건강한 코드 만 추가하십시오.
  2. 건강하지 않은 코드는 최대한 빨리 수정하십시오.
  3. 마감 기한 이유로 1 또는 2를 수행 할 수없는 경우, 항상 “마감 기한 직후 수정”문제 목록을 갖고 마감 기한 후에 해당 목록을 통과하지 못한 것에 대한 변명은 수락하지 마십시오.

개발자의 다음 발언은 “언제나 그렇게 할 시간이 있습니까? 지금은 시간이 없습니까?”입니다. 정답은 (IMHO에게도) “하지 않을 시간이 없습니다”뿐입니다. 코드베이스를 건강하게 유지하지 않으면 처리 시간이 점점 길어지고 예측할 수없는 일정이 생기고 버그가 점점 더 나 빠지고 가치가 낮아집니다.

개발 팀에서 가장 큰 태도 변화는 “품질”이 특정 시점 ( “리팩터링 할 시간이있을 때”)에서 수행하는 작업이 아니라는 것입니다. 항상 수행해야하는 작업입니다.

마지막으로 경고의 이야기. 눌려지면 이런 일이 발생하지 않을 것입니다. 제가 근무한 회사에서 10 년 전부터 시작된 대규모의 레거시 코드베이스가있는 오랜 응용 프로그램이있었습니다. 저를 포함한 많은 개발자들은이 레거시 코드베이스가 최신이 아니라 나쁘거나 오래되었다고 생각했습니다. 그래서 우리는 큰 리팩토링 프로젝트를 성공적으로 수행하고 모든 것이 더 좋을 것이라고 생각한 재 작성 프로젝트를 시작했습니다.
우리는 새로운 라이브러리, 새로운 언어 기능을 사용하여 거의 모든 것을 새롭고 현대적인 방식으로 구현하기 위해 열심히 노력했습니다. 결국 우리는 새롭고 개선 된 코드 기반으로 오랜 응용 프로그램의 새로운 릴리스를 허용하기 위해 모든 것을 하나로 모으기 위해 많은 노력을 기울였습니다.
예상대로 새 릴리스에는 아직 익숙하지 않은 새 라이브러리와 예상하지 못한 코드의 일부 상호 작용으로 인해 일부 문제가 발생했습니다. 그러나 마침내 이전 릴리스와 동일한 표준으로 릴리스를 출시하고 문을 열었습니다. 우리는 “성공”에서 한숨을 쉬었다. 그런 다음 하위 그룹의 개발자가 경영진으로 돌아와 새로운 코드 리팩터링 프로젝트를 요구하면서 새로운 리팩토링 프로젝트를 요청했습니다.

이야기의 도덕 : 종종 상황이 거의 깨지지 않는 경우가 많으며 ‘다시 시작’한다는 것은 알려진 문제 세트를 거의 알려지지 않은 문제 세트와 교환한다는 의미입니다. 한 번에 한 부분 씩 리팩터링하십시오!


답변

누군가가 한 번 인터뷰를 할 때 회사 인터뷰도 잊지 말아야한다고 말했습니다. 내가 일하고 싶은 곳입니까? 그들은 코드 리뷰를합니까? 자동 통합 테스트가 있습니까? 단위 테스트? 그들은 쌍 프로그래밍에 대해 어떻게 생각합니까? 개인적으로 나는 다른 직업을 찾게되었는데, 이번에도 몇 가지 질문을하는 것을 잊지 마십시오.


답변

솔직히 다른 회사를 찾으십시오. 이러한 개발 과정의 개선에는 많은 문화적 도약이 필요하므로 모든 사람들이 같은 페이지에 들어가기까지는 많은 시간이 걸리고 그렇게 많은 관심을 가지지 않을 것입니다.

당신이 여전히 당신과 싸우고 있고 아직 끝나지 않았다고 생각되면 마지막으로 밀어 넣으십시오. 같은 생각을 가진 팀원들로부터 많은 지원을 받고, 자신의 신념에 반대 할 수있는 사람을 행복하게, 우회하고 우회하고 관심있는 사람을 멀리하는 상사에게 피로를 말하고, 새로운 리팩토링 시간을 계획하십시오 프로젝트 / 기능.

당신이하는 일에 대해 열정을 갖고 회사에 관심을 가지면, 그것은 당신 편에서 훌륭한 노력이 될 것입니다. 그것이 감사하지 않으면, 자신을 존중하고 구식 프로그래머가되기 전에 구제하십시오.


답변

이런 상황에서 상황을 개선하기 위해 한 가지 연습을 소개해야한다면 코드 검토 일 것입니다. 코드 리뷰는

  • 일반적으로 개발자는 코드 개선, 버그 감소 등의 요소로 직관적으로 받아들입니다.
  • 협력적이고 민주적 인
  • 타임 박스를 제대로 작성하면 시간이 많이 걸리지 않습니다
  • “정상적인”개발 중에 그렇게 할 시간이 없다면 리팩토링을 수행하기에 좋은 곳
  • 코드 디자인, 단위 테스트 측면에서 모든 종류의 모범 사례를 점차적으로 도입하는 매우 효과적인 트로이 목마 …

처음에는 큰 / 복잡한 코드 부분을 커밋 할 때만 체계적으로 코드 검토를 수행 할 필요가 없습니다.

물론 코드 검토를 도입하기 전에 공식 승인이 필요하다고 생각되면 코드베이스가 그대로 남아 있으면 코드베이스가 무너질 가능성이 있음을 먼저 상사에게 납득시켜야 할 수도 있습니다.