Talking about the skill tree of software testing engineers

Software test engineer is a position with a long history. It can be said that since the software development industry, the role of software test engineer has begun. With the development of the times, the role and responsibilities of software test engineers are also quietly changing, from simply acting as the executor of the testing phase in the waterfall development process at the beginning to the QA (Quality Assurance) role in the agile development process, Responsible for the quality of the entire team and products, the responsibilities and boundaries of test engineers continue to expand. In recent years, many test engineers in the Internet industry are called test development engineers, that is, test engineers who have the ability to develop automated testing and test tools. It can be said that the requirements for test engineers have reached a new height.

I believe that students who have experience in testing work will have a deep understanding. Whether it is waterfall or agile mode, the work of testers is always pressed in the final stage of product release. The pressure of the entire team seems to be on the test engineers. No one I will ignore the delays in the development process, because that has passed and can be dissed during the retro meeting, but the most important issue at present is to complete the release of the product. So before looking for what skills test engineers need, what is the core problem of test engineers, this is what we need to figure out.

Core Questions Faced by Test Engineers

How to maximize product quality with minimum investment

I believe everyone has some experience with this question. What the commercial society pursues is efficiency, even the ultimate efficiency. Test engineers are no exception, whether they are called test engineers, QA, or high-level test development engineers, in fact, the goal of the bosses is the same, which is to invest as little as possible to ensure the quality of the product to the greatest extent. To be realistic, your salary level will depend on your ability to solve this core problem. We have clarified our goals, and the capabilities we need are also set around this goal.

overview

 

According to the author's experience and understanding, a software test engineer needs to have the following skills:

  • Test Design Capabilities
  • code ability
  • automated testing technology
  • Quality Process Management
  • Industry technical knowledge
  • database
  • business knowledge

test design

As a test engineer, the most basic ability should be the ability to design test cases based on the product. The most basic abilities are often the most difficult to master. To design good test cases, you need to be very familiar with the characteristics and business of the product, and have a systematic thinking about the user's usage scenarios. In addition, there are some scientific test case design methods that can help us design standardized use cases, rather than just design use cases based on experience or unconstrained ideas. There are some classic test case design methods in the industry that need to be mastered by test engineers:

  • Boundary value analysis
  • equivalence class division
  • causal diagram
  • Judgment table
  • Orthogonal Experimental Design

The above methods are not dogmas, but tools to help us clarify the thinking of test case design and improve efficiency.

code ability

In traditional thinking, the requirements for code ability of testers do not seem to be very high, and this is indeed the case in the industry. Many test engineers basically do not have the ability to code, and are more test executors. But in today's era, in order to break through the ceiling of traditional functional testers, coding ability is a must. Test engineers with code ability have two advantages:

read development code

If you can have the ability to read the development code, it is very helpful to improve the efficiency of testers. It can help us do some of these things

  • Estimate the scope of impact by developing and modifying the code, that is, the scope of testing
  • Participate in technical review, estimate the risks, difficulties and key points of the test
  • Design test cases through code logic to strengthen the coverage of test cases
  • Preliminary positioning of defects

In fact, there are still many things that can be done, which are reflected in many details of the testing process.

Development of automated tests

Automated testing is the direction of testing development and an effective way to improve efficiency. With the ability to code, you can easily control various popular automated testing frameworks and use case development.

automated test

Follow up the discussion above about automated testing. In the current recruitment of popular companies, automation ability is already a necessary ability, and it is also an area that everyone pays attention to. At present, automated testing can be roughly divided into the following categories:

UI automation

The goal of UI automation is to simulate human operations on the product UI interface, so as to observe the results to complete the execution of the test. UI automation can also be divided into PC-side and mobile-side automated testing from the form of the client. There are some famous automation tools that we need to master:

Selenium

Selenium is a classic UI automation tool for WEB-side products, and it has good support for different development languages. Its principle is simply to pass the operation instructions generated by the script to the browser through WebDriver, perform the operations we need and obtain corresponding feedback, and complete the verification in the script.

Appius

From the name, you can see the similarity between this tool and Selenium. In fact, Appium can be understood as Selenium on the mobile side. It is also the purpose of simulating human operations on the mobile terminal to execute test cases. With the advent of the mobile Internet era, more services have been transferred from the WEB side of the PC to the mobile side, and the automated testing of the mobile side is becoming more and more important.

In fact, the principles of UI automation are very similar, and the basic logic is:

  1. positioning element
  2. operating elements
  3. get feedback

Finally, test cases are managed through some kind of test case framework, such as python's unittest, JAVA's TestNG, Ruby's respec, etc. So if you understand a certain UI automation framework and tools, you can easily learn new frameworks and tools by analogy.

interface automation

In the current situation where SaaS has become mainstream, API, that is, interface, has become the core part of supporting business. The business data in the front-end page and App communicates with the server through various APIs to realize business functions. At present, most of the interfaces are based on the HTTP protocol, among which Restful interfaces account for the majority. And many languages, such as Python and Ruby, have good libraries to support HTTP protocol requests, which provides a good foundation for us to design interface automation. Back to our core question, the measurement of input-output ratio. UI automation is huge both in terms of implementation cost and maintenance cost, so the industry is increasingly focusing on the automation of the interface layer. The automation of the interface has the following advantages:

  • high operating efficiency
  • low development cost
  • low maintenance cost
  • Can be developed simultaneously with the development code

The implementation idea of ​​interface automation is also simple and clear, that is, to simulate a browser, send an HTTP request to realize the call to the interface, and then compare the returned value with the expected value to achieve the purpose of verifying the result. Of course, it is not easy to design a truly efficient interface automation framework. This involves key issues such as how to improve the development efficiency of use cases and reduce development and maintenance costs. At the same time, interface testing and performance testing can be combined to enrich the connotation of interface automation testing.

Quality Management Process

In the agile development process, test engineers have a new definition: Quality Assurance Engineer. The execution of the test is only a part of the responsibility, and more importantly, it is responsible for the product quality of the entire team. From the perspective of the entire sprint cycle, QA engineers must consistently implement the awareness of quality assurance, and the relationship with development has changed from early bug discovery to how to help the development team improve product quality together. At the same time, it is also necessary to work closely with the product team, intervene in the requirement analysis stage, and analyze how the quality assurance work is planned and designed, instead of intervening in the test execution stage before product release. This also includes many Soft skill requirements, including how to cooperate with the team, communicate, etc., which is also one of the keys to the agile development model.

Industry technical knowledge

This part of the content actually covers a very rich content, let's take the Internet industry as an example. For an Internet product, test engineers need to know or even master a lot of knowledge, from the technology stack of the front-end page, API design, back-end server design, the database mentioned later, and the entire service architecture Wait, test engineers need to understand. In response to this problem, there is actually a very good question that can help you sort out the knowledge involved, which is:

From entering a URL in the input box of the browser to seeing the content of the web page, what happened in this process?

The depth and breadth of answering this question can basically reflect a test engineer's grasp of Internet product technology. Here, I simply list some of the technologies and concepts involved, which are very helpful for us to test products.

  • DNS
  • TCP/IP
  • HTTP
  • SSL
  • Restful
  • HTML
  • DOM
  • CSS
  • Render
  • Xpath
  • server
  • nginx
  • SQL
  • Cookie&Session
  • XSS, CSRF are only involved in a part of the content here, and the specific content can be studied and understood in depth according to the scenarios encountered in the work.

database

The reason why the database is listed separately is because the knowledge of the database is very core to many products today. Whether it is in manual testing or automated testing, there are times when it is necessary to go to the database for data verification. The databases currently in use can be divided into two categories:

  • Relational Database
  • non-relational database

Relational Database

Relational database is the most common type of database. This type of database is managed and used through RDBMS database programs, such as SQL Server, MySQL and so on. The concept of a transaction (Transaction) is emphasized in relational databases. The so-called transaction is a series of database operations defined by the user. These operations are either all executed or not executed at all. It is an inseparable unit of work. For example, in a relational database, a transaction can be a SQL statement, a set of SQL statements, or an entire program. Transactions should have four attributes: atomicity, consistency, isolation, and durability. These four properties are often referred to as ACID properties.

  • Atomicity: The transaction is executed as a whole, and the operations on the database included in it are either all executed or none of them are executed.
  • Consistency: A transaction should ensure that the state of the database changes from one consistent state to another. The meaning of a consistent state is that the data in the database should satisfy the integrity constraints.
  • Isolation: When multiple transactions are executed concurrently, the execution of one transaction should not affect the execution of other transactions.
  • Durability: Once a transaction is committed, its modifications to the database should be permanently stored in the database.

For practical applications, the SQL language must be mastered. Being able to find the required data in the database through SQL statements is a necessary skill for test engineers. The syntax of SQL statements is generally similar, and different RDBMSs will have slight differences in some details. For automation implementation, it is also a common scenario to access the database to obtain the expected value in the automated test. Different languages ​​have libraries for accessing databases, and overall the application is very simple.

non-relational database

With the generation of a large amount of unstructured data in the Internet, such as social network and other applications, the user's personal information, social network, geographic location, user-generated data and user operation logs have been increasing at a geometric progression rate, and at the same time It also faces a large amount of data mining work, which cannot be satisfied by traditional relational databases. So NoSQL gradually developed. The most prominent feature of NoSQL is the unstructured data. Generally speaking, data is no longer stored in the form of columns and rows. There are many ways for NoSQL to store data: value pair storage, column storage, and document storage. For example, the more common MongoDB stores data as a document, and the data structure consists of key-value (key=>value) pairs. MongoDB documents are similar to JSON objects. Field values ​​can contain other documents, arrays and arrays of documents.

RDBMS vs NoSQL

RDBMS

  • Highly Organized Structured Data
  • Structured Query Language (SQL) (SQL)
  • Both data and relationships are stored in separate tables.
  • Data Manipulation Language, Data Definition Language
  • strict consistency
  • basic affairs

NoSQL

  • Represents more than just SQL
  • no declarative query language
  • No predefined schemas: key-value store, column store, document store, graph database
  • Eventual consistency, not ACID properties
  • Unstructured and Unpredictable Data
  • CAP theorem
  • High Performance, High Availability and Scalability

business knowledge

For test engineers, business knowledge of the product being tested is also very important. A test engineer may already have all the skills mentioned above, but how can these skills be used to solve the core problems of software testing we mentioned first? The key here, or the central point, is the business of the product you are testing. There are various methods of testing, planning, and implementation. If one chooses among these methods, it depends on a deep understanding of the business of the product. The product business here not only refers to the characteristics of the product, but also includes the user characteristics of the product, the user's usage habits, and the resulting traffic trends to the product. It can also be said that testers must analyze products from the perspective of users, not from the perspective of product developers. Testers also need to find the core functions and core business of the product, and use such analysis to divide test priorities and classify defects. At the same time, it also has an important impact on the planning and architecture of automated testing. For example, in automated testing, the core business and functions must be covered first, and at the same time, according to the characteristics of the business, use automated methods to simulate user usage scenarios, and invest limited automation resources in the most critical parts. This skill may sound imaginary, as if there is no specific knowledge point, but in continuous work and summary, an excellent test engineer can sum up a set of test methods that meet a certain type of product, and can even refine Create some more general best practices and use them in different products.

 

Guess you like

Origin blog.csdn.net/nhb687095/article/details/130427330