Effective software development is all about leveraging the effort of others so that you can focus the majority of effort on the problem your system is to address. The following are the frameworks and tools that I choose to use (as is appropriate) when I get to decide what goes into a system.
I’m not going to try to enumerate all the features, advantages and disadvantages of my choices. I’m always looking for additional or improved options for my list so make any suggestions in the comments below.
Frameworks
NHibernate
Although I’ll acknowledge it has a near vertical learning curve in places nothing else I’ve seen comes close to the power and feature set of NHibernate. I’m currently working on a project with LINQ-to-SQL and I miss the additional features a lot (I do like LINQ though, but only for a certain query complexity).
http://nhforge.org/
StructureMap
Currently my DI framework of choice. I’m particularly fond of the Registry DSL and Auto Registration and Type Scanning, which is so much more effective than long and difficult to maintain XML files. These features aren’t unique to StructureMap but it provides a simple and effective solution that works well in the scenarios I’ve encountered.
http://structuremap.sourceforge.net/
Tools
Integrated Development Environment
Visual Studio 2008
Visual Studio is a relatively solid IDE (at least as of Visual Studio 2008, 2005 had some significant quality issues). By itself it’s fairly average; the code navigation options are limited and the refactoring support so weak it’d be preferable not to have it at all. Its redeeming virtue is that it supports extensions and is sufficiently popular that a great many exist. Plug in in a few extensions and what was an average environment becomes something highly productive.
I use Team Edition for Software Developers. Of the additional features this provides over time I’ve reduced my usage to Team Coverage only (and that used through an extension). Unless you have an unlimited budget, go for the Professional edition.
ReSharper 4.5
If you add no other extension to Visual Studio, add ReSharper. The additional options it gives to navigate your code are alone worth the price. On top of this it has effective refactoring, improvements to Intellisense, code analysis, improved templates, code cleanup, editing enhancements and more.
http://www.jetbrains.com/resharper/
TestDriven.Net
ReSharper provides a test runner which is superior to that in Visual Studio. TestDriven.Net is a Visual Studio extension superior to them both. It supports a wide variety of test frameworks and integrates with a number of coverage tools. I’m particularly impressed with how it integrates Team Coverage with non-Microsoft unit test frameworks.
http://www.testdriven.net/
Utilities
Beyond Compare
My comparison tool of choice. Powerful, easy to use and excellent value. Also has amusing price breaks where an additional licence seems to have a large negative cost (try changing from 99 to 100 licences). Works with every source control system I’ve used.
http://www.scootersoftware.com/
Static Code Analysis
FxCop
This is the standalone version of the static code analysis tool built into Visual Studio Team Edition for Software Developers and Team Suite. When working with Continuous Integration I find the standalone version to be easier to work with. It’s important to remember that as a static analysis tool it’s not always right and intelligence is required in interpreting its results. Despite this its a valuable tool for finding potential issues and ensuring the quality of your code.
http://msdn.microsoft.com/en-us/library/bb429476.aspx
NDepend
For analysing code structure and examining how code fits together I turn to NDepend.
http://www.ndepend.com/
Continuous Integration
TeamCity
It’s hard to go past TeamCity. It’s easy to install and configure and supports a wide variety of build agents. It supports a variety of build tools for multiple platforms as well as many source control systems. Plus it has a free professional edition that supports up to 20 build configurations. I’m particularly fond of the ability to have a dependent build that automatically runs FxCop over the output of my primary build.
http://www.jetbrains.com/teamcity/
Unit Testing
Gallio and MbUnit
I’ve used (and abused) a number of unit testing frameworks, including NUnit and MSTest. MbUnit is my current preference due to effective design and a powerful feature set. When combined with Gallio it provides an effective and easily automatable unit testing solution. It also includes integration with my preferred team runner and CI server (TestDriven.Net and TeamCity).
Source Control
My current source control preference can be best expressed as “Not Visual Source Safe”. I’ve used Team Foundation Server and Subversion on projects with a fair amount of success, although I consider neither ideal. I’m also considering Mercurial although tool support may be an issue. Really the important thing here is to have a solid source control system and to ensure your team uses it well.