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?
versioning
Donotalo
sumber
sumber
Jawaban:
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.Minor
skema 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: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.
sumber
Masalah dengan menggunakan tanggal, adalah bahwa spesifikasi ditulis dengan angka penghitungan daripada tanggal saat jatuh tempo.
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.
sumber
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.
sumber
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
sumber
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! :)
sumber
stable
seri terbaru saat ini adalah 2.6.32.54 (2012-01-12) dan 3.1.10 (2012-01-18).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:
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.
sumber
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/
sumber
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.
sumber
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.
sumber
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".
sumber
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.
sumber
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).
sumber
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.
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
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.
sumber
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.
sumber
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.
sumber
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.
sumber