What the backend tester should know



I am often asked about what to read before interviewing for the position of a backend tester. And in my work, I come across the fact that many applicants do not always understand what will happen in the interview, and come unprepared. So the idea was born to collect useful information in one article.

FunCorp has a list of topics with questions we ask candidates. I decided to supplement it, to make it more universal, to break down each topic into levels (what you need to know and what will be a plus) and add links to articles and books that can be read on these topics.

What problems this text helps to solve: candidate - prepare for an interview, any backend tester - refresh knowledge, frontend tester or mobile app tester - broaden his horizons. Employers can use the list to create job requirements.

Necessary knowledge


I’ll make a remark right away: the necessary knowledge and skills depend on the specifics of the vacancy. If the vacancy is about testing the API where HTTP is used, then you need to know HTTP very well and do not need to know the nuances of the OS. If you work with Windows, then you do not need to know bash.

I also want to appeal to employers: do not ask about memory management in Linux a candidate for the position of Mobile QA Engineer, this is unlikely to be useful to him in his work.
I do not mention programming languages ​​because it depends a lot on the stack used. But often they are not asked anything about them at the interviews of testers (otherwise they indicate the necessary level of knowledge of the language in the job description).

On many topics I will provide links, including to Wikipedia. Yes, although this is not the highest quality source of information, however, I believe that it is quite suitable for a superficial study of the topic or refreshing knowledge and is good because in any article there are many links to other articles in a specific subject area. In any case, I provide links to other articles and books, so that everyone can choose the appropriate source of information for himself.

Testing theory


I’ll start, perhaps, with the most obvious, but not the most unequivocal: some team leaders can drive you in all terms and concepts at the interview, some will ask nothing at all.

What is expected from any candidate


Knowledge of basic terms, test design techniques, the ability to write a quality bug report.

Which suggests that the candidate knows the topic well


Formally, these are ISTQB certificates.

What to read on the topic


There is a good article on Habré with all necessary information. If you want to understand the theory of testing in more detail, then you can read the ISTQB materials .

Shell


Depending on the OS, you need to know either bash (sh, zsh, etc., but the nuances are unlikely to play a significant role), or CMD and PowerShell.

What is expected from any candidate


Knowledge of basic commands.

Which suggests that the candidate knows the topic well


The candidate knows many commands, various options for them, their advantages and disadvantages, various ways to use them, as well as tools for debugging problems, for example, strace , tcpdump , gdb and others.

What to read on the topic


You can read about the main commands in Linux in one of my previous articles , and there is also a very cool repository with a bunch of examples on GitHub . From the books, I would advise “UNIX Operating System” by Robachevsky, Nemnyugin and Stesik - it’s not only about teams, but about the system as a whole.
You can read about CMD commands here , but PowerShell has some good documentation .

HTTP (or the protocols specified in the job description)


Very often, HTTP is chosen as the main protocol for the client-server architecture, so they often ask about this protocol. However, you may need to know IMAP, POP3, SMTP (if you will be testing mail), Protobuf or MessagePack, or other protocols. 

What is expected from any candidate


It all depends on the prevalence of the protocol. It is unlikely that they will give you a binary traffic dump and ask to deserialize it on a piece of paper from Protobuf, but if we are talking about HTTP, then you need to know it at a good level: the structure of the request and response, the main headers, methods, response codes, HTTPS.

Which suggests that the candidate knows the topic well


The candidate can answer questions about caching, data compression, cookies and the use of various headers in HTTP. For other protocols, everything is more subjective.

What to read on the topic


About HTTP, all the necessary information is on Wikipedia . For other protocols, I advise you to read their documentation and specifications. Also do not forget about HTTPS . Well, of course, you should always have at your fingertips links to RFC 2616 and RFC 7540 (but there are other specifications ).

Lower layer network protocols


Many candidates have no idea what is under HTTP. I believe that this does not characterize them very well, because the tester must have an inquiring mind and moderate curiosity, so I certainly need to know in general terms about the OSI network model.

What is expected from any candidate


The candidate should know that there are TCP, UDP and IP protocols and understand their essence.

Which suggests that the candidate knows the topic well


Understanding the mechanism of operation of the TCP protocol (three-way handshake, some fields from the header, flags, a sliding window), the candidate can name the disadvantages and advantages of TCP and UDP, their areas of application, general knowledge of IP. It will be cool if the candidate tells in a nutshell about other protocols (for example, ARP, ICMP, ICMPv6).

What to read on the topic


Basic knowledge can be obtained from Wikipedia articles: OSI , TCP , UDP , IP , IPv6 , ICMP , ARP , ICMPv6 network model . If you want to immerse yourself in this topic, then you can read “Computer Networks” by Tanenbaum.

Database


What is expected from any candidate


Basic SQL queries (everyone's favorite JOIN).

Which suggests that the candidate knows the topic well


General knowledge of different DBMSs, replication, sharding, internal structure of a DBMS, general knowledge of non-relational databases.

What to read on the topic


In general terms, about databases can be found in the documentation for a specific DBMS. If you want to deal with databases in detail, then I recommend the corresponding chapters of Kleppman's “Highly Loaded Applications” .

OOP


What is expected from any candidate


Knowledge of the basic principles of OOP.

Which suggests that the candidate knows the topic well


It will be cool if the candidate knows some patterns.

What to read on the topic


You can read about principles, for example, here , about patterns - here . There is also a cool book “Object-Oriented Programming Techniques. Design Patterns "gang of four."

Operating Systems


What is expected from any candidate


For most testers' vacancies, knowledge of the nuances of operating systems is not relevant.

Which suggests that the candidate knows the topic well


It will be cool if the candidate knows about memory management, the kernel and the stack, the creation of new processes and their sheduling, file systems and more.

What to read on the topic


Briefly, you can read in the already mentioned book "UNIX Operating System" by Robachevsky, Nemnyugin and Stesik. If the topic is of interest, then you can delve into it using, for example, Tanenbaum ’s Modern Operating Systems . In general, you can familiarize yourself with the topic using Wikipedia: there are articles about the Linux kernel , virtual memory , context switch, and others.

Computer architecture


What is expected from any candidate


For most testers' vacancies, knowledge of the nuances of the processors, memory, and peripherals is not relevant.

Which suggests that the candidate knows the topic well


It will be great if the candidate knows in general terms about the processor, registers, caches, memory and disk, and so on.

What to read on the topic


You can superficially familiarize yourself with hardware using Wikipedia: CPU , processor mode , microarchitecture (there are many links to other related articles in this article), cache , ALU , pipeline , branch predictor , superscalarity , etc. This topic can be studied more holistically and deeply, for example, using the book “ Computer Architecture” by Tanenbaum.

Algorithms and data structures


Most likely, they won’t ask questions about algorithms and data structures (especially if the position is not at the Intern or Junior level), but you still need to know some common things. Personally, I was asked only once about the binary heap at an interview; I myself am also not a fan of asking candidates about this. Therefore, I will not introduce any criteria and attach only an article with good pictures , you can print them and put them in a prominent place. If you want to immerse yourself in algorithms and data structures with your head, then feel free to start reading “Algorithms. Development Guide ” Skien or “ Algorithms. Construction and analysis ” Cormen.

Other


  1. Many where Docker is used .
  2. (« »).
  3. REST SOAP.
  4. JSON XML.
  5. Protocol Buffers, MessagePack BSON.
  6. TLS.
  7. Git ( VCS).
  8. Nginx Apache.
  9. .
  10. TeamCity Jenkins ( CI-).



, google.com Enter?


A classic task with which you can check how deeply a candidate understands web technologies in general. There is a detailed analysis of this task on Habré, but I do not recommend reading into the nuances of the type "a small amount of current is sent through the keyboard wiring diagram."

Testing a form with a button


Yes, this task is often asked at the interview of backend testers. The task is classic, so it will be cool if the candidate fantasizes a bit and imagines what might be behind this button with a button. For example, we can assume that the data leaves the form for a backend consisting of several servers and a database, that the backend writes logs and has a config - this will immediately add many test cases of a deeper level than “enter a value too long in the input field” . For example, you can use tcpdump to see if the traffic goes to all the backend servers exactly; you can try to send SQL injection or broken JSON (naturally, if suddenly JSON is at all in the context of the task); you can check what happens if the logs take up all the free space on the disk; you can check the system whena secure backend , the correctness of adding data to the database, etc. Thus, the candidate will show his broad horizons, which will undoubtedly benefit him.

Service testing


A variation of the previous task: for example, there is a service that listens on the port and receives JSON as input, responds in the same format. Everything is similar, only there is no tin, so you do not need to be afraid of it. We connect to the port using telnet , and then everything is the same.

REST API endpoint testing


And again, everything is the same, only with HTTP (most likely). Here you can demonstrate knowledge of the HTTP protocol: for example, check the operation of the service if there are various headers in the request.

Of course, you can’t compile a universal training manual for preparing a backend tester from scratch: it all depends on the specifics of the company, the specifics of the department, and the team lead. And technology does not stand still: until recently, Docker was not actively used, and now experience with it can be a big plus. However, I tried to collect basic things in one place, and if this helps to prepare and find work for at least one person, then I wrote this article for good reason.

PS I also recommend reading my colleague ’s article “The Image of a Modern Tester. What you need to know and be able to ”, it outlines various development directions for testers.

All Articles