This is a showcase review for our sponsors at The Code Project. These reviews are intended to provide you with information on products and services that we consider useful and of value to developers.
PureCM is a multi-platform software configuration/version control tool with integrated defect tracking. Rather than force you into using a specific development process, PureCM has been designed to be flexible enough to complement the process you want to use. You can download PureCM and use it with 2 users for free. When installing the server you have the option of installing some example data, which will help you evaluate the product quickly.
Streams and Patterns
The one thing that used to infuriate us in the early days of SCM Tools (SourceSafe, RCS etc.) was the fact that their way of working didn't correspond to how we (or most other people) work. An important concept that PureCM introduces is the 'Stream'. This represents a particular 'line of development' e.g. all the changes that make up version1.1 of your product. This allows for greater flexibility in how you organise your source code and development teams.
The best reference to how this may apply to you is Steve Berczuk and Brad Appleton's excellent SCM Patterns book and the Streamed Lines web site. It's well worth your your time either purchasing the book or reading the latter site before making your SCM Purchase. PureCM is designed to complement and not dictate the way you work.
Our own use of PureCM has evolved during its development. We normally have two or three active development streams for the current and upcoming quarterly releases. The streams have defined parent<->child relationships (for example, our 2007/2 development stream is a 'child of' our 2007/1 development stream) which enables us to have our easy to use but powerful merge functionality.
When it comes time to make a release of the product, we take a snapshot of the development stream by creating a release stream. This is then a frozen copy of the source code for that release. Since the parent<->child relationships are again maintained it's then simple to make bugfixes to that release using Merge.
We also make extensive use of Issues (think Change and Defect tracking etc.) and require developers to perform all code submissions against the Issue detailing the reason for the submission which helps with traceability. Another key feature that we required was to be able to review and approve/reject changes to certain codelines/streams. This allows us to make code reviews part of our daily process and so improve quality.
Suppose you have released 'Version 1' of a product and are busy developing 'Version 2'. A customer reports a critical bug in 'Version 1' which needs fixing immediately.
A developer fixes the problem in the 'Development/Version1' stream and creates the new 'Release/Version1.2' stream which is released to customers. Another developer can then merge (or apply) the bug fix into the 'Development/Version2' stream at the click of a button.
If the files which needed to be changed have not been modified in 'Version 2' then a user can simply select the submitted changeset and 'Quick Merge' to the 'Version 2' stream.
If the files have been changed in 'Version 2' then the developer will need to merge the changeset into a workspace and resolve any conflicts using the Resolve Tool.
PureCM has a flexible reporting system, where users can write customized reports using XSLT. Default reports are also provided for common queries.
One of PureCM's most often used reports is the 'Release Notes' report. This report will list all changesets which were submitted in one stream but not the other. So if a change was submitted in 'Version 2' and merged to 'Version 1' the change would not appear.
Also, when viewing a changeset in the Changeset Dialog you can see which streams the change has been merged into and which stream the change was merged from.
The Issue tracking functionality in PureCM is similar to the bug tracking in other products. A key difference is that in PureCM, it is fully integrated and you are able to fully customise the fields that can be entered and the actions/states/workflow.
You can create different Issue types (for example, 'defects' and 'change requests') and have fully role based security applied to the workflow (which groups of users can perform which actions and/or change which fields). In order to maintain traceability back to your original requirements or change package, you can also mandate that users submit with an associated Issue.
Hopefully you'll be interested enough to try PureCM yourself. You can download an evaluation copy and try out the features yourself. We're always interested in getting user feedback and suggestions for improving the product.