A Software tester should have the ability to understand usability issues, should be able to design test suites and, is expected to have knowledge of software test design and test execution.
It is a multi-skilled job and not one skill is going to cut it.
Following are some of the key skills a Tester must acquire in order to be effective:
Today tester canât do away without communication and interpersonal skills, it has never been so important before.
As soon as the team gets the requirement specification to work on, tester should be sitting right beside the designer and must actively participate in all the meetings and discussion leading unto code writing (excluding coding of course đ ).
Idea is to collect any or all information possible by asking questions to get a better grip of the requirements.
Discuss with designers and come to an agreement on the scope and assumptions and what additional information they expect to be captured when raising a defect, like the screenshots, logs with a particular verbosity and / or trace level, so that time is not wasted in reproducing the scenarios again to collect more information.
If there is a concern, donât wait to let it blow out of proportion and speak about it now.
Make yourself heard and be visible. It is better for everyone if problem is known at the start instead of waiting till the end.
You cannot have a solution for every problem but someone else might.
At various stages of testing and in different scenarios a tester needs to participate in discussion with different stakeholders and he/she should be able to clearly and precisely present his/her point.
When putting your point across to a designer to fix a problem you must be precise, articulate and respectful.
Talk about the problem and facts at hand and not the capability of designer.
Domain knowledge is certainly very important, and there should be constant effort to learn the domain in which you are working.
Equal importance should be given to acquiring knowledge about Operating Systems, Networking Concepts and Databases.
These are three skills each tester must acquire regardless of the domain. No matter what technology and domain you are working on, youâll always have a platform running on some operating system and there would be a client-server architecture which would be networked or a multi-node setup communicating over the network or something like that.
Everything being data-driven and data being at the center of it, all you will have is some database systems to be manipulated.
You need not be an expert on all possible operating systems, databases and scripting languages but if you know the ones you are working on, Â then you are golden. It wonât be too much of pain to learn about new things when needed.
These skills are extremely important because it will help you resolve any issues related to operating system administration you might face during test bed preparation which usually requires installation or an upgrade.
Very rarely a tester will not need to know at least one scripting language.
In my experience, he/she must know at least one. It goes well with the knowledge of regular expressions and OS administration.
It can save a lot of time in lot of test related activities ranging from test data preparation to manipulation, data and setup migration, third party package installations and numerous such things.
Also, if you know one, itâs easy to learn the other.
Open source automation tools like Selenium use Java and if you are scared of programming then you wonât be able to learn such tools and be at disadvantage.
It is very important for a tester to keep an open mind and challenge his assumptions when everything else seems right but still the output is not as expected.
Leon Festingerâs theory of cognitive dissonance focuses on how humans strive for internal consistency. When inconsistency (dissonance) is experienced, individuals tend to become psychologically uncomfortable and they are motivated to attempt to reduce this dissonance, as well as actively avoiding situations and information which are likely to increase it [Source: wiki].
Sometimes, root cause of the problem is in the underlying assumptions made at the beginning of the activity.
Also Read: Challenges faced by Software Tester, Role of Software Tester
Testing is all about planning and managing.
Mostly you âll be in a situation where design team has not provided the software build for testing in time but you will be asked to manage it in the remaining time.
In such scenario you would need to assess the risks and select the test cases accordingly making sure that there is minimum impact on quality.
More often than not you find yourself fighting for test lab resources within the team and across teams, there you would have to come up with a plan where everyone gets fair share of resources and there is minimum impact on productivity.
You need to have all the artifacts well organized for reuse instead of reinventing the wheel, so that whenever you want to refer to anything, you have easy access and time is not wasted unnecessarily.
The thought process of a tester is what differentiates him from developer, otherwise why you would need to separate team of individuals to test the work of others.
He should be undistorted, impartial and without any prejudices.
Tester should be open minded, suspend any judgment in the absence of sufficient evidence to support a decision, and always abide by logical reasoning.
He must be inquisitive and explore the system to be tested and ask questions no else would to find out what works, how well it works and what does not work and when it doesnât work.
Knowledge in the context of testing can be attributed as the fluid mix of experience, values, contextual information and expert insight.
Those things provide a framework for evaluating the system under test. One can attain knowledge by so many means, but that knowledge is worthwhile only when it adds value to situations encountered.
A smart tester should be able to apply the knowledge attained over years of experience with the domain, process, product, customers, mistakes and successes in his testing.
He should be able to make use of fundamental communication, mathematical and software application skills. He should also be able to effectively apply the skills he has attained to practical situations.
These are some of the most important skills  useful for software tester in any kind of testing role, however, depending on the ground realities it may vary and sometimes one skill is needed more than other.
Please share your thoughts and experiences.