
There is an opinion that the simplest way to IT is through testing. They say you don't need to know anything, to be able and even more so; all you need is desire and willingness to not 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 a little 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", 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 at the 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, in this case, the companies and their experts face burning and acute questions ...
How not to get lost in the diversity 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 you 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 make up 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.
Traits
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 living people who remain so in the office and at home. Therefore, it is important to take into account the qualities of the individual in the context of the upcoming choice of the 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 a 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 count on tangible results after listening. Alas, this is a fact of life, the internal disagreement with which allows a wide stratum of “info-businessmen” to earn from recalcitrant people, eager to change their fundamental pillars and character traits with a 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, which will allow you to be in the trend for the next decade. 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.
A responsibility
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 have not only corrected a mistake, but also insured against it for the future so that it does not recur. Responsible approach to work is the key to a successful career in any field, and therefore it is an extremely important feature for a tester. The main thing is not to bend and know when to stop, because hyper-responsibility is not always good.
Passion
Are you a passionate person? Honestly, what are you into? 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 the competent leader and the 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 publicly 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.
Command
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. One man is not a warrior - for testers, this 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 a 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 declared 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 can 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” of the practice can be painfully painful and long, and along the way you can even invent bicycles, and collect the rake of famous people. 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 the 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” .
Techniques of test design
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 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 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.
Client-server architecture
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.
Operating Systems
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 question, then over time you will need to acquire the skills of setting up and using the whole OS galaxy (of the most popular, Android, Windows, iOS, macOS, Linux are worth noting).
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 are lots 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).
Browsers
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.
HTML, CSS, JavaScript
In order for the tester to better understand what the modern web pages are made of and how, it will be extremely useful to have at least a basic understanding of HTML, CSS, JavaScript. This knowledge will also help to localize errors associated with specific elements on the page, quickly find them and, if necessary, change them on the client side.
Backend testing
The separate universe is backend testing. This world is devoid of ryushek 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.
OSI model
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 specificity is 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.
Command line
Without command line skills, backend testers 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 one. 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).
Database
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 description of vacancies there are references to this skill, which sounds like "Knowledge of SQL at the level of simple queries." As a rule, it’s enough to start with 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, knowledge and skills of working with NoSQL DB (MongoDB, Cassandra) will be a definite plus. 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 side of the story.
IDE
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 must 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, you can quite accurately determine on which side the problem. Moreover, they allow you to substitute requests by 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 the application.
Mobile App Distribution Services
To test different versions of applications, you must have basic skills in 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.
Test Automation
I did not distinguish between testing automation in different directions, 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 is worth noting that the automation of testing itself is quite complex, 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.
Programming language
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 - a difficult task. I recommend to be 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 is easier with 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 be 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 they cannot always be as competent in the specifics of testing.
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.
Test frameworks
So that the tester did not have to start automating 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, Espresso and UI Automator (native support from Google) are useful, and 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 auto tests you write, on completion it would be nice to be able to get a report on the testing that has been conducted, so that it doesn’t flicker away from the lines of 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 adopt 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, 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, 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 talking about the key native functionality, which all the elements of the framework are written for and minimal labor costs for supporting the autotest are predicted, and a completely different conversation when it comes to autotesting 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 integrates with unstable external services, and even 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 testing, a popular way of developing a modern tester is vertical growth, as a manager of a testing team. , , , . — , , . , — , . ?
Leadership
, — , : «, , , ». , . , , . , , . , — , — . , - , , . - .
. , , . , , , . , , , , .
, , — . — . . , , . — , , , . , , - . , , .
, , . , , , . — , , . , , . , , , , . Need to! , .
, , , . , , -, , -, . — , . , , , .
— , . , . , , . , , , , .
Total

, IT , - , — . , — . , , , . , , , , .
IT . , , , , , .
, , , , , . , — in my humble opinion, . .
!