Posts Tagged ‘version control’

Software Configuration Management and Version Control Are Not the Same… Trust Me!

November 18th, 2011 by clucca

Did you know that CM systems back in the day were basically people? This is where the term “check-in” & “check-out” comes from- it refers to the days when there where actual software librarians would record peoples changes and check them in and out like books on disk or punch cards. It’s mind boggling to think of software this way.

If I was to ask software developers today what “software configuration management” was, they would probably say “SCM? Like Subversion?” Incorrect! You need to trust me on this one, SCM is not the same as a version control system. Yes, your version control system is an SCM tool (confusing?) but SCM is a broader discipline and technique that encompasses the management of change in software.

The introduction to the IEEE “Standard for Software Configuration begins with:

SCM constitutes good engineering practice for all software projects, whether phased development, rapid prototyping, or ongoing maintenance. It enhances the reliability and quality of software by:

  • Providing a structure for identifying and controlling documentation, code, interfaces, and databases to support all life cycle phases
  • Supporting a chosen development/maintenance methodology that fits the requirements, standards, policies, organization, and management philosophy
  • Producing management and product information concerning the status of baselines, change control, tests, releases, audits, etc.

Let’s be clear- all of the things on this list do not fit under the heading of your version control system. Many of them will require practices and policies to maximize your development efforts and methodologies. With version control, release engineers will still have to perform some of these SCM related functions:

  • Merge early and often
  • Enforce a workflow for development teams to follow
  • Record and have full visibility into all of the changes that were made
  • Write build and compiler scripts
  • Automate builds, deploys and tests
  • Understand the dependencies between projects and code
  • Maintain the development environment for a team
  • Be responsible for the final product going out the door

That’s just the tip of the iceberg. A talented release engineer or SCM expert can do all of those things independently, but his or her job would be a lot easier with SCM tools that can automate and facilitate the necessary practices and processes. (This includes version control, compilers, debuggers, editors, continuous integration machines, automated deploy, and the ITS system.)

At it’s core, SCM answers the question “Somebody did something, how can one reproduce it?” In addition it’s about understanding and establishing relationships among items that are likely to change. It’s a tricky job, not one that’s easily understood. We have to understand the relationships between versioned artifacts, like code, hardware, documents, design models and even directory structures. In addition we have to do all of the necessary things to make those versions valuable to our organization. We have to design process, workflow, automation, build automation, reports and security.

With all of this, don’t tell me that SCM is the same as version control. Trust me on this one!

Version Control Software Can Help Ensure Success and Sanity

October 19th, 2011 by clucca

Back in the day when software development was more linear and proceeded at a more predictable pace with longer project timelines, version control wasn’t much of an issue. In most cases it wasn’t too hard to keep track of code changes, feature developments, and configuration files. If a developer – or even a team – created several different versions, multiple copies could be kept and, with some careful labeling and archiving, any version could be recreated or referred to later on.

But all that changed with the coming of Agile processes and the evolution of the multiple development teams approach, with different developers and teams branching off the main development trunk line to pursue new features or versions and then merging them back into the main line. If keeping multiple file copies could be prone to error in the old linear approach, you can imagine the danger looming with multiple teams working simultaneously. Suddenly, version control software seemed like a really, really good idea.

Now, of course, there are any number of version control software tools, ranging from very basic products such as open source CVS and Subversion, to some really sophisticated and comprehensive products that provide a variety of helpful software configuration management benefits. Regardless of the sophistication of the particular version control software being used, they all provide one critical benefit — the ability for multiple teams in multiple locations to work off the same source code base with minimal confusion and errors.

If you’re trying to sort out the features-and-benefits of version control software, here’s a short checklist of questions that can help you narrow down your choices:

  • Simplicity: Is your software development process modest enough for simple, text-based functionality or are you using a more complex, multiple team approach that would benefit from a graphic, browser-type tool?
  • Efficiency: Do you spend a lot of time analyzing and resolving merge conditions? If so, consider version control software with a visual tool that can help facilitate frequent integrating and merging codeline changes.
  • Collaboration: Do your developers work on code changes individually, with the need to occasionally share code with other developers or team members? Then consider version control software that includes the ability to both keep files in private workspaces and share them openly with other team members.
  • Version Control: Are your products subject to frequent, often substantial revisions that could be prone to errors without the ability to reproduce full version histories of all files and configurations?  Then look for version control software that provides time-stamped atomic transactions and an append-only database that prevents information from being lost and makes it easy to roll back code changes to a previous state.

Choosing the right version control software can make a major difference in your software development management, enabling you to get more robust, less error-prone products to market quicker and more efficiently.

Distributed Version Control: Balancing Flexibility and Scalability

October 6th, 2011 by clucca

You’re starting to hear more and more about distributed version control as some developers implement a new, decentralized version of distributed version control that enables developers to host a complete copy of the repository on their own computers without the need to be connected via a common network.

While this may be OK for smaller projects, there are some inherent risks for enterprise-wide large development projects. In fact, many large companies are loathe to allow their “crown jewels” – their source code – to be copied wholesale across a variety of developers’ machines. Enterprises tend to be genetically predisposed to keeping their files in one centralized location that they know is secure and backed-up.

For projects requiring enterprise scalability, there’s another way to handle distributed version control that’s more efficient, secure, and cost-effective. Developers working locally can simply work from a central server using the company LAN and remote developers can access the repository server through a WAN. If for some reason there’s a geographically-based performance issue, additional servers that replicate the central server can be installed at remote locations.

What’s great about this server-based model of distributed version control is that it nicely balances flexibility and scalability across the enterprise without sacrificing security and file integrity. Here at AccuRev, we’ve got a product called AccuReplica that handles replication and continuous integration for scaling our SCM system so that development teams using the server model can more easily collaborate on parallel development projects no matter where they’re located. In fact, replica servers can be added to handle, say, local and remote departments as well as build clients for easy, appropriate scalability based on your specific needs.

Some of the benefits of using a replicated server distributed version control system:

  • Scalability is immediate and easy – set-up involves installing a server and replicating primary server repository with a single command
  • Improves collaboration and communication between distributed development teams
  • Makes branching and merging easier because all teams, regardless of location, use the same process – no per-site branches
  • Administration remains centralized on the primary server – no need for costly resource duplication at each location

So with all the talk about distributed version control, if you’re a big enterprise project developer it’s good to know there’s a DVC server model that utilizes easy-to-setup replicate servers to provide scalable distributed version control across the enterprise without sacrificing flexibility or security.

If you’d like to learn more about the features and benefits of AccuReplica, download the free data sheet.