문제

온라인으로 소프트웨어를 배포하고 버전 번호를 더 잘 정의 할 수있는 적절한 방법이 있는지 항상 궁금합니다.

답에 ABCD를 가정 해 봅시다. 각 구성 요소는 언제 증가합니까?

D Mod 2 == 1과 같은 다른 버전 번호 트릭을 사용합니까?

자체 버전 번호가있는 베타 릴리스가 있습니까? 아니면 버전 번호 당 베타 릴리스가 있습니까?

도움이 되었습니까?

해결책

나는 일부 앱 (예 : Perforce)이 사용하는 release [.build] 컨벤션을 좋아하기 시작했습니다. 기본적으로 그것은 당신이 출시 한 해와 그 해에 시퀀스를 말합니다. 따라서 2008.1은 첫 번째 버전이 될 것이며, 몇 달 또는 3 개 후에 또 다른 버전을 출시하면 2008.2로갑니다.

이 체계의 장점은 릴리스의 "크기"가 없다는 것입니다. 여기서 주요 버전 증분을 보증 할만 큼 주요 기능이 주요인지에 대한 논쟁을 겪습니다.

선택적 추가는 빌드 번호를 태그하는 것이지만 내부 목적에만 적용되는 경향이 있습니다 (예 : EXE/DLL에 추가하여 파일을 검사하고 올바른 빌드가 있는지 확인할 수 있음).

다른 팁

제 생각에는 거의 모든 릴리스 번호 체계가 다소 샌디로 작동하도록 만들 수 있습니다. 내가 작업하는 시스템은 11.50.UC3과 같은 버전 번호를 사용합니다. 여기서 U는 32 비트 UNIX를 나타내고 C3는 작은 개정 (수정 팩) 번호입니다. 다른 문자는 다른 플랫폼 유형에 사용됩니다. (이 계획을 권장하지는 않지만 작동합니다.)

지금까지 언급되지 않았지만 사람들이 논의한 것에 내재 된 몇 가지 황금 규칙이 있습니다.

  • 동일한 버전을 두 번 릴리스하지 마십시오. 한 번 버전 1.0.0이 누구에게나 릴리스되면 다시 출시 될 수 없습니다.
  • 릴리스 번호는 단조롭게 증가해야합니다. 즉, 버전 1.0.1 또는 1.1.0 또는 2.0.0의 코드는 항상 버전 1.0.0, 1.0.9 또는 1.4.3 (각각)보다 늦어야합니다 (각각).

이제 실제로 사람들은 이전 버전에 대한 수정 사항을 출시 해야하는 동안 최신 버전을 사용할 수 있습니다. 예를 들어 GCC를 참조하십시오.

  • GCC 3.4.6은 4.0.0, 4.1.0 (및 AFAICR 4.2.0) 이후에 출시되었지만 GCC 4.X에 추가 된 추가 기능을 추가하는 대신 GCC 3.4.x의 기능을 계속합니다.

따라서 버전 번호 매기기 체계를 신중하게 구축해야합니다.

내가 굳게 믿는 또 다른 요점 :

  • 릴리스 버전 번호는 사소한 프로그램을 제외하고 CM (VCS) 시스템 버전 번호와 관련이 없습니다. 하나 이상의 기본 소스 파일이있는 심각한 소프트웨어는 단일 파일의 버전과 관련이없는 버전 번호가 있습니다.

SVN을 사용하면 SVN 버전 번호를 사용할 수 있지만 아마도 예측할 수 없을 정도로 변하지 않을 것입니다.

내가 함께 일하는 것들에게 버전 번호는 순전히 정치적 결정입니다.

또한 버전 1.00에서 9.53에서 9.53에서 릴리스를 통과 한 소프트웨어를 알고 있지만 2.80으로 변경되었습니다. 그것은 마케팅에 의해 지시 된 심한 실수였습니다. 물론, 소프트웨어의 버전 4.x는 쓸모가 없기 때문에 즉시 혼란스럽게 만들지 않았지만 소프트웨어의 버전 5.x는 여전히 사용 중이며 판매되고 있으며 개정은 이미 3.50에 도달했습니다. 피할 수없는 갈등이 발생할 때 5.x (구식)와 5.x (새로운 스타일) 모두에서 작동 해야하는 코드가 무엇인지 매우 걱정합니다. 나는 오래된 5.x가 실제로 죽을 때까지 그들이 5.x로 바꾸는 데 멍청하게 변할 것이기를 희망해야한다고 생각합니다. 그러나 나는 낙관적이지 않습니다. 또한 9.60과 같은 인공 버전 번호를 사용하여 3.50 코드를 나타내어 Sane을 수행 할 수 있습니다. if VERSION > 900 해야 할 일이 아니라 테스트 : if (VERSION >= 900 || (VERSION >= 280 && VERSION < 400), 버전 9.00 x 900을 나타냅니다. 그런 다음 버전 3.00.xc3에서 중요한 변경 사항이 있습니다. - 제 계획은 마이너 릴리스 레벨에서 변경 사항을 감지하지 못합니다 ... 불평 ... 불평 ...

NB: Eric Raymond가 제공합니다 소프트웨어 릴리스 연습 Howto 명명 (번호) 릴리스에 대한 (링크 된) 섹션을 포함합니다.

나는 일반적으로 d d를 빌드 카운터 (컴파일러에 의한 자동 증분)로 사용합니다 c는 빌드가 "공개"로 릴리스 될 때마다 C를 증가시킵니다 (모든 빌드가 출시되지는 않습니다) a 및 b는 메이저/마이너 버전 번호로 사용되며 수동으로 변경됩니다.

나는이 질문에 대답하는 두 가지 방법이 있다고 생각하며, 전적으로 무료는 아닙니다.

  1. 기술 : 기술 작업을 기반으로 한 증분 버전. 예 : D는 빌드 번호, C는 반복, B는 사소한 릴리스이며 A는 주요 릴리스입니다. 미성년자 및 주요 릴리스를 정의하는 것은 실제로 주관적이지만 기본 아키텍처 변경과 같은 관련이있을 수 있습니다.
  2. 마케팅 : 고객에게 몇 개의 "신규"또는 "유용한"기능을 기반으로 한 증분 버전. 버전 번호를 업데이트 정책에 묶을 수도 있습니다. 변경 사항은 사용자가 업그레이드 라이센스를 구매 해야하는 반면 다른 변경 사항은 그렇지 않습니다.

결론은 당신과 고객에게 적합한 모델을 찾는 것입니다. 버전조차 공개 릴리스 인 경우를 보았으며 홀수 버전은 베타 또는 DEV 릴리스로 간주됩니다. C와 D를 모두 무시하는 일부 제품을 보았습니다.

그런 다음 Micrsoft의 예가 있습니다. 여기서 .NET 프레임 워크의 버전 번호에 대한 유일한 합리적인 설명은 마케팅이 관련된 것입니다.

우리의 정책 :

  • A- 기능 또는 인터페이스의 유의미한 (> 25%) 변경 또는 추가.
  • B- 기능 또는 인터페이스의 작은 변경 또는 추가.
  • C- 인터페이스를 깨는 작은 변경.
  • D- 인터페이스를 변경하지 않는 빌드로 수정합니다.

사람들은 실제로 필요한 것보다 훨씬 힘들게 만들고 싶어합니다. 제품에 단일 장거리 지점 만있는 경우 빌드 번호별로 연속 버전을 지정하십시오. "사소한 버그 수정은 무료이지만 새로운 버전에 대한 비용을 지불해야한다"는 경우 1.0, 1.1 ... 1.N, 2.0, 2.1 ... 등을 사용하십시오.

예에서 A, B, C 및 D가 무엇인지 즉시 알 수 없다면 분명히 필요하지 않습니다.

내가 버전 번호로 만든 유일한 용도는 고객이 버전 2.5.1.0 등을 사용하고 있다고 말할 수 있도록하는 것이 었습니다.

내 유일한 규칙은 그 숫자를보고 할 때 실수를 최소화하도록 설계되었습니다. 네 개의 숫자는 모두 1 자리 만 있어야합니다.

1.1.2.3

괜찮지 만

1.0.1.23

아니다. 고객은 두 숫자 (적어도 구두로)를 "일대일 두 살"으로보고 할 가능성이 높습니다.

자동 증가 빌드 숫자는 종종 버전 번호와 같은 버전을 초래합니다

1.0.1.12537

실제로 도움이되지 않습니다.

양호하고 비 기술적 체계는이 형식으로 빌드 날짜를 사용합니다.

yyyy.mm.dd.buildnumber

BuildNumber는 연속 숫자 (Changelist)이거나 매일 1시에 다시 시작합니다.

예 : 2008.03.24.1 또는 2008.03.24.14503

이는 주로 내부 릴리스를위한 것이며, 공개 릴리스는 한 달에 한 번 이상 출시되지 않으면 버전이 2008.03으로 인쇄됩니다. 유지 보수 릴리스는 2008.03A 2008.03B 등으로 표시됩니다. 그들은 "C"를 지나치지 않아야하지만 좋은 지표라면 더 나은 QA 및/또는 테스트 절차가 필요합니다.

사용자가 일반적으로 볼 수있는 버전 필드는 친근한 "2008 년 3 월"형식으로 인쇄해야합니다. 대화 상자 또는 로그 파일에 대한 더 많은 기술 정보를 예약해야합니다.

가장 큰 단점 : 다른 날에 동일한 코드를 컴파일하면 버전 번호가 변경 될 수 있습니다. 그러나 버전 컨트롤 Changelist를 마지막 번호로 사용하고이를 확인하여 날짜를 변경 해야하는지 확인하여이를 피할 수 있습니다.

나는 VRM 예를 들어 2.5.1을 사용합니다

v (버전) 변경 사항은 주요 재 작성입니다
R (개정) 변경 사항은 중요한 새로운 기능 또는 버그 수정입니다.
M (수정) 변경 사항은 사소한 뷰스 수정 (오타 등)입니다.

나는 때때로 끝에 SVN 커밋 번호를 사용합니다.

그것은 하루가 끝나고 단순히 자신/팀까지 정말 주관적입니다.

이미 모든 답을 살펴보십시오.

개인적으로 나는 사용합니다 Major.Minor.*.* - Visual Studio가 다시 Revison/빌드 번호를 자동으로 채우는 곳. 이것은 내가 일하는 곳에서도 사용됩니다.

구식 Mac OS에서 시작된 훌륭한 사용자 친화적 인 버전 관리 체계는이 Apple Technical Note에 설명되어 있습니다. http://developer.apple.com/technotes/tn/tn1132.html

나는 연도를 좋아합니다. 따라서 v2009.6.8 은이 게시물의 "버전"입니다. 복제하는 것은 불가능하며 (합리적으로) 무언가가 새로운 릴리스 일 때 매우 분명합니다. 소수를 떨어 뜨려 V20090608로 만들 수도 있습니다.

라이브러리의 경우 버전 번호가 호환성 수준 두 릴리스 사이에서 업그레이드가 얼마나 어려울 지.

버그 수정 릴리스는 이진, 소스 및 직렬화 호환성을 보존해야합니다.

사소한 릴리스는 프로젝트마다 다른 것을 의미하지만 일반적으로 소스 호환성을 보존 할 필요는 없습니다.

주요 버전 번호는 세 가지 양식을 모두 깨뜨릴 수 있습니다.

나는 이론적 근거에 대해 더 많이 썼다 여기.

Github 세계에서는 버전 번호에 대한 Tom Preston-Werner의 "Semver"사양을 따르는 것이 인기를 얻었습니다.

에서 http://semver.org/ :

버전 번호 major.minor.patch가 주어지면 다음을 증가시킵니다.

메이저 버전이 호환되지 않는 API를 변경할 때, 뒤로 호환 가능한 방식으로 기능을 추가 할 때 마이너 버전 및 뒤로 호환되는 버그 수정을 만들 때 패치 버전. 프리 릴리스 및 빌드 메타 데이터를위한 추가 레이블은 major.minor.patch 형식의 확장으로 제공됩니다.

사내 개발의 경우 다음 형식을 사용합니다.

[Program #] . [Year] . [Month] . [Release # of this app within the month]

예를 들어, 오늘 응용 프로그램 # 15를 출시하고 이번 달에 세 번째 업데이트라면 내 버전 #이

15.2008.9.3

완전히 비표준이지만 우리에게 유용합니다.

지난 6 개의 주요 버전의 경우 M이 주요 버전, M은 Minor 버전이며 B는 빌드 번호입니다. 따라서 출시 된 버전에는 6.0.2, 7.0.1, ..., 최대 11.0.0이 포함되었습니다. 두 번째 숫자가 항상 0인지 묻지 마십시오. 나는 여러 번 물었고 아무도 정말로 모른다. 1996 년에 5.5가 출시 된 이후로 우리는 0이 아닌 사람이 없었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top