Source control is a technique for managing projects by storing the iteratively modified versions of the project document files in such a way that any previous or current version of a file can be accessed. Source control tools like Subversion contain software for automatically performing more complex operations using these versioned files. In the case of Subversion these include merging files from multiple users, creating branches where a file is split along two different lines of development, or tagging read only editions of a specific version of the project.
Our group used subversion extensively throughout the development of iterations 1 and 2 of our scanner and found it extremely useful for several reasons. The most significant useful aspect of subversion for us would have to be its merge feature. Because we both worked on the same project files at the same time, this feature allowed us to quickly merge our changes to the same source file without having to spend a great deal of time manually copying changes between files. This streamlined the development process by allowing work simultaneously on different parts of the same files. The only downside to this is that there are often conflicts where the merge program is unable to determine the proper layout of the merged file, ie when both of us had edited the same line in as common source file. Whenever such a conflict occurred, we had to manually apply the changes to the original file.
Using Subversion also assisted us when debugging our iterations towards the end of development. When we noticed bugs which were not present in an older version of the source file, we could revert to the old version of the file and compare what changes might have enabled the bug to appear using Subversion's diff utility. This saved us a great deal of time trying to debug the problem in that we could isolate the code which caused it.
Despite these gains in performance we experienced from using Subversion, there were also some issues with its use that caused us time. The biggest of which was the Subversion add utility, which enables Subversion to use source control on a new file. Subversion does not notify at commit time if any new files have appeared in the project which may need to be added, so it is easy to forget files. Due to this, there were a few instances where we were unable to work because one partner's relevant files were not added to Subversion and this were inaccessable to the other person.
Overall, it is my opinion that source control, or Subversion in particular, can be a valuable asset in the development of larger software projects. It streamlines several aspects of the development process and provides access to versions of source files at any point in time. It has several built in utilities that can aid programmers in code analysis and debugging source code and provides a valuable tool for merging source code from multiple programmers.