개발자가 자신의 워크 스테이션에서 작업하는 방법에 대한 표준


18

우리는 프로젝트 도중 며칠 동안 개발자가 아플 때 때때로 나타나는 상황 중 하나를 발견했습니다.

그가 최신 버전의 코드를 커밋했는지 또는 로컬 컴퓨터에 최신 코드가 있는지 여부에 대해 몇 가지 질문이 있었으며 고객에게 대기 중이 어서 기다릴 수 없었습니다. 그에게 돌아온다.

다른 개발자 중 한 명이 같은 프로젝트의 겉보기에 작업 공간의 혼란을 발견하고 발견 한 타임 스탬프를 사용하여 어느 것이 "현재"인지 확실하지 않은 타임 스탬프를 발견했습니다. 그의 "핵심"하나).

분명히 이것은 목에 통증이지만, 대안 ( 다른 개발자가 최소한의 노력으로 물건을 집어들 수 있도록 각 개발자가 자신의 컴퓨터 에서 작업하는 방법에 대한 엄격한 표준 인 것처럼 보일 것 입니다 )은 많은 것을 깨뜨릴 수 있습니다 개발자 개인의 업무 흐름과 개인 수준의 비효율로 이어집니다.

나는 체크인 코드의 표준이나 일반적인 개발 표준에 대해 이야기하지 않고 개발자가 로컬에서 작동하는 방식, 일반적으로 (내 경험상) 거의 완전히 개발자 자신의 통제하에 있다고 간주되는 도메인에 대해 이야기하고 있습니다.

이런 상황을 어떻게 처리합니까? 방금 발생하는 문제 중 하나 인 개발자에 대해 지불하는 가격이 개발자에게 가장 적합한 방식으로 작업 할 수 있습니까?

또는 특정 디렉토리 사용, 표준 이름 지정, 위키에 대한 노트 등이 영역의 표준을 개발자에게 따르도록 요청합니까? 그렇다면 귀하의 표준이 무엇을 다루는가, 얼마나 엄격하고, 어떻게 경찰 등을 감시합니까?

아니면 다른 해결책이 있습니까?

[메모리에서 어떤 작업 공간이 단순하고 결함이 없으며 때로는 사람들이 진정으로 할 수 있는지를 알고 설명 할 수 있더라도 개발자가 여기에서 무엇을하고 있는지 이야기하기 위해 연락 할 수 없다는 주장을 가정하십시오. 연락하지 않고 모든 상황을 다루는 솔루션을 원합니다.]

편집 : 나는 누군가의 워크 스테이션을 통과하는 것이 나쁜 형태라고 생각합니다 ( 왜 그런지에 대한 흥미롭고 주제가 아닌 다른 질문이지만) 나는 무제한 액세스를 보지 않을 것입니다. 코드 디렉토리가 읽기 전용 공유로 설정된 표준 라인을 따라 더 많은 것을 생각하십시오. 아무것도 변경할 수 없으며 다른 것도 볼 수 없습니다.


8
프로그래머의 명령 센터에서 Gestapo로 이동하면 -1입니다.
systemovich

17
잠깐, 두 번째 개발자는 첫 번째 개발자의 암호를 어떻게 알았습니까?
TheLQ

12
훌륭한 질문은 +1입니다. "Going gestapo"는 개발자가 회사를 위해 일하고 있으므로 로컬 컴퓨터에 대한 액세스 권한을 포기하기 때문에 회사 환경과 관련이 없습니다. 프라이버시를 원하고 자신의 하드웨어를 사용하십시오.
Gary Rowe

4
개발자에게 비밀번호를 문의 할 수 있다면, 현재 버전을 물어 보지 않은 이유는 무엇입니까?
벤 L

2
@ 게리 : 무엇? 아니, 그것은 완전하고 (매우 위험한) 말도 안됩니다. 회사에서 일하는 것부터 프라이버시에 대한 개인의 권리를 포기할 때까지 (논리적, 법적으로) 엄청나게 탄탄합니다. 존의 행동을“게슈타포로가는 것”(그가 더 설명하기 전에도)이라고 부르지는 않지만 회사 때때로 게슈타포를 가는데 이것은 모든 수준에서 예방하고 싸워야하는 것입니다. 난 단지 독일에 대해 이야기 할 수 있지만, 여기에 당신이 회사 소유 하드웨어에서 작업하는 경우에도 특정 개인 정보 보호 권리가 있습니다.
Konrad Rudolph

답변:


64

" 소스 제어에없는 경우 존재하지 않습니다. "

이것은 내가 교리 적으로 경계하는 우리 직업에서 몇 가지 중 하나입니다. 다음과 같은 이유로 :

  1. 워크 스테이션은 회사의 자산이지만 직면 해 봅시다. 프로그래머 자신의 워크 스테이션이 자신의 성이라는 기록되지 않은 규칙이 있습니다. 누구나 일상적으로 로그온하여 사용할 수있는 직장 문화가 불안합니다.
  2. 모두가 자신의 흐름을 가지고 있습니다 (당신이 말했듯이). 모든 개발자가 자신의 로컬 작업 공간을 특정 방식으로 구성하도록 강요하면 특정 작업 방식에 위배되고 흐름이 깨져 효율성이 떨어질 수 있습니다.
  3. 소스 컨트롤에없는 것은 반-베이크 코드입니다. 출시 준비가 된 코드가 완전히 구워지면 소스 제어 상태에 있어야합니다. 다시 요점으로 돌아옵니다 ....
  4. "소스 제어에없는 경우 존재하지 않습니다."

사람들의 워크 스테이션에서 코드를보고자하는 문제를 완화 할 수있는 한 가지 방법은 정기적 인 체크인 문화를 조성하는 것입니다. 나는 공식적인 명령이 없었음에도 불구하고 회사에서 한 번 근무했는데, 주말 동안 모든 것이 항상 체크인되는 것이 자랑 스러웠습니다. 유지 보수 및 릴리스 후보 단계에서 CR 항목은 작고 깨끗하게 눈에 띄는 변경 사항과 정기적 인 체크인을 통해 추적 할 수 있도록 의도적으로 매우 세분화되었습니다.

또한 휴가를 가기 전에 모든 것을 체크인 해야 합니다.

TL; DR 버전 : 사람들의 워크 스테이션을 통한 리프팅은 잘못된 형태입니다. 사람들의 워크 스테이션을 통해 원하는 것을 쉽게 찾을 수있는 문화를 조성하기보다는 합리적인 소스 제어 사용과 정기적 인 체크인 문화를 육성하는 것이 좋습니다. 프로젝트의 중요한 단계에있을 때 규칙적인 체크인과 세밀한 작업까지도 가능합니다.


10
+1 : 누군가 병이 나고, 워크 스테이션에서 혼란스러워하는 것은 아마도 가치보다 더 비쌀 것입니다. 한 사람이 이미 사라졌습니다. 이제 또 다른 일이 일어나고있는 것을 알아 내기 위해 시간을 낭비하고 있습니다. 아무 가치없는 거대한 관리 악몽. 소스 제어가 될 때까지는 존재하지 않았습니다.
S.Lott

1
그가 하루를 쉬었다면? 예, 나머지 주 동안? 아마도 한 달 동안? 기회 없음. 이것은 끔찍한 "회색 음영"문제 중 하나입니다. 우리는 일찍 커밋하고 자주 커밋하기 위해 다시 돌아 왔습니다. 따라서 패턴은 반드시 워크 스테이션 일 필요는 없지만 버전 제어를 사용해야하지만 명확하게 뭔가가 필요합니다. 생각할 가치가 있습니다.
Murph

릴리스를 말할 때 빌드 또는 사용자 릴리스를 의미합니까?
JeffO

2
@ 머프 : 변경 사항이 X 일마다 어딘가에 적용되면 잘못 놓칠 수있는 최대 작업량은 X 일의 가치이며 개발자가 피할 수없는 기간에 관계없이 사실입니다. 적절한 조치는 손실 된 작업량이 허용되는 범위 내에 있도록 자주 체크인하는 것에 대한 정책을 세우는 것입니다.
David Thornley

1
@David 내 의견은 @lost의 의견에 대한 @ S.Lott의 의견에 대한 답변이었습니다. 글쎄요 나는 완전한 일련의 변화의 의미에서 커밋을 원자화하고 싶다. (리베이스가 왜 그렇게 매력적인 지 이해하기 시작했다.)-나는 "저장하겠다고 결심"을 문제가있는 것으로 본다 rebase에 상응하는 것). 그리고 어떤 경우에도 매일 자동 워크 스테이션 백업이 버전 제어와는 상당히 다릅니다.
Murph

22

개발자가 워크 스테이션을 구성하는 방법에 대한 표준을 시행하기보다는 매일 모든 작업이 체크인되는 표준을 시행하십시오 . 체크인이 아직 완료되지 않은 경우 지점에 도착할 수 있습니다.

이렇게하면 아무도 다른 개발자의 워크 스테이션에 액세스 할 필요가 없습니다.

나는이 정책이 반대에 부딪 힐 것이라고 생각하지만, 워크 스테이션 구성에 대한 규칙을 시행 할 때 기대하는 것과 비교할 수있는 것은 없다.


1
지점을 얼마나 자주 병합 하시겠습니까? 당신이 그것이 안정하다고 느낄 때마다?
Jon Hopkins

2
@Jon Hopkins : "Releasable"은 "Stable"보다 관리하기가 쉽습니다. 릴리스에는 제품 소유자가 준비 할뿐만 아니라 안정적인 제품도 포함됩니다. 그리고 지점 간 릴리스 처리를 많이 수행합니다. 지점 간 안정은 주관성과 "나를 위해 일한"토론의 가능성이 너무 높습니다.
S.Lott

2
-1 나는 엄청난 양의 자격없이 이것에 동의하지 않는다. 체크인은 논리적 인 시점에서 이루어져야한다. (예, 우리는 현명한 중단 점에 도달 할 때까지 떠나지 말아야하지만 인생은 항상 협력하지는 않습니다.) 백업은 명확해야합니다. 그리고 우리 모두는 박스에 접근하는 것에 대해 조금 덜 귀중해야합니다 ( 변경 , 접근 이 아님)
Murph

1
-1 이것은 "정말 아파요, 지금 집에 갈 거예요. 흠, 또 30 분의 준비를하는 것이 좋습니다. 커밋 할 때 빌드를 중단하지 않습니다."
Gary Rowe

2
@Murph 체크인 한 '트렁크'또는 메인 라인 (호출하고자하는 것)은 설명 할 때만 발생합니다. 그러나 개발자가 개인 브랜치에 커밋하여 '하루가 끝날 때 작업을 저장'하는 데 아무런 문제가 없습니다 (SVN보다 git 또는 mercurial을 사용하는 것이 훨씬 쉽지만). 그리고 개발자 워크 스테이션을 구성하는 방법에 대한 지침을 시행하는 것과 비교할 때 (우리의 출발점 이었음) 이는 명백한 제정신 솔루션입니다.
Kris

6

누군가가 내 컴퓨터에 로그인하여 내 정보를 탐색 할 것이라는 생각에 대해 불안하다고 느끼는 진실을 말씀 드리겠습니다. 물론, 그것은 회사의 장비와 재산이지만, 단순히 나쁜 일입니다.

지난 주말에 사람들은 데이터베이스와 소스 제어를 사용하여 서버를 재구성했으며 어떤 이유로 든 내 컴퓨터에 로그인하고 새로운 설정을 위해 시스템을 재구성해야한다고 생각했습니다.

너무 안타깝게도 그들이 무엇을하고 있는지 전혀 몰랐으며 지난 2 개월 동안 작업했던 프로토 타입을 지 웠습니다.

적절한 의사 소통이 이루어 졌다면 일어나지 않았을 것입니다. 그게 당신이 필요로하는 것입니다. 해당 개발자에게 문의하여 상태를 확인하십시오. 더 좋은 방법은 휴가를 떠나기 전에 사람들에게 보고서를 요청하여 필요한 정보가 있는지 여부에 대한 정보를 바탕으로 결정을 내릴 수 있도록하는 것입니다.

그러나 사람들의 워크 스테이션을 엉망으로 만들지 마십시오.

추신 : 우리는 디렉토리 구조에 대한 관습을 가지고 있지만 주된 이유는 역사 / 구성이 혼합되어 있기 때문에 다른 곳에두면 컴파일되지 않습니다.


3
@Murph : 자신의 시스템에서 무언가를 가져와야하는 긴급한 필요와 함께 "아파서"가는 것은 매우 드문 상황입니다. 표준화 노력의 가치가 없을 수 있습니다.

1
누군가 메일을 읽어야하는 이유와 컴퓨터에서 아무 것도 변경해서는 안되는 이유를 이해할 수 있지만 코드 디렉토리를 공유 (읽기 전용)하는 것이 표준이라면 어떨까요? 그것은 내가 당신의 이의로 인식하는 것의 대부분을 둥글게 할 것이지만 사람들이 비상시에 당신의 일을 할 수있는 가능성을 여전히 허용합니다.
Jon Hopkins

3
해당 프로토 타입에 백업이 없습니까?
JeffO

2
@ 개발자 예술, 왜 버전 관리 시스템의 브랜치에서 일하지 않았습니까?

1
@DeveoperArt, "해당 옵션을 사용하지 않는다"는 것은 무엇을 의미합니까? 당신은 당신 자신에 지점을 만들 수있는 방법이 없다는 것을 의미합니까? 그들은 어떻게 든 분기를 비활성화 했습니까? 그 가능성에 대해 들어 본 적이 없습니다. 그럼에도 불구하고 다른 사람과 관계없이 자신의 로컬 컴퓨터 (아마도 Dropbox 또는 네트워크 드라이브에 백업)에 "git"(또는 "svn") 리포지토리를 만들 수 있습니다. 나는 "중요한지"여부에 관계없이 2 개월 (또는 실제로 2 시간 동안 ) 작업하고 그것을 1 부만 보유하는 것과 개인적으로 관련이 없습니다 .
JoelFan

6

몇 달 전에 나는 다소 큰 프로젝트를 진행하고 있었고 병원에 입원 한 것을 알면서 갑자기 직장을 떠나야했습니다. 프로젝트의 최신 코드를 확인할 시간이 없었습니다.

운 좋게도, /var/www/ourdomain.com프로덕션을 모방하기 위해 코드를 저장하는 것이 (필수는 아니지만) 관습 입니다. 이러한 논리적이고 따르기 쉬운 규칙을 통해 동료는 내 컴퓨터에 로그인하여 최신 변경 사항을 쉽게 검색 할 수있었습니다.

나는 몇 가지 규칙이 좋다고 생각합니다. 그가 말할 때 Bobby에 동의하지만

"소스 제어에없는 경우 존재하지 않습니다."

또한 프로그래머 작업 공간에 유용한 추가 기능은 모든 소스 및 개발 프로젝트를 저장하는 전면 베이 핫 스왑 SATA 드라이브 일 수 있습니다. 이러한 방식으로 이러한 문제점이 발생하면 직원은 개발자 워크 스테이션에 로그인 할 필요없이 프로젝트의 새로운 소스 변경 사항을 쉽게 검색 할 수 있습니다.


"... 존재하지 않습니다". 다른 사람들에게, 즉.

4

질문의 첫 부분은 팀 내 의사 소통 문제를 명확하게 식별합니다. 매일 스탠드 업 을 시도 했습니까 ?

표준이 너무 엄격한 경우 비 효율성을 초래할 수 있다고 말하면 동의합니다. 표준은 모두가 참여 하는 팀에 의해 정의되어야합니다 .

귀하의 경우, 관련 개발자가 직장에 돌아온 후 며칠을 기다릴 것입니다. 그런 다음 해당 표준에 대해 이야기 할 회의를 조직하십시오.

심리적 차단과 저항을 피하기 위해 본 사람이나 특정한 것을 지명하지 마십시오. 일반적으로 여기에서 목표는 작업 방식을 개선해야한다고 생각하는 개발자를 포함하여 모든 사람으로부터 의견을 얻는 것입니다. 그 사람은 당신의 조직도 엉망으로 생각할 수 있습니다.

회의 중에 문제를 제시하고 이 어떻게 상황을 개선 할 수 있는지 명확하게 묻습니다 .

(전체) 이해야 할 일을 결정합니다.


2

해당 사용자는 적절한 도구가 부족할 수 있습니다. 특히, 분산 버전 제어 시스템을 사용하면 다른 상태의 다른 코드 디렉토리를 가질 필요가 없어졌습니다. 그는 모든 것을 가지에두고 훨씬 더 행복했을 수있었습니다.

그러나 요점으로, 나는 내 자신의 워크 스테이션을 구성하는 방법에 대한 표준을 시행하고 싶지 않다. 저는 현재 IDE에서 표준화하는 부서에 대해 추진하고 있습니다 (내 상사 REALLY는 IMO가 작업에 가장 적합한 도구는 아니지만 사용하고 잘 알고 있기 때문에 Eclipse에서 우리 모두를 원합니다 ).

개발자가 편안하게 할 수있는 모든 작업을 수행하십시오. 편안한 개발자는 불편한 개발자보다 생산적입니다. 누군가 생산적이지 않고 도구를 사용하여 현지에서 어려움을 겪고 있다고 생각되면 새로운 규칙을 세우기에 좋은 시간이 아니라 훈련의 기회입니다.


1
어떻게 도움이 되나요? 문제는 여전히 존재하지만, 우리는 단지 어떤 작업 공간이 아닌 로컬 DVCS 저장소 내의 어느 브랜치에 대해서만 이야기하고 있습니다.
Jon Hopkins

도구를 가정하지 말고 부족한 도구를 사용하는 가장 좋은 방법에 대한 평가. 어떤 사람들에게는 분명한 것이 다른 사람들에게 보여 져야합니다. 소스 트리의 많은 사본의 안티 패턴은 내가 몇 번 본 것입니다. 그렇습니다. DVCS는 도움이 될 수 있습니다. 그러나이 맥락에서 우리는 여전히 올바른 지점을 식별하는 데 문제가 있으며 더 나아가고 싶다면 진행중인 작업 지점을 사용할 수있게 만드는 데 여전히 문제가 있습니다. @Jon 로컬 DVCS는 자동적으로 해당 사용자의 리포지토리의 "백업"으로 푸시해야합니다. 최소한 상자에서 문제를 옮길 경우.
Murph

@Jon-요점은 다양한 분기가 분산 된 파일 디렉토리가 아닌 병합 기능이 내장 된 것입니다. 또한, 그를 데려와 DVCS에 올라가는 것은 훈련 기회 였을 것입니다.
Dan Ray

1
@ Dan-그러나 그 지점 중 일부는 막 다른 골목입니다. 개념 증명, 구 버전에서는 병합하지 않으려는 여러 가지 디버그 코드가있는 것들. 병합 기능이 있다는 사실은 병합 할 대상을 모를 때 도움이되지 않습니다.
Jon Hopkins

@ Jon-사실 인 것 같습니다. 어쩌면 엉망으로 만드는 누군가로부터 회복되지 않을 수도 있습니다.
Dan Ray

2

예전 작업장에는 버그 추적의 각 작업에 소스 제어의 자체 분기가있는 시스템이있었습니다. 대부분의 경우 하나의 버그 / 태스크가 한 명의 개발자에 의해 찌그러져 서 깨진 코드를 소스 제어에 체크인 할 수있는 것으로 이해되었습니다.

코드가 개발 브랜치에서 안정적인 상태가되면 통합하려는 브랜치에서 코드를 드래그하여 리베이스를 수행했습니다. 해당 병합을 테스트 한 후에는 코드를 통합 브랜치에 커밋하는 경우 일뿐입니다. 브랜치에서 이미 병합을 수행 했으므로 병합 할 필요가 없습니다.

이런 식으로, 당신은 깨진 코드를 커밋하는 것에 대해 걱정하는 개발자의 문제를 피할 수 있습니다-그리고 당신은 밤에 사무실을 떠나기 전에 코드를 체크인하는 것이 허용되는 사회 정책을 적용하기 시작할 수 있습니다-멋지고 안전합니다.


2

에서 특정 상황 호출 집에서 사람, 당신은 그가 병이 있음을 의심하지 않는 것을 매우 명확하게하지만 당신은 다른 사람이 자신의 일을 계속하고 최신 물건이 어떤 상태에 어디에 문의해야합니다.

그런 다음 여기에서 수행 할 작업을 고려해야합니다. 사람들이 너무 체크인하지 않는 것이 문제라면 사람들이 서로 방해하지 않고 지점에서 일할 수있는 분산 소스 제어 시스템을 사용하는 것이 좋습니다.

문제는 개발자가 자신의 컴퓨터에 여러 개의 작업 공간을 가지고있는 것을 좋아하지 않는다면 극복하십시오. 작업 스타일은 개인마다 다르며 소스 리포지토리의 규칙에 따라 제대로 작동하는 한 기본적으로 시스템에서 멀리 떨어져 있어야합니다. 개인적으로 다른 프로젝트에 대해 새 사본을 매우 자주 확인하고 한 번에 한 번 씩만 정리합니다.

문제가 개발자가 무엇을하는지 모르는 경우 문제는 정치적이지 않은 정치적 문제이므로 관리 스타일을 변경해야합니다. 개발자는 소량 관리를 거의 좋아하지 않으며 위임 해야하는 숙련 된 개인입니다 . 그렇지 않으면 가장 숙련 된 사람들을 밀어 내게됩니다.

따라서 공통 소스 리포지토리를 사용하는 더 나은 방법을 장려하는 것이 좋습니다. 사람들이 브랜치에서 작업하는 것이 좋으며 매일 로컬 리포지토리를 마스터 리포지토리에 동기화하는 한 자주 커밋 할 수 있도록합니다. 항상 다른 부서에 영향을 미치지 않는 지점에서 개발 작업을 수행합니다).


1
나는 그 질문에 그 사람에게 연락 할 수 없다고 가정했다.
Jon Hopkins

이 경우 @Jon은 미완성 된 작업을 잃어 버렸다고 생각하고 다른 프로그래머에게 할당 한 다음 왜 이런 일이 처음 발생했는지 숙고합니다.

거기에 논리적 모순이있다 - 당신이 알고있는 수단 "당신이 위임해야한다"대 "당신은 당신의 개발자가 무엇을하고 있는지 모른다" 무엇을 그가하고 있어요 그러나 가능하지 방법 - 당신이 코드를 얻을해야하는 이유 차례로이다 ... (예, 의사 소통은이 문제를 해결하는 데 도움이 될 수 있지만 문제를 해결하기 위해 개발자에게 신뢰를 주면 주어진 개발자에 대해 "이 문제를 해결하십시오!"라는 관리만큼이나 많은 관리가 필요할 수 있습니다. 필요).
Murph

@Murph, 그런 다음 "지점에서 자주 커밋"규칙을 시행하고 적어도 매일 중앙으로 푸시합니다.

1

이런 상황을 어떻게 처리합니까?

불안정한 개인 브랜치를 지원하는 소스 제어 시스템과 빈번한 커밋을 유지하여이 문제를 해결할 수 있습니다. 전체 문제가 해결 될 때 커밋이 필요하지 않습니다. 소스 제어의 혜택을 누릴 때마다 제공되어야합니다. 하루의 끝은 커밋이 발생해야 할 시점 중 하나이므로 변경 사항이 발생한 위치를 확인하고 백업하고 미래의 자기 자신 또는 다른 사람에게 설명 할 수 있습니다.

또는 특정 디렉토리 사용, 표준 이름 지정, 위키에 대한 노트 등이 영역의 표준을 개발자에게 따르도록 요청합니까?

규약을 나타내는 거대한 환경 구성 문서가 있지만 표준은 아닙니다. 표준은 프로덕션 코드 및 환경에 대한 것입니다. 그러나 많은 개발 도구는 컨벤션을 지원하도록 설정되어 있으며 대부분의 개발자는 이러한 추세를 극복하기 위해 노력하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.