Ringkasan
Bagi saya, satu-satunya cara yang dapat diandalkan untuk versi perangkat lunak adalah dengan menggunakan pengidentifikasi hash atau perubahan dari sistem kontrol versi Anda.
Nomor versi build keseluruhan dapat berguna, tetapi itu hanya benar-benar dijamin unik jika Anda memiliki server build dan / atau Anda menandatangani setiap rilis. Namun bagi banyak dari kita, ini tidak layak.
Jika proyek Anda terbagi atas beberapa repositori kontrol versi, Anda juga perlu membangun mekanisme di mana antarmuka pengguna Anda dapat meminta setiap repositori dependen dan melaporkannya kembali ke pengguna.
Contoh dari pengalaman pribadi
Dalam sebuah proyek di perusahaan sebelumnya, di mana kami memiliki masalah dengan perangkat lunak memodifikasi pelanggan (internal) kami dan mengkompilasi ulang, saya melembagakan sebuah proses di mana hash mercurial dikompilasi ke dalam setiap aplikasi dan perpustakaan. Setiap kali perangkat lunak dimulai, string revisi dibangun dengan menanyakan semua komponen perangkat lunak.
String revisi ini ditampilkan ketika Anda pergi ke halaman tentang dan ditulis ke file log setiap kali aplikasi dimulai. Itu dari bentuk:
Application name (6a72e7c61f54)
Library1 (b672a13a41e1)
Library2 (9cc35769b23a)
Library2 (9cc35769b23a)
Library3 (4e9f56a0186a+)
Library2 (9cc35769b23a)
Library4 (2e3b08c4ac76)
Library1 (b672a13a41e1)
Library2 (9cc35769b23a)
Dari sini saya dapat dengan mudah melihat bahwa mereka telah memodifikasi Library3 dan tidak melakukan perubahan itu ke repositori, sehingga mereka menggunakan kode yang tidak terkontrol. Saya juga dapat membandingkan hash dengan sistem pengujian saya saat ini, jadi saya mungkin dapat mengidentifikasi bahwa hash telah mengembalikan (katakanlah) Library1 ke versi yang lebih lama.
Ini berarti bahwa setiap kali mereka melaporkan bug, saya selalu dapat membangun kembali kode yang digunakan pada saat masalah terjadi, atau paling tidak tahu pasti bahwa saya tidak dapat mereproduksi pengaturan.
Untuk detail lebih lanjut dari sistem build yang saya gunakan, bagaimana saya menyelesaikan ini, masalah apa yang saya miliki, dan apa yang orang sarankan untuk menghindarinya, lihat pertanyaan Stack Overflow saya .
Catatan: Sistem ini hanya benar-benar layak jika Anda menggunakan sistem kontrol revisi di mana hash yang diberikan dijamin menghasilkan set file yang sama di direktori kerja Anda (misalnya git dan lincah) jika direktori kerja yang diberikan dapat berisi campuran file dan direktori dari beberapa revisi (mis. svn) maka semua taruhan dimatikan mengenai keadaan direktori kerja dan metode ini tidak akan berfungsi sama sekali.