대규모 코드 기반과 많은 개발자를 통해 리팩토링을 어떻게 관리합니까?


13

두 개발자가 먼저 이야기하지 않고 동일한 코드를 동시에 리팩터링하는 상황을 방지하고 싶습니다. 어쩌면 어떤 종류의 도구, 아마도 Eclipse 플러그인을 사용합니다. 도울 수 있니?

우리는 450 만 라인의 코드와 4 개 대륙의 20 개 이상의 개발자 팀을 보유하고 있습니다.

이상적으로는 앞서 언급 한 두 번째 개발자가 다른 사람이 동일한 코드 조각을 작업 중이며 첫 번째 코드와 대화하여 내용을 수정하기를 원합니다.

해결책을 알고 있습니까?


1
Eclipse 플러그인에 대해 모른다. 버전 제어 시스템의 일처럼 들린다.
SL Barth-복원 모니카

왜 그런 일을 방지하고 싶습니까? 합병증 (버그)을 피하거나 개발자 시간을 절약 할 수 있습니까? 솔루션은이 IMO에 대한 답변에 크게 의존합니다.
KaptajnKold

SVN, Apache Subversion 또는 Tortoise svn을 사용해보십시오.

1
20 개의 팀이 동일한 소스를 편집하는 이유는 무엇입니까?

VCS가 있습니다. 방금 ClearCase에서 Git으로 변경했습니다.
Roger CS Wernersson

답변:


14

많은 2 세대 소스 제어 시스템은 연결된 "체크 아웃"을 사용하여 서버에 파일을 수정하려고 함을 알려줍니다. 예로는 TFS, SourceGear Vault 등이 있습니다. 이러한 방식으로 요구 사항을 기술적으로 달성 할 수 있습니다 . 그러나 Adam Butler가 지적했듯이 이러한 유형의 도구에는 긴 토론에 참여하지 않고 오프라인 작업에 대한 제한적인 지원과 일반적으로 비생산적인 개발 워크 플로와 같은 자체 문제가 있습니다.

리팩토링 작업을 할당하는 일종의 계층 적 접근 방식을 제안합니다. 개발자는 코드의 특정 영역을 담당하는 하위 팀으로 논리적으로 그룹화 할 수 있습니다. 팀 구성 방법에 따라 각 팀은 팀 영역의 고급 디자인을 담당하는 "리드"역할을 수행 할 수 있습니다. 이 구조는 개발자에게 잘 알려져 있어야하며 리팩토링을위한 통신을 단순화해야합니다. 나는이 접근 방식이 너무 형식적이고 일부에는 뒤 떨어질 것이라고 확신하지만, 20 명 이상의 개발자가 큰 시스템을 리팩토링하기 위해 "무료"접근 방식을 사용하는 것이 매우 바람직하다고 생각합니다. 일부 리팩토링은 상위 수준에서 수행됩니다 (예 : 모듈 X가 모듈 Y와 통신하는 방법). 이 경우 적절한 수준에서 전화를 걸 수있는 사람들이 필요합니다. 팀의 모든 개발자가 아키텍처 결정을 내려야하는 것은 아니기 때문에, 어떤 경우에도 계층 구조가 무시됩니다.

기본적으로, 여러분이 제시 한 기본 요구 사항을 충족시키는 도구가 있지만 적절한 의사 소통을 대체하고 소수의 사람들이 프로젝트의 일반 아키텍처를 추진하는 도구는 없습니다.


대부분 수직을 바꾼다. GUI, 네트워크 프로토콜, 데이터베이스, 작업을 수정합니다. 리팩토링을 전달하는 데 도움이되는 도구가 필요합니다. 모든 체크인시 코드를 리팩터링하여 가독성을 높이고 유지 보수 비용을 줄입니다.
Roger CS Wernersson

@RogerWernersson-나는 이것을 달성하는 좋은 방법이 없다고 생각합니다. 그렇기 때문에 제 답변이 팀과 책임, 회사 문화를 조직화하여 결과적으로 발끝을 밟을 것을 권장했습니다. git 위에 동시 체크 아웃을 개조하는 것은 고통스럽고 중앙 집중식 개정 제어 시스템의 모든 단점이있을 것입니다. 누군가가 그것을했다고 확신합니다. 특정 구현을 찾을 수 있어야합니다. 이제 git을 사용한다고 언급 했으므로.
Daniel B

7
  1. 개발자에게 특정 모듈이 지정되어 있는지 확인하십시오.
  2. 모든 리팩토링 변경을 추적하는 작업 / 버그 추적 시스템을 갖추십시오. 각 이슈를 한 명의 개발자에게만 할당
  3. 일부 버전 제어 시스템에는 파일을 잠그는 기능이있어 한 명의 개발자 만 파일에 대한 업데이트 권한을 가질 수 있습니다. 필자는이 기능을 사용한 적이 없지만 개발자가 지속적으로 서로 단계별로 지원하는 경우 고려해야 할 사항입니다.
  4. 개발자가 동일한 파일로 작업하더라도 변경 사항이 앱을 중단시키지 않는 단위 테스트를 수행하십시오.
  5. 리팩토링이 모듈 내에 포함되어 있으면 위의 모든 것이 도움이 될 것입니다. 그러나 누군가가 로깅이나 보안과 같은 교차 문제에 대해 리팩토링을 수행하는 경우 정의에 따라 많은 파일에 영향을 미칩니다. 이미 aop 접근 방식을 활용하지 않은 경우 특히주의해서 다루어야합니다.

나는 원칙적으로 잠금을 사용하는 것을 선호하지만 도구 (예 : Eclipse)가 리팩토링을 통해 많은 파일을 자동으로 변경하면 어떻게해야합니까? 변경된 모든 파일을 자동으로 잠 가야합니까? 잠긴 파일 수는 매우 빠르게 증가 할 수 있습니다. 잠금을 점진적으로 획득해야합니까? 교착 상태를 처리하는 방법?
조르지오

메소드 서명을 변경하고 많은 파일에 영향을주는 경우 모든 파일에 대한 잠금을 얻어야합니다. 다른 사람이 잠금을 가지고있는 경우 리팩토링이 우선 순위가 높은 경우 잠금을 강제로 얻을 수 있습니다 (svn에서 허용).
Sriram

우선 순위를 저장하고 잠금 충돌을 자동으로 해결하여이를 자동화 할 수 있습니까? 또는 각 개발자가 리팩토링의 우선 순위가 더 높은지 여부를 결정합니까?
조르지오

우선 순위가 괜찮은 api로 task mgmt 앱에 저장되어 있다면 자동화 할 수 있다고 생각합니다. 나는 그것을 시도한 적이 없지만 왜 그렇게해서는 안되는지 모르겠습니다.
스리 람

각 리팩토링에 대한 버그를 제기하고 싶지 않습니다. 접근 방식은 변경 한 코드를 정리하는 것입니다. 각 파일에 대한 버그 보고서를 작성하는 것은 너무 많은 일처럼 들립니다.
Roger CS Wernersson

6

개발자가 편집하기 전에 코드를 체크 아웃하도록하는 버전 제어 시스템이 있지만 여기에는 고유 한 문제가 있습니다. 더 나은 방법은 개발자가 자주 커밋하고 업데이트하도록하는 것입니다. 한 개발자는 클래스를 감가 상각 된 것으로 표시하고 다른 개발자가 리 팩터를 시작하기 전에 업데이트하면 의도를 볼 수 있습니다.


3
+1 : 커밋 및 업데이트는 종종 변경 사항이 작고 쉽게 관리 가능하여 충돌을보다 쉽게 ​​관리 할 수 ​​있음을 의미합니다.
Bringer128

커밋은 종종 도움이 될 것입니다. 불행히도, 나는 그것을 바꿀 수 없습니다. 의사 소통을 돕는 도구를 찾고 있습니다.
Roger CS Wernersson

3

기술은 사회적 문제를 해결할 수 없습니다. 개발자가 서로 대화하고 작업을 조정하도록해야합니다. 20 개 팀으로 구성하면 일부 구조와 규칙이 필수적입니다. 기술 솔루션으로 지원하고 싶지만 사람들이 먼저옵니다.


3
그는 20 개 팀이 아니라 20 개 팀에 대해 이야기했습니다.
Ingo

1
기술에 대한 +1은 사회적 문제를 해결할 수 없습니다. 그러나 "20 개 팀으로 구성하면 일부 구조와 규칙이 필수적"이라고 답변을 편집하십시오.
MarkJ

어떤 사람들은 다른 사람들이 일하는 동안 잠을 자고 있습니다. 우리는 4 개 대륙에 팀이 있습니다.
Roger CS Wernersson

0

notice that someone else is working on the same piece of code and talk to the first one before modifying anything당신이 말한대로, 떠나면 버전 제어 시스템 (CVS / SVN / GIT)이 필요합니다. 확실하지는 않지만 포함 시키려면 고급 기능이 필요합니다 (일부 트리거 메커니즘 / 사용자 지정 기능).


우리는 힘내있어. 그 전에는 ClearCase가있었습니다. VCS는 해결책이 아닙니다. 트리거링 메커니즘이 필요합니다.
Roger CS Wernersson

0

소스 제어에서 파일을 잠그는 개발자는 문제를 쉽게 해결해야하지만 더 큰 문제가 있다고 생각합니다.

4.5 백만 LOC는 잘 설계되고 설계된 솔루션에서 사용할 수있는 방대한 샌드 박스이므로 여러 팀의 개발자가 서로 발을 딛는 상황에는 거의 빠지지 않아야합니다. 이것이 우연히 발생하는 것 이상으로 발생한다는 사실은 고려해야 할 심각한 잠재적 인 설계 결함을 말하는 것입니다.


대부분의 변경 사항은 수직입니다. GUI, 네트워크 프로토콜, 데이터베이스. 각 팀은 민첩하며 모든 스프린트에서 고객 가치를 제공하는 데 중점을 둡니다. 우리는 데이터베이스 팀, GUI 팀 등을 하나도 가질 수 없습니다. 코드가 깨끗하면 더 쉬울 것입니다. 그러나 코드를 깨끗하게하는 길은 "많은 작은 리팩토링"입니다.
Roger CS Wernersson

0

몇 가지:

  1. 작업 할 별도의 모듈
  2. 변경하기 전에 모든 개발자와 대화하기
  3. 단위 테스트 [관련 사항을 확인하고 피하기 위해]
  4. 다른 사람들이 VCS를 언급했듯이

1. 각 팀이 세로로 일할 때 어려움 2. 일부 팀이 잠을 자면서 다른 팀이 일하기 때문에 어려움 3. 문제를 해결하지 못함 4. Git의 현재 위치는 이전 ClearCase입니다.
Roger CS Wernersson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.