Unit Tests are the backbone of Agile development. Unit Tests ensure that you are done making a “unit” of a program, that a change or refactoring you have done to a “unit” has not broken the program, and they also help to ensure that you are not over-programming – creating more than you needed to in the wrong place.
I ran into an interesting problem yesterday. All I wanted to do was some simple tokenizing of a partial HTML document, an HTML fragment (it was article content from the website I work on) based on certain elements. At first it seemed like a really simple string manipulation thing, but quickly blew out of proportion into something crazy.
When a programmer is bored he sometimes over-engineers and under-designs a project. We adopt an attitude like “well, if I have to do this in VS2005 and .NET 2.0 I may as well implement a service-locator and message bus and use all that technology I wanted to learn.
Larry Wall truthfully said the best virtues for a programmer are laziness, impatience and hubris. Sometimes you ignore these virtues when you get bored, you start to do stuff you know you shouldn’t, and your laziness doesn’t balance your hubris.
My new virtue that I’m going to work hard on is, ironically, laziness. 🙂 KISS is the new methodology for me to follow: Keep It Simple, Stupid for design, YAGNI: You Aren’t Gonna Need It for architecture.
There is a lot of buzz on the NoSQL track these days, and it is gaining a lot of traction in the blogger world. But in the old school world of big business and big government there isn’t much movement, at least not that I’ve seen. In these industries there is still a lot of entrenchment with database companies like Oracle and Microsoft. These companies have invested a lot of money into their relational database infrastructure.
Its hard to see the “death” of the relational database right now. I don’t think a switch-over from relational databases to non-relational databases is coming – but there is a game changer coming; another new technology getting a lot of buzz and traction in the blog world: Cloud Computing. I think the biggest driver in changing from relational to non-relational databases will be The Cloud.
There are few things that help a developer maintain an application better than Unit Tests. There are a few things that make me nervous when I open a solution from VSS, but nothing makes me more nervous than a lack of unit tests projects.
I know the Unit Testing drum has been beaten for years, so instead of getting on a soap box and berating the Internet for not Unit Testing, I’m going to give you a story about a recent project I worked on, and how unit testing helped me succeed.
I’ve been using a few ORMs with a few projects, including NHibernate, SubSonic, Linq-to-SQL (L2S) and Entity Framework (EF) and even Strongly-Typed DataSets. Each provides an abstraction from the database, a few have Visual Studio integration, and they all simplify data storage for you, but I’ve found some are definitely better than others.
Earlier this week a friend of mine asked me for some advice over an argument that some developers at his company were having. They are collecting data from a device, and one developer wanted to have the device send the data to a web service to receive the data. The other developer thought a web service would be to much “overhead” and wanted a different solution using direct writes or XML to the database and a UDP socket notifier for the server to parse the data.