Over the last 15 years, on far too many occasions to count, I’ve explained to various people how software testing, and software engineering relate to music. I know other testers have made somewhat similar analogies, but I think I have a different take on the subject. I also have to admit that I get a little tired of the "Testing is like…" topics sometimes, but I’ll give this a spin anyway.
One topic I often bring up is how much great testing and great improvisation skills have in common. I know, and have heard many musicians who, through use of a good ear alone, can sound reasonably well improvising (playing without sheet music) on their instruments. To many people, these folks sound more or less like they know what they are doing. The good players, however, have mastered the fundamentals of their instruments. They know every scale throughout the entire range of their instruments. and have practiced hundreds of hours of scales, chords, and patterns for every minute of what you hear them play. The masters of improvisation, including some of my heroes like Sonny Rollins, Dexter Gordon, John Coltrane, Sonny Stitt, Charlie Parker, Hank Mobley, and Stan Getz,have studied and practiced the basics even more. The thorough knowledge of the basics is what makes them so good.
Testing is the same. You can learn a few licks and think on your feet a bit and get by in testing almost like you know what you’re doing. However, if you want to master testing (or just get good at it for that matter), you have to dig down and master the basics – no matter how smart or creative you may be. Thorough knowledge of testing fundamentals – along with domain knowledge of what you are testing will guide your testing and lead to success. The more you know, the better job you’ll do, and the more effortless your testing will seem.
The funny thing about improvisation is that for the better players, it isn’t all that improvisational. A musician may "discover" a new melody, quote, motif (or lick) in the practice room, then practice it in every key until they can play it without thinking. Then, in the middle of their solo, when just the right rhythm and chord progression present themselves, they’ll play the lick. As a player builds up enough of these licks, they use them fluently throughout their solos. If you listen enough to any good improviser you’ll hear many of the same motifs throughout their solos. This, of course, makes sense – this is what they practiced. Coltrane’s Giant Steps is a great example of this. It’s fantastic playing, but when you listen closely, most of what he’s playing are the same patterns over chords that many other musicians are playing in the practice room (Trane is just linking them together and playing at breakneck speed).
Great testers use their knowledge of testing fundamentals and software applications in the same manner – they learn the basics (techniques and some knowledge of how computers work), and wait for the perfect opportunity to apply what they know in an effective and meaningful way.