Releasing software every iteration sounds daunting, but it doesn't have to be. This
course is designed to help teams implement a solid process for designing, testing, documenting and releasing
software in an automated manner. We will review the use of open-source tools in the context of a real project.
We will also discuss some of the additional challenges geospatial developers face.
Although this class will focus on .NET technologies, the techniques and
core concepts apply to any development language and platform.
Source Control with Subversion
Source control systems are critical to any software development effort. We'll
review how to setup a free Subversion repository at Assembla.com, and how to work with it
via TortoiseSVN and the AnkhSNV plugin for Visual Studio.
Automated Code Documentation
Ever come back to some code you wrote and wonder what you were thinking? Did you
wish you had some documentation? In today's development environments, adding good comments
is very simple, and in some cases automated. Putting in structured comments also simplifies
the creation of API documentation. We'll review how to leverage Xml comments,
GhostDoc, and DocProject to produce professional quality HTML documentation from your source code.
Unit Testing
Going with the idea you need to walk before you can run, we'll start with an introduction to
the why, what and how of unit testing. We'll look at how you can leverage unit tests today as part
of a test-after development strategy. We will then look at MBUnit, a popular unit testing
framework for .NET, as well as the TestDriven.net Visual Studio add-in that streamlines testing. We will
also discuss the use of mock objects, and look at how we can use RhinoMocks to simplify things.
Design Patterns
Now that we have a handle on what unit testing is all about, we need to figure out how
to write code that's testable. Luckily we can lean on some really smart people like Martin Fowler
who have come up with re-usable code patterns that help us build testable software.
Refactoring Tools
Being agile means being open to that wild change of direction your client just asked for.
When that happens you'll really appreciate good refactoring tools, but we'll show you how they
can help keep your code lean and mean on a daily basis, and allow you to easily implement design
patterns. We'll be looking at the tools built into Visual Studio, as well as ReSharper
Automated Builds
It's one thing to know it builds on your box, but that's not what counts! We'll review
how to write a build script using MSBuild, the MSBuild Community Tasks, and how to setup a daily build
process.
Continuous Integration
Since having the software build automatically every day is good, building on every check-in must be great!
This is the core idea behind continuous integration - every time there is a check-in, the code is built, tests are
run, and the team is notified if anything breaks. We'll look at setting up a CruiseControl.net server, and how that
works for a real project.