Tanggal sebagai nomor versi perangkat lunak

43

Pengembang perangkat lunak biasanya tidak menggunakan tanggal sebagai nomor versi, meskipun format YYYYMMDD (atau variasinya) terlihat cukup solid untuk digunakan. Apakah ada yang salah dengan skema itu? Atau apakah itu berlaku untuk 'jenis' perangkat lunak saja (seperti produksi in-house) yang terbatas?

Donotalo
sumber
4
Dalam beberapa kasus mungkin ok, tetapi skema itu tidak menangani cabang dengan baik atau menambal kode lama. Lihatlah komentar dari jawaban ini .
MikMik
8
Maksud Anda suka pada Windows 95 atau MS Office 2010?
mouviciel
2
Jika tujuan Anda adalah mencegah dua versi dibuat pada hari yang sama, ini bisa dilakukan.
JeffO
2
@JeffO Menambahkan HHmmSS juga dapat memungkinkan beberapa rilis per hari.
StuperUser
5
Seringkali beberapa versi utama dipelihara secara paralel, pada dasarnya karena fitur baru cenderung membawa bug baru. Apakah 2012,01 lebih baik dari 2011.11, atau itu hanya varian patch keamanan dari garis 2003.06 dukungan jangka panjang Anda?
Steve314

Jawaban:

16

Ini adalah sesuatu yang Anda harus melihat dari beberapa sudut yang berbeda karena Anda perlu mempertimbangkan kebutuhan pengguna serta kebutuhan perangkat lunak dan pengembang.

Secara umum, pelanggan Anda tidak akan terlalu peduli tentang apa nomor versi perangkat lunak akan selama mereka tahu mereka menjalankan sesuatu yang lebih baru (yaitu Produk 2012 lebih baru daripada Produk 2010) dan mereka tahu itu up to date jika ada tambalan yang dapat digunakan (yaitu Produk 2012, Pembaruan 10). Karena itu, dari sudut pandang branding pelanggan, saya cenderung lebih suka rilis yang dinamai (misalnya Windows XP, Windows Vista) diikuti oleh sejumlah tambalan yang ketat yang mungkin dipasang oleh pengguna.

Meskipun demikian, menulis perangkat lunak yang memeriksa hal-hal yang mudah bagi pengguna cenderung membuat kode di bawah tenda lebih sulit untuk ditulis. Jadi saya cenderung lebih suka Major.Minorskema versi sederhana jika hanya karena Anda dapat melakukan perbandingan angka sederhana untuk memeriksa untuk melihat ada sesuatu yang up to date seperti di bawah ini:

// Check to see if we can handle the file version
if (this.Version < fileVersion) {
   throw new UnsupportedFileException("The file version is " + fileVersion.toString() + " which is not supported");
}
// Do stuff ...

Untuk menempatkan ini dalam sedikit konteks, saya biasanya tidak peduli seberapa besar jumlah minor yang didapat (yaitu 1,1024) yang memungkinkan sistem di atas untuk tetap berjalan dengan sukses. Secara umum angka revisi hanya menarik untuk pengembangan internal dan saya sebenarnya belum benar-benar melihatnya mempengaruhi hal-hal yang lebih dari sekedar memberikan hal-hal angka tambahan untuk dicatat.

Namun, dua skema di atas benar-benar hanya tidak berlaku untuk lingkungan di mana penyebaran berkelanjutan digunakan (yaitu Stack Exchange) yang mana saya cenderung lebih suka semacam tanggal diikuti oleh angka revisi seperti yang tampaknya digunakan di Stack Exchange situs. Alasan untuk ini adalah bahwa versi akan berubah terlalu sering di lingkungan penerapan berkelanjutan dan Anda mungkin memiliki beberapa versi kode naik pada hari yang sama yang membenarkan nomor revisi dan tanggal saat ini sama baiknya dengan hal-hal yang melanggar lebih banyak lagi. Secara teori Anda bisa menggunakan nomor revisi untuk semuanya tetapi menggunakan tanggal saat ini memungkinkan Anda untuk melacak tonggak utama secara internal yang dapat membuat hal-hal yang sentuhan mudah untuk didiskusikan.

rjzii
sumber
3
Kami juga memiliki penyebaran berkelanjutan, dan kami menggunakan versi utama + tanggal. Ini hanyalah cara termudah untuk melacak apa yang terjadi. Sejujurnya, lebih mudah untuk melakukan kueri kontrol versi untuk mengeluarkan file sumber untuk tanggal tertentu daripada harus terus-menerus menandai file dan melakukan query seperti itu.
NotMe
50

Masalah dengan menggunakan tanggal, adalah bahwa spesifikasi ditulis dengan angka penghitungan daripada tanggal saat jatuh tempo.

"Bagian fungsionalitas ini akan dirilis 1. Bagian fungsionalitas lainnya akan dirilis 2."

Anda tidak dapat merujuk tanggal dalam spesifikasi, karena tanggal rilis bisa terlewatkan.

Jika Anda tidak memiliki proses formal yang membutuhkan rilis berbeda yang diidentifikasi sebelumnya, menggunakan tanggal tidak masalah; Anda tidak perlu menambahkan nomor lain ke dalam campuran.

Nomor versi tidak mungkin berisi tanggal, karena konteksnya ditautkan dengan spesifikasi.
Angka build cenderung berisi tanggal, karena konteksnya ditautkan dengan kapan build dilakukan.

StuperUser
sumber
6
Saya berpendapat bahwa fitur sering didorong dari satu rilis ke rilis lain dan oleh karena itu setiap dokumentasi yang diberikan kepada pelanggan bahwa "fitur x akan dirilis 2" juga akan gagal.
NotMe
@ ChrisLively Tentu saja. Dokumentasi spekulatif dan bahasa seperti "akan" daripada "diharapkan" bisa sangat menyakitkan. Pemilik produk yang baik akan menetapkan harapan yang tepat dan merencanakan secara realistis.
StuperUser
2
@Tidak Benar. Spesifikasi yang merencanakan versi dan nomor rilis lebih dari beberapa minggu sebelumnya pada dasarnya pasti salah, kecuali Anda bersedia menunda rilis hingga fitur yang Anda inginkan selesai. Tetapi tren saat ini adalah untuk sering merilis, terutama pada jadwal reguler, yang berarti Anda tidak tahu fitur apa yang akan hadir di mana rilis.
Jules
27

Meskipun pendekatan ini memiliki manfaat seperti yang Anda jelaskan, ada beberapa kelemahan jika Anda menggunakan tanggal sebagai nomor versi:

  • Versi berbasis tanggal datar. Dengan v2.1.3 Anda dapat melihat nomor versi, nomor sub-versi, dan nomor sub-versi. Dengan 20110119 Anda hanya dapat melihat kapan itu ditulis. Anda dapat mengelompokkan versi berbasis tanggal berdasarkan bulan, tetapi masih tidak memberi tahu Anda apa pun. Anda bisa memiliki beberapa bulan lambat memperbaiki bug kecil dan kemudian dua minggu pengkodean berat menghasilkan rilis besar. Tanggal tidak memberi tahu Anda bahwa, nomor versi biasa lakukan.

  • Jika Anda benar-benar perlu mengubah versi setiap hari dan mungkin merilis nomor, itu dapat menunjukkan bahwa Anda tidak memiliki proses rilis yang tepat, tetapi semua orang dengan liar mengubah hal-hal dan mempromosikannya ke server produksi kapan pun mereka mau. Jika demikian, Anda memiliki masalah dengan prosesnya, dan menggunakan skema nomor versi yang berbeda tidak akan menyelesaikannya.

Goran Jovic
sumber
3
Memiliki beberapa rilis sehari tidak sama dengan memiliki masalah rilis. Apa yang mungkin diindikasikan adalah bahwa Anda memiliki proyek besar, di mana beberapa orang / kelompok terus-menerus bekerja untuk merilis pembaruan. Ini mungkin perbaikan atau hanya peningkatan.
NotMe
Juga, versi berbasis tanggal tidak lebih "flat" dari "2.1.3". Tidak ada yang memiliki makna tanpa konteks. Untuk sebagian besar VCS menarik keluar satu set file berdasarkan tanggal umumnya lebih dapat diandalkan daripada menarik oleh label. Untuk alasan sederhana bahwa orang kadang-kadang lupa untuk menandai satu set file tertentu dengan label versi sementara VCS tidak pernah lupa tanggal / waktu mencap pembaruan.
NotMe
12

Versi sering digunakan untuk menyampaikan informasi tentang betapa berbedanya versi tertentu dari perangkat lunak dari yang sebelumnya. Jadi misalnya, jika Anda meningkatkan versi 1.0 ke 2.0 dari Acme, itu adalah peningkatan besar, secara teori membawa perubahan besar.

Peningkatan dari 1,0 ke 1,1, di sisi lain, adalah peningkatan kecil dan secara teori membawa perubahan kecil dan tambahan.

Ini akan sulit direpresentasikan dalam format tanggal, meskipun Anda bisa menggunakan campuran. Misalnya, v1.0.YYYY.MMDD

JohnL
sumber
2
Lihat saja bagaimana Mozilla telah mengubah penanganan nomor versi baru-baru ini. Nomor versi utama digunakan untuk berkeliaran selamanya, sekarang tampaknya ada versi utama baru setiap beberapa bulan. Mengapa? - ketika mereka tidak menemukan nomor versi utama, banyak orang tidak benar-benar percaya ada fitur baru.
Steve314
Ya Chrome juga memiliki skema pembuatan versi yang aneh - saya pikir mereka akan mengalami masalah dalam satu atau dua tahun ketika mereka merilis versi 21474836478.0. (Ok, aku sedikit melebih-lebihkan tetapi akhirnya mereka akan mencapai titik angka bodoh).
JohnL
2
@JohnL: Saya tidak percaya bahwa rata-rata pengguna Chrome peduli pada versi utamanya. Aplikasi ini secara otomatis memperbarui dirinya sendiri dan "sepertinya" tetap sama meskipun banyak perubahan telah dilakukan.
Spoike
@Soike: Benar. Saya peduli terutama karena saya menggunakan Secunia PSI, yang memeriksa apakah Anda memiliki versi terbaru. Itu selalu memberi tahu saya bahwa Chrome 15.x adalah akhir dari kehidupan atau semacamnya
JohnL
Tentu saja, nomor versi untuk standar RSS hanya mental.
JohnL
10

Tanpa mengulangi ide-ide bagus dari jawaban lain, saya punya masalah dalam pikiran yang belum ditangani.

Jika Anda melakukan fork, antara versi yang lebih lama untuk kompatibilitas ke belakang, dan versi baru untuk modernisasi yang tidak kompatibel, Anda tidak dapat membedakannya melalui nomor versi.

Sebagai contoh, kernel Linux bercabang sekitar tahun 2000 ke cabang 2.4.x lama, yang mungkin masih didukung hari ini dan dihitung sebagai 2.4.199, sedangkan versi baru telah 2.6 selama bertahun-tahun, dan 2.6.32 untuk sistem yang lebih lama, tetapi 3,2 untuk kernel terbaru.

Jika Anda memiliki dokumentasi tentang rilis Anda, Anda akan menggandakan informasi dan memberi tahu orang-orang, bahwa versi 20120109 tiba pada 2012 pukul 01/09. Mh Tapi apa, jika ada deteksi bug saat terakhir, dan rilis ditunda selama seminggu, tetapi dokumentasi, di mana namanya disebutkan, sudah siap, mungkin dicetak, informasi pers keluar dan sebagainya. Sekarang Anda memiliki perbedaan yang bermasalah, jika versi 20120109 tiba pada 2012/01/13.

Dalam SQL, pertanyaan apakah ID harus membawa informasi semantik telah sering dibahas, dan hasilnya selalu: hindari seperti neraka! Anda membuat ketergantungan yang tidak perlu. Itu tidak bisa bermanfaat.

Ubuntu dengan skema 04/10 memiliki masalah pada tahun 2006, ketika versi 6.04 ditunda dan menjadi 6.06. Di tahun 3000 akan segera ada masalah berikutnya! :)

Pengguna tidak diketahui
sumber
1
Kernel Linux 2.4 seri terbaru adalah 2.4.31 dari 01-Juni-2005 , meskipun Anda dapat secara bertahap menambalnya menjadi 2.4.32-pre3 menggunakan tambalan dari 09-Agustus-2005 . Kernel resmistable seri terbaru saat ini adalah 2.6.32.54 (2012-01-12) dan 3.1.10 (2012-01-18).
CVn
6

Ada banyak paket perangkat lunak yang memang menggunakan tanggal sebagai versi. Ubuntu muncul di benak, di mana versi mereka adalah YY.MM. Dan angka pembuatan untuk produk Microsoft Office juga merupakan penyandian tanggal pembuatan. Jeff Atwood menulis posting blog Coding Horror tentang penomoran versi , termasuk rekomendasi ini:

Kapan pun memungkinkan, gunakan tanggal sederhana alih-alih nomor versi, khususnya dalam nama produk publik. Dan jika Anda benar-benar, secara positif harus menggunakan nomor versi secara internal, tetap buatlah tanggalnya: pastikan untuk menyandikan tanggal pembuatan di suatu tempat di nomor versi Anda.

Menurut pendapat saya, itu tidak masalah asalkan Anda konsisten dan dapat pergi dari nomor versi build (apa pun itu) dan mengingat semua artefak yang masuk ke build itu dari sistem kontrol versi Anda. Pengguna biasanya tidak peduli tentang informasi versi sama sekali, tetapi lebih pada fungsionalitas yang disediakan oleh sistem. Informasi versi hanya bernilai nyata bagi pengembang.

Thomas Owens
sumber
4

Gunakan versi semantik - dengan cara itu, Anda mendapatkan gagasan tentang jenis perubahan yang dibuat antar versi tanpa harus memeriksa kode itu sendiri: http://semver.org/

EZ Hart
sumber
3

Menggunakan nomor Versi adalah cara untuk menunjukkan seberapa besar perubahan itu

Misalnya 2.4.3 dapat berarti versi 2 adalah perubahan besar pada keseluruhan sistem. .4 adalah pembaruan kecil. dan .3 terakhir adalah perbaikan bug kecil untuk versi itu. Dengan begitu mudah dikenali berapa banyak yang telah berubah di antara setiap versi.

Setelah mengatakan bahwa saya masih melihat banyak orang menggunakan tanggal atau nomor revisi SCM sebagai nomor versi selama Anda memiliki cara untuk melacak kembali ke mendukung catatan rilis dan dokumentasi apa yang ada di dalam lingkup untuk rilis itu tidak ada masalah nyata.

Daveo
sumber
3

Beberapa jawaban yang baik sudah ada di sini, tetapi saya ingin menunjukkan sebuah kasus di mana menggunakan tanggal masuk akal: perpustakaan kecil atau potongan kode di mana kode cenderung sering diperbarui tetapi dalam bit kecil tanpa versi tunggal berbeda secara dramatis dengan sebelumnya satu.

Dengan kata lain saya berbicara tentang situasi di mana tidak ada "nomor versi" yang sebenarnya tetapi pada dasarnya semacam tempat penyimpanan repositori kuasi-harian.

Ketika saya menemukan hal-hal semacam ini, saya biasanya menyambut pilihan karena lebih berguna bagi saya untuk mengetahui bahwa saya menggunakan skrip / lib yang relatif baru daripada versi tertentu.

UncleZeiv
sumber
3

Tanggal sebagai nomor versi baik untuk pemasaran. Jika orang menggunakan "Windows NT 5.0", mereka mungkin tidak menyadari bahwa itu sudah usang. Tetapi jika orang masih menggunakan "Windows 2000", mereka akan langsung tahu itu adalah OS 12 tahun dan didorong untuk meningkatkan.

Namun, hal itu membuat lebih sulit untuk membedakan antara pembaruan "besar" dan "kecil".

dan04
sumber
1
Dan pemasaran membantu Anda menjual ;)
c69
Mengapa pengguna perlu atau "didorong" untuk meningkatkan, jika perangkat lunak sesuai dengan kebutuhan mereka (termasuk memberikan tingkat keamanan yang sesuai)?
CVn
3
Karena dukungan dibatalkan untuk itu, dan Anda berhenti mendapatkan pembaruan keamanan.
JohnL
3

Masalah dengan menggunakan Tanggal sebagai Nomor Versi

Jawaban di sini bagus, tetapi saya tidak melihat ada yang mengatasi masalah ini dengan menggunakan tanggal: Pengguna tidak dapat menentukan seberapa sering modifikasi telah dilakukan.

Yang ingin saya katakan adalah bahwa saya dapat mengatakan bahwa Windows 3.1 dan Windows 7 berjauhan ... dan mungkin tidak kompatibel. Windows 95 dan Windows 2000 memberi tahu saya tidak lebih dari tahun di mana produk diperkenalkan.

Misalnya, dengan Python, saya tahu bahwa versi 2.7.2 telah berevolusi dari 2.4.6. Jika saya melihat lebih jauh, saya melihat bahwa versi 2.4.6 dirilis pada 19 Desember 2008; dan versi 2.7.2 dirilis pada 11 Juni 2011. Dari sini, saya dapat membentuk pendapat tentang stabilitas (yaitu, frekuensi rilis) suatu produk.

Sebaliknya, jika Python menggunakan tanggal rilis, saya tidak bisa tahu bagaimana produk-produk ini terhubung. Kebingungan lebih lanjut akan terjadi, karena Python 3.1.4 juga dirilis pada 11 Juni 2011 (sama dengan Python 2.7.2).

Singkatnya, saya tidak berpikir bahwa, dengan sendirinya, versi tanggal berharga.

TheGeeko61
sumber
2

Saya tidak suka ide ini, karena alasan yang sudah dijelaskan oleh orang lain. Cukup gunakan skema major.minor.bugfix - ada alasan mengapa kebanyakan orang melakukannya dengan cara ini.

Tapi apa pun yang Anda lakukan: pilih satu skema penamaan versi, dan patuhi itu . Jangan lakukan itu seperti Windows, di mana mereka mengubah skema dengan setiap rilis. Dan jangan lakukan itu seperti Android, di mana setiap rilis memiliki nomor versi API (8), nomor versi yang dimaksudkan untuk pemasaran (2.2) dan nama bodoh (Froyo).

Mike Baranczak
sumber
1

Tanggal sebagai Versi

Jika produk Anda tidak terjual maka hanya menggunakan tanggal itu baik-baik saja dan mungkin bermanfaat. Jika Anda menjualnya dan meningkatkannya ke pelanggan, mereka ingin membeli model dengan serangkaian fitur tertentu. Jauh lebih mudah untuk menjualnya pada upgrade jika model ini memiliki nama yang jelas, tidak masalah apa pun itu tetapi misalnya tidak ada yang benar-benar membeli Mobil Ford 20 Januari 2012 yang mereka inginkan dengan Model Kia apa pun. Hal yang sama berlaku untuk perangkat lunak. Memberi nama dan versi model yang keras berarti memiliki fitur yang berbeda dari yang lebih lama. Bagi saya hanya kencan tidak melakukan itu, katanya saya membuatnya, tidak mungkin memiliki fitur baru.

Skema Yang Kami Gunakan

Saya tidak membuat klaim bahwa sistem kami, menciptakan merek yang jelas seperti di atas. Kami sekarang menggunakan skema empat bagian. Nomor versi, status, tanggal dan sebuah checksum.

1200_GLD_120120_F0D1

Ini mungkin melintang di atas tetapi memungkinkan kita untuk memiliki beberapa versi versi build untuk 1200 yang dapat digunakan oleh teknisi kami dan kami membedakannya berdasarkan tanggal. The state memberitahu orang-orang jika itu adalah versi uji internal, pelanggan patch yang membangun atau rilis emas. The checksum baru, memungkinkan seorang insinyur atau pelanggan untuk memverifikasi bahwa mereka benar-benar telah men-download yang benar dari distribusi kami.

Jadi kita mungkin memiliki urutan

1200_TST_120110_EF45
1200_GLD_120120_F0D1
1201_FIX_120125_123E
1201_TST_120130_31A5
1201_TST_120131_FDFD

Kami biasanya hanya merujuk ke nomor versi utama ke pelanggan yaitu "12" tetapi pelanggan akan mendapatkan versi emas 12 terbaru yaitu 1200_GLD_120120_F0D1 kecuali mereka membutuhkan Fix.

David Allan Finch
sumber
1

Katakanlah beberapa pelanggan menggunakan versi dua produk Anda, dan beberapa telah ditingkatkan ke versi tiga, dan peningkatan itu bukan keputusan yang dibuat dengan enteng.

Katakanlah versi terakhir dari versi dua adalah 2.3.2, dan versi tiga di 3.0.3. Sekarang Anda menemukan kerentanan yang benar-benar perlu diperbaiki, sehingga Anda merilis 2.3.3 dan 3.0.4 pada hari yang sama. Bisakah Anda melihat bagaimana tanggal rilis sama sekali tidak relevan? Anda mungkin telah berhenti bekerja pada versi dua di 2013 dan hanya merilis beberapa perbaikan bug penting sejak itu. Tanggal tidak relevan dibandingkan dengan nomor versi.

gnasher729
sumber
-1

Saya pikir ini bekerja dengan baik. Saya menggunakannya untuk beberapa perangkat lunak internal (yyyy.mm.dd) dan untuk beberapa perangkat lunak open source yang saya rilis.

Mungkin tidak berfungsi dalam semua kasus.

Scott Whitlock
sumber
Dalam hal ini, kita bisa melihat "Ini tahun baru!" Selamat Tahun Baru...!
Yousha Aleayoub
-2

Secara teknis Itu tidak bisa menggunakan tanggal untuk nomor versi, tetapi itu bisa menunjukkan nomor tanggal untuk pelanggan. Sebagai contoh, macOS 16.7.23 --- artinya: 23/7/2016

Saya pikir teknologi bukan masalah, masalahnya adalah bagaimana rasanya? Jika menggunakan nomor tanggal yang dapat membuat perangkat lunak hidup, hidup, seperti halnya pria yang berulang tahun. Setiap tahun kita tumbuh dewasa, sama seperti perangkat lunak yang terus tumbuh dewasa.

Nomor bangunan terlihat seperti mesin, mesin, tidak hidup, tidak hidup.

Kanglando
sumber