The image of a modern tester. What you need to know and be able to
There is an opinion that the simplest way to IT is through testing. They say that you don’t need to know anything, to be able and even more so; all you need is desire and readiness not to squint much of pain and tears when another set of test cases arrives for you for regression testing.
In part, this is even true, but rather for the situation that was on the market 10 years ago. Now everything is different. The reasons for this mass, and they are very different. If you note the key, then perhaps this is:
Increased requirements for testers, their knowledge and qualifications, as tasks are increasingly solved a little more complicated than “click-click - and in production”. The work of testers is becoming more “engineering”, it requires technical knowledge, specific knowledge, skills and competencies. Testers are increasingly becoming QA-engineers (who are in the subject, he understands the difference).
Increased supply in the market, when crowds of yesterday's "civilians" rushed into the abyss of IT, fueled by an abundance of information: from conferences and books to articles and courses on software testing. Your humble servant in his time also had a hand in creating a pair of publicly available courses because of the desire to replicate basic things from his professional field (you can see here and here ).
Therefore, today it is less and less possible to rely solely on moral and volitional qualities to enter IT in light of the increased market appetites and an abundance of conferences, courses, trainings, literature, articles and other information sources that are within the reach of novice specialists.
Of course, more and more companies are trying to grow specialists under their wing, showering the lucky ones with new knowledge and skills, at the same time increasing loyalty to the company. However, even in this case, burning and sharp questions arise for companies and their specialists ...
How not to get lost in the variety of information that is filled with the Internet and the world around?
What to teach yourself or what to teach your fighters?
In my article I will try to tell in general what you need to know and be able to work as a specialist in the field of quality assurance in the most popular and sought-after areas. Go!
The following specialties constitute the prevailing market share of the demand and supply of testers, and therefore (and due to the lack of sufficient and relevant work experience) in the article, alas, there will be no sections on perfomance and desktop specialization.
The material for this article is based on my own work experience with brilliant specialists of my teams, on the results of teaching at Moscow State University, Moscow State Technical University and the online course, as well as on hundreds of interviews conducted and dozens of hired QA specialists of different profiles. I do not pretend to the exceptional correctness of my view, but I believe that my experience allows my point of view to be sufficiently competent.
It would be strange to believe that with the increased requirements for the technical aspects of the work of testers, the importance of personal qualities has diminished or disappeared altogether. Moreover, I am sure that character traits underlie a successful specialist and are crucial with similar knowledge and skills. After all, we do not work with human-interfaces to Stack Overflow and Wikipedia, but with real people who remain so in the office and at home. Therefore, it is important to take into account personal qualities in the context of the upcoming choice of industry, profession and specialty in it.
Why do I think so? Everything is very simple! I can easily send a specialist to a course or conference, order books or conduct trainings on the nuances of test design, programming languages, SQL, networks and other technical aspects in order to get the first results over time and further multiply them, consolidating the information obtained in practice . However, you cannot send to the course “How to stop running after office buns and start investing in your own knowledge”, “How to stop being an irresponsible liar and start living honestly”, “How to stop being a gray mouse and become an enthusiastic person”, “How to stop hating people and learn to work in a team "and expect a tangible result after listening. Alas, this is a fact of life, the internal disagreement with which allows a wide stratum of “info-businessmen” to earn on recalcitrant, eager to change their fundamental pillars and character traits with single training or online webinar series. That is why it is so important to have at the start the right life motivation and qualities for working in IT and in QA in particular. So what is important?
Motivation to learn and self-study
Honestly answer yourself the question: do you like to study? Not once, but on an ongoing basis. Are you ready for a single leap that will magically take you "into the ladies", or are you eager to absorb new knowledge every hour and every minute? IT is an area where blink is bad enough, and you are already on the sidelines of the industry. You should not expect that after reading a book on testing over the course of a year, you will discover the gates to the brave world of new knowledge that will allow you to be in trend for a decade ahead. Ideally, if you do not always need a wise mentor and teacher to study, and you are able to sit down yourself for a new book, webinar or courses.
Rate your level of responsibility. A simple way: voice to start yourself some of the biggest mistakes in life. Does not work? This is not about your impeccability, remember that only he who does nothing is not mistaken. Remember? If only a couple of small things, then this is a sad indicator. Worse, if you remember the mistakes of the past, you immediately blamed someone else or the circumstances, instead of acknowledging your responsibility for what happened. But if you remembered a couple of large files, where you were to blame, and also remembered how to fix them, then your responsibility is much better. A tower is when you not only correct a mistake, but also insure yourself against it for the future so that it does not repeat. Responsible approach to work is the key to a successful career in any field, therefore, this is an extremely important feature for the tester. The main thing is not to bend and know when to stop, because hyper-responsibility is not always good.
Are you a passionate person? Honestly, what are you fond of? Nothing special? Or is it a lot of small hobbies that you do once a year? Maybe something big, but time is constantly not enough, but because the hobby is waiting for better times. A person remains a person in the office, and when he comes out of it. And if a person is really keen on something in everyday life, it means that in work he can be carried away by something so much that he will sit up in the evenings or study the issue on weekends on his own initiative. The task of a competent manager and a specialist himself is to find such tasks. Of course, it is important to bring the begun to a logical conclusion and not to leave halfway. The tester can not be "dry". But if he burns with his work and product, then the effectiveness of such an employee will be higher.
Flexibility of behavior
An important feature for working in modern IT companies and in QA in particular is flexibility. New knowledge and trends come with the speed of the winds of Jupiter, to resist in the style of Gandalf Gray “You will not pass!” Before the industry is extremely difficult and not always advisable. That is why it is quite important to be able to adapt to the new working conditions, be it the company's general line, new products, the team, work methodologies or tools. The more flexible the employee is, the more chances he has for career development in IT.
Sociability and contact
Without a doubt, you can be a successful specialist, being quite closed, but deeply immersed in your task, but learning something new and teaching others more chances from a sociable and contact person. It is not necessary for everyone to be a great orator and speak in public at events, but it is important to be able to find a common language with colleagues, to competently express their thoughts orally and in writing. In the work of the tester, these are quite important features, because you need to communicate a lot and often, and the more you talk about QA, the deeper and more detailed you are immersed in related areas, where the ability to build communication is half the success.
A tester needs to be a team player. It doesn't matter if you are working in the service testing model or the testers are integrated inside each team. It is very important that you give your team a “sense of shoulder” so that they can rely on you, and you on them. There is no warrior in the field - for testers it is also a story about further career growth. After all, the team, as your closest environment, is the primary source of knowledge that you will receive about the product, processes and technologies. If you are a team player, then in testing you will achieve greater success than a loner.
Initiative and determination
As you know, under a rolling stone, water does not flow, and therefore inertia will go sideways in the profession of a tester. A good tester is proactive, does not expect a kick from colleagues and the manager, but he comes with new solutions and suggestions. If the tester once said “this is not a bug, but a feature,” then he should not give up. Instead, we must take the initiative and present their point of view. Of course, you should not go to extremes and argue on any occasion, but you shouldn’t agree with everything they say. The basis of the work of a good tester is not only critical thinking, exposing the surrounding world to strength tests, but also the ability to form one’s own position at the right moment and defend it before others.
This list can still be continued and supplemented; I have identified key features based on my own experience. Of course, we are not talking about the fact that if you do not have these qualities, then you are unfit. But it is safe to say that the less of the stated qualities will be in you, the more difficult it will be for you, for your team, and for your leader. Any exceptions are allowed, which only confirms the rule.
Basics of testing
The following knowledge and skills are absolutely necessary for any tester, regardless of his specialization. These things are the basis of the basics; they learn quickly and easily, especially if they are immediately fixed by practice. We strongly recommend to all novice specialists to dive into the topics stated below. Armed with this knowledge, you will be able to discover the boundless world of software testing, eventually mastering any of the directions, but the knowledge laid down in the foundation will always be in demand.
Classification of types of testing
Even a novice tester should have a basic understanding of different types of testing, when they are used and for what. This is a dry theory, which is not needed by itself, but without it “putting it on top” the practice can be painfully painful and long, and in the process you will also invent bicycles, and you will collect known rakes. Do not be lazy, read, the benefit of a lot of sources. But then with ease you can pass the “test a pencil” level task at interviews.
Error localization and bugreporting
Little mistake to find. It is extremely important to locate the error as necessary, setting as many circumstances and conditions as possible for its stable reproduction. Moreover, it is necessary to acquire the skill of making high-quality bug reports. In my lectures and when working with a team, I often use the following comparison: “Your bug report is good if you went outside, took the first grandmother by the hand, and she was able to reproduce the defect according to your description or verify its absence” .
Test design techniques
Basic things that are often in one form or another are checked at interviews or in homework, giving tasks like “test the form for entering numbers” and “write autotests to our authorization form”. It is important not only to memorize what “equivalence classes” are or “analysis of boundary values”, but also to be able to use different techniques in any conditions, combining them.
Systems of bug tracking, knowledge and test management
The times when bug reports were written on sheets, and test documentation, checklists and test cases were sent to google docks, have sunk into oblivion (yes, I know that some still write, and sometimes it is even convenient ). Professional tools replaced this samopal — bug tracking systems (the most popular ones are Jira, Redmine), knowledge management systems (Confluence, Wiki, etc.) and test case management systems (TestRail, Zephyr, TestLink, etc.). ). The basic principles of working with tools can be obtained by fitting into open beta testing programs or by installing software on your own (there are both free solutions and shareware on the scale of introductory sessions on the market).
Software Development Methodologies
You may not need a deep understanding of software development methodologies at the initial stages, it is important to understand the differences between the most popular ones (Waterfall, Scrum and Kanban) at least with your fingers. But over time, he will have to dive deeper and deeper into the methodology, selecting the appropriate approaches and techniques for testing in the context of a particular development process. It is important to be prepared for this and pay some attention to this side of the issue.
Most modern software is built on whales of client-server interaction. It is important for the tester to be in the context of this architecture, to understand the principles of its operation, the main advantages and disadvantages. This will allow not only to carry out better tests in the course of their work, but also, if necessary, to understand how the defects found should be localized, correctly determining which side they are on.
The principles of operation of operating systems, what they are and what they are all about - general knowledge, which, as a rule, simplifies the life of a tester. Even an understanding of the trends in replacing desktop OSs with mobile ones, as well as mastering the skills of working with OSs at the user level is already a plus. And if you dive deeper into this issue, then over time you will need to acquire the skills of setting up and using the whole operating system (the most popular ones are Android, Windows, iOS, macOS, Linux).
Web Application Client Testing
One of the easiest and most common ways to get into testing is to start testing web applications. This specialization is one of the most common in the market, however, the direction of client testing of mobile applications is on its heels. In any case, you need to understand that such a development vector is one of the most accessible at the very beginning of a career. On this subject there is a mass of educational materials and articles. If desired, then you can develop in any other direction, most often it is automation or all the same mobile devices (for example, after mastering the testing of web applications for mobile devices).
In the context of client testing of the web, it is important to understand the structure of thin clients, browsers in particular, as well as their differences, the specifics of rendering and the operation of scripts, engines under the hood, versioning, additional browser tools, etc. It is important for the tester to always keep in mind the popularity of using a particular browser with real users of the product in order to distribute tests in the most efficient way. Most popular: Google Chrome, Safari, Firefox, Opera, Internet Explorer.
Developer Console in the browser
The web tester should be able to use the developer console in the browser (at least work with elements on the page and network requests). In the case of working with page elements, the tester must understand how to localize them or, if necessary, change them, and in the case of network interaction, be able to understand the sequence of requests and responses received. Ideally, you need to know various http-methods (GET, POST, OPTIONS and others), know the response codes (10X-50X), be able to read the headers and response bodies.
The separate universe is backend testing. This world is devoid of ryushkas and beautiful, there is no place for graphical interfaces, only a flickering cursor in the console, mountains of text and pure application logic. The specific direction of testing, which is not always easy for beginners. Usually requires more thorough technical training specialist at the start.
The basis from which to start a backend tester is the OSI model. Despite the fact that in most cases the tester is unlikely to use the levels below the application and representative levels, it would be nice if he understands where these levels are relative to others, what their specifics are and how they are applied.
REST. SOAP. JSON-RPC
REST, as an architectural style of client-server interaction, is the basis of the modern Internet. Understanding the requirements for the REST architecture should be in the arsenal of knowledge backend testers, as well as knowledge of the standards used in it (HTTP, JSON, XML). In individual areas, knowledge of the SOAP protocols (and with it XML, XSD, WSDL) and JSON / XML-RPC, their capabilities and limitations can be just as important.
Without command line skills, the backend tester will not be able to do in most cases. At the initial stage, basic things will suffice in the spirit of working with folders and files, creating them, reading, moving, etc. This knowledge will allow the tester, for example, to work with server logs to localize defects. And over time you will not be able to do without bash-scripts, working with file descriptors, pipelines and regulars.
cURL. Postman. SoapUI
To test the REST API at the start level, the command line utility cURL is perfect, allowing the tester to send test requests and receive answers, parse them and compare the actual result with the expected result. A more advanced and at the same time more casual (due to the presence of a GUI) API testing tool is Postman, the skills of which are also very useful. And if you need to test the SOAP API, then the SoapUI tool is ideal (in fact, you can also test the REST API).
It is important for the tester to know and be able to work with the DBMS, primarily with SQL (MariaDB, MySQL, PostgreSQL, MS SQL). And the most popular is knowledge of SQL. Very often in the job description there are mentions about this skill, which sounds like "Knowledge of SQL at the level of simple queries." As a rule, for a start it is enough to know the basic things of the INSERT, SELECT, DELETE, UPDATE, WHERE, ORDER BY level, in some cases you need JOIN, INNER JOIN, RIGHT JOIN, LEFT JOIN. In addition, the undoubted advantage will be the knowledge and skills of working with NoSQL DB (MongoDB, Cassandra). They will allow the tester to compare the expected and actual results during the execution of tests when working with data.
Mobile Testing for Mobile Applications
Young and, perhaps, the most popular direction in testing. It is the least studied, there are not so many established canons, the strongest fluctuations now and then cover this specialization. On the one hand, this is a fairly easy to learn direction at first, on the other hand, it requires the tester to be constantly at the forefront of trends, knowledge and skills so as not to fall out of the background of history.
For a mobile application tester, it is important to master the development environment at a basic level (Xcode for iOS, Android Studio for Android). Knowledge of these tools allows you to carry out local assembly of applications, if necessary and with the help of developers, configure them for testing needs, better localize bugs, read client logs, and even work with application sources. In addition, the IDE has the ability to run the application through an emulator, which can be useful for the tester.
HTTP / HTTPS traffic monitoring tools
The tester is obliged to understand the client-server architecture and be able to localize errors with its account. And if in the testing of web applications the developer console is usually enough for this, then for mobile applications you need to use specialized software (Charles, Fiddler, Wireshark), which will allow you to intercept and analyze network requests. Those. With these tools, in most cases, one can quite accurately determine on which side the problem is. Moreover, they allow you to substitute requests, emulating this or that software behavior (both from the client side and from the server side). This is necessary not only to isolate problems, but also to conduct a series of tests as part of testing an application.
Mobile App Distribution Services
To test different versions of applications, you must have basic skills of working with distribution services for mobile applications, for example, Fabric (Crashlytics), HockeyApp, TestFlight. They allow you not only to get the necessary assemblies for tests, but also to analyze usage statistics, as well as work with application crashes, localizing problems and finding out their causes.
I did not distinguish between the testing automation in the areas, highlighting it as a separate specialization. Of course, there are a number of fundamental differences between test automations on the web, backend and mobile applications, but in this section I would like to consolidate the most important knowledge and skills that are required by test automation engineers, regardless of their specialty. It should be noted that testing automation itself is quite complicated not only from a technical point of view, but also from the point of view of testing practices. Therefore, I strongly recommend looking in this direction, having previously mastered not only the general points, but also one of the directions listed above. If you learn to test with your hands, it will be easier and more understandable for you to do automation.
The abundance of programming languages opens up wide opportunities for testers to acquire new knowledge and skills for practical use. Choose from the variety of languages the most suitable - not an easy task. I recommend guided by three principles.
The first:The complexity of learning languages is rather relative, because someone is easier to get a trendy, stylishly youthful Python with dynamic typing, and someone easier with a hard-typed and structured Java with static typing. It is important to try and understand yours or not.
Second:focus on a community where you can learn a language. It can equally be both an external community (forums, courses, trainings, etc.), and an internal community (colleagues in the testing workshop or even developers). However, it should be remembered that it is not necessary to equal exclusively on the community, especially when it comes to developers. Of course, they are experts in the field of their language, but do not build rainbow illusions that they will begin to help you write functional autotests on a regular basis (this is a very rare case), and in the specifics of testing they can not always be as competent.
Third:Focus on test frameworks and tools that are used in conjunction with a programming language, and their popularity among testers. This will help you in case of specific problems not to be alone with difficulties and to find support on the side.
Based on the experience of recent years, I would call the most popular languages in the context of testing Python, Java, PHP, and in the world of mobile development - the native languages of Kotlin, Objective-C and Swift.
So that the tester did not have to start automation with the invention of his own bikes and in order to minimize the encounter with the rake, testing automators often use test frameworks (xUnit, nose, unittest, pytest, TestNG, Cucumber) depending on the language in which the tests are written. It is important to master these basic frameworks in order to make work with tests more efficient and convenient.
Drivers and add-ins for test automation
In addition to the test framework, test automation specialists should use drivers that allow you to interact with the application through a software interface instead of a graphical one. You can't do without them if you are going to automate client applications. If you are going to work with the web, then you definitely need to learn Selenium WebDriver, if iOS is XCUITest, and for Android you will find Espresso and UI Automator (native support from Google), alternatively Robotium or Selendroid. To heighten convenience, add-ons are used, which, on the one hand, complicate the tools of an automation specialist, and on the other hand, provide additional capabilities. I recommend paying special attention to Appium and Cucumber.
Autotest results reporting systems
Whatever autotests you write, on completion it would be nice to be able to get a report on the test, but such that it does not flicker in the eyes of the lines of the text. Perhaps the most popular now is the development of domestic colleagues - Allure. The tool is increasingly being used to conveniently visualize the results of completed autotests, it is possible to group tests according to the components of your application or tasks that are being tested in the context of implementation.
Version Control Systems
After you write your first autotest, you will certainly want to write more and more, and then modify, speeding up the work, expanding the logic, deepening the checks, and then share the results with your colleagues. It is archaic, time consuming and inconvenient to store each version of your tests locally, decomposing into various folders. Therefore, it is logical to learn the best practices from programmers and learn how to use version control systems. Of the most popular it is worth noting Git, SVN, Mercurial, TFS. I note that Git dominates the market and, all other things being equal, it is worth using it. At the initial stage, the tester will need to know what commit, push, pull (force), fetch, checkout, branch, merge, rebase, revert are.
Continuous integration systems
Having launched your first autotest, you will certainly want to do it again and again, and eventually even share this opportunity with someone. And then come to the aid of continuous integration tools, such as Jenkins, TeamCity, Bamboo. Most likely, fellow developers have their own CI tool for building projects, perhaps even for running unit tests. To join them with their functional autotests will be great if you understand the principles of operation of these tools. And if your colleagues do not have anything like this yet, then you will be a pioneer and will be able to make convenient parameterized launches of your autotests (on different hosts, with different data, etc.) on the fact of changes, request or on schedule.
Return on investment from test automation
Last but not least, is knowledge of how to calculate return on investment from test automation. We are talking about at least an approximate idea of which tests should be automated and supported, and which ones should not even be tried. In short, build on the importance of the functionality and test case that you are going to automate, lay down the effort and complexity of developing an autotest, as well as the potential need, frequency and complexity of its maintenance and support. Indeed, it is one thing when it comes to the core native functionality, which all the framework elements are written for and minimal labor costs are forecasted to support the autotest, and a completely different conversation when it comes to autotest for an experimental feature that has been rolled out to 1% of the audience, the framework still does not support this functionality which in addition is integrated with unstable external services, and yes even to redo it gathers the next couple of months. To be able to determine when to write an autotest and when not to write is an important skill for a test automation specialist.
Test team management
In addition to becoming an expert in the field of testing, a popular way of developing a modern tester is vertical growth, as a manager of the testing team. In an ideal case, a manager should be able to do the same thing as the team he will lead, but this is not necessary. If at the same time he will be more competent in his questions in terms of his questions, even better, but what is certainly excessive is the absolute superiority in all questions. Ultimately, team management is a story about the exchange of experience, knowledge and competencies. What personal and professional qualities should a good team leader have?
I am deeply convinced that leadership is a natural quality, it was not for nothing that Henry Ford said: “To ask who should be the boss is like asking who should be a tenor in this quartet.” However, you can learn leadership. After all, there is a converse opinion that leaders are not born, but become. Of course, leadership qualities are in each of us. Another thing is that for some people to lead and inspire people is a gift and mana from heaven, and for others it is a nightmare and hellish torments. It is difficult to imagine that someone from the readers will consciously choose the path of development as a manager, knowing that this will bring discomfort and trouble. Still, the desire to be a leader with a manager is much more likely to succeed.
The manager should be able to make decisions. It seems that it is very simple, but people often face their own indecision. When it comes to serious things, some people even fall into a stupor, in every possible way delaying the decision, fearing responsibility and consequences. For a manager, this is unacceptable, so it is important for him to develop his determination, clearly understanding situations, when there really is time to make a decision, and when it is necessary to act here and now.
The ability to work with a team, form it, direct and develop it is important leadership qualities. A group of people is not a team yet. Initially, they may have different goals and objectives. As long as they are not united by the idea, are not motivated and do not crave to overcome difficulties shoulder to shoulder, they cannot be a team. The task of a good leader is to rally people, glue them together, selecting tasks and setting goals that will lead to the formation of a real team. This will require the ability to select new people, and find an approach to their employees, and if necessary, say goodbye to someone. You need to learn how to work with different people, developing your abilities to find a common language with the team, form it and develop it for effective joint activities.
The skill of planning is also needed for an ordinary specialist, and for a manager he becomes necessary, like air. After all, the manager manages not only his time resource, but the working time of the whole unit, and therefore should be able to distribute it competently, thoughtfully and efficiently. At the initial stage, a minimum level of tactical planning is needed - by day, week, month. Ultimately, the manager must learn to think strategically, set tasks not only on the visible horizon of events, but also step over him. This is undoubtedly difficult, but does not mean that it does not need to learn. Need to! Especially if you want to be a good leader.
Skill persuasion and negotiation
As a leader, you should be able to defend not only your position, but also the point of view of your unit, whose face you essentially are. This means that, firstly, you must learn to convince your team in your own point of view, and secondly, in some situations you must be able to accept and defend the opinion of your team. Negotiating on behalf of your employees is a difficult task, and it’s impossible to get this skill automatically. Therefore, a beginning team leader should pay attention to pumping this skill, and an experienced person already knows that without the ability to competently argue and defend his position, it will be extremely difficult for a leader to find a common language both within and outside the team.
Positive thinking and ability to motivate
The head is the head of the division, and the behavior of his employees depends on his view of things. You are responsible for the morale of the team, its morale and level of motivation. It is important for the manager to understand that each employee has his own motivators, and the methods of influencing the team members should be different. A good leader exudes not only confidence in the future and decisiveness in his actions, but also a positive attitude towards things that he broadcasts to his team, encouraging it, setting new tasks.
So, to get into IT through testing, you need to know quite a lot, but to grow and become a professional - even more. It is important to understand that you always have a choice - to be an expert in a certain area with a deep immersion in a specialty or to become a broad-based specialist. Both are required on the market, since everything depends on the particular company, the principles of team building and work processes. If you are sure that this is really interesting for you, and that this road is in your teeth, boldly step on it, there are many amazing discoveries and new knowledge ahead.
Once again I want to remind you of the importance of a certain nature for work in IT and testing in particular. Remember that you can send anyone to the courses on programming languages and the DBMS, but on the courses to self-development and enthusiasm, which would allow you to successfully complete the first courses, alas, you cannot send anyone.
I hope that the article turned out to be useful for those who read it, whether it is a beginner or an experienced specialist, because the choice of professional development lines in the field of testing is large enough to lose a little in it. Let me remind you that this whole story is in my humble opinion, and therefore do not judge strictly and do not throw slippers. I would be grateful for the constructive feedback.
All the quality!