Visual Studio

ALM Practices Part 4: Common Code Layout

What is it?

A collection of rules stating what a block of code should look like. These may include rules on where line breaks are required, how to place parentheses, how much whitespace to put before and after those parentheses, how many spaces to use when indenting and where to insert empty lines.

Read more…


Published: 15-03-2010 by Dennis Doomen | 0 Comments | 0 Links to this post
 

Fluent Assertions 1.1 has been released

It’s only a few days ago since we released the first version of Fluent Assertions, and we already have a new release. The reason for this is that the first release was just the public release of an internal set of classes that we’ve been using for a year or so. But this week, we've worked hard to add some important missing features that we really needed, and also improve resilience against illegal arguments such as an empty collection or null. Release 1.1 includes the following improvements.

  • All dependencies on MSTest assemblies have been removed. So assertions will work with all testing frameworks.
  • Added support for Silverlight
  • Improved the verification messages around assertion of collections so that you don't need any debugging to figure out what went wrong.
  • Added object.Should().BeAssignableTo()
  • Added object.Should().Satisfy() to verify against a lambda or delegate.
  • Added extension methods on an Action or Action<T> which allows better support for the AAA syntax. We've rewritten a large portion of the framework's unit tests and it definitely improves unit test maintenance.
  • Added a ValueOf property to the exception assertions syntax that allows chaining additional Should()s on the properties of the exception.

 

You can download it here. The documentation can be found here.


Published: 05-03-2010 by Dennis Doomen | 0 Comments | 0 Links to this post
 

How to split a solution into projects

Yesterday, a colleague of mine asked for some guidance on how to partition a Visual Studio solution into individual projects. Instead of simply answering his email I thought that blogging about it may be useful for others as well, so here are my rules.
 

Published: 11-02-2010 by Dennis Doomen | 0 Comments | 0 Links to this post
 

ALM Practices Part 2: Peer Reviews

What is it?

A formal review of all code and artifacts related to a requirement or task by another person than the original developer. Rework because of review comments must be revalidated afterwards.

Why would you do that?

  • Because the average developer
    • introduces 10-50 bugs per 1000 lines of code (at least, according to Moore’s Law)
    • is not always aware of the potential pitfalls of particular code constructs (hence coding guidelines)
    • is not always up to date with all available constructs in a new C# version
    • does not have full awareness of all the out-of-box solutions offered by the .NET Framework, open-source sites or commercial vendors
    • often does not realize that an ingenious and elegant solution may be too complex to understand by others.
    • sometimes loses sight of the overall solution and the initial goal when working on a some piece of code too long.
  • Because it helps improve the awareness of, and the understanding behind your company’s coding guidelines.

Notice that the amount of necessary review work can be reduced by introducing the Pair Programming practice.

What’s the bare minimum you need to do?

  • Find issues in the interpretation of the functional requirements.
  • To verify compliance against your coding guidelines or standards.
  • If you don’t have one, consider the Aviva Solutions C# 3.0 Coding Guidelines. Notice that these are an extension to Visual Studio’s Code Analysis, so the latter is still worthwhile.
  • To find any loose ends such as TODOs or incomplete code. Resharper 4.5 includes a nice tool window that quickly shows an overview of all TODOs in your current solution. Resharper 5.0 even includes solution-wide analysis that finds dead code.
  • To ensure that all code is easy to read and understand. For instance, all members and types have a comprehensive name and non-trivial code is annotated with code comments.
  • To ensure that each and every check-in improves the code base, rather than introducing software rot.

What’s the usual thing to do?

  • To ensure that all naming of code elements matches those of the functional design, preferably using Domain Driven Design’s Ubiquitous Language.
  • To check for the usual pitfalls such as God classes or methods that are way too long.
  • To find any redundant code or code that is unnecessarily complex and requires refactoring.
  • To find any code constructs that may put other developers on the wrong foot and therefore jeopardize future maintenance.
  • To find code constructs that can be replaced with a simple call to a previously developed generic class or .NET Framework construct.
  • To stimulate the use of design principles such as S.O.L.I.D. or the design patterns defined by the likes of Martin Fowler and Eric Gamma so that the overall code quality increases.

 How do you do that?

  • It is important to make sure that all files related to a particular piece of functionality can be easily found. Use a Check-in Policy to associate each and every change with a corresponding work item such as a Scenario, Task or Bug. Since a major change may involve multiple check-ins, especially in a larger team where multiple developers work in the same areas of your code base, Change Sets provide insufficient traceability.
  • Use a logging form or something similar to review every piece of code related to a particular work item and store it on the project’s team site.
  • Alternatively, copy and paste the code into Microsoft Word, and use its reviewing features to annotate the code with comments and improvements.
  • Or even better, install TeamReview and its corresponding Review Response work item and add review comments directly from inside Visual Studio’s code editor, while keeping them together under the associated work item. Also check-out this poster illustrating the underlying review workflow.

Published: 01-02-2010 by Dennis Doomen | 0 Comments | 0 Links to this post
 

ALM Practices Part 1: An Introduction

As part of my many assignments, I’m compiling a bunch of best practices into a set of development guidelines for bootstrapping our internal projects using TFS. I’ve decided to share these with the community so that others may benefit from it as well. Beware that these practices are not new nor in any way invented by myself. I'm merely trying to get some good resources together in a nice compact format.

So what are my goals?

  • To provide insight into the benefits of applying well known best practices on software development projects.
  • To provide examples of applying those practices on new and ongoing projects and explain how to gain the most of out them.
  • To help you jumpstart a new project or professionalize running projects.

And what do you gain?

The goal of these posts is to end up with a set of development practices that provide the following benefits:

  • Allows you to more quickly and accurately assess the impact of new requirements.
  • Promotes building well designed software that allows changing functionality with lesser risks (even during a running project).
  • Promotes a consistent code-base that solves similar problems using similar solutions, everywhere.
  • Strives for a functionally consistent software system. For instance, ensuring that date fields look the same all over the application).
  • Attempts to prevent code duplication so that you never have to make changes at multiple locations if you change a particular piece of behavior or logic.
  • Eases the effort for deploying a new release by removing as many human actions as possible.
  • Provides traceability on where a particular piece of functionality has been realized technically.
  • Improves the developer experience when working on an existing or shared code-base (e.g. readability, purpose and goal of a block of code).
  • Provides a safety net that reduces and possible prevents the chance of running into regression problems.
  • Attempts to prevent common mistakes or misinterpretations by introducing common rules and recommendations.
  • Strives to a situation where each and every member of the team is aware of the project’s affairs.
  • Promotes any endeavors that improve the self-education and self-organization of teams.

Published: 04-01-2010 by Dennis Doomen | 0 Comments | 0 Links to this post
 

TFS: Getting all Checked Out files via TF.exe

Edit 13 may 2009 : There is another good alternative. One of my friendly colleagues pointed out  to me you can also install the latest TFS  Power Tools (October 2008).

You will then have a nice UI  with some new features. Some of those features are:
1) “Find in Source Control Explorer”.
It’s possible to show the current checkout status in any folder in Source Control Explorer.
2) A new “Team Member” node in Team Explorer.
For each member you can see for example the “check-in history” or “Pending changes”.

------------------------------------------------------------------------------------------------------------------

When you are working with Team Foundation Server (TFS), sometimes you require an overview of all Checked Out files. For example, you want to be sure your colleague can go on holiday after he/she finished his/her work with a mandatory check-in.

I was unable to see all Checked Out files by any user with Team Explorer, so I started looking at the command line tool TF.exe. After that, it was really simple to get an overview.  You can even integrated the command line tool in Visual Studio. You just add a new "External Tool".

 

First, the TF.exe command line tool:

The location of the command line tool:
C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\tf.exe

To change/add a local workspace:
tf.exe workspace

All checked out files in $/FavoriteProject:
tf.exe status $/FavoriteProject /user:* /recursive

All files checked out to Tim:
tf.exe status /user:Tim

All checked out files in $/FavoriteProject using Login Credentials:
tf.exe status $/FavoriteProject /user:* /recursive /login:yourDomain\tim,yourdomainpassword

------------------------------------------------------------------------------------------------------------------

Second, a  short walk-through to use the tf.exe command in Visual Studio IDE.

  • - Select from the menu: "Tools / External Tools ..."
  • - In the "External Tools" dialog, click the "Add" button.
  • - Enter a title that will show up in the Tools menu (ie. "Show FavoriteProject Checkouts")
  • - Enter "C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\tf.exe" for the command
  • - Enter "status $/FavoriteProject /user:* /recursive for the arguments.
  • - Make sure that the "Use Output Window" check-box is checked.
  • - Make sure that the "Prompt for Arguments" check box is checked. (Optional, if you want to use login-credentials)
  • - Click OK to save.
  • - You can now execute the tool from the menu. The output will be shown in the output window.

example_tf


Published: 12-05-2009 by Tim van der Weijde | 0 Comments | 0 Links to this post
 

We've just passed more than 1000 unit tests

In November 2008, me and some fellow colleagues have started working on a new project where we use Test Driven Development to gain a highly maintainable and highly testable system. Today, we have reached our 1000st unit test,  or better, 'specification'. The term Test Driven is a bit misleading since TDD is really a design process, which has nice little granular unit tests as a side-effect. Anyway, we tried to reach this point before Easter, but obviously we were professional enough not to add some dummy tests :-)
 


Published: 14-04-2009 by Dennis Doomen | 0 Comments | 0 Links to this post
 

Format source code in your blog posts

There is a nice add-in for Visual Studio that allows you to copy your source code as HTML. This can be useful for example when you want to add a code sample to your blog posts.
The add-in is called CopySourceAsHtml (CSAH). It gives you an extra option in your edit- and context menu: 'Copy as HTML...'. The copied HTML reflects your Visual Studio color settings.
 
 
You can also use an online tool at http://www.manoli.net/csharpformat/. There you can paste your source code in a textbox and convert it to HTML. You will need to add an extra stylesheet to your blog website and add a reference to it in the <head> section of your page.

Published: 10-03-2009 by Martin Opdam | 1 Comment | 0 Links to this post
 

Changing the diff- and merge tool for TFS

TFS has it's own tool for comparing and merging different versions of files. If you don't like this default tool and rather use another, this can be configured in TFS. You can configure this in Visual Studio via tools -> options -> source control -> visual studio team foundation server -> configure user tools.

image

James Manning describes in more details how this can be done on his blog. He also mentiones some alternative tools that can be used, and the necessary command arguments. This is the list of tools he mentions:

Compare Tools:

Product Command Arguments
TFS default diffmerge.exe %1 %2 %6 %7 %5 /ignorespace
WinDiff windiff.exe %1 %2
DiffDoc (for Word files) DiffDoc.exe /M%1 /S%2
WinMerge winmerge.exe /ub /dl %6 /dr %7 %1 %2
Beyond Compare bc2.exe %1 %2 /title1=%6 /title2=%7
KDiff3 kdiff3.exe %1 --fname %6 %2 --fname %7
Araxis compare.exe /wait /2 /title1:%6 /title2:%7 %1 %2
Compare It! Wincmp3.exe %1 /=%6 %2 /=%7
SourceGear DiffMerge DiffMerge.exe /title1=%6 /title2=%7 %1 %2
Beyond Compare 3 BComp.exe %1 %2 /title1=%6 /title2=%7
TortoiseMerge TortoiseMerge.exe /base:%1 /mine:%2 /basename:%6 /minename:%7

 

Merge Tools:

Product Command Arguments
TFS default diffmerge.exe /merge %1 %2 %3 %4 %6 %7
KDiff3 kdiff3.exe %3 --fname %8 %2 --fname %7 %1 --fname %6 -o %4
Visual SourceSafe ssexp.exe /merge %1 %2 %3 %4 %6 %7
Araxis compare.exe /wait /swap /a3 /3 /title1:%6 /title2:%7 /title3:%8 %1 %2 %3 %4
Beyond Compare (2-way merge) bc2.exe %1 %2 /savetarget=%4 /title1=%6 /title2=%7
WinMerge (2-way merge) winmerge.exe /ub /dl %6 /dr %7 %1 %2 %4
Guiffy guiffy.exe -s -h1%6 -h2%7 -hm%9 %1 %2 %3 %4
Ellie Computing guimerge.exe --mode=merge3 %3 %1 %2 --to=%4 --title0=%8 --title1=%6 --title2=%7 --to-title=%9
SourceGear DiffMerge DiffMerge.exe /title1=%6 /title2=%8 /title3=%7 /result=%4 %1 %3 %2
Beyond Compare 3 BComp.exe %1 %2 %3 %4 /title1=%6 /title2=%7 /title3=%8 /title4=%9
TortoiseMerge TortoiseMerge.exe /base:%3 /mine:%2 /theirs:%1 /basename:%8 /minename:%7 /theirsname:%6 /merged:%4 /mergedname:%9

Published: 17-01-2009 by Martin Opdam | 2 Comments | 0 Links to this post
 

Vertical guidelines in Visual Studio

Using a maximum length for the lines of code in your source files, makes the files easier to read and maintain. A vertical guideline in the Visual Studio text editor is a useful utility visualise the maximum line length.
The following registry setting will make Visual Studio show a vertical guideline at the specified position (in this case at character 130):
 
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Text Editor]
"Guides"="RGB(128,0,0) 130"
 

Published: 07-05-2008 by Martin Opdam | 0 Comments | 0 Links to this post
 
 Next >>