Mencari praktik terbaik untuk penomoran versi komponen perangkat lunak dependen


15

Kami mencoba memutuskan cara yang baik untuk melakukan penomoran versi untuk komponen perangkat lunak, yang saling tergantung.

Mari kita lebih spesifik:

Komponen perangkat lunak A adalah firmware yang berjalan pada perangkat tertanam dan komponen B adalah driver masing-masing untuk PC normal (Linux / mesin Windows). Mereka berkomunikasi satu sama lain menggunakan protokol khusus. Karena, produk kami juga ditargetkan untuk pengembang, kami akan menawarkan versi kedua komponen yang stabil dan tidak stabil (firmware adalah sumber tertutup, sedangkan pengandar adalah sumber terbuka). Kesulitan terbesar kami adalah bagaimana menangani perubahan API dalam protokol komunikasi.

Sementara kami menerapkan pemeriksaan kompatibilitas pada driver - memeriksa apakah versi firmware kompatibel dengan versi driver - kami mulai membahas berbagai cara penomoran versi.

Kami datang dengan satu solusi, tetapi kami juga merasa ingin menciptakan kembali roda. Itulah mengapa saya ingin mendapatkan umpan balik dari komunitas programmer / pengembang perangkat lunak, karena kami pikir ini adalah masalah umum.

Jadi, inilah solusi kami:

Kami berencana untuk mengikuti penomoran versi major.minor.patch yang banyak digunakan dan menggunakan angka minor genap untuk versi stabil / tidak stabil. Jika kami memperkenalkan perubahan pada API, kami akan menambah angka minor.

Konvensi ini akan mengarah pada contoh situasi berikut:

Cabang stabil saat ini adalah 1.2.1 dan tidak stabil adalah 1.3.7. Sekarang, tambalan baru untuk perubahan API yang tidak stabil, apa yang akan menyebabkan nomor versi yang tidak stabil menjadi 1.5.0. Setelah, cabang yang tidak stabil dianggap stabil, katakanlah di 1.5.3, kami akan merilisnya sebagai 1.4.0.

Saya akan senang tentang jawaban atas pertanyaan terkait di bawah ini:

  • Bisakah Anda menyarankan praktik terbaik untuk menangani masalah yang dijelaskan di atas?
  • Apakah menurut Anda konvensi "kebiasaan" kami itu baik?
  • Perubahan apa yang akan Anda terapkan pada konvensi yang dijelaskan?

2
Kembali ke nomor versi berdasarkan stabil / tidak stabil? Membingungkan untuk sedikitnya. Hanya memiliki 1.4.0 karena tidak pernah dirilis dan merilis 1.5.3 sebagai 1.6.0.
Marjan Venema

3
Ada spesifikasi untuk bagaimana melakukan penomoran versi. Ini disebut versi semantik .
Spoike



Suara positif untuk @Spoike. Anda seharusnya membuat komentar Anda sebagai jawaban! Kami akhirnya tenang dengan menggunakan semantic versoning.
bit-bajak laut

Jawaban:


19

Nomor versi IMHO seperti nama produk; penting karena mereka terlihat tetapi tidak penting karena mereka dekorasi daripada konten.

Masih nomor versi, seperti nama produk, membawa makna. Dan hal terpenting yang dapat Anda lakukan adalah menghindari kebingungan. Jadi, inilah beberapa harapan umum sehubungan dengan nomor versi. Sejauh pengecualian ini tidak dipenuhi, pengguna mungkin akan bingung:

Angka versi meningkat secara monoton.
Ini mungkin harapan yang paling jelas, dan pada saat yang sama kemungkinan yang paling kecil untuk menjadi kenyataan. Sekilas, pengguna mengharapkan bahwa versi 2.3.5 datang setelah versi 2.2.17, dan memiliki teknologi yang sama atau lebih baik. Tetapi tentu saja 2.3.x adalah cabang pengembangan , dan 2.2.x stabil , dan 2.3.5 sebenarnya dirilis kembali pada tahun 2004 dan cabang 2.2 masih aktif dikerjakan dan 2.2.17 dirilis hanya pada bulan April lalu dan berisi. .. yah, Anda mendapatkan idenya. Anda mungkin juga cukup memanggil versi 2.2 "Kentang" untuk semua makna yang dibawanya. Selamat datang di versi " Potato-17 " !!

Versi Serupa Dapat Di-upgrade / Kompatibel
Jika saya memiliki versi 3.7 di komputer saya, dan 3.8 keluar dengan semua frozbot mengkilap baru, saya berharap bahwa dengan beberapa peningkatan atau perbaikan atau apa pun, 3,7 saya dapat menjadi 3,8 tanpa gangguan. Tetapi jika saya menggunakan 3.7 dan Anda merilis 5.2, saya tidak begitu optimis. Tentu saja, saya lebih suka terkejut daripada kecewa.

Angka pertama signifikan,
saya bahkan tidak akan repot-repot untuk menyebutkan ini jika Jawa tidak begitu membingungkan tentang masalah ini. Kecuali seseorang memberi tahu Anda, Anda tidak akan mengharapkan bahwa "Java 7" sebenarnya versi 1.7. Dan pertama kali Anda mendengar ini, respons Anda hampir pasti: " Apa? .. Kenapa? "

Jelas purist akan mengatakan bahwa nomor versi utama hanya akan berubah jika perubahan platform tidak kompatibel dengan mundur. Tapi apakah Anda benar-benar berniat untuk menjatuhkan kompatibilitas mundur pernah ? Seringkali versi revs utama adalah keputusan pemasaran bukan keputusan teknis; absurditas Jawa berasal dari kedua kubu yang memiliki caranya sendiri pada saat yang sama, dengan efek yang hampir lucu.

Akhirnya
Seperti yang saya sebutkan, nomor versi sering kali tentang pemasaran dan juga tentang teknologi. Dan tidak apa-apa, karena seperti itulah nomor versi untuk: sekilas memberi tahu Anda tentang apa yang baru tentang perangkat lunak. Perubahan angka besar berarti perubahan fungsionalitas besar. Perubahan angka kecil berarti hampir tidak ada perubahan fungsi. Itu yang orang harapkan . Apakah itu benar atau tidak menentukan apakah nomor versi Anda membawa makna yang sama dengan yang dipikirkan oleh pengguna Anda.

- EDIT -
Saya lupa menyebutkan ini, tapi Caleb menunjukkannya dengan baik: Jangan gunakan nomor versi untuk menunjukkan sesuatu yang penting (mis. Stabil / tidak stabil) tanpa membuatnya eksplisit di tempat lain. Ya, Anda tahu bahwa nomor versi minor aneh menunjukkan pengembangan, tetapi itu membuat salah satu dari kami. Moniker rilis Debian yang "tidak stabil" adalah contoh yang bagus; atau Anda juga bisa menggunakan nama produk yang benar-benar terpisah; "Frozbot 1.2" untuk nama produk Anda, dan "Devbot 1.3" untuk versi pengembangan Anda.


1
Baik ditempatkan. Pada poin terakhir, Anda mungkin ingin membedakan (yaitu jangan bingung) versi pemasaran dari angka versi teknis yang digunakan secara internal. Seperti di Jawa, Java 7 adalah versi pemasaran (terdengar semua baru dan mengkilap), 1,7 adalah versi teknis (terdengar seperti peningkatan kecil, yang cukup akurat).
miraculixx

Walaupun ada jawaban bagus lainnya di sini, saya paling suka ini, karena sangat menjelaskan perbedaan perangkap dan kasus penggunaan. Pada akhirnya kami telah puas dengan versi semantik yang disebutkan dalam komentar di atas, yang sangat mirip dengan apa yang telah Anda uraikan.
bit-bajak laut

3

Setelah, cabang yang tidak stabil dianggap stabil, katakanlah di 1.5.3, kami akan merilisnya sebagai 1.4.0.

Tidak tidak. Untuk stabil 1.5.3 stabil harus dimulai dari 1.6.0 (dan 1.4.x hanya terjawab, jika Anda ingin menggunakan Semantic Versioning)


3

Anda mencoba menggunakan satu nilai untuk menunjukkan dua hal yang terpisah.

Pertama, Anda memiliki "versi," yang biasanya berfungsi untuk mengidentifikasi berbagai rilis dan untuk menunjukkan urutan pembuatan rilis. Seperti yang dikatakan tylerl, versi ini harus selalu meningkat - itu tidak masuk akal bagi pengguna (dan itu dapat menyebabkan banyak kebingungan internal juga) jika Anda mengubah versi dari 1.5.3 ke 1.4.0.

Kedua, Anda mencoba mengindikasikan apakah versi yang diberikan stabil atau tidak.

Adalah mungkin untuk menunjukkan kedua hal tersebut dengan "nomor versi" tunggal, seperti halnya beberapa toko akan menggunakan beberapa skema penetapan harga untuk mengindikasikan apakah suatu barang sedang dijual. Misalnya, harga yang berakhiran '3' di toko dekat saya adalah harga jual final. Itu bekerja dengan baik untuk karyawan, yang dengan cepat belajar cara mengenali harga jual, tetapi itu bukan cara yang bagus untuk memberi tahu pelanggan Anda tentang penjualan. Untuk alasan itu, mereka juga memasang tanda di dekat barang-barang penjualan. Anda dapat melakukan hal yang serupa, seperti membuat angka paling signifikan untuk rilis stabil dan dan membuatnya aneh untuk rilis eksperimental. Saya pikir, meskipun, bahwa jika Anda akan merilis sesuatu yang eksperimental, Anda harus dengan jelas menandainya seperti itu. Anda bisa menambahkan 'X' di awal atau akhir string versi, seperti:X.1.5.31.5.3.X. Anda bahkan dapat nomor versi eksperimental setelah itu, sehingga Anda dapat merilis beberapa versi eksperimental semua berdasarkan versi dasar yang sama: 1.5.3.X1, 1.5.3.X2.

Anda juga harus mempertimbangkan bahwa ada tradisi panjang menggunakan "alpha" dan "beta" nomor versi untuk menunjukkan versi yang mungkin tidak stabil atau lengkap: 1.5.3a54. Pastikan Anda memiliki alasan yang kuat untuk keluar dari skema ini jika Anda memutuskan untuk melakukan hal lain, karena Anda mungkin harus menjelaskan hal lain kepada komunitas pengembang Anda.


1
+1 Contoh cemerlang: " harga yang berakhiran '3' di toko dekat saya adalah harga jual final ... tapi itu bukan cara yang bagus untuk memberi tahu pelanggan Anda tentang penjualan. "
tylerl

2

Saya akan menyarankan untuk menggunakan format major.minor.patch, menggunakan ekstensi "tag" untuk versi stabil / tidak stabil, dan makna pasti dari angka-angka utama dan kecil:

major.minor.patch-stable|unstable

dimana

major  only changes if there are incompatible changes in the API
minor  changes if there are changes in the API but backward compatibility is given
patch  any other changes, could be the build number or any other increasing number
-stable indicates the stable version
-unstable indicates the unstable version

Dengan cara ini dependensi mudah dikelola dan akan memberi tahu setiap komponen klien / pengguna kapan mereka harus lebih memperhatikan versi baru. Misalnya, jika komponen A (1.1.0-stable) tergantung pada B (5.4.534-stable) dan versi baru B adalah karena (6.1.0-unstable) orang akan segera menyadari bahwa A harus diubah, mungkin secara substansial .


1

Saya benar-benar menyukai cara Hibernating Rhinos telah membangun versi RavenDb vis-a-vis - mereka hanya memiliki jumlah build yang semakin meningkat. Ketika mereka mendapatkan yang stabil itu ditandai stabil. Tapi semuanya adalah kandidat rilis.


3
mereka hanya memiliki nomor build yang memberatkan - Ya Tuhan saya harap itu yang Anda maksud, itu benar-benar mengubah konteks nomor versi jika mereka semakin memberatkan.
tylerl

1
Sialan Anda mengoreksi otomatis. . .
Wyatt Barnett
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.