maanantai 3. joulukuuta 2012

What does it take to become a better software tester?




Lately I have been thinking on the subject about how to become a better software tester. Actually what defines a good software tester? What are the skills that good software tester should have?
So I decided to make a list on three most important skills which I should have in order to be a good software tester (in addition to the actual skill of software testing):

1. Computer science skills.
I think these are must for anyone working at things related to computers and computer software. These skills include things such as programming languages, understanding inner workings of computers and common operating systems, understanding things such as algorithms and computing theory, understanding computer networks,  etc. To test software effectively you need to understand how software actually works and how can you ease your workload (automation, visualization, alerting, etc.) with the help of the computer. If you are looking for points where to start studying check out MIT Open courseware video lectures on computer science (http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00-introduction-to-computer-science-and-programming-fall-2008/video-lectures/) or the just awesome Khan Academy (http://www.khanacademy.org/) where you can study lots of different subjects.  For programming languages my favorite language of choice is python (http://wiki.python.org/moin/BeginnersGuide, http://learnpythonthehardway.org/book/, http://www.ibm.com/developerworks/aix/library/au-python/ )

2. Systems Thinking and modeling skills.
To quote famous late Mr. Russell Ackoff:

"System is not a sum of the behavior of its parts; it’s the product of their interactions". Software can and should be thought as complex system. In order to understand those systems I need to be able to see the whole picture (eg. To recognize the forest from the trees).  To test such system I need to understand how the different parts interact together and I need to be able to model this. For this, the Systems Thinking is an important tool. Recommend this video for quick 12min description on Systems Thinking: http://www.youtube.com/watch?v=OqEeIG8aPPk  , for more I recommend this book http://www.amazon.com/Introduction-General-Systems-Thinking-Anniversary/dp/0932633498


3. People and communication skills.
Ultimately all software is made by people for the people. I need to be able to understand and communicate with the people in order to test the software effectively and present my findings in clear and professional manner. For this I need to study psychology, social sciences, rhetorics etc.

So how do I work on these skills?
One way is to read books, lots of books. Here is a nice mind map from my fellow tester colleague Aleksis Tulonen. Funny thing is that even if you read just one book a year related to software testing, you are in the top 10% of testers who study their craft. (Ok, maybe this is an overstatement but sadly I find that less than 1 out of 10 testers in Finland, whom I have met, actually read books related to software testing others don’t read even the single book). Then again I would say that 1 out of 20 books related to software testing actually deserve to be read others are just waste of paper. And remember “all work and no play makes a jack a dull boy” so don’t just read IT-related books but read books on psychology, read books on social sciences, read books on philosophy, read books related to observing, read books on how to conduct scientific experiments,  etc. All these things add up and raise your general knowledge on things which in turn make you better prepared for future testing related problems.  Knowledge attracts knowledge!

Second way (and I think the most important way) to study testing is to actually practice it. Like they say about musicians, a musician who does not play or compose music is not a musician. Same goes for testing. In order to be a good software tester, you actually need to test. Everyday.  So after reading those books on software testing, systems thinking, computer theory, observation, you need to apply those ideas to actual testing. So go out, think, apply and test. Ok, I hear you saying “I cannot test anything as I am not currently part of any software project or I don’t have any time”. I say that is just an excuse. Do you have a smartphone? Do you have a personal computer? Do you browse the internet? You can practice testing with all of those.  If you have a time to browse or play with you phone, then you have time to test. Try mini-sessions  (10-15min of testing). Participate in open source projects, test websites and give feedback to webmasters, try and install a new game or software for you smartphone.  You can even test the software inside of your “smart-TV” these days!  Just test it.

Third way to practice your craft is to learn how to talk about it. Go out and attend to conferences, talk with the testers you meet, ask for coaching from other testers. You can also do parts of these things via internet. Just start a testing related blog and blog about your findings. Or if you don’t have time for blog, then surely you have time to write max. 140 characters on your twitter account. You can also ask for coaching via skype from people like James Bach or Pekka Marjamäki.  I have also founded a channel in IRCnet called #softwaretesting if you like to hangout in IRC, feel free to join in.

 - Samuli

Ei kommentteja:

Lähetä kommentti