Submitted earlier to Slashdot with little confidence it will make it up, so I’m cross-posting it here.
The focus of software development is drastically different for software testers as opposed to “real” developers. Yes, many of the fundamentals are exactly the same; however, testers need to concentrate on getting bits and pieces of code up quickly for different purposes. Furthermore, testers may not need to plumb the depths of a particular technology, instead concentrating on building just enough code to exercise particular functionality for a system. A Tester’s Guide to .NET Programming from Randal Root and Mary Romero Sweeny does a nice job of laying out just enough fundamentals on Microsoft’s .NET platform to enable a software tester to start building testing applications.
Who it’s For
This book is absolutely targeted to software testers. This isn’t an in-depth discussion of why one should use C#’s “as” keyword for safe casting, nor will you find details on asynchronous communication. What you will find is a quick coverage of enough basics to enable testers to start hitting web services, Windows and ASP forms, and even deal with basic COM interoperability.
Who it’s Not For
This book is definitely not for developers. There are some core software development concepts which get mangled in this book, such as the notion that the only thing static classes and methods (“shared” in VB) let one do is access that class or method directly via its fully-qualified name. That’s perhaps somewhere vaguely correct, but misses the real guts of how static things work.
Nevertheless, keep in mind that this book is for testers, not developers. Such near-misses are few and really don’t have much impact from a tester’s point of view.
The book is well-written, concise, and in a good voice. The authors carry a common project through much of the book, using the development of a bug reporting system to lay out .NET fundamentals. They use a nice building block approach along the way, starting out sections with the extreme basics and moving on to mid-level topics. (You won’t find anything particularly advanced in the book, but again, the focus isn’t on pointy-headed developers, it’s on pointy-headed testers.)
Helpful sidebars are scattered throughout the book covering critical topics such as the differences between using Debug or Trace classes for writing out various pieces of information. There’s also a nice sidebar on partitioning test data via equivalence classes, and how boundary (border) value tests should be used.
There are also several very nice basics covered such as dealing with moving files around programmatically, or using the database explorer to examine table state as part of test setup.
Readers will find fair discussions on how to start working with web services and COM objects, too. There’s also some nice exercises on how to use text injection for rudimentary text field testing. ADO.NET gets another nice nod too, with the fundamentals of database interaction getting quick coverage.
There’s also a very quick, but useful, introduction to the test platform in Team Systems. This chapter’s a little odd, with a different voice and different style for code examples, but it’s quite a nice overview of how Team System’s testing framework, test management tools, and load testing can be put to use by a tester.
What’s Not Good
There are several things I don’t care for in the book, mostly from a software engineer’s viewpoint. One thing driving me crazy was the already noted not-completely-correct discussion of static classes. Another would be the authors’ notion of code reuse via copying in code or classes vice simply referencing a different assembly and keeping code in one central spot.
I was also bothered that no mention was made whatsoever of existing test frameworks such as NUnit and MBUnit, nor was any mention made of automation tools like Selenium or Watir. I realize those are somewhat out of scope of the book, but a passing reference would help point testers to some invaluable tools.
My small irritations with this book come from my background as a developer. I’ve also been in a specific testing role, so I can really appreciate the positive things this book offers. It’s not a book for any developer to fool with, but it’s an invaluable book for testers looking to learn programming in .NET, specifically tailored for their work as a tester.