views:

126

answers:

4

Hello world!

I am looking for a set of nice plugins to use when developing software. Currently I am soloing a project where I simultaniously experiment with TDD as I go through the project. Recently I have been quite hyped about agiles processes and wonder how I can further integrate tools that will aid in my task of both completing the project and learn TDD. Further I am looking into integrating with SVN, or other version source control repositories. I would also want to include version information into the build as I will publish version milestones publicly, for feedback. It is my desire to finally learn how to create robust and maintainable software, and take a leap out of the cowboy coding world that I have so long stayed in.

I am a bit catious about getting too many plugins at first, because I feel that may cause more harm than good if I get lost, or not utilize them as intended. Some that do come to my mind are Style Cop/Fx Cop for maintaining coding standards, Visual SVN for SVN integration, Testdriven with NUnit (and possible Moq, but that is only because I haven't looked into NUnits mocking library). I haven't yet tried out tools like resharper, but I am considering to try it out as I have heard a lot good about it.

I am coding exclusively in C#, writing a class library for use in Unity3D, a free game engine with support for .NET 2.0. However, the tests themselves can be any .NET version that my installation supports. I have heard something about automated tests that will cause you to fail a commit, and I am excited about getting my toes dipped in this as soon as I can, as I believe that will push me to learn TDD better.

If you know of any other plugins that would suit my needs, or if you think I should choose one over another, please let me know.

As I am quite new to plugins, I wouldn't mind if you could motivate why and when to use them. I am really excited about getting a nice environment to hone my skills in.

Thank you for taking your time reading this. I hope you have something to add in :)

Edit

I realize now from some playing around with Style Cop that it might not be the best suited plugin for TDD and agile approaches with its default settings. While I do think the code I produce holds a very high standard using it, I feel many of the rules (such as strict documentation) are less than agile since you have to pay for that up front. In TDD, the tests themselves serves as documentation and specification. Thinking agile you should not do what you don't need to do.

In my specific case, I do not need extra documentation because this library is not intended to be shared among other developers. It might do in the future however, and then we land in another ball park. I am a bit dubious about overriding these rules. I suppose on one hand I want clean and solid code to practice "good coding", on another hand I want to narrow in a little bit more on TDD, and in the end I want production value.

I wanted to post my thought about using Style Cop with default settings in case a new developer reads the original article and blindly decides to use it because it was listed here, only to find it more cumbersome than worthwhile. I think the key is to understand your needs and identify if a certain feature contributes toward your production values.

+5  A: 

Test Driven.NET

Includes a free version for personal development. A nice simple plugin, not expensive in terms of memory usage, or the time you need to dedicate to actually learning how to use it.

For Test Driven Development, running the tests internally of the IDE is a must. You'd be surprised at how much time you save by not having to switch to an external runner for every test you want to run.

I have heard something about automated tests that will cause you to fail a commit

Check out build automation - MSBuild or NAnt to name a few. Essentially unless the build process is successful you don't commit your code to your repository. For example, if you had broken some code, the build process would fail. If it passed, you could commit your code safely.

For .NET users, MSBuild (Visual Studio uses it internally) would be a nice start. Check out the official site on MSDN and do some searches for more articles on why build automation is a good idea.

Other Tools

Your question asks about the use of FxCop, StyleCop and so forth. Rather than running these externally you can link them in as part of the build process. This will take some effort setting up, but the time saved by using them and embedding them into the build process is massive. On a side note, your code will improve by using these regardless of when you use them.

Free Resharper

Resharper is expensive for personal development. If your company provides it, by all means use it. Could I justify buying it for personal development? No chance. Instead check out CodeRush Express. It's similiar, and less memory hungry than Resharper. I find it doesn't lock up Visual Studio constantly. Plus some of it's features are pretty nice.

Finglas
"On a side note, your code will improve." This is exactly what I hope to get out of all this. I have been coding since I started walking but shamefully haven't got too exposed to training my way of coding. I have been too busy learning new ways to make cool stuff without paying too much attention to how I make cool stuff, get my drift.
Statement
If I understand this correctly, I will have to get wet with MSBuild to integrate automated steps during the build process, such as running FxCop etc? Then I assume the first logical step would be to understand how MSBuild works :)
Statement
FxCop in particular is very good. I find it picks up things you often don't even consider. I'm sure other experienced developers will agree on this. Once it does highlight certain issues you'll find you won't repeat them in future ;)
Finglas
MSBuild/NAnt et al are easy to use. There are some nice tutorials out on the Internet. Getting all your tools working and ensuring the build process is executed exactly how you want it is the time consuming part. Once this is done (at the start of a project) that's it really. You just let it tick over. Any future projects can reuse build scripts with some minor ammendments.
Finglas
Wow, thanks for all this information. I suppose I will evaluate some of these suggestions I have had put forward. While this might be a bit out of scope of this question, would you know of any good sites or mailing lists to stay updated on TDD and agile processes?
Statement
I invested in a couple of books on Agile development (And TDD). As for blogs I can't really comment on any. A good book or two should set you straight. Beck's TDD by Example is the classic book on TDD. For agile practices, anything with a good review on Amazon.
Finglas
+3  A: 

You sound very hung up on plugins and tools, and of course tools can be a great help, but I would focus on the actual stuff that you want to learn, rather than tools and frameworks.

What you definitely need is:

  • SVN (TortoiseSVN is fine)
  • Testdriven.Net for running your tests
  • Teamcity or equivalent for doing continous integration

What you don't need yet are all sorts of plugins and frameworks for improving on these basics. Focus on the TDD and the "story of the build", and maybe release management - and while learning this, you will discover what needs you have for tools.

Luhmann
A good answer, and while I agree it's not good to just rely on plugins, I am looking for ways to keep me reminded about the possibilies that are out there. I have just recently started with TDD, and from what I have done so far, I love it. However I feel I don't miss out on much if I have some integrated testing control as I want to keep coding stuff within my coding IDE. One of my main reasons which I forgot to mention is that I want to start thinking professional like about software development, and of such also dip my toes in the stuff you'd expect in a good work environment.
Statement
I have never worked with Teamcity but it sounds good. I'll take a look at it.
Limo Wan Kenobi
+2  A: 

I believe that the pluggins you are interested in are all fine.

Resharper is nice and powerful, but it requires a lot of memory.

As some others have said, TestDriven .Net is almost a must. It lets you run your tests from the VS IDE. It works fine if your tests are in NUnit.

And at last, I would recommend NCover to keep track of your test coverage. It has a community version and it can be executed from the IDE with TestDriven .Net too.

And of course nAnt and / or MSBuild for automated builds. I would recomend nAnt better.

Hope it helps

Limo Wan Kenobi
TestDriven.NET comes with NCover as an addon.
Finglas
It is nice to get tips like memory usage, as for the immediate beginner that might not be what you think about first. I do think that 4 GB ram on a new fresh windows install won't cause any problems, though worthwhile to understand the cost of it. I'll be sure to check out NCover.
Statement
Oh, I didn't knew it. It have always downloaded NCover by itself as I usually build with nAnt.
Limo Wan Kenobi
Yep, I belive 4 Gb RAM is enough, but I believe it depends really in the project size. I have worked in projects that only loading the project with Resharper active would take from 5 to 10 minutes (and before getting my 4Gb of RAM it crashed sometimes) and with out it at most 1 minute.
Limo Wan Kenobi
It's a fresh project about a week in, and I don't expect it to grow insanely large. Given I am a single developer, I have to keep the scope limited to not drown and feel overwhelmed. I think that's one of the best lessions learned about solo projects.
Statement
I thought ReSharper would be a luxury, because after all VS does have some refactoring tools included, but once you have tried it, it's hard to go back.
Mathias
+1  A: 

You may want to look into NDepend, which helps you analyze your code base and keep it clean. (Otherwise, I second advice for TestDriven.Net and ReSharper).

Mathias
That's something new I haven't heard about. Gotta check it out after this CodeRush introduction video.
Statement
I must say NDepend looks really complex. I think I will have to put it off for a little while and look at it again later. Seems you have to learn CQL in order to utilize it, and I don't think I am ready for this product right now. Thanks for the link though, it looks awesome (whatever it does) :D
Statement
I got interested in NDepend through the posts of Patrick Smacchia on CodeBetter.com. He shows what type of insight it can give on the code base of a few projects, that may give you a better idea of what it does :) http://codebetter.com/blogs/patricksmacchia/archive/2009/03/15/analyzing-the-code-base-of-cruisecontrol-net.aspx
Mathias
Do you frequently use this tool in your own working projects?
Statement