이 질문에는 실제로 두 가지 질문이 포함되어 있으며 별도로 해결해야합니다.
일부 팀은 왜 엄격한 개발 프로세스를 가지고 있습니까?
간단한 대답은 그렇지 않은 경우 실수가 발생하기 때문입니다. 값 비싼 실수. 이는 개발에 해당되며 나머지 IT 분야 (sysadmins, DBA 등)에도 적용됩니다.
많은 개발자와 IT 직원이 이해하기가 매우 어렵습니다. 왜냐하면 우리 중 대부분은 "최고"중 한 곳에서만 일한 적이 있기 때문입니다. 사람들이 심하게 조여주지 않거나 조업 비용이 저렴한 소규모 마이크로 ISV 또는 프리랜서 작업.
그러나 밝고 재능있는 IT 직원을 보유한 회사를 포함하여이 단계 사이에 회사를 본 적이 있다면 프로세스가 없거나 절반이 걸리는 프로세스의 위험을 이해할 수 있습니다. 직원들 사이의 의사 소통은 조합 폭발 문제에 시달리고 있습니다. 단일 팀에서 약 6-10 명의 개발자 수준에 도달하면 주요 또는 중대한 결함의 주요 원인은 인재 나 노하우가 아니라 의사 소통이 부족하기 때문입니다.
앨리스는 월요일 아침에 물었다. 그 누구도 그 일을하고 있지 않기 때문에 몸통에서 재건 수술을하는 것이 좋다고 결정한다. 밥은 한 시간 후에 휴가를 마치고 에너지가 가득한 곳으로 돌아와서 정확히 같은 지역에 새로운 주요 기능을 구현하기로 결정했습니다. 앨리스는 그 "기술 부채"를 갚고 밥은 6 개월 동안 버너에 있던 살인자 기능을 구현하고 마지막으로 코드를 체크인 할 때 (물론 금요일 마감 시간 직전!) 팀은 뒤에서 몇 주 동안 버그와 회귀로 계속되는 악몽 같은 지옥의 갈등을 극복하기 위해 노력해야합니다.
Alice와 Bob 둘 다 코딩 작업에 큰 도움이되었지만 둘 다 잘못된 결정으로 시작했습니다 ( "최악의 결과는 무엇입니까?"). 팀장 또는 프로젝트 관리자는 사후 검토를 통해이를 점검하고이를 다시 방지하기 위해 점검 목록을 작성합니다.
- 충돌의 영향을 최소화하려면 체크인이 매일 수행되어야합니다.
- 하루 이상 크게 소요되는 변경은 지점에서 수행해야합니다.
- 모든 중요한 작업 (리팩토링과 같은 비 기능적 작업 포함)은 버그 추적기에서 올바르게 추적되고 할당되어야합니다.
많은 사람들에게이 "프로세스"는 상식처럼 보입니다. 낡은 모자입니다. 그러나 많은 소규모 팀이이 작업을 수행하지 않는다는 것을 알고 있습니까? 2 인 팀은 소스 제어에 전혀 신경을 쓰지 않을 수도 있습니다. 누가 신경 쓰나요? 솔직히 필요하지 않습니다. 팀이 커질 때만 문제가 발생하지만 프로세스는 진행되지 않습니다.
물론 프로세스 최적화는 성능 최적화와 같습니다. 역 지수 곡선을 따릅니다. 위의 체크리스트는 결함의 80 %를 제거 할 수 있지만,이를 구현 한 후 나머지 80 %가 결함의 원인 임을 알게 됩니다. 가상이지만 익숙한 예제에서는 빌드 환경이 다르기 때문에 빌드 오류가 발생할 수 있습니다. 이는 표준 하드웨어가 없으며 개발자가 2 주마다 업데이트되는 오픈 소스 라이브러리를 사용하고 있기 때문입니다.
따라서 (a) 하드웨어를 표준화하고 타사 라이브러리 사용을 심각하게 제한하여 비용이 많이 들고 생산성이 크게 저하되거나 (b) sysadmin 그룹과의 협력이 필요한 빌드 서버를 설정합니다. 풀 타임 개발자가이를 유지 관리하거나 (c) 표준 가상 머신을 배포하고 개발자에게이를 구축하도록 지시하여 개발자가 직접 할 수 있도록합니다. 분명히 (b) 가장 장기적인 해결책이지만 (c) 더 나은 단기적 안정성과 편의성의 균형을 가지고 있습니다.
사이클이 계속 진행됩니다. 당신이 보는 모든 "정책"은 일반적으로 실제 문제를 해결하기 위해 설립되었습니다. Joel Spolsky가 2000 년 에 완전히 썼던 것처럼 (완전히 다른 주제를 생각하지만 그럼에도 관련이 있음) :
식당에 들어가서 "No Dogs Allowed"라는 표시가 보이면 그 표시는 순전히 설명적인 것으로 생각할 수 있습니다. Restaurant 씨는 개를 좋아하지 않기 때문에 식당을 지을 때 그 표시를했습니다.
그것이 모든 것이 진행 중이라면, "뱀 없음"표시도있을 것입니다. 결국, 아무도 뱀을 좋아하지 않습니다. 그들이 앉을 때 의자를 깨뜨리기 때문에 "코끼리 금지"표시.
표시가있는 진짜 이유는 역사적입니다. 사람들이 개를 식당에 데려 오려고했던 것을 나타내는 역사적 표식입니다.
대부분의 소프트웨어 팀에서 동일합니다. "모든 버그 수정에 대해 테스트 사례를 추가해야합니다" 와 같은 정책 은 팀이 역사적으로 회귀 문제를 가지고 있음을 거의 나타내지 않습니다. 회귀는 무능력보다는 의사 소통 고장으로 인해 가장 자주 발생하는 문제 중 하나입니다. 정책을 이해하는 한 합법적 인 지름길을 취할 수 있습니다 (예 : 6 개의 작은 버그를 수정해야했지만 모두 동일한 기능을 수행 했으므로 실제로 9 개 모두에 대해 하나의 테스트 사례를 작성할 수 있습니다).
프로세스가 존재하는 이유를 설명하지만 전체 이야기가 아닙니다. 나머지 절반은 다음과 같습니다.
프로세스가 왜 그렇게 어려워?
이것은 실제로 대답 할 수있는 간단한 질문 : 팀 (또는 관리)에 초점을 맞추고 때문입니다 반복 가능한 결과 및 최소화 결함 (위와 같이)하지만 충분한 관심을 부여하지 않은 최적화 및 자동화 그 과정의.
예를 들어, 원래 질문에서 몇 가지 문제가 있습니다.
CVS (Revision Control System)는 오늘날의 표준에 따라 다릅니다. 들어 새로운 프로젝트, 그것은 신속하게 의욕 (수은)과 같은 분산 시스템에 의해 가려지고 자체의 파괴 (SVN)에 의해 거의 대체되었습니다. Hg로 전환하면 분기 및 병합이 훨씬 간단 해지며 위의 가상의 예에서도 일일 커밋 요구 사항이 훨씬 덜 고통 스럽습니다. 저장소는 로컬이기 때문에 코드를 컴파일 할 필요조차 없습니다. 실제로 지연 개발자는 원하는 경우이 단계를 자동화하여 로컬 저장소에 자동으로 변경 사항을 커밋하도록 로그 오프 스크립트를 설정할 수 있습니다.
가상 머신 프로세스를 자동화하는 데 소요 된 시간이 없습니다. 소스 / 라이브러리를 가져 와서 구성하고 가상 머신에 다운로드하는 전체 프로세스는 100 % 자동화 될 수 있습니다. 로컬 컴퓨터의 버그 수정 작업을 수행하는 동안 중앙 서버에서 무인 프로세스를 수행 할 수 있으며 VM 만 사용하여 깔끔한 빌드를 보장 할 수 있습니다.
반면에 특정 규모에서 개발자 당 VM 솔루션은 어리석기 시작하고 Continuous Integration 서버 만 있으면됩니다. 실제 생산성의 이점은 개별 개발자가 빌드에 대해 전혀 걱정할 필요가 없기 때문입니다. 빌드 서버는 항상 깨끗 하기 때문에 가상 머신 정리에 대해 걱정할 필요가 없습니다 .
질문의 문구 ( "모든 단계의 테스트 사례")는 수동 테스트가 진행되고 있음을 나타냅니다. 이는 다시 작업량이 적은 소규모 팀에게는 효과적 일 수 있지만 더 큰 규모에서는 전혀 의미가 없습니다. 회귀 테스트는 자동화 할 수 있으며 자동화해야합니다. "단계"가 없으며 단위 / 통합 테스트 스위트에 추가 된 클래스 또는 메소드입니다.
말할 필요도없이, Bugzilla에서 새로운 (더 나은) 버그 추적 시스템으로 이동하면 경험의 그 부분이 훨씬 덜 고통 스럽습니다.
기업이 이러한 문제를 해결 하지 않았다고해서 반드시 싸 거나 바보 인 것은 아닙니다. 그들이 아는 것은 현재 프로세스가 작동 한다는 것 입니다. 어떤 경우에는 위험 회피 적이며 프로세스 에 대한 변경을 꺼려합니다. 그러나 실제로는 그 이점을 확신 할 필요가 있습니다 .
개발자가 일주일 동안 모든 비 코딩 작업에 대한 시간을 추적했다면이를 쉽게 추가 할 수 있으며, 예를 들어 Mercurial 로의 업그레이드에 대한 자본금 100 시간짜리 투자는 병합 충돌을 해결하는 데 일주일에 최대 10 시간을 제거하면 10 주가 소요되며 거의 확실하게 동의합니다. 빌드 서버 (CI) 또는 더 나은 버그 추적과 동일한 아이디어.
요점을 되풀이 : 팀은 아직 이러한 일을하지 않았다. 왜냐하면 아무도 오늘날 경영진이 그토록 중요하다고 확신 하지 않았기 때문 이다 . 따라서 이니셔티브를 수행하여 비용-편익 방정식으로 바꾸십시오. 최소한의 위험으로 단순화 / 자동화 될 수있는 작업에 소요되는 시간을 확인하고 새로운 도구 또는 기술의 손익 분기점 및 최종 수익을 계산하십시오. 그들이 여전히 듣지 않으면 나머지 옵션이 무엇인지 이미 알고 있습니다.
개발자가 일주일 동안 모든 비 코딩 작업에 대한 시간을 추적했다면 쉽게 추가하고 관리를 표시하고 비용 편익 방정식 등으로 바꿀 수 있습니다.
위 부분은 더 확장 할 가치가있는 것으로 보입니다.
작동하는지 확인할 수 있습니다. 프로그래머는 내가 작업 한 프로젝트 중 하나에서 몇 번 사용하고 원하는 변경을 할 때마다 사용했습니다.
나의 전반적인 인상은 바르게하는 경우,이 트릭은 어 수 있었다 번복 관리 무지와 관성의 매우 무거운 양.
우리 (개발자)가 이런 종류의 DIY 접근 방식에 의존해야했던 회사 는 IT에 미숙했습니다. 보다 노련한 소프트웨어 공급 업체에서 나는 주로 관리자 자신이하는 일을 보았습니다. 그리고 원칙적으로 그들은 우리 프로그래머보다 생산성이 뛰어났습니다. 훨씬 더 생산적입니다.