Après avoir travaillé comme testeur chez ByteDance et Pinduoduo pendant 5 ans, je suis resté éveillé toute la nuit pour résumer mon expérience de pagayeur...

Permettez-moi de vous expliquer brièvement le contexte : un diplômé inconnu de 985 titulaire d'un baccalauréat a rejoint Byte après l'obtention de son diplôme en 2017. Après cela, il a changé d'emploi pour Pinduoduo et s'est engagé dans les tests de logiciels. Je n'ai aucune expérience de stage auparavant, mais cela est considéré comme 5 ans d'expérience professionnelle.

Au cours des cinq dernières années, j'ai été promu une fois et j'ai changé d'entreprise. Il y a eu des moments de bonheur et de contentement, et des jours de confusion et de lutte. Cependant, je suis passé avec succès d'une recrue sur le lieu de travail à un pagayeur senior.

Dans ce processus, j'ai résumé quelques expériences pratiques de pagayage. Certaines d'entre elles ont été apprises par moi-même et d'autres en communiquant avec d'autres. J'aimerais les partager avec vous ici.

 

1. Apprenez à réfléchir profondément et à résumer

La première chose que je veux dire est d'apprendre à réfléchir profondément et à résumer, c'est à mon avis la chose la plus importante et la plus significative.

Réfléchissons d’abord profondément. Dans le cercle des programmeurs, on entend souvent des commentaires : "Mon travail n'a aucun contenu technique. J'en fais juste un petit peu tous les jours. Que puis-je en tirer ? Mettez de côté les arguments ridicules et plaisantants, c'est peut-être le cas. en effet les vraies pensées de certains camarades de classe, du moins je le pensais. Plus tard, avec l'accumulation d'expériences professionnelles et de discussions avec des camarades de classe de haut niveau, j'ai découvert que cette idée était en fait très fausse.

L’idée selon laquelle il n’y a rien à apprendre est fondamentalement le résultat d’une réflexion paresseuse. Toute petite chose apparemment discrète, tant que vous réfléchissez profondément et creusez un peu plus profondément verticalement ou élargissez horizontalement, c'est un océan de connaissances auquel les gens peuvent s'adonner.

Parlons du résumé . Je pense que c'est là que la plupart des programmeurs manquent : ils peuvent très bien faire une chose simplement en se plongeant dans leur travail. Mais je ne fais presque jamais de résumés abstraits, de sorte qu'après plusieurs années de travail, les connaissances que j'ai maîtrisées sont encore sporadiques et non systématiques. Non seulement elles sont faciles à oublier, mais cela rend aussi ma vision étroite et ma vision des problèmes être limité.

Il est très important de faire quelques résumés et réflexions en temps opportun. C'est un processus allant de la technique au Tao, qui vous permettra de voir le problème dans une perspective plus large et à un niveau supérieur. Lorsque vous rencontrez le même type de problèmes, vous pouvez suivre la méthodologie résumée pour avancer et la résoudre de manière systématique et hiérarchique.

Par exemple. Pour les services en arrière-plan, 1 Go de mémoire a été optimisé aujourd'hui et 50% du temps de lecture et d'écriture sera optimisé demain. Pouvez-vous résumer l'optimisation des performances ?

Par exemple, au niveau de l'application, vous pouvez gérer les applications connectées au service et trier la rationalité de leur accès ; au niveau de l'architecture, vous pouvez effectuer la mise en cache, le prétraitement, la séparation en lecture-écriture, asynchrone, parallèle, etc. ; au niveau de la couche de code, vous pouvez faire des choses Il y a plus, la mise en commun des ressources, la réutilisation des objets, la conception sans verrouillage, le fractionnement important des clés, le traitement retardé, la compression de l'encodage, le réglage gc et diverses pratiques de haute performance liées au langage... Je vais à la prochaine fois Pour les scénarios qui nécessitent une optimisation des performances, tout un ensemble d'idées peuvent être appliquées immédiatement, et le reste est une question d'outils et d'opérations pratiques.

Certains étudiants ont dit que je discuterais quotidiennement avec le PM pour travailler sur les exigences et ne faire aucune optimisation des performances. Ne discutons pas de la question de savoir si l'optimisation des performances peut être réalisée. En termes uniquement de besoins métier, il y a aussi des choses qui peuvent être résumées. Par exemple, comment construire un système ? Avez-vous réfléchi aux capacités de base du système, aux limites du système, aux goulots d'étranglement du système, à la superposition et au fractionnement des services et à la gouvernance des services ? Vous discutez quotidiennement des exigences avec le PM. Comment devriez-vous, en tant que un étudiant en technique, cultive la réflexion produit et vous guide ?Les tendances produits, comment faire passer l'architecture avant le business, ces problématiques peuvent aussi être réfléchies et résumées, n'est-ce pas ?

Par conséquent, l'apprentissage et la croissance sont un processus autonome. Si vous sentez qu'il n'y a rien à apprendre, ce n'est probablement pas parce qu'il n'y a vraiment rien à apprendre, mais parce que vous êtes trop paresseux, non seulement trop paresseux dans l'action, mais aussi trop paresseux pour réfléchir.

Vous pouvez écrire des articles plus techniques, partager davantage et vous forcer à réfléchir et à résumer. Après tout, si l'article n'est pas assez approfondi, tout le monde sera gêné de le partager publiquement.

2. Apprendre activement et maintenir son enthousiasme pour la technologie

Une théorie de l'anxiété qui a été largement diffusée sur Internet au cours des deux dernières années est appelée le phénomène des programmeurs de 35 ans. L'idée générale est que les programmeurs qui travaillent dans cette industrie jusqu'à l'âge de 35 ans attendent essentiellement d'être mis à pied. Il est indéniable que l’industrie de l’Internet est effectivement inférieure aux fonctionnaires et autres professions institutionnelles à cet égard. Mais dans cette question, le programmeur de 35 ans n'a pas 35 ans au sens physiologique absolu. Il devrait s'agir de programmeurs qui ont travaillé pendant plus de dix ans et qui ont travaillé pendant deux ou trois ans. Il n'y a pas beaucoup de différence. Les emplois suivants se reposent essentiellement sur leurs lauriers sans prendre l'initiative d'apprendre et de se ressourcer. 35 ans, c'est presque la même chose que 25 ans, et il n'y a aucun désir d'apprendre et de grandir à 25 ans. Au lieu de cela, de nombreuses questions insignifiantes dans s'y ajoutent la vie de famille et les exigences salariales sont souvent plus élevées, ce qui semble effectivement peu compétitif à l'entreprise.

Et si nous apprenons activement et conservons nos capacités techniques et nos réserves de connaissances proportionnelles à nos années de travail, comment pouvons-nous être anxieux à 35 ans ? Je pense que les grandes entreprises devraient se précipiter pour recruter de tels experts, n'est-ce pas ? Mais apprendre est une question de , est en fait un processus anti-humain, qui nous oblige à nous forcer à sortir de notre zone de confort, à prendre l'initiative d'apprendre et à maintenir notre enthousiasme technique. Il y a un dicton à Didi qui dit à peu près ceci : Prenez l'initiative de sortir de votre zone de confort et ressentez la lutte et la pression. C'est souvent l'obscurité avant l'aube, et c'est à ce moment-là que vous grandissez le plus rapidement. Au contraire, si vous sentez que vous vivez une vie confortable au quotidien et que votre travail n’est qu’une perte de temps, alors vous faites peut-être bouillir une grenouille dans de l’eau tiède.

Pendant la période qui suit l'obtention de votre diplôme, vous disposez souvent de plus de temps libre, ce qui est un bon moment pour travailler dur pour apprendre la technologie. Profitez de cette période pour établir des bases solides, développer de bonnes habitudes d'étude et maintenir une attitude d'apprentissage positive, ce qui devrait vous être bénéfique tout au long de votre vie. Quant à la manière d'étudier efficacement, de nombreux experts écrivent de tels articles sur Internet. Une fois arrivé dans l'entreprise, vous pouvez également trouver de nombreux partages de ce type sur l'intranet, je n'entrerai donc pas dans plus de détails.

3. Prenez l’initiative et communiquez vos commentaires en temps opportun

Les deux premiers sont d'un point de vue personnel. J'espère que chacun pourra améliorer ses capacités personnelles et maintenir sa compétitivité de base. Mais du point de vue d'une entreprise, lors du recrutement d'employés, le plus important est qu'ils créent de la valeur commerciale et contribuent à l'entreprise. .

Bien qu'il existe généralement un certain système de formation pour l'admission à l'école, en réalité l'entreprise n'a pas l'obligation de nous aider à grandir. Lorsqu'il s'agit d'être capable d'accomplir des choses et de créer de la valeur pour l'entreprise, je pense que les deux mots les plus importants sont prendre l'initiative, prendre l'initiative d'assumer des tâches, communiquer de manière proactive, promouvoir de manière proactive l'avancement du projet, coordonner les ressources de manière proactive, donner de manière proactive. rétroaction ascendante et création proactive d'impact.Puissance et ainsi de suite.

Lorsque j'ai rejoint l'entreprise pour la première fois, j'ai essentiellement bien fait mon travail en fonction des tâches assignées par le leader, puis j'ai fait mon propre truc. Je n'ai presque jamais pris l'initiative de communiquer avec les autres ni de réfléchir activement à des idées qui pourraient aider au développement de le projet. Je pensais qu'il suffisait d'accomplir mon travail avec qualité et quantité, mais plus tard, j'ai découvert que ce n'était pas suffisant : il s'agissait seulement de l'exigence la plus fondamentale.

L'approche de certains étudiants est que le leader n'a besoin que de synchroniser la direction qu'il veut prendre récemment, et le leader n'a fondamentalement pas besoin de se soucier de la série de choses suivantes : Je suis un leader comme ce camarade de classe, et j'aime aussi ça. Un mot que vous entendez souvent après avoir rejoint une entreprise est la conscience des propriétaires, ce qui signifie probablement ceci.

Un autre point très important dans ce processus est la communication et le feedback ascendants en temps opportun. Si le projet n'avance pas bien, si vous rencontrez des problèmes, synchronisez-vous à temps avec le leader. Si vous n'êtes pas sûr de la solution technique, vous pouvez en discuter avec le leader. Si vous ne parvenez pas à coordonner certaines ressources, vous pouvez demander au leader pour obtenir de l'aide. N'ayez pas trop de scrupules, pensant que cela sera trop gênant. Les dirigeants font réellement ce qu'ils font. C'est important.

Si le projet progresse sans problème et qu'il n'est vraiment pas nécessaire que le leader intervienne, il est également nécessaire de fournir en temps opportun un retour d'information sur l'avancement du projet et les avantages obtenus. Si vous avez des idées, vous devez également en discuter. Demandez au leader ses suggestions sur les progrès actuels et les autres domaines à améliorer pour éliminer les erreurs d'information. Faire ces choses, d'une part, permet d'utiliser raisonnablement les différentes ressources du leader. D'autre part, cela permet également au leader de comprendre sa charge de travail et de contrôler l'ensemble du projet. Après tout, le leader a aussi des leaders, et ils doivent également faire rapport.

C’est peut-être le management ascendant que tout le monde n’aime pas. C’est un peu offensant. En fait, je ne le fais pas bien non plus. Mais le point le plus fondamental est de ne pas accepter une tâche et de travailler d'un air maussade ou même de vous isoler du monde. Vous n'êtes pas synchronisé avec le leader depuis un mois, en pensant à retenir un grand mouvement ou quelque chose comme ça, c'est fondamentalement cool.

Vous devez prendre l'initiative. Vous pouvez commencer par vous forcer à parler dans divers lieux publics. Si vous avez des questions ou des idées, vous pouvez le faire en tête-à-tête.

4. Comment vous améliorer

Enfin, vous avez besoin d’un ensemble de bonnes informations pour améliorer le système afin d’améliorer vos capacités techniques globales !

En tant que testeur, j'aimerais partager certains de mes résumés et résumés de la technologie au fil des ans, ainsi que mes notes sur les compétences qui doivent être maîtrisées en tant que testeur automatisé avancé. J'espère que cela pourra aider ceux qui sont intéressés par cette route de la technologie. Des amis qui vont jusqu'au bout !

Le contenu comprend : la théorie des tests, les bases de Linux, les bases de MySQL, les tests Web, les tests d'interface, les tests d'applications, les outils de gestion, les bases de Python, liés à Selenium, les tests de performances, liés à LordRunner, etc.

1. Connaissances théoriques de base des tests logiciels :

  • Modèle de qualité du logiciel : Le processus de test du logiciel garantit la qualité du logiciel. Quels aspects de cette garantie peuvent être pris en compte sur la base du modèle de qualité ?
  • Classification des tests : le processus de test logiciel peut être classé sous différentes perspectives, des tests de base aux tests avancés.
  • Processus de développement : indiquez aux testeurs le cycle de vie complet du logiciel, le processus du logiciel de zéro à sa mort.
  • Processus de test : maîtriser et guider les testeurs sur la manière d'effectuer des travaux de test dans des projets réels. Cela nécessite que les testeurs aient une compréhension approfondie des processus de test courants. Rencontrez différents projets logiciels et sachez où tester les défauts logiciels le plus efficacement
  • Plan et programme de test : comment planifier les activités de test dans le projet et garantir que les activités de test sont effectuées de manière ordonnée
  • Méthodes de cas de conception : Certaines méthodes de conception de cas de tests qui doivent être maîtrisées lors de la phase de test en boîte noire. Par exemple, les tests en boîte noire : méthodes de conception de cas d'utilisation, éléments de cas de test, etc.
  • Défauts logiciels : les défauts doivent être identifiés lors de l'exécution des tests et des rapports de défauts doivent être soumis.
  • Gestion des défauts : après avoir soumis un défaut, comment aider l'équipe de développement à gérer les problèmes de soumission de vérification dans le travail réel. Par exemple : - Classification des bugs par niveau de priorité, description des bugs, cycle de vie des bugs, utilisation d'outils de gestion des défauts, tels que ZenTao, etc.

 

2. Compétences en tests de logiciels – système Linux

Le système Linux est le principal système d'exploitation du serveur et l'une des technologies de base que la plupart des personnes occupant des postes informatiques doivent posséder. En tant qu'ingénieurs de tests logiciels, nous devons souvent consulter les journaux côté serveur pour localiser la source du problème.

  • Connaissance de base du système Linux : multi-utilisateurs, multi-tâches, version distribution, etc.
  • Commandes de fonctionnement courantes de Linux : affichage des journaux, compression et décompression de fichiers, gestion des utilisateurs, autorisations de fichiers, etc.
  • Déploiera et configurera les applications de base jdk, mysql, tomcat
  • Installation et utilisation de Docker
  • Écriture de scripts Shell RAD de base
  • Outils de terminal distant utilisés : shell, xftps, etc.

 

3. Compétences de base en matière de tests de logiciels - Base de données SQL

En tant que système d'application essentiel pour les systèmes logiciels, les bases de données doivent souvent être exploitées dans le cadre de processus tels que les tests d'interface, les tests de performances, etc. pour vérifier l'exactitude et l'intégrité des données, qui sont indissociables des opérations d'ajout, de suppression, de modification et d'interrogation. de la base de données.Pendant la phase de déploiement du projet, la base de données doit également être nécessaire pour coopérer avec le déploiement du projet. La prise en charge de la base de données est requise dans les tests de performances et les tests d’automatisation des interfaces.

  • Concepts de base de la base de données
  • Base de données relationnelle
  • MYSQL basic ajouter et modifier des instructions de requête et des procédures stockées
  • Requête complexe MYSQL, requête multi-tables
  • Index MYSQL et concepts liés aux transactions
  • Utilisation d'outils clients de base de données : tels que Navicat

 

4. Compétences en tests de logiciels - langage de programmation

Il est recommandé aux amis sans connaissances en programmation d'apprendre le langage Python.

Le contenu d’apprentissage du langage Python comprend les points de connaissances suivants :

Notions de base de Python : fonctionnalités du langage Python, environnement d'exécution, syntaxe de base, style de codage, exemples de programmes

Structure de données:

  • Structures de données de base : nombres, chaînes, jugement de type, conversion de type, découpage, formatage de chaîne, opérations numériques, paramètres de position et paramètres de mots clés ;
  • Combinaison de structures de données : listes, tuples, plages, dictionnaires, ensembles, objets non hachables, décompression, adresses de structure de données en mémoire, données immuables
  • Contrôle du programme : structure de séquence, structure de boucle, structure de jugement, gestion des exceptions, opérateurs logiques
  • Fonctions : définir des fonctions, des paramètres de fonction, des valeurs de retour, des étendues de variables, des fonctions anonymes et des fonctions intégrées couramment utilisées
  • Modules et bibliothèques : modules et packages, mots-clés d'importation, bibliothèques standard couramment utilisées, bibliothèques tierces couramment utilisées, outil de gestion de packages pip
  • Orienté objet : l'origine et les avantages de l'orientation objet, la relation entre les classes de propriétés orientées objet et les objets, et les méthodes spéciales des objets
  • Journalisation : baseConfig, journal de fichiers, journal de courrier électronique, format personnalisé, espace réservé intégré, filtrage par niveau, propagation hiérarchique, fichier de configuration
  • Framework de test : unitest, pytest, etc.
  • Programmation simultanée : multi-processus, multi-thread, coroutine, pool de threads, contrôle de synchronisation, communication de threads, distribution, patch singe, syntaxe asynchrone, générateur
  • Programmation réseau : bases de la programmation socket, serveur et client TCP, traitement des requêtes parallèles, serveur et client HTTP

 

5. Automatisation avancée des tests logiciels - tests d'interface

Les tests d'interface sont essentiellement un type de tests fonctionnels. Ils simulent le client appelant l'interface du serveur via des scripts ou des outils. Comme il est testé à partir de la couche d'interface, les problèmes peuvent être découverts plus tôt, améliorant ainsi l'efficacité des tests et réduisant les coûts de réparation.

  • Apprentissage du protocole http/httpst
  • Apprenez les méthodes de requête courantes : GET, POST
  • Cookie et apprentissage de session
  • Concepts de base des interfaces
  • Compréhension des documents d'interface
  • Rédaction de cas de tests d'interface
  • Outils de tests d'interface utilisés : postman, Jmeter, SoapUl

 

6. Automatisation avancée des tests logiciels - tests de performances

Les exigences techniques pour les tests de performances sont très élevées et nécessitent non seulement une compréhension approfondie des indicateurs de tests de performances, des classifications des tests et de la conception des tests. Vous devez également acquérir des connaissances sur le fonctionnement et l'architecture du système, afin de pouvoir mieux concevoir des scénarios de performances et analyser les goulots d'étranglement des performances du système. Les outils couramment utilisés pour les tests de performances incluent jmeter et loadrunner, et vous pouvez les apprendre selon vos besoins.

  • Concepts de base de la performance : signification des tests de performance, compréhension des indicateurs de performance courants, classification des tests de performance
  • Processus de test de performances : analyse des exigences de performances, conception de scénarios de performances, rédaction de scripts de test, surveillance des ressources d'exécution des tests, réglage des performances, tests de régression
  • Utilisé par Jmeter et roadrunner
  • Sortie du rapport de test de performances

7. Automatisation avancée des tests logiciels - automatisation des applications

De plus en plus de projets et de systèmes fournissent des services via des terminaux mobiles. La qualité des logiciels sur les terminaux mobiles devient de plus en plus importante. Les tests automatisés des applications sont devenus une partie importante des tests automatisés. Avec Appium, les tests automatisés d'applications et les tests automatisés Web présentent de nombreuses similitudes, mais en tant qu'ingénieur de test, vous devez toujours maîtriser les outils et fonctionnalités des applications mobiles.

  • Construction de l'environnement de test mobile Appium : Appium ServerAppium et Desktop, construction de l'environnement d'exploitation Android, installation et connexion du simulateur, mode de débogage de l'appareil réel, adb, weditor, UiAutomator22, Monkey
  • Positionnement des éléments Appium : positionnement des éléments d'application natifs, positionnement des éléments d'application Web purs, positionnement des éléments d'application hybrides
  • Interaction des éléments Appium : attente du chargement des éléments, attributs et méthodes de base des éléments, glissement, glissement, opérations de zoom, opérations de sélection déroulante, traitement des messages toast, analyse de contrôle commune, analyse de mise en page commune
  • Cadre de test de packages : intégrez Appium, adb et d'autres outils, gestion des exceptions prédéfinies, enregistrez les journaux Appium, les captures d'écran et créez un cadre de test polyvalent.

 

8. Automatisation avancée des tests logiciels - intégration continue et tests continus

L'intégration continue et les tests continus sont un processus de création, de test de produits et de correction de bogues au cours des itérations. Il aide les équipes à détecter les défauts dès le début de la phase de développement, alors qu'ils sont généralement moins complexes et plus faciles à corriger. Grâce à une intégration et des tests continus, vous pouvez minimiser le risque d'erreurs dès le début et fournir plus rapidement des logiciels de meilleure qualité.

  • Contrôle de version Git : introduction en arrière-plan, déploiement de l'environnement, espace de travail, zone de préparation et zone de soumission, création et fusion de branches, résolution de conflits, balises, configuration et alias, entrepôt local et entrepôt distant, GitHub et cloud de code
  • Intégration continue avec Jenkins : introduction en arrière-plan, déploiement de l'environnement, structure des fichiers, entrepôt distant et serveur privé, dépendance des packages Ja, gestion des plug-ins
  • Container Docker : comprenez les images, les entrepôts, les conteneurs, le moteur Docker et les diagrammes d'architecture, les paramètres réseau et la persistance des données de Dockers.

Enfin, je voudrais remercier tous ceux qui lisent attentivement mon article. La réciprocité est toujours nécessaire. Même si ce n'est pas une chose très précieuse, si vous pouvez l'utiliser, vous pouvez le prendre directement :

 

Ces matériaux devraient constituer l'entrepôt de préparation le plus complet et le plus complet pour les amis [des tests de logiciels]. Cet entrepôt a également accompagné des dizaines de milliers d'ingénieurs de test tout au long du voyage le plus difficile. J'espère qu'il pourra également vous aider ! Toute personne dans le besoin Les partenaires peuvent cliquer sur la petite carte ci-dessous pour le recevoir

Je suppose que tu aimes

Origine blog.csdn.net/hlsxjh/article/details/132739054
conseillé
Classement