Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

This question already has an answer here:

I would be interested to get the SO community's opinions on the best application versioning strategy.

My questions:

  1. How do you keep track of your application's version number? Do you have a formal definition of what each number/character in that version represents?

  2. What do the different numbers/strings in the application's version mean for your app?

  3. Do you use any automated updating system in your apps (e.g. something like Sparkle) and how good has it been behaving for you?

  4. Do you have a separate update procedure for beta-testers or pre-release testers of your app?

share|improve this question

migrated from stackoverflow.com May 18 '11 at 13:48

This question came from our site for professional and enthusiast programmers.

marked as duplicate by gnat, MichaelT, Kilian Foth, GlenH7, Rein Henrichs Apr 29 '13 at 2:42

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

add comment

5 Answers

up vote 7 down vote accepted
  • How do you keep track of your application's version number? Do you have a formal definition of what each number/character in that version represents?

  • What do the different numbers/strings in the application's version mean for your app?

I use following:

AppName_<Major>.<Minor>.<Patch/Upgrade>.<BuildNo>

Major - Major version is a definite release of the product. It increased when there are significant changes in functionality.

Minor - Minor version is incremented when only new features or major bug fixes have been added.

Upgrade/Patch - Upgrade refers to the replacement of a product with a newer version of product.It is incremented only when upgrade is provided on designated major release.Patch version starts with 0 and incremented only when bug has been resolved.

Build No - Build Number is incremented when new build is created.

  • Do you use any automated updating system in your apps (e.g. something like Sparkle) and how good has it been behaving for you?

We use building tool which automatically builds app at night which we call nightly build and this increases build number every time a build is created.

  • Do you have a separate update procedure for beta-testers or pre-release testers of your app?

No. Tester tests over nightly build at every morning which we call BAT(Build Acceptance Test) and verify nightly build.

share|improve this answer
    
Thanks Harry. How easy is it to keep track of that build number? How user friendly is it (e.g. when receiving feedback about a certain version)? –  Andrei May 18 '11 at 13:29
    
@Andrei: Build number is auto generated every time a new build is created using build tool. It is not that much confusing to read app name with version [AppName_1.0.0.159] so no problem with user friendliness in reading app name. –  Harry Joy May 18 '11 at 13:32
add comment

Let me note first there seem to be no agreement on the "best" strategy. I can only share my experience on a current project.

  1. The system version is defined manually in a build property. It happens when the team agrees on a new release. As additional versioning we use the build number which is automatically generated by the CI build

  2. We loosely follow the Ubuntu naming scheme YY.MM.version.patch_buildNumber as we have found that Major.Minor versioning messes up customer expectations ;)

  3. There are no automatic updates as the application has to be rolled out by adminstrators

  4. The test releases are more frequent than GA releases, but that should be all.

share|improve this answer
    
Thanks kostja. Can you expand a bit on messing up customer expectations? –  Andrei May 18 '11 at 13:32
3  
@Andrei In our experience, a change in the major version leads some customers to assume groundbreaking changes in almost every aspect of the application. Furthermore, it forces the developers to think in terms of major releases, unnecessarily holding back a release "are we really ready to roll 2.0?". With the ubuntu versioning it goes more like "does it roll? we ship!" –  kostja May 18 '11 at 13:37
    
I use something similar to Ubuntu's with a slight variation: YYMM.major.minor.build –  Don May 18 '11 at 17:19
add comment

I tested many version systems and now I'm pretty happy with this one:

[major].[minor].[revision]

  • Major is set manually and refer to a version including major improvements
  • Minor is also set manually and refer to an upgrade/maintenance release, including minor improvements & fixes
  • Revision is generated automatically and refer to an exact revision in the repository.

The last one allows us to be very flexible with versionning. We can ship multiple versions for multiple clients and still be able to debug & fix with ease by getting the specific version from the repos, then merge back with the trunk.

The build, packaging & publishing is fully automated. The only manual action is when we move the last package to the production server by FTP. We want to keep the control on that to ensure we don't deliver crap in production. It goes to a preliminary stage where early adopters can read the release notes and then decide to download and use the version. Customers that face specific bugs can get a fixed version very fast by using one of these versions.

share|improve this answer
4  
+1 I've been using this method also, inspired by Apache guidelines: commons.apache.org/releases/versioning.html –  JuanZe May 18 '11 at 14:45
add comment

I use Semantic Versioning for my open source libraries and find it much easier to work with other libraries which do as well. It provides a common basis for understanding what a version change might mean. Is the library still in beta? Is a release just for bug fixes? Will there be breaking API changes?

It's basically a codification of the best versioning practices already used by most open source projects.

share|improve this answer
add comment

I think the key is to make sure a release has some unique number, so that you can easily identify it. How that number is broken down doesn't really matter. The version we use that I care about is major.minor.customerID.buildnumber. The buildnumber is autogenerated from our build script.

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.