Useful Developer Tools for Visual Studio 2008 5. September 2009 Fun, Game Development, Reviews Comment (0) After all that fun installing and trying out version control systems (see my last blog entry), I finally wanted to evaluate some developer tools for our next project. Since this is intended to be an overview of tools our team is probably going to use, I will also mention tools that I have been used over many years and might not sound new or special to you (especially if you have read my blog before). Some of the tools will just be evaluated and if we don't like them or don't need them, we won't use them! If you want to know about general tools for Windows, Productivity, Online and Power Tools, check out Scott Hanselmans great post from this week about Ultimate Developer and Power Users Tool List for Windows! Most apps on this list I have tested before or use daily too, some stuff like AutoHotKey, Windows7 Gmail Notifier, BugShooting and ClipX was new to me, but I very much like those tools now :) While I would like if all we need would just be Visual Studio, nowadays a lot of great tools are available at your fingertips. Most of them are free to use or can at least be evaluated for for a month, so there is not even an excuse not to use them, especially if they help in the overall productivity of the project. Let's start with the mother of all developer tools: Visual Studio. Since VS2010 is not done yet and it will take a while until Beta2 comes out and then more time will pass until the final product is available sometime in 2010, we can't use it yet. Especially since there are not many addins available and this post is all about addins! This means VS 2008 all the way for now! As reported in my last blog entry I decided to use SourceGear Vault instead of Subversion (which we used in 2008-2009) or TFS (which I tried briefly in 2005/2006). IMO it has one of the best VS versioning integration. It also integrates nicely into OnTime (and OnTime integrates nicely into Vault) and we can set it up the way we like it. Hopefully it will also work nicely together with whatever build system we are going to use. Next on my list are unit testing tools and while ideas in TFS sound great, we are not going to use TFS for our project (see my last blog post). Instead I have fallen in love with TestDriven.NET many years ago. I do not even think about it anymore, it feels to me as being a part of VS already. The recent version is 2.23. TestDriven.NET supports integration with NUnit, xUnit, NCover, Reflector, TypeMock, dotTrace and more, some of those we also want to use. With TestDriven.NET we can easily test methods, classes or the whole project, but in order to have tests in the first place we obviously need a Unit Testing framework to write tests. For this task we gonna use xUnit (currently v1.5), it is very similar to NUnit, which is probably the most famous and popular unit testing framework in .NET. xUnit has a little bit shorter code and I like the simplicity with it. Many Assert methods are combined and overall test code seems to be shorter, we also need fewer attributes. TestDriven also supports ad-hoc tests without any framework, which is great for functional tests. To make sure we actually cover all lines of code with our unit tests (and functional tests where automatic unit tests are not possible, which is everything involving graphic output, especially when shaders are involved) we are going to use NCover, which integrates nicely into all the other tools and can be launched from TestDriven.NET. NCover will make sure that we visually see what code gets executed and is tested. It also has great reporting features to see the progress on days when people are just working on refactorings. Refactoring, while important, often causes confusion in the team since artists or even project managers or producers do not understand when a programmer is making everything more efficiant and easier to work with, but did not add new features. By showing some fancy reports it makes it easier to explain :) Last year I also evaluated TestComplete, but I did not found much use for it back then. TestComplete lets you create and run tests, but not as a developer, but as a normal user instead. This could be useful to non-programmer guys in our team. We gotta test it and see if people are actually using it. It could help us developers out a lot if everyone in the team is constantly testing the application and can report back useful data if something is not working (I wonder how this can be integrated to OnTime, Vault, etc.). I'm also a big fan of CodeRush and have used it for many many years now. I started using CodeRush in 2004, even wrote my first plugin back then called CR_Commenter, which I still use to this very day. dnrTV has recently recorded a show with the funny Mark Miller on CodeRush Xpress (the free edition of CodeRush), check it out if you don't know much about CodeRush yet. For our agile project management we are going to use SCRUM with OnTime 9.1.3. In the past we mostly used OnTime for bugs, but also for features (but not for everything, we just had weekly meetings, but did not put the results into OnTime). I'm still not sure if we want to use work-logs and tasks too (that's just 4 systems in parallel), but we are going to test it and see what makes sense in order to get SCRUM working for our team. OnTime also works just fine inside Visual Studio, it supports Vault to link to versions and files correctly. But we will most likely also make use of the OnTime SDK to support more custom features of our tools in the future. For most documentation and especially in the concept/design phase, but also later in the project, the OnTime Wiki feature will be used a lot (which now supports comments in version 9.1). Pretty cool stuff! On the topic of communication we also want to use some better tools. I and many others in the team would like to check out Google Wave once it is available (could be end of September 2009). Till then and when Google Wave is not ready or support as many communication features as we want, we have easy email lists to reach the whole team, but since everyone on the team is using Skype we also will just create a group there for communication. For a long time some team members have been in Skype groups and discuss both at work and even after work about interesting topics, engines and games. I just want to combine all these efforts and include everyone, especially new team members (we got a lot of those recently ^^) into all the discussions. The only downside to this could be that too much chatting is going on and Skype is also very annoying when it comes to notifying the user about chats. Maybe a less intrusive system like IRC might be the better choice. We are also planing a community forum on our website and might even integrate chat there and let other people see what we are doing (Twitter like maybe? but I don't like Twitter as you probably have guessed since I never post anything there ^^). For performance profiling we use Ants Profiler (also since 2004). dotTrace is also a nice app, but I found it less useful for game development. dotTrace also seems to have less cool features and feels a little like an outdated app (it has been some time however since I tested it). dotTrace integrates nicely into Resharper, which makes it a better integration into VS overall, but I'm not using Resharper. dotTrace is also far inferior when it comes to displaying the profiler data, it might however be more suitable for other kinds of apps. In fact the newer versions of Ants Profiler are also very confusing to me, but the time-line alone is a pretty cool thing. The VS support and navigating though code is not the best in Ants Profiler and I complained many times on that in the forum, but it has not improved at all in the last 3-4 years. However Ants Profiler is still the best .NET performance profiler tool IMO. If you don't know much about Ants Profiler yet or just want to learn more, check out the cool demonstration videos. BTW: I recently read about the SlimTune Profiler, which supports remote profiling and real time results analysis. That could be useful for game development and might help us profile remote computers of artists working with our engine. The tool is not looking very complete however and I will check back later to see how it evolves. I have not used NDepend in the past, but the ideas sound pretty cool. It is a tool that simplifies your code base and helps you out refactoring code, which is something we want to do constantly in this project (from day one on). NDepend is also famous for the pretty library and framework pictures it can produce to give you a nice overview of a project. Update 2009-09-19: I started trying out NDepend today and it looks pretty fun and useful already, will report later how all these tools worked out! FxCop is a extensive tool to force programmers to apply certain programming and naming rules in the project. It has been integrated into TFS and as a standalone it has been included into the Code Analysis tools. Some members of our team (including me) have not so great memories about the very strict FxCop rules, which often got in the way and were not very useful for game development. This was especially annoying since we had a huge code base when we started using FxCop and it complained about everything. No one had time to fix all issues, which were mostly not that important stuff. In the end we disabled so many rules that the tool became almost useless and in fact we stopped using it more or less. But I want to give it another shot and try to use it in our new project, which should be much easier since we start from scratch and can apply the rules one by one as we add more features, frameworks and libraries. Since we are still very early in the project (in fact we haven't even started with it yet), I don't know if we going to need a build system anytime soon. We still want to integrate unit testing and other tools like NCover to the build process and for that reason I'm currently checking out NAnt, CruiseControl, FinalBuilder and TeamCity. TeamCity does not seem to have any SourceGear Vault support. NAnt is powerful, but I'm not really a big fan of doing everything in command line. CruiseControl also seems not to be very easy to setup, I just installed it, but the service always crashes. Probably have to setup config stuff first. I might end up using NAnt, but I gotta evaluate it a little bit more. I like however than NCover supports CruiseControl and TeamCity right out of the box, so I will take a closer look on that when setting up NCover. Should be easy to just set it up so it automatically builds stuff and does unit tests automatically. I also might want to have some cool FTP upload functionality in case we have some ASP.NET stuff. Another thing which might become more important in the future, but is currently not needed for our project, is database support with tools and frameworks like EntitySpaces (used it a lot in 2008), NHibernate (free OR Mapper), LINQ (part of .NET 3) and others. I will decide on that when we actually need it for our project (and that time will come ^^). Since this post is already very long and it is late, I will continue it some other time with frameworks and libraries we want to use. Hopefully I did not forget any important tool here. I also did not mention game development specific tools and frameworks in this post. That and managed frameworks, multi-platform tools and frameworks and even dynamic languages will be a big topic on the next post. Other interesting links: Visual Studio Add-Ins Every Developer Should Download Now 45+ Excellent Code Snippet Resources and Repositories Dirty Coding Tricks, a very good read! Geek Hero Comic, if you have too much time on your hand. DotNetRocks: Nice weekly podcasts about .NET and tools!