Think Like a Tester, Train as a Developer.
Training is the key....
I consider myself a man of habit, somewhat stubborn and stuck in my ways especially when I was younger. In my first few jobs mainly working in data warehouses, I refused to work with graphical SQL clients, it was all sqlplus, db2, isql for example, and up until a few years ago I would not go near an IDE, I was tied In holy matrimony to vim. I have chilled out a lot since then and have become more open minded, and would not develop anything without my trusty intelliJ IDE, in addition I wish I had embraced these more modern tools sooner in my career, but why didn’t I?.
I always felt there was something pure about working with the command line, seeing lines of green output on a black screen always made me feel more technical, and indeed it made me more technical. I had to think about ORACLE environment variables, about where the database lived and what files I had to configure to connect to it, I forced myself to do it the hard way which in turn helped me develop stronger technical skills than the other testers I was working with.
As I have become older and wiser, I realise that doing things the hard way is probably not the best way, its time consuming and sometimes less productive. However training yourself and keeping up to date with the latest technologies and methodologies is essential if you want to become a better tester. Testing literature in my experience talks more about the mindset and the process of testing, there is nothing much out there that teaches you how to become a technical tester, which is why I tend to train myself as a developer, whilst still keeping a testing mindset.
I'm always taking on small projects in my own time, from setting up a media server on my trusty Pentium 4 machine with Ubuntu install, to building fully fledged data driven website's. Tinkering and messing around with technology is something that I enjoy. It is this exploration and playing that increases my technical skills and in turn makes me a better tester.
I'll give you an example, I have recently started playing with the web development framework 'Sinatra' to build a hotels booking website. When choosing a database, instead of going for the more traditional SQL distribution, I decided to run with MongoDB. The application also makes numerous calls to a RESTful hotels api, so sending, receiving and parsing those requests had to be coded. In a weekend I have managed to gain an understanding on how ruby sinatra works, how to install and configure Mongodb and developed my net/http programming knowledge further. This journey has now sparked an interest in html5 which i'll learn in depth so I can make a mobile version of the site.
I am learning specific technologies, but more importantly, learning how applications are built. Learning the inner workings, the cogs that drive applications, and how they fit together which gives me the inside track on how to break them. By undertaking development activities I have become a better technical tester.
Training in this way helps me develop skills that are essential to me as a tester I can think of the following, but this is by no means an exhaustive list:
- Reverse engineering – No documentation? Not a problem to a true technical tester, they understand how software applications are built, and can decode the functionality and architecture with a little effort.
- Technical Terminology – Technical testers can speak the language of the developer, they go deeper than the front end, in web apps for example they talk the language of requests and responses rather than 'actions' and 'expected results'.
- Better Bug Reports – Technical tester can fire up a shell, they know where the logs are being spooled, they know how to view the stored procedures in the db, they know how to monitor process's and resources, and this all goes into a bug report when they raise one.
- Automation – OK so not strictly a testing task in my opinion, but coding skills help testers to automate their testing if need be, and as more and more jobs require this skill it certainly comes in handy.
- Adoption – Technical testers are quick to adopt new useful tools, even if they are not directly related to testing, anything to help them in their bug finding mission they will utilize.
- Enjoyment – Technical testers are continually learning new skills and technologies, days seem to fly by, and they have a real passion in what they do, its almost like it isn’t even a job!.
There are many more benefits in developing your technical testing skills in this way, for me it beats just reading a text book cover to cover with no practical activity. Finding bugs is a lot about trial and error, trying new things and persistence, it's this 'hacker' mentality that separates the good testers from the bad, and therefore it's a mentality that all testers should adopt.