Wednesday, May 9, 2007

Software Testing

I just finished my last major college project (hopefully!) for my "Software Testing" class. It was an arduous, trite, annoying 24-page assault on everything I know about "good" and "bad" documentation.

I have a recollection (of the sort that might be real, or might just be something that seems like it ought to have happened, and so now, as far as my brain is concerned, it's a real memory) of my mother asking me after I finished some homework when I was younger if I didn't feel better now that it was out of the way... the answer then is the same as the answer is now after this software testing paper: No.

I feel more like this: Imagine you're being raped in the ass by the pointy end of a rhinoceros and then I shoot through your groin with a high powered rifle and kill the rhino. Do you feel better? Maybe. But not for long. Technically, it's "better" now that a giant horn isn't ripping your intestines apart any more, but in a couple of seconds you're going to really wish it hadn't happened at all. So that's how I feel: like I've been raped up the ass by a rhino and shot in groin. I want my 4 hours back you son of bitch!

More than that, this testing class has really terrified me. Is what we saw in class really representative of the current state of testing in the software world? The "W Model"? My god: that's like taking pipes covered with asbestos (the "V Model" of software development), which already gives people cancer, and wrapping them in fiberglass insulation that's full of holes so that people both get cancer and get lots of little glass splinters.

It's archaic.

Worse yet, it was a class of badly taught archaic methodologies. We never saw a real, concrete example of a test case put together and explained in detail. We didn't experiment with jUnit. We didn't do a static code review in class. We didn't review a requirements document to see if it was even in the realm of "testable" and "accurate". We had a professor who dodged legitimate questions and didn't ever seem to have any good facts at hand to back up his statements.

We had 3 hours a night for what, 12 weeks? As a group we had, essentially, one full work week worth of time. We easily could've broken into groups, written a complete (albeit very very short) software design document, done a static review of the document, prototyped the application, written test cases, configured an automated build and test process with Ant and jUnit and gone through a complete testing cycle.

I know, it seems like so much work... it isn't. We didn't have to code a new operating system from scratch, or build a movie-production quality 3D rendering package. We could've written Tetris, or Space Invaders, or a fucking calculator, or Minesweeper, or a program to draw happy faces depending on the time of day or the weather, or goodness knows what else.

So why didn't we? Simple: we suck. We all suck. The students are bored and unmotivated (justifiably so, perhaps), the professors are overworked, underpaid, behind-the-curve, and consequently getting pretty damn lazy in their personal ruts, the school doesn't support technology nearly to the degree it should (the CS department has no wireless network -- the dining center does though), and there's now three and a half years of lazy teaching and lazy learning behind everyone in this class.

Write a program in 40 hours with specs and tests and all that??? It would take 30 hours just to lookup how to start the program from scratch! We've never done anything like that before!!! ::panic ensues::

The whole lot of us needs to grow up.

I'm not mister follow-through -- I've always had a hell of time ever finishing anything; it's a big problem for me, but at least I work on it -- but I wrote iTunesBiggieView in about an hour. You can write a supporting tool in a day -- a "work day" -- eight hours. With 36 hours of class time that leaves 28 hours to write docs and build tests and learn shit.

I really wish we'd spent those 36 hours learning shit, instead of getting fucked in the ass by the rhinoceros named boredom.