views:

376

answers:

6

I am currently in bureaucratic hell at my company and need to define what constitutes the different levels of software change to our test programs. We have a rough practice that we follow internally, but I am looking for a standard (if it exists) to reference in our Quality system. I recognize that systems may vary greatly between developers, but ultimately I am looking for a "best practice" guide to what constitutes a major change, a minor change etc. I would like to reference a published doc in my submission to our quality system for ISO purposes if possible.

To clarify the software developed at my company is used internally for test automation of Semi-Conductors. We are not selling this code and versioning is really for record keeping only. We are using the x.y.z changes to effect the level of sign-off and approval needed for release.

+9  A: 

A good practice is to use 3 level revision numbers:

x.y.z

x is the major y is the minor z are bug fixes

The important thing is that two different software versions with the same x should have binary compatibility. A software version with a y greater than another, but the same x may add features, but not remove any. This ensures portability within the same major number. And finally z should not change any functional behavior except for bug fixes.


Edit:

Here are some links to used revision-number schemes:

lewap
We currently run a 3 level revision numbering system, and have adjusted the numbering as follows; x = new architecture or hardware, y = added feature, and z is a bug fix or incremental improvementcoming from a physics background i was wondering if there is a text or standard i can reference thanks
+1  A: 

to enlarge on what @lewap said, use

x.y.z

where z level changes are almost entirely bug fixes that don't change interfaces or involve external systems

where y level changes add functionality and may change the UI/API interface in addition to fixing more serious bugs that may involve external systems

where x level changes involve anything from a complete rewrite/redesign to just changing the database structures to changing databases (i.e. from Oracle to SQLServer) - in other words anything that isn't a drop in change that requires a "port" or "conversion" process

kloucks
+2  A: 

I would add build number to the x.y.z format:

x.y.z.build

x = major feature change
y = minor feature change
z = bug fixes only
build = incremented every time the code is compiled

Including the build number is crucial for internal purposes where people are trying to figure out whether or not a particular change is in the binaries that they have.

17 of 26
A: 

I think it might differ if you are working on an internal software vs a external software (a product).

For internal software it will almost never be a problem to use a formally defined scheme. However for a product the version or release number is in most cases a commercial decision that does not reflect any technical or functional criteria.

In our company the x.y in an x.y.z numbering scheme is determined by the marketing boys and girls. The z and the internal build number are determined by the R&D department and track back into our revision control system and are related to the sprint in which it was produced (sprint is the Scrum term for an iteration).

In addition formally defining some level of compatability between versions and releases could cause you to very rapidly move up or to hardly move at all. This might not reflect added functionality.

Jeroen Huinink
A: 

I think that best approach for you to take hen explaining this to your co-workers is by examples drawn from well known and succesful software packages, and the way they approach major and minor releases.

The first thing I would say is that the major.minor dot notation for releases is a relatively recent invention. For example, most releases of UNIX actually had names (which sometimes included a meaningless number) rather than version numbers.

But assuming you want to use major.minor, numbering, then the major number indicates a version that is basically incompatible with much that went before. Consider the change from Windows 2,0 to 3.0 - most 2,0 applications simply didn't fit in with the new overlapped windows in Windows 3,0. For less all-encompassing apps, a radical change in file formats (for example) could be a reason for a major version change - WP &n graphic apps often work this way.

The other reason for a major version number change is that the user notices a difference. Once again this was true for the change from Windows 2.0 to 3.0 and was responsible forv the latters success. If your app looks very different, that;s a major change.

A for the minor version number, this is typically used to indicate a chanhe that actually is quite major, but that won't be noticeable to the user. For example, the differences internally between Win 3.0 and Win 3.1 were actually quite major, but the interface stayed the same.

Regarding the third version number, well few people know hat it really means and fewer care. For example, in my everyday work I use the GNU C++ compiler version 3.4.5 - how does this differ from 3.4.4 - I haven't a clue!

anon
A: 

As I said before in an answer to a similar question: The terminology used is not very precise. There is an article describing the five relevant dimensions. Data management tools for software development don't tend to support more than three of them consistently at the same time. If you want to support all five you have to describe a development proces:

  • Version (semantics: modification)
  • View (semantics: equivalence, derivation)
  • Hierarchy (semantics: consists of)
  • Status (semantics: approval, accessibility)
  • Variant (semantics: product variations)

Peter van den Hamer and Kees Lepoeter (1996) Managing Design Data: The Five Dimensions of CAD Frameworks, Configuration Management, and Product Data Management, Proceedings of the IEEE, Vol. 84, No. 1, January 1996

Stephan Eggermont