Có phiên bản ngữ nghĩa cho phép 4 thành phần trong số phiên bản?


16

Tất cả các ví dụ về phiên bản ngữ nghĩa mà tôi đã thấy cho thấy 3 thành phần đang sử dụng. Không quá 2 ký tự thời gian. Tại $DAYJOB, chúng tôi sử dụng 4 thành phần trong số phát hành của chúng tôi:

5.0.1.2

Có phiên bản ngữ nghĩa cho phép điều này?

Và như một câu hỏi phụ cấp cao hơn và nhiều tranh cãi hơn, nó có thực sự quan trọng không? Tôi bắt đầu nghĩ rằng nó có thể là một ý tưởng tốt để thực thi phiên bản ngữ nghĩa, nhưng cuối cùng các thực thể như PCI ghi đè lên nó.

Tôi nên đã làm rõ về nhận xét PCI của tôi. Vấn đề là kiểm toán và ảnh hưởng chi phí của chúng khi các thành phần chính và phụ thay đổi, không nhất thiết phải là một tính năng mới thực sự. Ví dụ: nếu một tính năng liên quan đến thanh toán được giới thiệu, chúng tôi sẽ tăng số lượng nhỏ cho PCI. Nhưng nếu chúng ta thêm một tính năng hoàn toàn mới liên quan đến một cái gì đó trong gui, thì nó không có. Chỉ có bản vá thay đổi. Vì vậy, trong trường hợp này, chúng tôi không thực sự có tiếng nói trong vấn đề là nhà phát triển vì người khác đưa ra những quyết định đó.


Phiên bản ngữ nghĩa là một hướng dẫn. Trường hợp PCI nêu bất cứ điều gì về cách mọi thứ sẽ được phiên bản?

Tôi nên đã làm rõ về nhận xét PCI của tôi. Vấn đề là kiểm toán và ảnh hưởng chi phí của chúng khi các thành phần chính và phụ thay đổi, không nhất thiết phải là một tính năng mới thực sự. Ví dụ: nếu một tính năng liên quan đến thanh toán được giới thiệu, chúng tôi sẽ tăng số lượng nhỏ cho PCI. Nhưng nếu chúng ta thêm một tính năng hoàn toàn mới liên quan đến một cái gì đó trong gui, thì nó không có. Chỉ có bản vá thay đổi. Vì vậy, trong trường hợp này, chúng tôi không thực sự có tiếng nói trong vấn đề là nhà phát triển vì người khác đưa ra những quyết định đó.
void.pulum

@ void.pulum bạn có thể đưa ra một ví dụ về lý do tại sao bạn đang sử dụng thành phần thứ tư không? Bạn đang sử dụng nó để cơ bản bỏ qua các cấu trúc kế toán và chi phí nội bộ - cho phép nhóm của bạn theo dõi các tính năng mới mà không phải trả số lượng bản vá?
thúc

@enderland Có cơ bản. MAJOR(PCI).MINOR(PCI).FEATURE.HOTFIX+BUILD. Về cơ bản, chúng tôi chỉ được phép thay đổi thành phần thứ 3 và thứ 4 mà không cần có PCI (và sau đó là các lớp phủ PCI tại công ty). Đối với tôi cảm giác như đây là một chút giả định, tôi không chắc họ có lý do trong cách họ quản lý số phiên bản, nhưng tôi không biết đủ về PCI và quy trình kiểm toán để nói khác.
void.pulum

4
Chúng tôi cũng sử dụng 4 nhóm chứ không phải 3. Tại sao? Vì C ++. C ++ có khả năng tương thích ngược nhị phân và khả năng tương thích ngược nguồn : cái trước ngụ ý cái sau, nhưng mối quan hệ không đối xứng. Do đó, chúng tôi sử dụng nhóm thứ 4 để tương thích nhị phân (bạn có thể vá nóng hệ thống) và nhóm thứ 3 để tương thích nguồn (bạn cần biên dịch lại, nhưng bạn không cần phải sửa đổi mã của riêng mình). Và bạn biết những gì, nó làm việc cho chúng tôi!
Matthieu M.

Câu trả lời:


21

Có vẻ như bạn đang bỏ qua các quy ước thông thường chỉ để tránh quá trình kiểm toán / kiểm toán. Điều đó ... gây ấn tượng với tôi.

Những gì bạn đang làm là thực sự tạo ra một số phiên bản bổ sung (chữ số PCI nhỏ của bạn) một cách có chủ ý để di chuyển các số phiên bản tính năng / nhỏ của bạn trở lại một vị trí, để không còn kích hoạt các tiêu chí kiểm toán nội bộ của bạn.


Dù sao, nhận được câu hỏi của bạn về phiên bản ngữ nghĩa, thông số kỹ thuật cho các trạng thái Phiên bản ngữ nghĩa :

Cho số phiên bản MAJOR.MINOR.PATCH, tăng:

  • Phiên bản CHÍNH khi bạn thực hiện các thay đổi API không tương thích,
  • Phiên bản MINOR khi bạn thêm chức năng theo cách tương thích ngược và
  • Phiên bản PATCH khi bạn thực hiện sửa lỗi tương thích ngược.
  • Các nhãn bổ sung cho siêu dữ liệu trước khi phát hành và xây dựng có sẵn dưới dạng các phần mở rộng cho định dạng MAJOR.MINOR.PATCH .

Nhấn mạnh mỏ.

Vì vậy, câu hỏi là, bạn đang sử dụng ký tự thứ tư cho siêu dữ liệu trước khi phát hành / xây dựng? Hoặc về cơ bản là một dấu hiệu phiên bản khác mà bạn đang phát hành?

Nếu "có" thì thông số kỹ thuật của phiên bản ngữ nghĩa sẽ cho phép nó. Nếu "không" thì về mặt kỹ thuật bạn không tuân theo phiên bản ngữ nghĩa.

Và như một câu hỏi phụ cấp cao hơn và nhiều tranh cãi hơn, nó có thực sự quan trọng không?

Cho dù bạn có muốn cứng nhắc làm theo hay không là quyết định mà bạn và nhóm của bạn phải đưa ra. Mục đích của phiên bản ngữ nghĩa là để giúp tương thích API:

Sửa lỗi không ảnh hưởng đến việc tăng API phiên bản vá lỗi, bổ sung / thay đổi API tương thích ngược làm tăng phiên bản nhỏ và thay đổi API không tương thích ngược làm tăng phiên bản chính.

Tôi gọi hệ thống này là "Phiên bản ngữ nghĩa." Theo sơ đồ này, số phiên bản và cách chúng thay đổi truyền đạt ý nghĩa về mã cơ bản và những gì đã được sửa đổi từ phiên bản này sang phiên bản tiếp theo.

Đây là một hệ thống giúp làm cho nó rõ ràng hơn khi phiên bản ảnh hưởng đến người dùng API hạ nguồn.

Miễn là API của bạn rõ ràng tương tự, đó không phải là vấn đề lớn mà bạn chọn. Phiên bản ngữ nghĩa chỉ đơn giản là đơn giản, ví dụ nếu tôi đang sử dụng 3.4.2 và cần nâng cấp lên 3.4.10 Tôi biết tôi có thể làm như vậy mà không làm hỏng bất cứ điều gì. Nếu phiên bản mới là 3.5.1, tôi biết nó tương thích ngược. Và tôi biết phiên bản 4.0.1 sẽ là một sự thay đổi đột phá.

Đó là tất cả các phần của số phiên bản có nghĩa.

@enderland Có cơ bản. CHÍNH (PCI) .MINOR (PCI). TÍNH NĂNG.HOTFIX + BUILD. Về cơ bản, chúng tôi chỉ được phép thay đổi thành phần thứ 3 và thứ 4 mà không cần có PCI (và sau đó là các lớp phủ PCI tại công ty). Đối với tôi cảm giác như đây là một chút giả tạo, tôi không chắc họ có lý do trong cách họ quản lý số phiên bản, nhưng tôi không biết đủ về PCI và quy trình kiểm toán để nói khác.

Ok, điều này là tốt. Bạn có một hệ thống phù hợp với bạn và đáp ứng nhu cầu của bạn. Đó là điểm của phiên bản.

Nếu API của bạn là riêng tư (chỉ đối mặt với nội bộ) thì thực sự không có vấn đề gì với phiên bản của bạn miễn là nó có ý nghĩa với bạn và mọi người sử dụng nó. Trường hợp phiên bản ở định dạng chuẩn là vấn đề khi bạn có nhiều người tiêu dùng API khác cần biết "phiên bản này có nghĩa là gì?"

Có một hệ thống phiên bản tùy ý sẽ gây nhầm lẫn cho những người đã quen với các hệ thống khác, chẳng hạn như phiên bản ngữ nghĩa. Nhưng nếu không ai thực sự sử dụng hệ thống phiên bản của bạn ngoại trừ những người tạo ra nó - điều đó không thực sự quan trọng.


Liên quan đến chỉnh sửa của bạn ở đầu: Hãy để tôi chơi người ủng hộ của quỷ ở đây. Kiểm toán PCI làm tốn tiền của công ty và không phải mọi tính năng được triển khai đều là mối quan tâm của họ. Vậy tại sao phải chịu chi phí và chi phí khác trên nguyên tắc? Làm thế nào là điều này rất liên quan? Tôi nhận ra phương pháp xác định kiểm toán có lẽ là thiếu sót, nhưng việc tách các mối quan tâm có vẻ hợp lý. Những thứ không liên quan đến xử lý thẻ từ xa không liên quan đến PCI.
void.pulum

@ void.pulum Tôi không ở vị trí để đánh giá tại sao / cách kiểm toán của bạn được xác định. Nhưng ai đó đã quyết định rằng họ muốn kiểm toán dựa trên các tiêu chí cụ thể. Cố tình bỏ qua các tiêu chí kiểm toán có vẻ liên quan (bất kể bạn tiết kiệm được bao nhiêu tiền bằng cách làm như vậy).
thúc

1
@ void.pulum, enderland là đúng. Nếu một kẻ khủng bố đe dọa giết gia đình bạn nếu các phiên bản của bạn không bao gồm hoàn toàn các chữ cái, thì vấn đề thực sự là khủng bố. Vui lòng không theo dõi phiên bản ngữ nghĩa để giải quyết vấn đề này (thực tế, tôi rất muốn đề xuất nó trong trường hợp này), nhưng thực sự đó là: một cách giải quyết bắt buộc bởi một vấn đề khác.
Paul Draper

1
@PaulDraper Khi nào semver trở thành One True Way thành phiên bản?
Andy

1
@Andy, nó đã không. OP đã hỏi về SemVer. IDK tại sao, nhưng đó là những gì anh ấy đã làm.
Paul Draper

8

Trong phiên bản hiện tại của Semantic Versioning, là 2.0.0 , không. Có một yêu cầu xác định phiên bản là dạng XYZ trong đó X, Y và Z là các số nguyên không âm không chứa số 0 đứng đầu:

Số phiên bản bình thường PHẢI có dạng XYZ trong đó X, Y và Z là các số nguyên không âm và KHÔNG PHẢI chứa các số 0 đứng đầu. X là phiên bản chính, Y là phiên bản phụ và Z là phiên bản vá lỗi. Mỗi yếu tố PHẢI tăng số lượng. Ví dụ: 1.9.0 -> 1.10.0 -> 1.11.0.

Tuy nhiên, khả năng thêm siêu dữ liệu được cho phép:

Xây dựng siêu dữ liệu CÓ THỂ được biểu thị bằng cách nối thêm dấu cộng và một loạt các số nhận dạng được phân tách bằng dấu chấm ngay sau bản vá hoặc phiên bản tiền phát hành. Mã định danh PHẢI chỉ bao gồm chữ và số gạch ngang ASCII [0-9A-Za-z-]. Định danh PHẢI KHÔNG được để trống. Xây dựng siêu dữ liệu NÊN bỏ qua khi xác định ưu tiên phiên bản. Do đó, hai phiên bản chỉ khác nhau trong siêu dữ liệu xây dựng, có cùng mức độ ưu tiên. Ví dụ: 1.0.0-alpha + 001, 1.0.0 + 20130313144700, 1.0.0-beta + exp.sha.5114f85.

Tuy nhiên, một điều quan trọng cần lưu ý là Phiên bản ngữ nghĩa dành riêng cho phần mềm khai báo API công khai:

Phần mềm sử dụng Phiên bản ngữ nghĩa PHẢI khai báo API công khai. API này có thể được khai báo trong chính mã hoặc tồn tại nghiêm ngặt trong tài liệu. Tuy nhiên, nó được thực hiện, nó phải chính xác và toàn diện.

Điều này có xu hướng hỗ trợ sự phát triển của các thư viện hoặc dịch vụ chứ không phải ở cấp độ ứng dụng.

Điều quan trọng cần xem xét là số phiên bản của bạn có ý nghĩa gì, cả sử dụng nội bộ và bên ngoài. Các phiên bản chỉ là định danh cho phép bạn nói về sự khác biệt trong phần mềm tại hai thời điểm khác nhau. Phiên bản ngữ nghĩa là một phương pháp đặt quy tắc xung quanh vấn đề này, vì vậy nếu bạn biết rằng một ứng dụng đang sử dụng Phiên bản ngữ nghĩa, thì bạn có thể dễ dàng xác định mức độ nỗ lực cần thiết để cập nhật các gói của mình. Theo một tiêu chuẩn chung có thể là tốt, nhưng nếu bạn không thể vì bất kỳ lý do gì, thì việc ghi lại các quy tắc cho người dùng của bạn cũng là đủ.


+1 cho ghi chú API công khai. Chúng tôi không có API công khai nhưng chúng tôi có khả năng phá vỡ tính tương thích ngược trong các khía cạnh khác, chẳng hạn như dữ liệu. Có thể chúng tôi gửi bản dựng được cài đặt trên các bản phát hành cũ nhưng dữ liệu không thay đổi và chúng tôi không còn có thể đọc được dữ liệu đó nữa (thông thường chúng tôi hỗ trợ các định dạng cũ)
void.pulum
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.