After working as a tester at ByteDance and Pinduoduo for 5 years, I stayed up all night to sum up my paddling experience...

Let me briefly explain the background. An unknown 985 graduate with a bachelor's degree joined Byte after graduation in 2017. After that, he switched jobs to Pinduoduo and has been engaged in software testing. I have no internship experience before, but it is considered to be 5 years of work experience.

In the past five years, I have been promoted once and changed companies. There have been times of happiness and contentment, and days of confusion and struggle. However, I have successfully transformed from a rookie in the workplace to a senior paddler.

In this process, I summed up some practical paddling experiences. Some of them were learned by myself, and some were learned from communicating with others. I would like to share them with you here.

 

1. Learn to think deeply and summarize

The first thing I want to say is to learn to think deeply and summarize. This is the most important and meaningful thing in my opinion.

First let’s think deeply. In the circle of programmers, you can often hear some comments: My job has no technical content at all. I just do a little bit every day. What can I learn from this? Put aside some ridicule and joking arguments, this Maybe it is indeed the true thoughts of some classmates, at least I used to think so. Later, with the accumulation of work experience and discussions with some high-level classmates, I found that this idea was actually very wrong.

The idea that there is nothing to learn is basically the result of lazy thinking. Any seemingly inconspicuous little thing, as long as you think deeply and dig a little deeper vertically or broaden horizontally, it is an ocean of knowledge that is enough for people to indulge in.

Let’s talk about the summary . I think this is where most programmers are lacking. They can do one thing very well just by immersing themselves in work. But I almost never make abstract summaries, so that after working for several years, the knowledge I have mastered is still sporadic and unsystematic. Not only is it easy to forget, but it also causes my vision to be narrow and my view of problems to be limited.

It is very important to make some summaries and reflections in a timely manner. This is a process from technique to Tao, which will allow you to see the problem from a wider perspective and at a higher level. When encountering the same type of problems, you can follow the summarized methodology to advance and solve it systematically and hierarchically.

As an example. For background services, 1G of memory was optimized today and 50% of the reading and writing time will be optimized tomorrow. Can you summarize the performance optimization?

For example, at the application layer, you can manage the applications connected to the service and sort out the rationality of their access; at the architecture layer, you can do caching, preprocessing, read-write separation, asynchronous, parallel, etc.; at the code layer, you can do things There is more, resource pooling, object reuse, lock-free design, large key splitting, delayed processing, encoding compression, gc tuning and various language-related high-performance practices... I will meet you next time For scenarios that require performance optimization, a whole set of ideas can be applied immediately, and the rest is a matter of tools and practical operations.

Some students said that I would argue with the PM every day to work on the requirements and not do any performance optimization. Let’s not discuss whether performance optimization can be done. In terms of business needs alone, there are also things that can be summarized. For example, how to build a system? Have you thought about the core capabilities of the system, system boundaries, system bottlenecks, service layering and splitting, and service governance? You discuss the requirements with the PM every day. How should you, as a technical student, cultivate product thinking and guide you? Product trends, how to make architecture precede business, these issues can also be thought about and summarized, right?

Therefore, learning and growth are a self-driven process. If you feel that there is nothing to learn, it is most likely not because there is really nothing to learn, but because you are too lazy, not only too lazy in action, but also too lazy in thinking. Too lazy.

You can write more technical articles, share more, and force yourself to think and summarize. After all, if the article is not deep enough, everyone will be embarrassed to share it publicly.

2. Actively learn and maintain enthusiasm for technology

An anxiety theory that has been widely spread in the Internet circle in the past two years is called the 35-year-old programmer phenomenon, which basically means that programmers who work in this industry until they are 35 years old are basically waiting to be laid off. It is undeniable that the Internet industry is indeed inferior to civil servants and other institutional professions in this regard. But the 35-year-old programmer in this question is not 35 in the absolute physiological sense. It should refer to those programmers who have worked for more than ten years and who have worked for two or three years. There is not much difference. The following jobs are basically resting on one's laurels without taking the initiative to learn and recharge. 35 years old is almost the same as 25 years old, and there is no desire for learning and growth at 25 years old. Instead, many trivial matters in family life are added, and salary requirements are often higher. It seems to the enterprise that this is indeed not very competitive.

And if we actively learn and keep our technical capabilities and knowledge reserves proportional to our working years, how can we have any anxiety at the age of 35? I think major companies should be rushing to get such experts, right? But learning is a matter of , is actually an anti-human process, which requires us to force ourselves to jump out of our comfort zone, take the initiative to learn, and maintain technical enthusiasm. There is a saying in Didi that goes something like this: Take the initiative to jump out of your comfort zone and feel the struggle and pressure. It is often the darkness before dawn, and that is when you grow the fastest. On the contrary, if you feel that you are living a comfortable life every day and that your work is just messing around with your hours, then you may be boiling a frog in warm water.

During the period after graduation, you often have more free time, which is a good time to work hard to learn technology. Use this period of time to lay a solid foundation, develop good study habits, and maintain a positive learning attitude, which should benefit you throughout your life. As for how to study efficiently, there are many experts writing such posts on the Internet. After arriving at the company, you can also find many such sharings on the intranet, so I won’t go into more details.

3. Take the initiative and communicate feedback in a timely manner

The first two are from a personal perspective. I hope everyone can improve their personal capabilities and maintain core competitiveness. But from a company's perspective, when recruiting employees, the most important thing is for them to create business value and contribute to the company. Serve.

Although there is generally a certain training system for school admissions, in fact the company does not have the obligation to help us grow. When it comes to being able to accomplish things and create value for the company, I think the two most important words are taking the initiative, taking the initiative to take on tasks, proactively communicating, proactively promoting project progress, proactively coordinating resources, proactively giving upward feedback, and proactively creating impact. Power and so on.

When I first joined the company, I basically did my job well according to the tasks assigned by the leader, and then did my own thing. I almost never took the initiative to communicate with others or actively think of ideas that could help the development of the project. I thought that it was enough to complete my job with quality and quantity, but later I found that this was actually not enough. This was only the most basic requirement.

Some students' approach is that the leader only needs to synchronize what direction they want to take recently, and the leader basically does not need to worry about the following series of things. I am a leader like this classmate, and I also like it. A word you often hear after joining a company is owner awareness, which probably means this.

Another very important point in this process is timely upward communication and feedback. If the project is not progressing smoothly, if you encounter any problems, synchronize with the leader in time. If you are not sure about the technical solution, you can discuss it with the leader. If you cannot coordinate some resources, you can ask the leader for help. Don't have too many scruples, thinking that these will be too troublesome. Leaders actually do what they do. This matter.

If the project is progressing smoothly and there is really no need for the leader to intervene, then it is also necessary to provide timely feedback on the progress of the project and the benefits achieved. If you have any ideas, you should also discuss them. Ask the leader for his suggestions on the current progress and what other areas there are. Needs improvement to eliminate information errors. Doing these things, on the one hand, makes reasonable use of the various resources of the leader, and on the other hand, it also allows the leader to understand his workload and control the overall project. After all, the leader also has leaders, and they also need to report.

Maybe it’s the upward management that everyone dislikes. It’s a bit offensive. I actually don’t do this well either. But the most basic point is, don’t accept a task and work sullenly or even isolate yourself from the world. You haven’t synchronized with the leader for a month, and you are thinking about holding back a big move or something like that. That is basically useless.

You must take the initiative. You can start by forcing yourself to speak in various public places. If you have questions or ideas, you can do so one-on-one.

4. How to improve yourself

Finally, you need a set of good information for system improvement to improve your comprehensive technical capabilities!

As a tester, I would like to share some of my summary and summary of technology over the years, as well as my notes on the skills that need to be mastered as an advanced automated tester. I hope it can help those who are interested in this road of technology. Friends who go all the way to the end!

The content involves: testing theory, Linux basics, MySQL basics, Web testing, interface testing, App testing, management tools, Python basics, Selenium related, performance testing, LordRunner related, etc.

1. Basic theoretical knowledge of software testing:

  • Software quality model: The software testing process ensures the quality of the software. What aspects of this guarantee can be considered based on the quality model?
  • Test classification: The software testing process can be classified from different perspectives, from basic testing to advanced testing.
  • Development process: Tell testers a complete life cycle of software, the process of software from scratch to death
  • Testing process: Master and guide testers on how to carry out testing work in actual projects. This requires testers to have a thorough understanding of common mainstream testing processes. Encounter different software projects and know where to test software defects most efficiently
  • Test plan and program: How to plan testing activities in the project and ensure that the testing activities are carried out in an orderly manner
  • Design case methods: Some test case design methods that must be mastered during the black box testing phase. For example, black box testing - use case design methods, test case elements, etc.
  • Software defects: Defects should be identified during test execution and defect reports should be submitted
  • Defect management: After submitting a defect, how to assist the development team in handling verification submission issues in actual work. For example: - Bug level priority classification, bug description, bug life cycle, use of defect management tools, such as ZenTao, etc.

 

2. Software testing skills—Linux system

The Linux system is the main server operating system and one of the basic technologies that most people working in IT positions must possess. As software testing engineers, we often need to view logs on the server side to locate the source of the problem.

  • Basic knowledge of Linux system: multi-user, multi-tasking, distribution version, etc.
  • Common Linux operation commands: log viewing, file compression and decompression, user management, file permissions, etc.
  • Will deploy and configure basic applications jdk, mysql, tomcat
  • Docker installation and use
  • Writing basic shell RAD scripts
  • Remote terminal tools used: shell, xftps, etc.

 

3. Basic software testing skills - Sql database

As an essential application system for software systems, databases often need to be operated in processes such as interface testing, performance testing, etc. to verify the correctness and integrity of data, which are inseparable from the addition, deletion, modification, and query operations of the database. During the project deployment phase, the database also needs to be Need to cooperate with project deployment. Database support is required in performance testing and interface automation testing.

  • Basic concepts of database
  • Relational Database
  • MYSQL basic add and modify query statements and stored procedures
  • MYSQL complex query, multi-table query
  • MYSQL index and transaction related concepts
  • Use of database client tools: such as Navicat

 

4. Software testing skills - programming language

It is recommended that friends without programming foundation can learn Python language

The learning content of Python language includes the following knowledge points:

Python basics: Python language features, running environment, basic syntax, coding style, sample programs

data structure:

  • Basic data structures: numbers, strings, type judgment, type conversion, slicing, string formatting, numerical operations, positional parameters and keyword parameters;
  • Combining data structures: lists, tuples, ranges, dictionaries, sets, unhashable objects, unpacking, in-memory data structure addresses, immutable data
  • Program control: sequence structure, loop structure, judgment structure, exception handling, logical operators
  • Functions: define functions, function parameters, return values, variable scopes, anonymous functions, and commonly used built-in functions
  • Modules and libraries: modules and packages, import keywords, commonly used standard libraries, commonly used third-party libraries, package management tool pip
  • Object-oriented: The origin and advantages of object-oriented, the relationship between object-oriented property classes and objects, and the special methods of objects
  • Logging: baseConfig, file log, email log, customized format, built-in placeholder, level filtering, hierarchical propagation, configuration file
  • Test framework: unitest, pytest, etc.
  • Concurrent programming: multi-process, multi-thread, coroutine, thread pool, synchronization control, thread communication, distribution, monkey patch, async syntax, generator
  • Network programming: basics of socket programming, TCP server and client, parallel request processing, HTTP server and client

 

5. Advanced software testing automation - interface testing

Interface testing is essentially a type of functional testing. It simulates the client calling the server interface through scripts or tools. Because it is tested from the interface layer, problems can be discovered earlier, thereby improving testing efficiency and reducing repair costs.

  • http/httpst protocol learning
  • Learn common request methods: GET, POST
  • Cookie and session learning
  • Basic concepts of interfaces
  • Interface document understanding
  • Interface test case writing
  • Interface testing tools used: postman, Jmeter, SoapUl

 

6. Advanced software testing automation - performance testing

The technical requirements for performance testing are very high, and it requires not only a deep understanding of performance testing indicators, test classifications, and test design. You also need to learn knowledge about system business and architecture, so that you can better design performance scenarios and analyze the performance bottlenecks of the system. Commonly used tools for performance testing include jmeter and loadrunner, and you can learn them as needed.

  • Basic concepts of performance: meaning of performance testing, understanding of common performance indicators, classification of performance testing
  • Performance testing process: performance requirement analysis, performance scenario design, test script writing, test execution resource monitoring, performance tuning, regression testing
  • Used by Jmeter and roadrunner
  • Performance test report output

7. Advanced software testing automation - app automation

More and more projects and systems provide services through mobile terminals. The quality of software on mobile terminals is becoming more and more important. App automated testing has become an important part of automated testing. With Appium, App automated testing and Web automated testing have many similarities, but as a test engineer, you still need to master the tools and features of mobile applications.

  • Appium mobile test environment construction: Appium ServerAppium and Desktop, Android operating environment construction, simulator installation and connection, real device debugging mode, adb, weditor, UiAutomator22, Monkey
  • Appium element positioning: native application element positioning, pure web application element positioning, hybrid application element positioning
  • Appium element interaction: waiting for elements to load, basic attributes and methods of elements, sliding, dragging, zoom operations, drop-down selection operations, toast message processing, common control analysis, common layout analysis
  • Package testing framework: Integrate Appium, adb and other tools, pre-defined exception handling, record Appium logs, screenshots, and create a multi-purpose testing framework

 

8. Advanced software testing automation - continuous integration and continuous testing

Continuous integration and continuous testing is a process of building, testing products and fixing bugs in iterations. It helps teams find defects early in the development phase, when they are usually less complex and easier to fix. Through continuous integration and continuous testing, you can minimize the risk of errors early and deliver better quality software faster.

  • Version control Git: background introduction, environment deployment, workspace, staging area and submission area, branch creation and merging, conflict resolution, tags, config and aliases, local warehouse and remote warehouse, GitHub and code cloud
  • Continuous integration with Jenkins: background introduction, environment deployment, file structure, remote warehouse and private server, ja package dependency, plug-in management
  • Container Docker: Understand Dockers’ images, warehouses, containers, Docker Engine and architecture diagrams, network settings, and data persistence

Finally, I would like to thank everyone who reads my article carefully. Reciprocity is always necessary. Although it is not a very valuable thing, if you can use it, you can take it directly:

 

These materials should be the most comprehensive and complete preparation warehouse for [software testing] friends. This warehouse has also accompanied tens of thousands of test engineers through the most difficult journey. I hope it can also help you! Anyone in need Partners can click on the small card below to receive it

Guess you like

Origin blog.csdn.net/hlsxjh/article/details/132739054