Revision Control System
I took a Software Engineering course in 2005 that was designed to help us realize better what real programming projects are like. We learned about the various stages of software design and development and also about many of the "design patterns," "refactorings" and such used in industry---probably so we can better talk the lingo, at least!
My favorite part of the course, though, was designing and implementing a large project in a small group. This was a program that was to be a bit more robust than previous class projects. It was supposed to be more like a real product than something to pass off with a TA.
We were asked to work in groups of two or three and design and implement a version control system similar to CVS. It was to allow multiple users to check out, update, and check in files from different computers--and all at the same time. Each version of a file in the repository was to to be backed up and saved in a central location. We also had support for
One of the challenging parts of the program was allowing multiple users to use our programs on different computers all at once. We had to be able to keep all of the different versions synced up and consistent. Each user was also able to lock files and only that user could edit them before the lock was released.
I was especially satisfied with the fact that my group and I designed and wrote our program so that it would be platform independent. Multiple clients from Windows, Macintosh, and Linux computers were able to use the system simultaneously without any issues in our tests.
We were also required to give our program to another group and have them try and break it. They did what they could to find any bugs and gave us feedback through a bug tracking program. We of course did the same with another groups program. It was interesting to be able to get feedback on a program like that, it is something that we have not been able to do in any other course.
Overall, I had a good experience in this class and enjoyed the larger, more complete project that we got to implement.