Unit Testing Rocks!

I was skeptical about the benefits of Unit Testing, like many developers I
work with. I work with a lot of development teams as a teacher and trainer. I’d
seen some teams benefit, but others got nothing but headaches. My latest project
has me convinced that rigorous automated Unit Testing is a software development
best practice. It saves time, and enhances your ability to create great
software. Let me share my experiences on a large ongoing project. It convinced
me, and I think it will convince you too.

We introduced unit testing on
my current large project, a change from my previous project. Comparing the
progress of the two projects has sold me on its benefits. We are several months
in and well past the point that I can keep all but the high level architecture
in my head at one point in time. The typical scenario on past projects was that
I would write some amount of code, one to fifteen lines of code and run the
project. I have often included a button on forms that would fill out all of the
fields with the minimum required data to speed up the manual testing process.
Right here was one issue – I was putting testing code into the production
application. The testing process consisted of poking at the application and
trying to break things. I would store up two or three issues before trying to
run because this process was so painful. Of course, this took ages because I
would find something wrong and would have to quit testing, fix the code and
rerun. I had no idea how broad changes would be if I fixed a given component.
The further down in the architecture, like a database helper class, the scarier
this became. Even to test the particular UI bit that I knew that it affected, I
would have to log into the app, navigate to the page with the error and then
fill out the form and so on. Since I couldn’t possibly know everywhere that was
affected this could take a lot of time and it still wouldn’t be
right.

Somewhere in here, I would have flash backs to my mainframe days
where you’d write code, hand walk it, submit the 10 new lines of code to the
compiler and wait. You’d have the results of your compile printed out 2-4 hours
later, depending on whether or not the big iron was under load. The next step
was to correct the spelling because none of the tools had IntelliSense and start
the whole process over again. Throw in a lunch and that was your whole day. You
had accomplished the task of compiling 10 new lines of code. The next day, you’d
get to test it and then fix it again.
These practices impede forward progress
on a project so that I can either laugh or cry.  I stay sane by realizing
first that I’m not, by any stretch of the imagination, telling war stories that
you haven’t personally felt as well and second, there is a better way now.

My current project is much different because of testing, testing and
more testing. I know exactly what I have and haven’t broken a mere matter of
seconds after making the change. Let’s start by talking about the database
helper class scenario. I make a change to one of the methods in the database
helper class. Now, rather than running and guessing as to what’s changed, fixed
or broken, I’ve got automated tests that test that particular method in several
different ways directly. I pass in several types of good data and bad data. If
it stopped here, that would be good, but it still might have broken something
else that I didn’t realize. In addition, I’ve got automated tests for the data
classes that use the utility classes. And I’ve got automated tests for the
middleware that uses those data classes. And I’ve got automated tests for the
ASP.NET UI. And the best part is that all of the backend and middleware tests
run in about thirty seconds. The ASP.NET code actually makes the HTTP calls and
renders the HTML, parses it and so on so they take a touch longer. Even running
all of the tests takes just a couple of minutes.

At that point, I can
feel free to move on and write more code without that same knot in my stomach
that I’ve broken something that I didn’t know about. I’m not spending time
repeating myself and typing in the same meaningless test input into the UI over
and over. I am using the computer to do that for me. It makes for more
repeatable, consistent tests that actually get executed.
Now, that being
said, I don’t believe that the tests that I’m writing can replace the testing
that a business analyst, the user or a quality assurance team does. When the
tests that I run pass, that means that the code does what I meant for it to do.
There are a number of limitations with this. First, it could be that I forgot a
possible scenario. Second, the code that does what I meant for it to do might
not do what the user or business analyst meant for it to do. If we have
communicated well, it will be close but it’s possible that there a
misunderstanding which will have lead me down the wrong path.

I still
haven’t bought into all of the TDD philosophy. I still don’t write my tests
before I write the code. I just haven’t been able to get my head around that
concept yet. I have trouble thinking about all of the ways that the code is
going to be used and writing tests and then writing the code. I’m thinking that
I will make that transition at some point for some tests.
I’ve been thinking
that I should take my use cases and start from there writing tests. In future
posts, I’ll talk about my thought process here.

One of the keys to a
good unit testing experience is having the proper tools. I’ve put together what
I think is a good toolset, at least for ASP.NET, that is able to test the vast
majority of what I need to test. I’ll talk about this toolset and how you can
get started on unit testing yourself in future posts.

.NET To Go Mobility Roadshow in Grand Rapids – Followup

I want to thank everyone for coming out to the .NET To Go Mobility Roadshow
in Grand Rapids. I had a great time and hope to come back to Grand Rapids more
often.

We had about 40-45 participants and all seemed to enjoy themselves and were
really engaging. If I had a typical Grand Rapids group – I’m definitely going to
have to speak there more often. I was a little disappointed at the student
attendance as we only had about half a dozen or so and getting students to
attend was one of the reasons that we held it at the GVSUAuditorium (Nice facility).

Many thanks go to GVSU – for hosting the event, Eric Maino
for organizing and running the event and West Michigan .NET Users
Group
and the Grand Valley State .NET Users Group for helping with
marketing.

As promised – below is the link to the code samples that I wrote or showed
during the show. The Scan and Amazon only works on a Symbol device
with a barcode scanner and the Symbol .NET SMDK installed.

Grand Rapids is getting the .NET Mobility Roadshow on Dec. 2.

.NET To Go Mobility Roadshow on Thursday, December 2, 2004 at the
DeVos Center-Loosemore Auditorium.

.NET To Go

The .NET To Go Mobility Roadshow will provide
you with the answers to your mobile development questions. Digging into the
details, using more code and fewer slides, these technical sessions will show
you how to develop and implement mobile solutions using the .NET Compact
Framework and languages you are already familiar with. To register for this
FREE event or to learn
more, go to www.msmobilitytour.com
.

Registration is required to make sure that you can get in. You can register
at the MS Events page.

Most creative CV I’ve ever seen.

Someone forwarded me this resume (CV depending on where you are in the
world). I get a number of these, but this took some real creativity so I thought
I’d post it here.

Here’s the English version:
http://213.186.36.10/~al/alstudio/cv/en.htm

He did it in his native French as well:

http://213.186.36.10/~al/alstudio/cv/fr.htm

Here’s the full list – including the standard word formatted CV.
http://213.186.36.10/~al/alstudio/cv/en.htm

Anyways – kudos for creativity and I hope that this helps him find a job.

.NET To Go Mobility Roadshow

GANG (Great Lakes Area .NET Users
Group)
 is helping to host the .NET To Go Mobility
Roadshow
 on Wed., Oct 20, 2004 at the Microsoft Offices in Southfield.

.NET To Go

The .NET To Go Mobility Roadshow will provide
you with the answers to your mobile development questions. Digging into the
details, using more code and fewer slides, these technical sessions will show
you how to develop and implement mobile solutions using the .NET Compact
Framework and languages you are already familiar with. To register for this
FREE event or to learn
more, go to www.msmobilitytour.com
.

Registration is required to make sure that you can get in. You can register
at the MS Events page – http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032259728&Culture=en-US.

Wise WebCast

Bill Wagner (Great Lakes Area .NET Users Group President, Regional Director
and author of the C# Core Language Little Black Book and Effective C#) is going
to be doing a webcast on how to install and configure Data Driven Web
Applications.

If you’ve faced the frustration deploying a data-driven
Web application to a server, or tried moving applications from one server to
another, you need to attend this webcast. Learn how to create installations for
your Web application as easily as a desktop application. By attending this
webcast you will learn:

  • Why your Web application needs an installer
  • What problems you will face deploying manually
  • How to create multiple Web sites and virtual
    directories in the same installation
  • How to connect to and configure SQL Server databases
  • How to manage security for your application
  • How to edit web.config to customize your installation

 

Join Wise Solutions and Bill Wagner of SRT Solutions as
we cover the
process of creating an easy installation
for a complex Web application.

Thursday, September 30 @ 8:30 a.m. EST

For Registration go to http://www.wise.com/wfwi_webcasts.asp.

Blog Post Headlines and Pictures

Patrick Steele (http://weblogs.asp.net/psteele/archive/2004/09/16/230473.aspx?Pending=true) and Scoble have been talking about using descriptive titles on your blog posts to make it easier to scan and triage what posts you read. That’s actually a great point. I know that I scan 150+ blogs and Patrick is in the same ballpark. That’s an average of 80-120 posts a day and some days are more intense than that. The good news is that NewsGator (http://www.NewsGator.com), SharpReader (http://www.sharpreader.net/) and RSS Bandit (http://www.rssbandit.org/) all make scanning new posts.

 

Patrick went on to post about the number of pictures that are on blogs and how frustrating that is when you are offline. One the one hand, I agree with that. It’s really frustrating that when you are offline and the major portion of a given blog with an interesting headline is a picture. On the other hand, I really like the pictures that are on some of the blogs that I read. Some examples of this are:
http://bucsfishingreport.com/pMachine/weblog.php

http://weblogs.asp.net/jrule/Rss.aspx

 

I’m not saying that the pictures make the post but it does help the item. Some other blogs just add pictures for the fun of it and they don’t really add anything to the post.

There are few things that I’d like to suggest about pictures.

First, be judicial in your use of pictures. That is, make sure that they add something to the post.

Second, in the short term, make sure that you provide alternative text for all of the pictures on your blog.

Third, I’d love it if one on the readers (or all of them for that matter) would have an option to download pictures and the like with the posts.

History of Programming Languages

I thought that this was an interesting item. It’s the history of programming languages back to the mid-50s. There are a few things that I saw that were interesting – such as the fact that Fortran will be 50 this November and is the ancestor to a number of programming languages. There were a few inaccuracies, such as the fact that they skipped from VB 1.0 to VB 6.0 and completely missed all of the releases between.

 

 

 

Oh well, it’s an interesting thing anyways…