팀이 작성한 클래스와 기능을 어떻게 추적합니까?


43

코드 작업을 할 때 팀원들과 같은 많은 도전에 직면하고 있으며 유용한 기능과 클래스를 작성했습니다. 의사 소통이 좋으면 누군가가 함께 모은 훌륭한 소식을 듣고 6 개월 후에 필요할 때 기억하고 해당 기능을 호출하여 시간을 절약 할 수 있습니다. 내가 그것을 기억하지 못하거나 알지 못한다면 아마도 바퀴를 다시 발명 할 것입니다.

이런 종류의 것들을 문서화하는 특별한 관행이 있습니까? 어떻게 쉽게 찾을 수 있습니까?

팀에 그러한 문서가 없으면 바퀴가 이미 있는지 어떻게 알 수 있습니까?

편집하다:

지금까지의 답변 중 하나를 제외한 모든 상황이 이상적인 상황을 다루므로 이러한 솔루션을 요약 해 보겠습니다. 위키, 스탠드 업 미팅 등. 모두 훌륭하지만 문서를 작성하고 미팅에 참석하며 메모를 작성하고 모든 것을 기억하는 데 시간과 기술을 갖춘 프로그래머에게 의존합니다.

지금까지 가장 인기있는 답변 (Caleb 's)은 ​​문서화와 회의를 할 수없는 프로그래머가 사용할 수있는 유일한 방법이며 프로그래밍은 한 가지만 수행합니다. 프로그래밍은 프로그래머가하는 일이며, 훌륭한 프로그래머는 문서화, 단위 테스트 등을 작성할 수 있지만 직면 해 봅시다. 대부분은 문서화보다 프로그래밍을 선호합니다. 그의 솔루션은 프로그래머가 재사용 가능한 코드를 인식하여 자체 클래스 또는 저장소 또는 기타 코드로 가져 오는 것 입니다 . 그리고 이것은 프로그래밍에 의해 달성되었습니다.

나는 이것을 다음과 같이 보았습니다. 방금 세 가지 기능을 작성했으며 다른 사람이 그 기능에 대해 알아야합니다. 나는 그것들을 문서화하고, 기록하고, 회의에서 발표 할 수있다.-내가 할 수 있지만, 그것은 나의 힘이 아니다.-또는 ... 블랙 박스를 만들고 다른 클래스 파일이있는 곳에 붙여 넣습니다. 그런 다음 짧은 이메일을 알리는 것이 쉽습니다. 다른 개발자는 코드를 스캔하여 완전히 이해하지 못하는 코드에 사용 된 분리 된 함수보다 컨텍스트를 제거하는 것보다 코드를 더 잘 이해할 수 있습니다.

이름이 좋은 메소드를 사용하여 이름이 지정된 클래스 파일 세트를 갖는 것이 좋은 프로그래밍으로 달성되는 좋은 솔루션이기 때문에 나는 이것을 좋아합니다. 회의가 필요하지 않으며 자세한 문서화가 필요 없습니다.

이 정맥에 고립되고 시간이 오래 걸리는 개발자를위한 아이디어가 더 있습니까?


5
저는 100 명 이상의 직원으로 구성된 회사에서 더 큰 규모로 질문하기 위해 질문을 확장 할 것입니다. 이전에 수행 한 작업의 중복을 피하기 위해 어떤 모범 사례를 수행 할 수 있습니까?
Asaf

1
@Asaf-정답은 인구 규모에 달려 있다고 생각합니다. 5 명 상점에서는 50 점, 50 점은 500 점으로 작동하지 않습니다. 모든 사람의 답변을 환영합니다.
Dan Pichelman

3
이것은 좋은 질문입니다!
Rocklan

4
Conway 's Law : "디자인 시스템을 구성하는 조직은 이러한 조직의 커뮤니케이션 구조의 사본 인 디자인을 생성하도록 제한되어 있습니다."
Mark Rushakoff

2
@nathanhayfield : 1 dev, 2 또는 2 또는 20 또는 100에서는 작동하지 않는 솔루션입니다. 혼자 일할 때도 도우미 기능을 주제별로 분리하는 것이 좋습니다.
Doc Brown

답변:


29

라이브러리. 프레임 워크. 버전 관리.

재사용 가능한 코드가있는 경우 가장 마지막으로 원하는 것은 다른 팀 구성원이 소스 코드를 프로젝트에 복사하는 것입니다. 그들이 그렇게한다면, 여기에서 조금 바뀌고 조금씩 조정할 것이고, 곧 같은 이름을 가지고 있지만 각각 조금씩 다르게 작동하는 수십 가지 함수 또는 메소드를 얻게 될 것입니다. 또는 아마도 원래 작성자가 버그를 수정하거나 더 효율적으로 만들거나 기능을 추가하기 위해 코드를 계속 수정하지만 복사 된 코드는 업데이트되지 않습니다. 이에 대한 기술적 이름은 엄청나게 큰 혼란 입니다.

올바른 솔루션은 처음부터 빌드 한 프로젝트에서 재사용 가능한 항목을 가져 와서 자체 버전 제어 저장소의 라이브러리 또는 프레임 워크에 넣는 것입니다. 따라서 쉽게 찾을 수 있지만 사용중인 다른 모든 프로젝트를 고려하지 않고 변경하지 않는 것이 좋습니다. 더 이상 변경되지 않는 잘 테스트 된 코드 용 코드, 안정적으로 보이지만 철저하게 테스트 및 검토되지 않은 코드 용 라이브러리, 제안 된 추가 용 라이브러리 등 여러 가지 라이브러리를 고려할 수 있습니다.


5
또한 재사용 가능한 라이브러리에 대해 매우 철저한 회귀 테스트를 권장합니다. 변화가 무해한 것처럼 보일지라도 누군가는 그 행동에 의존 할 수 있습니다.
밥슨

2
나는 기술 용어가 BBOM 이라고 생각했다 .
zzzzBov

2
귀하의 답변은 언뜻보기에 합리적으로 들리며, 중소 규모의 대답이지만 "복사하지 마십시오"지시어의 어두운면을 보았습니다. 라이센스 조건, 수명주기 및 유지 보수 계약이 다른 제품마다 다른 팀이있는 경우 가장 마지막으로 원하는 것은 유지 보수 요구 사항과 일치하지 않는 자체 제작 코드 스 니펫 라이브러리에 서로 다른 제품을 결합하는 것입니다. . 이런 종류의 시나리오를위한 라이브러리는 매우 높은 품질을 가져야하며, 때로는 팀이 코드를 복사하고 복사하는 것이 더욱 효과적이어야합니다.
Doc Brown

3
@ Caleb : 침착하게 내 게시물을 완전히 읽으십시오. 내 요점은 : 다른 곳에서 코드를 복사하고, 조정하여 팀 라이브러리에 통합한다고해서 반드시 "투쟁의 길"로가는 것은 아닙니다. 중복되는 기능을 가진 두 개의 라이브러리와 각각의 라이브러리를 관리하는 두 팀이있을 때 상황은 그렇게 나쁘지 않습니다. 한 팀 다른 팀도 일을 할 수 있기 때문에 완벽 하지는 않지만 때로는 팀이 독립적으로 벌을 유지한다는 이점이 두 번의 작업보다 중요합니다.
Doc Brown

1
@DocBrown이 있습니다 이 코드를 복사 할 필요가있는 상황,하지만 의식적인 결정이 아니라 당신이 있기 때문에 코드가 처음에 공유 된 방식의하도록 강요하고 있다는 것을해야한다.
Caleb

13

이를위한 한 가지 접근 방식은 해당 목적을 위해 Wiki를 설정하고 재사용 가능한 구성 요소, 문제 해결 방법 등에 대한 고급 문서를 작성하는 것입니다.

어려운 부분은 팀의 모든 사람이 해당 위키를 지속적으로 유지하도록하는 것입니다. 그러나 다른 종류의 문서에는 동일한 문제가 있습니다.

일부 코드는 재사용 가능한 라이브러리에 넣기에 충분할 수도 있습니다. 또한 나중에 코드를 다시 쉽게 찾을 수 있습니다.


5
위키는 코드를 전파하는 올바른 방법이 아닙니다. 코드에 대해 의사 소통하는 좋은 방법 이지만 (내 대답 참조) 사람들이 위키에서 스 니펫보다 큰 것을 복사하여 프로젝트에 붙여 넣기를 원하지 않습니다.
Caleb

@Caleb 커뮤니케이션은 어려운 부분입니다
jk.

@jk-C에 언급 된 소스 컨트롤이없는 경우 통신 문제가 복잡해집니다
JeffO

3
@ Caleb : OP의 질문은 코드 배포에 관한 것이 아니라 나중에 의사 소통하고 찾는 것입니다.
Doc Brown

@DocBrown 다시 말하지만, 위키는 의사 소통에 적합하며, 아마도 GitHub와 같은 툴이 내장되어있는 이유 일 것입니다. 그러나 코드를 쉽게 찾을 수있게하는 것은 위키에서 언급 된 것이 아니라 알려진 위치에 보관되어 있다는 것입니다. 즉 위키, 그러나 우리는 사람들이 실제로 (솔루션을 설명 조각의 무리 대) 사용하려고하는 코드에 대해 이야기하는 경우 그것은 해야한다 의는, 검증에 건물을 지을 수있는 일종의 도서관, 무엇인가, 그리고 어떤 조만간 업데이트해야 할 장소의 수를 곱하지 않고도 통합 할 수 있습니다.
Caleb

7

직원 수가 700 명인 회사에서 2 명에서 20 명 사이의 팀으로 구성된 내 경험입니다.

팀 수준에서

우리는 매일 약 15-20 분 동안 "스탠드 업 회의"를하고 있습니다. "어제이 기능을 사용했는데 너무 어려워요"와 같은 일반적인 지식을 빠르게 공유 할 수 있습니다.

프로젝트 당 위키도 있습니다. 즉, 기본 제공되는 사용자 정의 클래스 / 함수를 포함하여 프로젝트에서 수행 된 작업에 대한 (기술적) 정보를 공유 할 수 있습니다.

대행사 수준에서

대행사 수준에는 4 가지 도구가 있습니다.

  • 또 다른 위키. 주로 하드웨어 및 물건에 대한 정보를 제공하지만 회사 수준으로 만들기 전에 검토 할 기술 정보를 공유하는 데 사용되기도합니다.
  • 주간 회의. 그들은 주로 각 팀 / 프로젝트의 진행 상황을 알고 있지만, 우리는 대부분 기술 애호가이기 때문에 멋진 것을 가져올 수 있습니다.
  • 메일 링리스트. 대행사에있는 모든 사람들과 우편으로 보내드립니다. 멋진 물건 / 재미있는 물건 / 유용한 물건이 많이 있습니다.
  • VCS 저장소. 각 대행사에는 소규모 프로젝트가있는 개인 저장소가 있으며 대부분 다른 프로젝트에서 사용하는 모듈입니다.

회사 차원에서

회사 수준에서는 더욱 체계적입니다.

"대행사 수준"위키는 실제로 회사 위키의 일부입니다.

그리고 위키는 기술에 따라 분리됩니다. 따라서 누구나 그것을 개선하고 검색하며 기본적으로 위키에 생명을 줄 수 있습니다.

가입 할 수있는 메일 링리스트도 있습니다. 대행사에있는 누구나 구독 할 수 있으며 대부분의 사람들은 적어도 하나 또는 두 개의 기술을 따르지만 실제로 대부분의 사람들은 그 중 5-10을 따릅니다.

VCS는 물론 최고의 코드 공유 시스템입니다.

결론

요약하면 명확한 컷 솔루션은 없습니다. 지식 공유는 항상 큰 문제였으며 아마도 남아있을 것입니다. 지식 기반 을 만들 수있는 솔루션이 많이 있으며 , 아마도 청구서에 맞을 수도 있습니다. 그러나 현재 솔루션이 항상 똑똑하지는 않기 때문에 일부 사람들 은 더 나은 KB를 얻으려고합니다.


결론은 "wiki, wiki, wiki, wiki, wiki"이상을 말해서는 안되지만, 진지한 메모, 좋은 대답으로 내부 위키는 높은 수준의 세부 사항이나 사용 연령을 자세하게 설명하는 데 도움이 될 수 있습니다. 검색 할 수 있으면 시간을 절약 할 수 있습니다.
RhysW

6

글쎄, 그것은 모두 의사 소통에 달려 있습니다.

위키는 훌륭하고 반드시 설치하고 사용해야합니다. 좋은 내부 프로그래머 인트라넷은 사람들이 그것을 읽고 업데이트하면 좋습니다. 그래서 실제로 사람들의 문제에 대해 이야기하고 있습니다. 모든 사람들이 모이는 주간 "팀 업데이트"회의를 제안하고 진행중인 작업에 대한 개요를 제공 할 수 있습니다. 기술 담당자 (적어도!)는 각 팀의 활동에 대해 함께 모여 채팅해야합니다. "Brown Bag"비공식 세션은 훌륭하고 점심 시간에 예약하고 사람들과 대화 할 수 있습니다.

코드를 공유하고, 패키징하고, 버전을 정하고 배포하는 방법도 필요합니다. "공통"폴더와 프로젝트 폴더로 잘 정리 된 소스 코드 저장소를 관리하는 것이 훨씬 쉬울 것입니다.

이와 같은 일이 없으면 상사와 함께하고 회사에 어떻게 도움이되는지 설명하고 앞으로 나아갈 길을 제안하십시오 :)


1
나는 당신의 대답에서 "공통적 인"개념을 조금 더 위로 움직일 것입니다.
JeffO

4

코드 검토 세션이 도움이 될 수 있습니다. 팀이 정기적으로 만나 개발 된 내용에 대해 토론하면 솔루션을 만든 사람이 다른 사람에게 사용 방법을 보여줄 수 있습니다. 누군가가 고집하고있는 요점을 제시하면 다른 팀 구성원이 기존 구성 요소의 재사용을 늘리는 접근 방식을 제안 할 수 있습니다.


1
그러면 4 년 동안 600 개의 기능이 나중에 만들어 졌다는 사실을 기억하고 싶습니까? OP의 문제 중 일부는 만들어진 모든 것들을 기억하려고했지만, 처음에는 한 달 또는 두 달 동안 지속되지 않을 것입니다.
RhysW

2

이와 같은 것을 처리하는 가장 좋은 방법은 간단한 규칙이있는 리포지토리 구조를 사용하여 프로그래머가 함수가 있는지 doXYZ대략적으로 해당 함수를 찾아야하는 위치를 알 수 있도록하는 것입니다. 네임 스페이스, 디렉토리, 모듈, 플러그인, 패키지를 사용하든 상관없이 코드는 모듈 식이어야하므로 동일한 작업을 수행하거나 동일한 데이터 소스에 액세스하는 기능은 거의 같은 위치에 있습니다.


0

이상적으로는 각 체크인마다 코드 검토를 수행하는 작성자 외에 다른 사람이 한 명 이상 있어야합니다. 코드 검토 프로세스는 많은 중복 메소드가 체크인되는 문제를 완화하는 데 도움이 될 수 있습니다. 물론 검토 자의 지식에 제한을받습니다.

TL; DR : 모든 체크인에 대한 코드 검토.


2
이해하지 마십시오. 코드 검토에서 중복 된 것처럼 보이기 때문에 테스트되고 작동하는 코드를 버릴 것입니까? 문제는 우선 중복 코드 작성을 피하는 방법이었습니다. @daenyth의 답변과 같은 세션이 더 좋아 보입니다.
adrianm

리뷰어가 기능을 복제하는 코드를 추가하고 있다고 말했는데 그들이 옳은 것을 발견하고 발견했다면 도덕 코드를 폐기 할 것입니다. (아마도 구현이 더 나은지 확인하고, 그렇다면 구현을 새로 추가하는 대신 다른 구현을 리팩터링 할 수 있는지 확인하십시오.)
Carolyn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.