시맨틱 버전 관리는 버전 번호에서 4 개의 구성 요소를 허용합니까?


16

내가 본 시맨틱 버전의 모든 예제는 사용중인 3 개의 컴포넌트를 보여줍니다. 마침표는 2 자 이하 여야합니다. 에서 $DAYJOB, 우리는 우리의 릴리스 번호 4 개 구성 요소를 사용 :

5.0.1.2

시맨틱 버전 관리가이를 허용합니까?

그리고 더 높은 수준의 논쟁의 여지가있는 질문으로, 그것은 정말로 중요합니까? 시맨틱 버전 관리를 시행하는 것이 좋은 아이디어라고 생각하기 시작했지만 궁극적으로 PCI와 같은 엔티티가이를 무시합니다.

내 PCI ​​의견을 명확히해야합니다. 문제는 주요 구성 요소와 부 구성 요소가 변경 될 때 감사와 그 비용에 영향을 미치며 반드시 새로운 기능은 아닙니다. 예를 들어, 지불 관련 기능이 도입되면 PCI의 부 번호가 충돌합니다. 그러나 GUI의 무언가와 관련된 새로운 기능을 추가해도 그렇지 않습니다. 패치 만 변경됩니다. 따라서이 경우 다른 사람이 결정을 내리기 때문에 개발자로서 문제에 대해 아무런 언급도하지 않습니다.


시맨틱 버전 관리는 지침입니다. PCI어떤 방식으로 버전을 관리해야하는지에 대해 어디에 언급 합니까?

내 PCI ​​의견을 명확히해야합니다. 문제는 주요 구성 요소와 부 구성 요소가 변경 될 때 감사와 그 비용에 영향을 미치며 반드시 새로운 기능은 아닙니다. 예를 들어, 지불 관련 기능이 도입되면 PCI의 부 번호가 충돌합니다. 그러나 GUI의 무언가와 관련된 새로운 기능을 추가해도 그렇지 않습니다. 패치 만 변경됩니다. 따라서이 경우 다른 사람이 결정을 내리기 때문에 개발자로서 문제에 대해 아무런 언급도하지 않습니다.
void.pointer

@ void.pointer 왜 네 번째 구성 요소를 사용하는지에 대한 예를 들어 줄 수 있습니까? 기본적으로 내부 비용 및 회계 구조를 우회하기 위해 사용하고 있습니까? 팀이 패치 번호를 부딪치지 않고 새로운 기능을 추적 할 수 있도록 하시겠습니까?
enderland

@enderland 기본적으로 그렇습니다. MAJOR(PCI).MINOR(PCI).FEATURE.HOTFIX+BUILD. 우리는 기본적으로 PCI (및 회사의 PCI 대주주)가 관여하지 않고 3 차 및 4 차 구성 요소 만 변경할 수 있습니다. 나에게 이것이 약간 생각한 것처럼 느껴지지만, 그들이 버전 번호를 관리하는 방식으로 정당화되었는지는 확실하지 않지만 PCI와 감사 프로세스에 대해서는 달리 말할 수는 없습니다.
void.pointer

4
우리는 또한 3 개가 아닌 4 개의 그룹을 사용합니다. 왜 그렇습니까? C ++이기 때문에. C ++은 이진 역 호환성과 소스 역 호환성을 가지고 있습니다. 전자는 후자를 의미하지만 관계는 대칭이 아닙니다. 따라서 우리는 바이너리 호환성을 위해 4 번째 그룹 (시스템을 핫 패치 할 수 있음)과 소스 호환성을 위해 3 번째 그룹을 사용합니다 (다시 컴파일 할 필요는 있지만 자체 코드를 수정할 필요는 없습니다). 그리고 당신은 그것이 우리에게 효과적이라는 것을 알고 있습니다!
Matthieu M.

답변:


21

프로세스 오버 헤드 / 오디오를 피하기 위해 일반적인 규칙을 무시하는 것처럼 들립니다. 그게 ...

당신이하고있는 일은 더 이상 내부 감사 기준을 트리거하지 않기 위해 기능 / 부 버전 번호 한 자리 로 옮기기 위해 여분의 버전 번호 (부 PCI 번호)를 의도적으로 의도적 으로 만드는 것입니다.


어쨌든 시맨틱 버전 관리에 대한 질문에 시맨틱 버전 관리 사양은 다음과 같습니다.

버전 번호 MAJOR.MINOR.PATCH가 주어지면 다음을 증가 시키십시오.

  • 호환되지 않는 API 변경을 할 때 주요 버전,
  • 이전 버전과 호환되는 방식으로 기능을 추가 할 때 마이너 버전
  • 이전 버전과 호환되는 버그 수정을 할 때 PATCH 버전.
  • 시험판 및 빌드 메타 데이터에 대한 추가 레이블은 MAJOR.MINOR.PATCH 형식의 확장으로 제공됩니다 .

강조합니다.

문제는 시험판 / 빌드 메타 데이터에 네 번째 문자를 사용하고 있습니까? 아니면 기본적으로 출시 중이라는 다른 버전 표시입니까?

"예"인 경우 시맨틱 버전 관리 스펙이이를 허용합니다. "아니오"인 경우 기술적으로 시맨틱 버전 관리를 따르지 않는 것입니다.

그리고 더 높은 수준의 논쟁의 여지가있는 질문으로, 그것은 정말로 중요합니까?

엄격하게 준수하기를 원하는지 여부는 귀하와 팀이 결정해야합니다. 시맨틱 버전 관리의 목적은 API 호환성을 돕는 것입니다.

API에 영향을 미치지 않는 버그 수정은 패치 버전을 증가시키고 이전 버전과 호환되는 API 추가 / 변경은 부 버전을 증가시키고 하위 버전과 호환되지 않는 API 변경은 주 버전을 증가시킵니다.

이 시스템을 "시맨틱 버전 관리"라고합니다. 이 체계에서 버전 번호와 변경 방법은 기본 코드와 한 버전에서 다음 버전으로 수정 된 내용에 대한 의미를 전달합니다.

버전 관리가 API의 다운 스트림 사용자에게 영향을 줄 때 더욱 명확하게하는 시스템입니다.

API가 비슷하게 명확하다면 선택하는 방식이 그리 크지 않습니다. 예를 들어 3.4.2를 사용하고 3.4.10으로 업그레이드 해야하는 경우 의미 체계 버전 관리가 간단합니다. 새 버전이 3.5.1이면 이전 버전과 호환된다는 것을 알고 있습니다. 그리고 버전 4.0.1이 주요 변경 사항이라는 것을 알고 있습니다.

그것은 버전 번호의 의미의 전부입니다.

@enderland 기본적으로 그렇습니다. 주요 (PCI). 경미 (PCI). 특징 .HOTFIX + BUILD. 우리는 기본적으로 PCI (및 회사의 PCI 대주주)가 관여하지 않고 3 차 및 4 차 구성 요소 만 변경할 수 있습니다. 나에게 이것이 약간 생각한 것처럼 느껴지지만, 그들이 버전 번호를 관리하는 방식으로 정당화되었는지는 확실하지 않지만 PCI와 감사 프로세스에 대해서는 달리 말할 수는 없습니다.

좋아, 괜찮아 귀하에게 적합한 시스템이 있으며 귀하의 요구를 충족시킵니다. 그것이 버전 관리의 요점입니다.

API가 개인용 (내부 전용) 인 경우 API를 사용하는 모든 사람에게 의미가있는 한 버전 관리 방법은 중요하지 않습니다. 표준 형식의 버전 관리는 "이 버전의 의미는 무엇입니까?"를 알아야하는 다른 많은 API 소비자가있는 경우입니다.

임의의 버전 관리 시스템이 있으면 시맨틱 버전 관리와 같은 다른 시스템에 익숙한 사람들을 혼동시킬 수 있습니다. 그러나 아무도 자신의 버전 관리 시스템을 사용하는 사람을 제외하고 실제로 버전 관리 시스템을 사용하지 않는 사람은 중요하지 않습니다.


맨 위의 편집 내용에 대해 : 여기에서 악마의 옹호자 역할을하겠습니다. PCI 감사는 회사 비용이 들며 구현 된 모든 기능이 관심 대상이되는 것은 아닙니다. 그렇다면 원칙만으로 비용과 기타 간접비가 발생하는 이유는 무엇입니까? 이것은 어떻게 관련이 있습니까? 감사 결정 방법에 결함이있을 수 있지만 우려 사항을 구분하는 것이 합리적이라고 생각합니다. 카드 처리와 관련이없는 것은 PCI와 관련이 없습니다.
void.pointer

@ void.pointer 감사가 왜 / 어떻게 결정되는지 판단 할 수있는 위치에 있지 않습니다. 그러나 누군가 특정 기준에 따라 감사하고 싶다고 결정했습니다. 의도적으로 감사 기준을 무시하면 비용을 얼마나 절약하든 관계없이 관련이있는 것으로 보입니다 .
enderland

1
@ void.pointer, enderland가 맞습니다. 만약 당신의 버전이 완전히 알파벳 문자로 구성되어 있지 않다면 테러리스트가 당신의 가족을 죽이겠다고 위협한다면, 실제 문제는 테러리스트입니다. 의미 론적 버전 관리를 수행하여 문제를 해결하지 마십시오 (실제로이 경우 강력하게 제안 할 것입니다). 실제로 다른 문제가 필요한 해결 방법입니다.
폴 드레이퍼

1
@PaulDraper semver는 언제 버전으로 전환하는 유일한 방법이 되었습니까?
Andy

1
@ 앤디, 그렇지 않았다. OP는 SemVer에 대해 물었습니다. 왜 그런지 IDK가 그랬습니다.
Paul Draper

8

에서 2.0.0입니다 시맨틱 버전의 현재 버전 없음. 버전을 XYZ 형식으로 정의해야하는 요구 사항이 있습니다. 여기서 X, Y 및 Z는 선행 0을 포함하지 않는 음이 아닌 정수입니다.

일반 버전 번호는 XYZ 형식이어야하며 여기서 X, Y 및 Z는 음이 아닌 정수이며 앞에 0을 포함해서는 안됩니다. X는 주 버전이고, Y는 부 버전이며, Z는 패치 버전입니다. 각 요소는 반드시 숫자 적으로 증가해야합니다. 예를 들어 1.9.0-> 1.10.0-> 1.11.0입니다.

그러나 메타 데이터를 추가 할 수있는 기능은 다음과 같습니다.

빌드 메타 데이터는 패치 또는 시험판 버전 바로 뒤에 더하기 부호와 점으로 구분 된 일련의 식별자를 추가하여 표시 할 수 있습니다. 식별자는 ASCII 영숫자와 하이픈 [0-9A-Za-z-] 만 포함해야합니다. 식별자는 비워 둘 수 없습니다. 버전 우선 순위를 결정할 때는 빌드 메타 데이터를 무시해야합니다. 따라서 빌드 메타 데이터에서만 다른 두 가지 버전이 동일한 우선 순위를 갖습니다. 예 : 1.0.0-alpha + 001, 1.0.0 + 20130313144700, 1.0.0-beta + exp.sha.5114f85.

그러나 시맨틱 버전 관리는 특히 공개 API를 선언하는 소프트웨어를위한 것입니다.

시맨틱 버전 관리를 사용하는 소프트웨어는 반드시 공개 API를 선언해야합니다. 이 API는 코드 자체에서 선언되거나 문서에 엄격하게 존재할 수 있습니다. 그러나 그것은 정확하고 포괄적이어야합니다.

이것은 어플리케이션 레벨이 아닌 라이브러리 또는 서비스의 개발을 지원하는 경향이 있습니다.

고려해야 할 중요한 사항은 버전 번호가 내부 및 외부 용도로 무엇을 의미하는지입니다. 버전은 단지 두 가지 시점에서 소프트웨어의 차이점에 대해 이야기 할 수있는 식별자 일뿐입니다. 시맨틱 버전 관리 (Semantic Versioning)는이 문제를 해결하는 한 가지 방법이므로, 애플리케이션이 시맨틱 버전 관리를 사용하고 있다는 것을 알고 있다면 패키지 업데이트에 필요한 노력의 수준을보다 쉽게 ​​결정할 수 있습니다. 공통 표준을 따르는 것이 좋지만 어떤 이유로 든 할 수없는 경우 사용자 규칙을 문서화하는 것만으로도 충분합니다.


공개 API 메모의 경우 +1 공용 API는 없지만 데이터와 같은 다른 측면에서 이전 버전과의 호환성을 해제 할 수 있습니다. 이전 릴리스에 설치되는 빌드를 제공 할 수 있지만 데이터는 변경되지 않으며 더 이상 해당 데이터를 읽을 수 없습니다 (보통 이전 형식을
지원함
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.