I decided to mind map the skills needed to be a let’s say “the best software tester” in a perfectly designed world. Of course, i don’t imply all of them are obligatory, and after all it’s all my subjective view.
Software tester’s skill set – mind map.
Here I will explain (and I will try to be short, or more likely, struggle to be short) why I picked these specific skills and why are they essential, what did I meant by that specific phrasing.
If we keep up with the definition there’s hard and soft e.g. technical and human skills, the first (right) branch of our skill set is the technical skills. I don’t want to put any priority to eighter technical or soft skills, but to me personally it looks like the industry is lacking technical skills, rather than the soft skills. In fact, the soft skills are more general ones, they could be applied practically in any area of business or science and yet be useful. I will start with the more general tech skills and proceed with the more specific ones.
Networking, protocols and services.
As I mentioned, I will move from more industry generic skills through domain specific, to profession specific skills. And mastering, or at least understanding the networking and services fundamentals, is something everyone should include in their personal development path.What I strongly recommend to get familiar with is: the OSI model, TCP/IP protocol (you might find Cisco’s book very usable here), REST, SOAP, oData. These are practically the building blocks of any device around you, some of them might be a little bit old, but all information will be useful to you as a source of basic IT knowledge, it’s almost impossible to be valuable testing expert if you don’t familiarize with these, at least at some high level.
General OS knowledge.
This again includes core IT skills, these are a must. And to be honest if you are just curious about technology, you will find it easy to explore and learn to use new operating systems. Good things to learn here are, of course Windows, Linux and Mac OS, just because you want to know what are the differences across desktop OSs, may be a couple of server versions of Windows and Linux, just to spot the difference. On the mobile side, since mobile is already a standard, not just a “nice to have” anymore – it will be good to be familiar with iOS and Android of course and since wearables are sneaking into the scene – Tizen and Android Wear OS.
Testing is all about context and preconditions, the operating systems you are using to test your application will be essential for the information you will learn during the process of testing.
Software development life cycle knowledge.
Just as much as any other craft, software development has its rules. Car industry has a process how to manufacture cars, architecture – how to create a building, same with software. There are rules and processes in making software and like it or not, you will have to follow them, or at least know them as good as you aren’t harming the process. So, couple of software development methodologies you may want to add to your knowledge base are:
And again I say, you don’t have to become fanatic, after all it’s a process, you learn it best by doing it, by actually being involved in it, but it will be valuable for you to add this to your skill set in order to prove yourself more valuable than the others.
Testing terminology knowledge.
Another valuable asset to your skill set as a tester is knowing the language of testers. You shouldn’t be confused when someone uses terms like regression testing, system testing, usability testing, etc., all of these should become part of your dictionary. As James Bach says, one of the key things a testing expert should master is to express in words how he performed the process of testing. This is valuable in two ways – to justify your knowledge as a specialist and to prove the depth of the job that you’ve done, instead of writing shallow documentation that has no meaning. I will strongly recommend you to watch the videos of Foundations in Black Box Software Testing – by Cem Kaner, Bach and Bolton, which gives a lot of good explanations, examples and a lot of literature.
This asset to your skill set has a little bit more to do with the domain specific and profession specific part of it. Knowing DBs is essential to all testers, because in our practice we need to deal with a lot of them. So, may be some knowledge in the following areas will be beneficial for you:
- Types of DBs – Oracle, MS Sql, MySql
- Difference between relational and non-relational database.
- What are primary and foreign keys.
- Some basic commands – CRUD operations.
- Creating a table, deleting a table.
- Creating a back up, restoring from back up.
- Joins – left, right and inner join – differences.
All of these will be useful, believe me.
You will probably ask what is that and how you train it, isn’t it just a dev thing. Well, no it’s not. Algorithmic thinking is the ability to get a complex problem and split it into small enough chunks which are on their own simple problems, then by combining these and arranging them in the correct order, to progress in solving the complex problem. And yes, there is a way to train that skill. Testing is one way, searching for a way to expose a vulnerability in the security of a system is, for example. Another way to train your analytical thinking is by playing games and by this I mean even computer games. Video games nowadays are really challenging. Other ways of improving might be – word games, crosswords, Sudoku, simple logical games and of course – solving programmatic problems by writing them in pseudo code.
For sure it is always useful having this in your skill set – if you need to deal with the console in Linux or if you need to automate some simple dumb task in your operating system. It will be a good idea to take a look in shell scripting tutorials as well as couple of Powershell, in case you need to write scripts in Windows.
Yes, this one, too. Don’t start crying how you don’t want to be a dev or how non-technical you are, no one is listening to you. It is always good to know the inner workings of the application or system you are testing. It’s not obligatory to be too good, as long as you could understand the code at least at high level or at least anticipate how the code is written in order to predict presence of a mistake in it or a misconception that novice developers might have. As a helper I will recommend EDX’s course CS 50 which cover pretty much all the basics of programming and web, and learning two essential languages – C and Python. First one, because it’s light weight and practically transparent for what’s happening even to the lowest levels, also almost all modern languages inherited it’s paradigms, I’m not saying it’s easy, I am saying it’s educational. Python, because it has easy syntax and is generally usable as programming and scripting language. Every language more than that is always welcome and will only broaden your horizons as a technologist.
Well, like it or not automation rules in software testing and it’s a valuable skill. There’s a huge variety of tools to automate trivial tasks in the UI, headless testing, component level testing, acceptance testing, penetration, load, performance, building CI with automated tests or any other testing related infrastructure – there are plenty of directions you may go if you are into automation. If you succeed to learn even a little bit of all of the above, I am pretty sure your transition will be smooth and you will be able to adopt any technology faster.
In the next post I will focus on the other branch of the tree – soft skills.
If you liked that post, don’t forget to share with your friends and comment. Thanks 😉