tags:

views:

159

answers:

5

I see this time and time again. The UAT test manager wants the new build to be ready to test by Friday. The one of the first questions asked, in the pre-testing meeting is, "what version will I be testing, against?" (which is a fair question to ask). The room goes silent, then someone will come back with, "All the assemblies have their own version, just right-click and look at the properties...".

From the testing managers point-of-view, this is no use. They want a version/label/tag across everything that tells them what they are working on. They want this information easily avaialble.

I have seen solutions where the version of diffierent areas of a system being stored in a datastore, then shown on the main application's about box. Problem is, this needs to be maintained.

What solutions have you seen that gets around this on going problem?

EDIT. The distributed system covers VB6, Classic ASP, VB.Net, C#, Web Services (accross departments, so which version are we using ?), SQL Server 2005.

+1  A: 

Might want to have a look at this page that explains some ways to integrate consistent versioning into your build process.

Eric Petroelje
nice article, thanks
Chris Simpson
A: 

Not using build based version numbering for anything but internal references. When the UAT manager asks the question you say "Friday's*".

The only trick then is to make sure labelling happens reliably in your source control.

* insert appropriate datestamp/label here

annakata
A: 

We use .NET and Subversion. All of our application assemblies share a version number, which is derived from a manually updated major and minor revision numbers and the Subversion revision number (<major>.<minor>.<revision>). We have a prebuild task that updates this version number in a shared AssemblyVersionInfo.vb file. Then when testers ask for the version number, we can either give them the full 3-part number or just the subversion revision. The libraries we consume aren't changing or the change is not relevant to the tester.

Doug Mulley
That makes sense and probably covers half of the components in our systems. Altough work on systems that have components on different technologies. I'll edit my question to mention this. Thanks.
Ferdeen
+1  A: 

There are a number of different things that contribute to the problem. Off of the top of my head, here's one:

One of the benefits of a distributed architecture is that we gain huge potential for re-use by creating services and publishing their interfaces in some form or another. What that then means is that releases of a client application are not necessarily closely synchronized with releases of the underlying services. So, a new version of a business application may be released that uses the same old reliable service it's been using for a year. How shall we then apply a single release tag in this case?

Nevertheless, it's a fair question, but one that requires a non-trivial answer to be meaningful.

Don Branson
"So, a new version of a business application may be released that uses the same old reliable service it's been using for a year" - based on my experience, business applications tend not to be so reliable, especially in development environments.
Ferdeen
@Ferds: Not quite sure I get your meaning. I don't think we're talking about dev environments here. It sounded like the situation is occurring in a UA environment. And I have seen this exact situation in more than one environment.
Don Branson
That was misleading. I meant different environments, especially unstable ones. Even in these different environments you (develops, business users and managers) need to know what the current "enterprise" version is.
Ferdeen
+2  A: 

I think the problem is that you and your testing manager are speaking of two different things. Assembly versions are great for assemblies, but your test manager is speaking of a higher-level version, a "system version", if you will. At least that's my read of your post.

What you have to do in such situations is map all of your different component assemblies into a system version. You say something along the lines of "Version 1.5 of the system is composed of Foo.Bar.dll v1.4.6 and Baz.Qux.dll v2.6.7 and (etc.)". Hell, in a distributed system, you may want different versions for each of your services, which may in and of themselves, be composed of different versions of .dlls. You might say, for example: "Version 1.5 of the system is composed of the Foo service v1.3, which is composed of Foo.dll v1.9.3 and Bar.dll v1.6.9, and the Bar service v1.9, which is composed of Baz.dll v1.8.2 and Qux.dll v1.5.2 and (etc.)".

Doing stuff like this is typically the job of the software architect and/or build manager in your organization.

There are a number of tools that you can use to handle this issue that have nothing to do with your language of choice. My personal favorite is currently Jira, which, in addition to bug tracking, has great product versioning and roadmapping support.

Randolpho