bagaimana versi semantik berlaku untuk program tanpa API

42

Dalam http://semver.org/ — yang menurut persepsi saya tampaknya merupakan konvensi yang paling banyak digunakan dalam pembuatan versi — disarankan untuk menambah nomor versi utama ketika perubahan yang memecah / memodifikasi API diperkenalkan.

Ada dua skenario terkait yang saya tidak melihat bagaimana menerapkan pedoman ini:

  1. Bagaimana jika kode saya tidak menawarkan API apa pun? Bagaimana saya harus membuat versi kode saya?
  2. Bagaimana jika kode saya mulai menawarkan API pada tahap akhir pengembangannya?
Mario
sumber
7
Poin 1 dari negara spesifikasi: Perangkat lunak menggunakan Semantic Versioning HARUS mendeklarasikan API publik. API ini dapat dinyatakan dalam kode itu sendiri atau ada secara ketat dalam dokumentasi. Namun itu dilakukan, harus tepat dan komprehensif. Jadi saya kira jawabannya adalah Anda tidak menggunakan SemVer secara teknis sehingga sepenuhnya terserah Anda.
Ant P
Periksa artikel ini yang mengusulkan solusi yang baik untuk aplikasi yang tidak menawarkan API apa pun, seperti aplikasi desktop: softwareengineering.stackexchange.com/a/357887/269082
ferit

Jawaban:

48

Semver sebagian besar khawatir tentang versi perpustakaan dan paket dengan cara yang menghindari neraka ketergantungan, dalam berbagai inkarnasinya. Namun, ide di balik Semver dapat diperluas ke semua jenis program - setiap kode memiliki beberapa jenis antarmuka pengguna, atau itu sangat tidak berguna.

  • Perpustakaan pemrograman atau layanan web memiliki API.
  • Perangkat lunak konsumen mungkin memiliki GUI.
  • Program baris perintah memiliki seperangkat sakelar dan opsi.
  • File konfigurasi juga merupakan antarmuka pengguna.

Menggunakan contoh perangkat lunak konsumen, seperti pengolah kata:

  • Tambahkan nomor tambalan saat Anda mengirim perbaikan bug, misalnya: " bug tetap di mana aplikasi selalu macet pada pukul 00:00 pada hari Selasa ".
  • Tambahkan nomor versi minor saat menambahkan fitur baru, misalnya: " menambahkan dukungan untuk teks yang digarisbawahi ".
  • Tambahkan versi utama saat Anda merombak antarmuka pengguna secara signifikan, atau menulis ulang semua internal. Contoh: “ Toolbar menggunakan terlalu banyak layar. UI sekarang disediakan hanya melalui gerakan sentuh ”- perubahan seperti itu akan memutus alur kerja yang ada.

Namun, banyak masalah yang coba dipecahkan Semver tidak ada di luar area manajemen ketergantungan. Dalam aplikasi konsumen, versi ini tidak hanya versi, tetapi juga aset pemasaran.

  • Firefox dan Chrome merilis versi baru secara relatif sering, dan menambah nomor versi utama mereka di setiap rilis. Ini menghasilkan angka versi yang sangat tinggi (keduanya saat ini berusia 30-an). Peramban dengan nomor versi yang lebih tinggi harus lebih baik daripada peramban dengan nomor versi yang lebih rendah, bukan?

  • Nomor versi utama sistem operasi Apple OS X telah menjadi bagian dari namanya (X adalah 10 dalam angka Romawi), menjadikan nomor versi minor nomor versi utama yang efektif.

  • Sistem operasi Ubuntu menggunakan skema versi year.month.patchlevel. Ini membuatnya mudah untuk mengingat berapa umur OS Anda, tetapi membuatnya jauh lebih sulit untuk mengetahui versi mana yang kompatibel, dan berapa lama dukungan untuk setiap versi berlangsung.

  • Kernel Linux menabrak nomor versi dari 2.6.39 ke 3.0.0, karena 39semakin besar, dan untuk memperingati ulang tahun ke 20 Linux.

  • Sistem pengaturan huruf TeX Donald Knuth yang legendaris menggunakan nomor versi yang, pada versi 3, konvergen ke π dengan menambahkan digit lain pada setiap rilis: 3.14159265…. Ini menandakan bagaimana sistem semakin mendekati kesempurnaan. Demikian pula, sistem Metafont konvergen ke e : 2.7182818….

Jadi, banyak aplikasi yang tidak terlayani dengan baik oleh Semver. Pilih skema versi yang bagus untuk pengguna Anda (terlepas dari apakah pengguna ini sesama programmer atau konsumen), dan tetap konsisten.

amon
sumber
1
Banyak perangkat lunak yang diproduksi oleh alat pengembangan Microsoft memiliki format ABCD, di mana AB adalah nomor versi mayor / minor "umum", dan CD mengkodekan tanggal / waktu ketika perangkat lunak itu dibangun.
MZB
Saya suka semantik sistem versi π.
Ogier Schelvis