私はソフトウェアをオンラインで配布していますが、バージョン番号をより適切に定義する適切な方法があるかどうか常に疑問に思っています。
答えにABCDがあるとしましょう。各コンポーネントをいつ増やしますか?
D mod 2 == 1 など、他のバージョン番号のトリックを使用していますか?これは、社内リリースのみであることを意味しますか?
独自のバージョン番号を持つベータ リリースはありますか、それともバージョン番号ごとのベータ リリースはありますか?
私はソフトウェアをオンラインで配布していますが、バージョン番号をより適切に定義する適切な方法があるかどうか常に疑問に思っています。
答えにABCDがあるとしましょう。各コンポーネントをいつ増やしますか?
D mod 2 == 1 など、他のバージョン番号のトリックを使用していますか?これは、社内リリースのみであることを意味しますか?
独自のバージョン番号を持つベータ リリースはありますか、それともバージョン番号ごとのベータ リリースはありますか?
一部のアプリ (Perforce など) で使用される Year.Release[.Build] 規則が気に入り始めています。基本的には、リリースした年と、その年内のシーケンスを示しているだけです。したがって、2008.1 が最初のバージョンになり、1 ~ 3 か月後に別のバージョンをリリースすると、2008.2 になります。
このスキームの利点は、メジャー バージョンのインクリメントを保証するのに十分なほどメジャーな機能であるかどうかについての議論に入る、リリースの暗黙の「規模」がないことです。
オプションのエクストラは、ビルド番号にタグを付けることですが、それは内部目的のみである傾向があります (たとえば、EXE/DLL に追加されるため、ファイルを調べて正しいビルドがそこにあることを確認できます)。
私の意見では、ほとんどすべてのリリース番号スキームを多かれ少なかれ正常に機能させることができます。私が取り組んでいるシステムは、11.50.UC3などのバージョン番号を使用しています。Uは32ビットUnixを示し、C3はマイナーリビジョン(フィックスパック)番号です。他の文字は、他のプラットフォームタイプに使用されます。(このスキームはお勧めしませんが、機能します。)
これまでに述べられていないが、人々が議論したことに暗黙のうちにあるいくつかの黄金のルールがあります。
現在、実際には、新しいバージョンが利用可能である間、人々は古いバージョンの修正をリリースする必要があります。たとえば、GCCを参照してください。
したがって、バージョン番号付けスキームを慎重に構築する必要があります。
私がしっかりと信じているもう1つのポイント:
SVNを使用すると、SVNのバージョン番号を使用できますが、予想外に変更されるため、おそらく使用されません。
私が扱っているものについては、バージョン番号は純粋に政治的な決定です。
ちなみに、バージョン1.00から9.53までのリリースを経たソフトウェアを知っていますが、その後2.80に変更されました。それは重大な間違いでした-マーケティングによって決定されました。確かに、ソフトウェアのバージョン4.xは廃止された/廃止されたため、すぐに混乱することはありませんでしたが、ソフトウェアのバージョン5.xはまだ使用および販売されており、リビジョンはすでに3.50に達しています。避けられない競合が発生したときに、5.x(古いスタイル)と5.x(新しいスタイル)の両方で動作する必要があるコードがどうなるかについて、私は非常に心配しています。古い5.xが本当に死ぬまで、5.xに変更することで、彼らが愚痴をこぼしてくれることを期待しなければならないと思いますが、私は楽観的ではありません。また、3.60などの人工的なバージョン番号を使用して3.50コードを表し、次のことを行う必要がif VERSION > 900
なく、適切なテストを実行できるようにします。if (VERSION >= 900 || (VERSION >= 280 && VERSION < 400)
、バージョン9.00 x 900を表します。次に、バージョン3.00.xC3で導入された重要な変更があります。私のスキームでは、マイナーリリースレベルでの変更を検出できません... grumble ... grumble ...
注意:Eric Raymondは、リリースの命名(番号付け)に関する(リンクされた)セクションを含むソフトウェアリリースプラクティスHOWTOを提供しています。
私は通常、D をビルド カウンターとして使用します (コンパイラによる自動インクリメント)。ビルドが「パブリック」にリリースされるたびに C をインクリメントします (すべてのビルドがリリースされるわけではありません) A と B はメジャー/マイナー バージョン番号として使用され、手動で変更されます。
この質問に答えるには 2 つの方法があると思いますが、それらは完全に補完的なものではありません。
肝心なのは、あなたとあなたの顧客にとって機能するモデルを見つけることだと思います. 偶数バージョンがパブリック リリースで、奇数バージョンがベータまたは開発リリースと見なされるケースをいくつか見てきました。C と D を一緒に無視する製品を見たことがあります。
次に、Microsoft の例があります。.Net Framework のバージョン番号に対する唯一の合理的な説明は、マーケティングが関与したということです。
私たちのポリシー:
私がこれまでにバージョン番号を使用したのは、顧客がバージョン 2.5.1.0 などを使用していることを知らせるためだけでした。
私の唯一のルールは、その番号を報告する際の間違いを最小限に抑えるように設計されて います。4 つの番号はすべて 1 桁のみにする必要があります。
1.1.2.3
大丈夫ですが、
1.0.1.23
ではありません。顧客は、両方の番号を (少なくとも口頭で) 「1-1-2-3」と報告する可能性があります。
ビルド番号を自動インクリメントすると、多くの場合、次のようなバージョン番号になります
1.0.1.12537
これもあまり役に立ちません。
優れた非技術的なスキームでは、ビルド日付を次の形式で使用します。
YYYY.MM.DD.ビルド番号
BuildNumber は、連続する番号 (変更リスト) であるか、毎日 1 から始まります。
例: 2008.03.24.1 または 2008.03.24.14503
これは主に内部リリース用です。公開リリースでは、月に 1 回以上リリースしない場合、2008.03 として印刷されたバージョンが表示されます。メンテナンス リリースには、2008.03a、2008.03b などのフラグが付けられます。「c」を超えることはめったにありませんが、それが良い指標である場合は、より良い QA および/またはテスト手順が必要です。
ユーザーによく見られるバージョン フィールドは、使いやすい「2008 年 3 月」形式で出力し、[バージョン情報] ダイアログまたはログ ファイルでより多くの技術情報を予約する必要があります。
最大の欠点: 同じコードを別の日にコンパイルすると、バージョン番号が変わる可能性があります。ただし、バージョン管理の変更リストを最後の番号として使用し、それと照合して日付も変更する必要があるかどうかを判断することで、これを回避できます。
人々は、これを必要以上に難しくしようとする傾向があります。製品に存続期間の長いブランチが 1 つしかない場合は、ビルド番号で連続するバージョンに名前を付けます。「マイナーなバグ修正は無料ですが、メジャーな新しいバージョンには料金を支払う必要があります」というような場合は、1.0、1.1 ... 1.n、2.0、2.1... などを使用してください。
例の A、B、C、および D が何であるかをすぐに理解できない場合は、明らかにそれらは必要ありません。
ライブラリの場合、バージョン番号は2 つのリリース間の互換性のレベル、つまりアップグレードの難易度を示します。
バグ修正リリースでは、バイナリ、ソース、およびシリアライゼーションの互換性を維持する必要があります。
マイナー リリースはプロジェクトごとに意味が異なりますが、通常はソースの互換性を維持する必要はありません。
メジャー バージョン番号は、3 つの形式すべてを壊す可能性があります。
根拠についてはこちらに詳しく書いています。
年月日が好きです。したがって、v2009.6.8 がこの投稿の「バージョン」になります。(合理的に)複製することは不可能であり、何かが新しいリリースであることは非常に明確です。小数を削除して v20090608 にすることもできます。
2.5.1などのVRMを使用しています
V (バージョン) の変更は大幅な書き直しです
。R (リビジョン) の変更は重要な新機能またはバグ修正です
。M (モディフィケーション) の変更はマイナーなバグ修正 (タイプミスなど) です。
最後に SVN コミット番号を使用することもあります。
結局のところ、それはすべて本当に主観的なものであり、単にあなた自身/あなたのチーム次第です.
すでにすべての回答を見てください-すべて非常に異なります。
個人的に私が使用するMajor.Minor.*.*
のは、Visual Studio がリビジョン/ビルド番号を自動的に入力する場所です。これは私の職場でも使われています。
自社開発の場合、以下のフォーマットを使用します。
[Program #] . [Year] . [Month] . [Release # of this app within the month]
たとえば、今日アプリケーション # 15 をリリースし、それが今月 3 回目の更新である場合、私のバージョン # は
15.2008.9.3
これはまったく標準的ではありませんが、私たちにとっては便利です。
過去 6 つのメジャー バージョンでは、M.0.mb を使用しました。M はメジャー バージョン、m はマイナー バージョン、b はビルド番号です。そのため、リリースされたバージョンには、6.0.2、7.0.1、...、最大 11.0.0 が含まれていました。2 番目の数値が常に 0 である理由を尋ねないでください。何度も質問したのですが、本当のところは誰にもわかりません。1996 年に 5.5 がリリースされて以来、ゼロ以外はありません。