어떤 "버전 명명 규칙"을 사용하십니까? [닫은]


107

다른 버전 명명 규칙이 다른 프로젝트에 적합합니까? 무엇을 사용하고 왜?

개인적으로, 나는 16 진수 (예 : 11BCF)의 빌드 번호를 선호합니다. 이것은 매우 정기적으로 증가해야합니다. 그런 다음 고객에게 간단한 3 자리 버전 번호 (예 : 1.1.3)가 있습니다.

1.2.3 (11BCF) <- Build number, should correspond with a revision in source control
^ ^ ^
| | |
| | +--- Minor bugs, spelling mistakes, etc.
| +----- Minor features, major bug fixes, etc.
+------- Major version, UX changes, file format changes, etc.

답변:


45

나는 Jeff Atwood에 완전히 동의하는 경우가 거의 없지만 버전 번호 지정의 .NET 규칙에 대한 그의 의견 을 따르는 경향이 있습니다.

(주요 버전). (최소 버전). (개정 번호). (빌드 번호)

개인 프로젝트의 경우 종종 이것이 과도하다고 생각합니다. C #의 검색 엔진과 같은 실질적인 프로젝트를 수행 한 몇 번 이이 규칙을 고수하여 효과적으로 내부 추적기로 사용할 수있었습니다.


1
이것은 크든 작든 많은 프로젝트에서 성공적으로 사용 된 패턴을 따르는 경향이 있습니다. 매우 효과적입니다.
luis.espinal

1
"빌드 번호"는 "changeset identifier (hash)"와 어떤 관련이 있습니까? 해시, 증분 또는 다른 것의 일부입니까?
Jace Browning

@Jace, 내가 일하는 곳에서는 Mercurial을 사용하고 변경 세트 번호를 벗어납니다. Google은 단일 리포지토리로 푸시 / 풀하기 만하므로 특정 체크 아웃에 고유하지 않습니다. 그런 다음 그에 따라 [major]. [minor]. [changeset]이 있습니다 (주요 및 부수는 종종 마지막 버전 이후의 진행률을 나타내는 것보다 더 마케팅 적입니다).
Wai Ha Lee

.NET 버전 구조에서 ToString ()을 호출하면 빌드가 개정이 아닌 세 번째 숫자가됩니다. 이 powershell 스크립트에서 볼 수 있듯이$version = New-Object System.Version 1, 2, 3, 4; $version.ToString(); $version.Build;
Joel McBeth

"빌드 번호"는 버그 수정과 같은 약간의 수정일 뿐입니 까? 새로운 기능이 최소한 자체 개정 번호를 가져야합니까?
Kyle Delaney

90

시맨틱 버전 관리 ( http://semver.org/ )는 여기에 언급 할 가치가 있습니다. 이 형식은 버전 관리 체계에 대한 공개 사양입니다 [Major].[Minor].[Patch]. 이 체계의 동기는 버전 번호와 의미를 전달하는 것입니다.


이것이 더 많은 사랑을 얻지 못하는 것에 놀랐습니다.
Mark Canlas

나는 파티에 조금 늦었다. 나는 원래 질문 9 개월 후에이 답변을 추가했다. ;-)
M. Dudley

이것은 아래에서 언급 한 RubyGems Rational Versioning 정책과 동일하게 형식화되어있는 것으로 보입니다.
Ken Bloom

@MarkCanlas는 메이저 / 마이너 / 패치 릴리즈를 구성하는 것에 특정 아이디어를 첨부하기 때문에 더 많은 사랑을 얻지 못합니다. 좀 이상한 API에 대해 이야기합니다
Rudolf Olah

5
SemVer는 사용자 용 소프트웨어가 아닌 버전 관리 API를위한 것입니다. "시맨틱 버전 관리를 사용하는 소프트웨어는 반드시 공개 API를 선언해야합니다." 기술적으로 공개 API가 없으면 SemVer를 사용할 수 없습니다. 그러나 사용자 용 응용 프로그램의 버전을 관리하기 위해 SemVer와 유사한 것을 채택하는 것이 합리적 일 수 있습니다.
Ajedi32

33

나는 그것을 사용하지 않지만 보았고 흥미로운 구조입니다.

년. 월. 일. 건물

자기 설명.


4
그리고 당신은 항상 당신의 코드가 얼마나 신선한 지 알고 있습니다 ..! :)
Lipis

3
이것은 Ubuntu의 버전 번호와 유사합니다. 그들은

5
호환성 문제가없는 시스템 (웹 사이트)이나 본질적으로 항상 비 호환성 (ubuntu 릴리스)이있는 시스템에서만 작동한다는 점은 언급 할 가치가 있습니다.
jkerian

1
@jkerian, 왜 호환성이 중요합니까?
AviD

12
@ AviD :이 질문에 대한 거의 모든 대답은 호환성 정보가 포함 된 버전 시스템을 보여주기 때문에 왜 당신이 이것을 요구하는지에 대해 약간 혼란 스럽습니다. 선택은 버전 번호로 기록 할 정보에 따라 다릅니다. 내 목적 상 날짜는 기본적으로 의미가 없습니다 (v1에서 시작하여 모든 빌드를 늘리는 것이 향상 될 것입니다). 당신은 분기합니까? "새 버전"을 출시하면서 "이전 코드의 새 패치"를 발표 한 적이 있습니까? 그러나 웹 사이트 또는 운영 체제와 같은 경우 날짜 기반 시스템이 적합합니다.
jkerian

13

다음과 같은 RubyGems Rational 버전 관리 정책 을 사용하려고합니다 .

  • 이진 호환성이 깨지면 주 버전 번호가 증가합니다.
  • 새로운 기능이 추가되면 부 버전 번호가 증가합니다.
  • 버그 수정에 대한 빌드 번호가 변경되었습니다.

2
이것은 본질적으로 시맨틱 버전 관리로 알려져 있습니다 : semver.org
Patrice M.

2
@PatriceM. 해당 링크를 공유해 주셔서 감사합니다. 내가 그 답변을 쓸 때 semver.org는 존재하지 않았습니다.
Ken Bloom

10

버전 번호 매기기에 대한 매우 세분화 된 접근 방식은 다음과 같습니다.

  • N.x.K여기서 NK정수입니다. 예 : 1.x.0, 5.x.1, 10.x.33. 중간 빌드에 사용됩니다 .
  • N.M.K, 여기서 N, MK정수입니다. 예 : 1.0.0, 5.3.1, 10.22.33. 릴리스에 사용 됩니다 .
  • N.x.x여기서 N정수는 어디 입니까? 예 : 1.x.x. 지원 지점에 사용됩니다 .
  • N.M.x여기서 NM정수입니다. 예 : 1.0.x. 릴리스 분기에 사용됩니다 .

다음은 버전 번호 매기기 방식의 간단한 그림입니다.

민첩한 버전 번호

PA수단 프리 알파 A 수단 알파 B 수단 베타 AR 수단 알파 릴리스 BR 수단 베타 릴리스 RC 수단 릴리스 후보 ST 수단 안정

이러한 버전 번호 지정 방식의 장점은 다음과 같습니다.

  • 민첩한 소프트웨어 개발 수명주기의 세부 사항을 나타냅니다 .
  • 소스 코드 저장소 구조의 특성을 고려 합니다 .
  • 그것은는 설명 자기 패턴에 익숙해 사람들을 위해. 모든 패턴은 다른 인공물을 나타냅니다. 이러한 패턴을 쉽게 파싱하고 이슈 추적과 같은 다른 목적으로 사용할 수 있습니다.
  • 설명 된 버전 관리 접근 방식의 기본 버전을 사용하여 메트릭 수집계획에 사용할 수 있습니다 .
  • 성숙도품질 수준의 개념에 중점을 둡니다 . 종종 1.0.0과 같은 버전 번호는 별다른 필요없이 할당됩니다 (소프트웨어가 깊은 알파인 경우). 제시된 버전 넘버링 접근법은 여러 수준의 성숙도를 확립 할 수있게한다. 가장 간단한 경우에는 중간 빌드 ( N.x.K) 및 릴리스 ( N.M.K)의 두 가지 수준 만 있습니다. 릴리스는 정식 버전 번호 ( N.M.K)가 있는 소프트웨어가 공급 업체 회사 / 조직 / 팀 내에서 일종의 품질 관리 프로세스를 거쳤 음을 의미합니다 .
  • 개발 및 테스트 의 민첩한 특성 의 증거입니다 .
  • 소프트웨어 구조 및 아키텍처에 대한 모듈 식 접근 을 권장합니다 .

버전 관리 방식을 자세히 나타내는 복잡한 다이어그램도 있습니다. 또한 버전 번호 지정 방식의 기본 원리를 설명하는 SCMFViz 응용 프로그램 및 버전 지정 방식으로의 전환을 설명하는 유용한 프레젠테이션 슬라이드 를 찾을 수 있습니다 . 프레젠테이션 슬라이드는 또한 소프트웨어 프로젝트의 전체 수명 동안 동일한 버전 관리 방식을 고수하는 것이 중요한 이유를 설명합니다.

실제 버전 번호 대신 날짜 버전 을 사용하는 것에 대한 저의 태도 는 소프트웨어 버전이 다음과 같은 소프트웨어 개발자 인 것으로 가정합니다.

  • 소프트웨어 개발 수명주기에 대해서는 아무것도 모릅니다 . 개발은 일반적으로 민첩하고 반복적입니다. 버전 번호 매기기 접근 방식은 소프트웨어 개발 프로세스의 반복적 인 특성을 나타내야합니다.
  • 소프트웨어 품질에 신경 쓰지 마십시오 . 품질 관리 및 보증은 민첩하고 반복적입니다. 개발과 같습니다. 그리고 버전 번호는 개발 및 품질 관리 / 보증의 민첩하고 반복적 인 특성의 증거 여야합니다.
  • 아키텍처 나 응용 프로그램의 아이디어신경 쓰지 마십시오 . 주요 버전 번호 ( Nin N.M.K)는 아키텍처 솔루션과 응용 프로그램의 기본 원칙을 모두 담당합니다. 주요 버전 번호 N는 아키텍처의 변경 또는 주요 아이디어 및 작동 / 기능 원리의 변경에 따라 변경됩니다.
  • 코드베이스를 제어 할 수 없습니다 . 아마도 하나의 브랜치 (트렁크) 만 있고 모든 것에 사용됩니다. 개인적으로 생각하지 않는 것은 코드베이스가 하나의 큰 쓰레기 덤프가되도록 권장하기 때문에 옳습니다.

이 접근 방식은 약간 논란의 여지가 있지만 소프트웨어에 적절한 버전 번호를 제공하는 가장 간단한 방법이라고 생각합니다.


첫 번째 링크 다운 ......
Pacerier

8

릴리스 한 모든 주요 버전에 대해 내부 버전으로 작동하는 버전을 사용하는 것은 드문 일이 아닙니다. 예를 들어, 마지막 직장에서 우리는 다음과 같은 우분투에서 영감을 얻은 명명 규칙을 가진 주요 버전을 언급했습니다.

[병아리 상태] [대체 동물 이름]

" Limp Lamprey ", " Wounded Wombat "및 " Athmatic Anteater " 와 같은 이름을 부여했습니다 .

고객에게 유출되지 않는 정말 멋진 이름이 아닌지 확인하십시오.


2
시간과 에너지를 비효율적으로 사용하는 것 같습니다 .............
Pacerier

10
그래서 그 의견을 남기고 있었지만 당신을 멈추지 않았습니다.
Jesse C. Slicer 12

전체 크기가 적습니다.
Pacerier

7

생성 버전 개정 빌드 (9.99.999.9999)

세대는 거의 변하지 않습니다. DOS-> Windows, 완전한 리엔지니어링 제품 만 크게 켜십시오.

버전은 큰 호환되지 않는 변경, 새로운 기능, 소프트웨어의 특정 패러다임 변경 등을위한 것입니다.

수정 작업이 자주 수행됩니다 (사소한 기능 및 버그 수정).

빌드는 내부 정보입니다.


좋은 생각. "세대"아이디어는 어디서 얻었습니까?
Pacerier

6

git describe선택한 번호 지정 규칙에 대한 확장 기능을 제공합니다. 빌드 / 패키징 / 배포 프로세스에이를 쉽게 포함시킬 수 있습니다.

태그가 지정된 릴리스 버전을 ABC (major.minor.maintenance)로 이름을 지정한다고 가정하십시오. git describe주어진 커밋에서 커밋의 가장 최근 태그가 지정된 조상을 찾은 다음 그 이후 커밋 수와 커밋의 약식 SHA1을 확인합니다.

1.2.3-164-g6f10c

물론 실제로 버전 중 하나에 있다면 태그 (1.2.3)를 얻을 수 있습니다.

이것은 빌드 한 소스를 정확히 알려주 는 동시에 모든 빌드마다 번호를 매길 필요는 없다는 장점이 있습니다 .


2

"4.08c (1290)"와 같은 Major.Minor.Public (빌드) [alpha / beta / trial]

  • 메이저가 메이저 버전 번호 (1, 2, 3 ...)
  • 마이너는 2 자리 마이너 버전 (01, 02, 03 ...)입니다. 일반적으로 새로운 기능이 추가되면 10 자리가 증가하며 버그 수정 만 가능합니다.
  • 공개 빌드 (a, b, c, d, e)의 공개 릴리스입니다. 마이너 버전이 공개 업데이트로 출시되지 않은 경우 마이너 버전과 종종 다릅니다.
  • 컴파일러가 추적하는 실제 빌드 번호 인 build.
  • 특별한 경우를 위해 TRIAL, ALPHA, BETA X 또는 RC X가 추가되었습니다.

2

의미 적 의미를 부여하는 버전 번호를 선호합니다. 버전 번호를 사용하여 특정 버전으로보고 된 버그를 소스 코드 및 활동 관리 시스템에서 발생한 변경 사항에 대해 추적 할 수 있다면 올바른 방법을 사용하고있을 것입니다.

.NET을 사용하므로 .NET 버전 번호 시스템에 붙어 있지만 숫자에 의미 론적 의미를 부여하려고합니다.

major.minor.build.revision

  • 주요 = (프로젝트까지)
  • 부 = (프로젝트까지)
  • 빌드 = Hudson의 빌드 번호 (TeamCity 또는 TeamBuild 등을 사용할 수 있음)
  • 개정 = Subversion 또는 시장 개정 (프로젝트 및 용도에 따라 다름)

우리는 항상 어떤 방식 으로든 버전 번호를 볼 수 있는지 확인합니다 (일괄 콘솔 기반 프로그램은 콘솔에 인쇄되고 로그 파일은 일반적으로 웹 응용 프로그램은 상단의 메뉴 막대에 있음)

이런 방식으로 고객이 문제를보고하면 버전 번호를 사용하여 고객이 최신 버전을 사용 중인지 여부와 특정 버전에서 발생한 문제 수를 추적 할 수 있습니다.

추적성에 관한 모든 것입니다!


1

우리는 Major.Minor.Build # .YYMMDD를 사용합니다. 는 일반적으로 특정 날짜에 하나의 프로덕션 빌드 만 수행하지만 (하나 경우 ab / c / d 접미사 사용) YYMMDD는 사용자 / 고객 / 관리를 제공 [접미사]를 사용합니다. 6.3.1389가 아닌 빌드 연령의 표시.

중요한 제품 기능 (유료)에 따라 주요 수가 증가합니다.

수정 / 개선 (무료 업데이트)에 따라 소수가 증가합니다.

빌드는 항상 증가합니다. 모든 빌드가 배송되는 것은 아니므로 선형 진행이 아닙니다.


1

버전 번호에는 충돌을 피하고 잘못된 릴리스 유형 문제에서 버그를 수정하기에 충분한 정보가 있어야하지만 관련이없는 추가 정보를 전달해서는 안됩니다.

예를 들어 고객이 날짜를 사용하는 경우 고객에게 이전 버전이 있다고 말하고 이전 버전에 대한 패치는 혼란스러운 버전을 가질 수 있습니다.

나는 개인적으로 시맨틱 버전 관리를 좋아한다 .

  • 릴리스는 Major입니다. Minor.Patch
  • Patch 빌드를 릴리스 할 때마다 증가합니다.
  • Minor 이전 버전과 호환되는 기능이 추가 될 때마다 증가합니다.
  • Major 새로운 기능이 이전 버전과 호환되지 않을 때 증가합니다.
  • Major== 0 당신은 알파 / 시험판에있어. Major> = 1은 공개 릴리스입니다.
  • 증가 할 때마다 낮은 숫자가 0으로 재설정되므로

    1.5.3-> 1.5.4(버그 수정)-> 1.6.0(사소한 기능)-> 2.0.0(중단 변경)

이런 식으로 누군가가 버전 1.5.3을 사용하고 있다면 1.5.4패치를 얻기 위해 업그레이드 할 수 있고 1.6.0기능을 추가하며 업그레이드하지 말아야 한다는 것을 한 눈에 알 수 있습니다 2.0.0(적어도 변경을 처리하지 않고).


Semver는 API에서만 작동합니다. 제품이 아닙니다.
Pacerier

@Pacerier 왜 설명 할 수 있습니까?
Keith


@Pacerier는 버전 번호 매기기에이 패턴을 사용할 수 없음을 의미하지 않습니다.
Keith

0
              1.0.0
                |
              1.0.1
                |
(공개 1.0) 1.0.2 -----
                | \
              2.0.0 1.1.0
                | |
              2.0.1 1.1.1 (공개 1.1)
                |
(공개 2.0) 2.0.2 -----
                | \
              3.0.0 2.1.0
                         |
                       2.1.1 (공개 2.1)
                         |
                       2.2.0
                         |
                       2.2.1

X.Y.Z내부 버전 번호입니다. X.Y고객에게 의미가있는 공개 버전 번호입니다. X.Y.Z버전이 공개 되면 버전이 절대 없습니다 X.Y.(Z+1). 공개 버전은 항상 세리의 마지막입니다.

X 메이저 버전이 출시되면 증가합니다.

Y 이 주요 릴리스의 유지 관리 지점에 사용되며 버그 수정에만 사용됩니다.

Z내부적으로 사용되며 고정 된 의미가 없습니다. 지금까지는 Z응용 프로그램에 개발자가 아닌 사람에게 흥미롭고 비교적 안정적인 일련의 기능이 있다고 생각할 때 새 버전을 만듭니다 . 이런 식으로 누군가가 요청할 때 응용 프로그램의 "마지막으로 성공한 버전"데모를 보여줄 수 있습니다. 가까운 시일 Z내에 버그 추적 프로그램에서 기능의 "대상"을 명명하기 위해 숫자 버전 을 사용할 계획 입니다.

부수적으로, 우리는 maven을 사용 release하여 버전 번호를 증가시킵니다. 따라서 X.Y.Z-SNAPSHOT버전도 있습니다 ( X.Y.(Z-1)와 사이의 모든 버전을 나타냄 X.Y.Z).

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