views:

116

answers:

7

I work on a team with three other developers and one business analyst writing internal business applications. We're primarily building apps in ASP.Net, and do so in a very 2003-ish way. It's like going back in a time machine. Although two of the other developers are amenable to learning new things, one of the developers is not. He's the type who thinks he's the strongest developer in town, and that if he doesn't understand a new tool within 5 minutes then he just needs to build his own. He also doesn't recognize agile development, TDD, or basically any non-Microsoft-blessed tool or method. He even considers source control from anything other than SourceSafe to be dangerous. To his credit, he's a brilliant programmer, just not someone interested in software development.

So the only way I can get consensus is if a tool is really easy to use. Once we hit a single snag, he'll lose faith in a "I told you so" sort of way.

So what set of tools should I use to get us into a modern source control system, TDD, and CI? The obvious choice in my situation seems like it would be Microsoft's TFS, but I doubt I could get our thrifty and apathetic management team to spend the extra money (they already think MSDN Pro is too much).

Basically, what is the easiest set of tools to get going with Source Control, TDD, and CI for a .Net 2008/2010 environment?

A: 

In .NET environments, Microsoft Visual SourceSafe is most frequently used. (but it costs). Next to that you can opt for SVN or GIT. Git is more recent (and gaining popularity). It's easier to work with than SVN once you get it.

http://git.wiki.kernel.org/index.php/GitSvnComparison might help with your decision.

Tom
Visual SourceSafe is a dinosaur. I would say everyone in a corporate setting uses TFS now.
Slavo
SourceSafe has worked fine in our business for about 5 years up until a few months ago. We've started to have weird problems, and I'm thinking it's time to use that as an opportunity to move on.
NeedAgileNow
SourceSafe costs by being very unsafe. Do not use. http://www.codinghorror.com/blog/2006/08/source-control-anything-but-sourcesafe.html
Cameron MacFarland
@Slavo I'd put a substantial amount of money on it that VSS still has a much higher adoption rate than TFS. TFS is pretty awesome and there's still so little I've taken advantage of with it however it's not free. Microsoft did change the licensing for TFS for 2010 that it will be more effective of a scheme and no additional cost for 5 users if you have a copy of VS Team System with MSDN Premium.
Chris Marisic
+3  A: 

It's always going to be difficult to introduce new tools if you can't build a consensus. Focus on building the consensus, rather than on the tools.

SVN is very good (with Ankh and TSVN), but it can be a bit surprising to people used to SourceSafe.

TDD is a technique, rather than a toolset, so you need books, blogs, etc. For tools to support it, NUnit or MSTest. Continuous Integration is a must-have. CruiseControl.Net is pretty good (though a bit difficult to configure initially). Consider also TeamCity.

Do you have a bug-tracking system?

Oh, and if your management team is that apathetic, consider quitting.

Update: you've said that they're not so much "apathetic" as "hands-off". Question: are they really hands-off, and will they let you move things along? Or are they "status quo" -- "it ain't broke, so don't fix it, and don't rock the boat"?

Roger Lipscombe
Good points. I think I need to get my boss on board first.You recommend SVN over Git and Mercurial?I'm impressed with TeamCity, though it was a bit of a pain setting up the DB conn for SQL Server, though.We do have an internal ticket system for tracking bugs.To be fair to management, they are actually very nice guys and great to work for in most respects (very flexible with working from home, for example). They're just very tight with money. Apathetic was probably a poor choice of words. I should have said that they were apathetic toward development methodology.
NeedAgileNow
My problem with Git and Mercurial is the lack of a mature equivalent to TSVN. In my experience (and I drove a VSS to SVN migration a few years back), most MS-stack folk prefer a GUI, and you can't get much better (as far as they're concerned) than Visual Studio or Windows Explorer integration.
Roger Lipscombe
...and people used to SourceSafe are going to freak when they look at Git or Mercurial...
Roger Lipscombe
Yeah, for personal use I spent quite a few hours trying to figure out Git. The "distributed" nature was really hard to wrap my brain around at first. Trying to convince everyone might be difficult. This guy has become upset in the past over the idea of a non-locking checkout system.
NeedAgileNow
+6  A: 

There are many good choices, but I can personally recommend these:

These are easy to get started with because they're all good products, reasonably to very well-documented, and widely-used (so it's easy to get help).

Jeff Sternal
TDD Tools: TestDriven.Net is a must-have in my opinion!
Eric
You guys prefer SVN over Git or Mercurial? NUnit over xUnit? CruiseControl.Net over TeamCity or Hudson? NMock over Moq? NCover over PartCover?
NeedAgileNow
SVN has a better integration story than Git or Mercurial right now. PartCover is free, but NCover's better. Can't comment on xUnit or Hudson. I prefer TeamCity to CC.NET, but TeamCity costs money once you outgrow the free edition.
Roger Lipscombe
@NeedAgileNow - I don't prefer these to the others you've listed, I was only listing the ones I've actually used. I definitely plan to try several of the alternatives you mentioned, particularly Moq / Rhino Mocks and Git (though I'm quite happy with SVN). I just haven't gotten around to it yet.
Jeff Sternal
Subversion and TortoiseSVN with Ankh! That's what I've been using for years and love them.
Theresa
+6  A: 

I wouldn't recommend dumping all these tools and methodologies on your team at once, take baby steps. Introduce one at a time. Some will come naturally.

mxmissile
+1 for baby steps. One thing at a time. Don't piss people off.
Roger Lipscombe
Agree with this, especially if there is one loud guy on the team. Introducing too much too fast will definitely upset him and probably stop the whole process.
Nick
Developers not used to working without any source control often find the adjustment to be difficult. Trying to get a team to adapt to a whole new suite of tools can present a learning curve so steep, it will appear to be a wall to your team. I agree that introducing one tool successfully could potentially lead to the acceptance of more tools down the road.
smencer
+1  A: 

I think you can make a really really good case that within the last two years Agile has become completely and totally embraced by Microsoft. I know for a fact that the Codeplex, MEF, and ASP.NET MVC teams are quite steeped in it. I also think that visual studio and parts of the windows 7 team are Agile. Also consider that Visual Studio 2010 includes out-of-the-box refactorings that don't really make much sense outside the context of TDD and that Agile is the default project management template for TFS and a picture of a corporate culture that is quite different from the one of years past starts to emerge.

As for specific tools. TFS is OK for source control but I find it very heavyweight and finicky. Others have mentioned Subversion but if you're worried about MS blessings you might have better luck jumping straight to Mercurial. Its a more advanced SCM but it is now supported natively by Codeplex and has excellent windows integration. I've never used it but I am in deep tool-love with it's cousin git.

Test driven development: Start with MSTest, its not as slick as anyone would like but its not the worst thing in the world. I would also recommend MbUnit which has all of NUnit's features along with some good support for the integration tests that you will probably be writing by accident as you are starting out with testing. Oh, and if you have customization freak I would urge him to look at XUnit.Net.

Mocking: The choice is basically Rhino Mocks or MoQ. Here's a quick intro I wrote for Rhino Mocks that goes over all the basics. That being said, the trade off seems to be more documentation for RM versus a very mildly less error prone syntax for MoQ.

Test Runners: If you start out with MSTest you'll notice that you can get a significant speed boost in your test runs by using TestDriven.Net, resharper or coderush rather than the built in test runner. That being said, don't underestimate the standalone test-runners. They can be quite good every once in a while. I heavily recommend Gallio Icarus runner which comes with MbUnit.

George Mauer
A: 

One tool that got me hocked on TDD is TestDriven.Net which puts the test results in the Output window. I mapped this to the F8 key and the productivity gain is superb; write a test, press F8 and see this results in the output window.

One suggestion I also have to differentiate between having Unit Tests and doing TDD. I have found that TDD can be hard to push on to a team, while; unit, integration or functional tests are an easier sell. Having a bunch of tests that saves an hour going through a manual test day after day is a big win.

After a while people will start to appreciate some new ideas if it is helping them in their daily life. Then you'll be able to introduce a build server, and move away from SourceSafe.

Keith Bloom
My keybinding is:Ctrl+R, T - Run Tests (Test editor Mode);Ctrl+R, R - ReRunTestsWithDefault (Global) - this one is super usefulCtrl+R, Ctrl+T - ReRunTestsWithDebug (Global)
George Mauer
+1  A: 

I want to echo what George Mauer has said and suggest starting with MSTest for your unit testing. It's right there in the box to begin with Visual Studio, this will help in your cause as it's "MS blessed".

I would start with unit testing and take it from there, after a few months of "look how easier our life is now we have these tests automated" I'd take it up a notch. Consider adding something like Selenium or WatiN to the mix. Once you're rolling with that, get your CI server up. "Wouldn't it be great if we didn't have to start off all these tests manually?..."

I guess a decent SCM might be a sticking point. SourceSafe is better than nothing. Perhaps start using Mercurial or Git yourself? Show those open to the change the benefits, eventually your stubborn dev will come around when others around him are wanting to switch. Hopefully, he'll find it harder to shout if he's in the minority.

Check out http://www.viget.com/extend/effectively-using-git-with-subversion/ for ideas with mixing up different SCMs.

I also want to +1 mxmissile for saying to take things slowly. I think you'll find it very difficult to introduce all these changes in one go. It's a lot to take in at first if you're not used to it. Try to pick the part you're weakest on, or will add the most value and build up from there.

Good luck!

Kirschstein
I'm not sure how it would work if I was using a different SCM than the other guys on the team. Though we have projects that we "own", there is still a fair amount of collaboration on projects.
NeedAgileNow
@NeedAgileNow True, it can be a little difficult, see my edit, refering to this page: http://www.viget.com/extend/effectively-using-git-with-subversion/ for some ideas
Kirschstein