Je suis un grand fan de tests. J'en parle dans mon blog et ma liste de diffusion, j'en discute avec d'autres dĂ©veloppeurs pendant mon temps libre, je suis mĂȘme allĂ© jusqu'Ă crĂ©er un cours de formation sur les tests dans Go.
Mais malgré tout mon amour des tests, je ne le recommande pas aux débutants.
Cela semble sauvage, non? Dans cet article, je vais clarifier mon point de vue plus en détail, mais tout le point se résume finalement à deux points:
- Les débutants n'ont pas suffisamment de connaissances pour écrire autre chose que les tests les plus simples. Cela mÚne inévitablement au point suivant ...
- Essayer de former les compĂ©tences nĂ©cessaires pour Ă©crire des tests rĂ©alistes tout en apprenant la programmation est extrĂȘmement difficile
Je comprends que c'est, en principe, un point. En tout cas, je l'ai divisĂ© en deux afin de le rendre plus facile Ă comprendre.Je sais que beaucoup d'entre vous seront en dĂ©saccord avec moi, mais veuillez lire l'article, et si aprĂšs lecture vous n'ĂȘtes pas convaincu, je serai heureux d'en discuter avec vous. En fin de compte, je suis ici pour Ă©tudier
Les débutants manquent de connaissances pour écrire autre chose que les tests les plus simples
Chaque fois qu'un novice Ă©crit du code, son objectif principal n'est pas de dĂ©composer les tĂąches, d'Ă©viter les variables globales ou d'Ă©crire du code de test. HonnĂȘtement, la plupart des dĂ©butants ont probablement peu d'idĂ©e de tout cela. En fait, leur objectif principal est simple - faire fonctionner cette fichue chose. Câest tout.
Confirmer que cela ne nécessitera probablement aucun effort, il suffit de regarder le code écrit par le débutant.
Allez application web? Ils Ă©crivent sĂ»rement des requĂȘtes SQL partout et partout dans le code, et la connexion Ă la base de donnĂ©es est presque garantie d'ĂȘtre stockĂ©e dans une variable globale.
Application Rails? Vous verrez sûrement la logique métier dans les vues et des tonnes de bourrages logiques dans les contrÎleurs.
Application web PHP? Je ne serai pas surpris si TOUTE la logique se trouve dans un seul fichier php - analyse de formulaire, interaction avec la base de données, etc.
MĂȘme si nous prenons quelque chose d'Ă©lĂ©mentaire, disons, une calculatrice avec des fonctionnalitĂ©s limitĂ©es, nous rencontrons toujours des exemples comme ceux que j'ai dĂ©crits. Ce n'est pas du tout dĂ» au fait que les dĂ©butants s'en foutent, ils ne savent tout simplement pas comment faire mieux.
Les débutants ne savent pas ce qu'est l'injection de dépendance, ils ne comprennent pas comment les variables globales compliquent les tests, trÚs probablement ils ne savent pas ce qu'est la simulation, il est donc assez ridicule de s'attendre à ce qu'ils comprennent comment concevoir du code facile à coder.
Par conséquent, pour un débutant, seuls les tests les plus simples comme ceux-ci ont du sens:
func Add(a, b int) int { return a+b }
Bien que je n'aie aucun problÚme à le montrer aux débutants et à leur donner une idée de ce que sont les tests, je pense qu'il est assez ridicule de leur montrer ce code et de prétendre que c'est quelque chose comme un vrai test.
En fin de compte, cela conduit au fait que nous commençons à leur enseigner davantage. Nous essayons d'expliquer ce qu'est l'injection de dépendances, pourquoi les variables globales compliquent les tests, comme time.Now () peut rendre difficile la vérification des cas limites. Et à cet endroit, je commence à m'inquiéter, car nous n'enseignons plus au débutant comment écrire du code. En ce moment, nous lui apprenons comment écrire du code
ET COMMENT TESTER en mĂȘme temps. Et cela m'amĂšne au deuxiĂšme point ...
Essayer de former les compĂ©tences nĂ©cessaires pour Ă©crire des tests rĂ©alistes tout en apprenant la programmation est extrĂȘmement difficile
Comme auparavant, je veux que vous pensiez au code écrit par le débutant, mais cette fois, je veux que vous vous souveniez de certains des premiers programmes que vous avez écrits.
Si vous étiez comme moi, votre premiÚre application Web pourrait ressembler à ceci:
<p> <?php
Une Ćuvre d'art, non?
Imaginez maintenant que vous venez d'écrire ce code pour la premiÚre fois et que quelqu'un vous dit de le tester. Et vous devez utiliser React. Et le cadre. Oh, et cela ne vous ferait pas de mal de modifier la base de données et éventuellement GraphQL pour travailler avec.
Je ne sais pas pourquoi, mais
nous, les dĂ©veloppeurs, avons lâhabitude dâutiliser les compĂ©tences acquises au cours de nombreuses annĂ©es dâexpĂ©rience et de pratique et nous attendons Ă ce que dâautres, en particulier les dĂ©butants, fassent de mĂȘme . C'est tout simplement ridicule! Il faut s'attendre Ă ce que quelqu'un comprenne les mathĂ©matiques uniquement parce que vous avez vous-mĂȘme dĂ©jĂ Ă©tudiĂ© la trigonomĂ©trie, l'algĂšbre et bien plus encore, et vous pouvez utiliser les mathĂ©matiques pour rĂ©soudre des problĂšmes spĂ©cifiques.
Si quelque chose fonctionne bien pour vous, cela ne signifie pas qu'il conviendra aux dĂ©butants. Ils peuvent ĂȘtre hors contexte, sans l'expĂ©rience et la pratique nĂ©cessaires pour bĂ©nĂ©ficier de ce que vous utilisez. Ou peut-ĂȘtre que les problĂšmes avec lesquels ils se dĂ©battent sont en fait trop simples pour utiliser toutes ces solutions complexes.
Câest comme si nous avions oubliĂ© comment nous avons Ă©tudiĂ© pas Ă pas le fonctionnement des requĂȘtes HTTP. Fonctionnement des en-tĂȘtes. Les cookies Formulaires. Comment fonctionne une requĂȘte POST sur le serveur - ou mĂȘme qu'il existe des mĂ©thodes HTTP EXTRĂMEMENT diffĂ©rentes. Et nous avons appris tout cela avec la bonne vieille mĂ©thode d'essai et d'erreur.
En fait, je ne pense pas que les tests soient Ă blĂąmer, le vrai problĂšme est que nous croyons fermement que vous devriez apprendre la programmation, les tests, la crĂ©ation de sites Web et un million d'autres choses en mĂȘme temps. Je ne sais pas vraiment comment cela sâest produit, mais je suppose que le problĂšme vient en partie du fait que nous ne prenons pas la peine de rĂ©flĂ©chir Ă ce quâil en coĂ»tera pour Ă©tudier tout cela. Un dĂ©butant demande "que dois-je apprendre?" et nous commençons "apprendre Ă tester, rĂ©agir, graphql et c'est parti, mais n'utiliser que la bibliothĂšque standard ..."
Non, non et encore non. ArrĂȘte.

C'est ridicule, car dans d'autres conditions, l'absurdité d'une telle approche est évidente. Si vous voulez apprendre à quelqu'un à jouer au football, vous commencerez par les bases comme l'emballage et le dribble. Vous ne commencerez pas par dire «C'est comme ça que les professionnels procÚdent», allumez la vidéo de Ronaldo et partez. Alors que diable faisons-nous avec les nouveaux venus dans la programmation?
Nous essayons de nous justifier en disant: «Eh bien, bien sĂ»r, ils comprennent qu'il est impossible d'apprendre tout cela en mĂȘme temps», mais ils ne comprennent pas! La situation est aggravĂ©e par le fait que les dĂ©veloppeurs novices, tombant dans ce piĂšge, se sentent comme de la merde parce qu'ils sont coincĂ©s. Il leur semble quâils nâont tout simplement pas ce quâil faut pour devenir dĂ©veloppeur et câest dommage pour vous et moi, car beaucoup dâentre eux adoreraient programmer sâils ne sâĂ©crasaient pas sur ce mur de briques.
Et cela m'amĂšne Ă ce que je voulais rĂ©ellement dire - beaucoup d'entre nous Ă©tudient mieux si nous nous concentrons sur l'Ă©tude de plusieurs choses Ă la fois. Nous voulons de nouveaux dĂ©fis, nous voulons essayer de nouvelles choses, mais nous ne voulons pas nous embrouiller et tomber dans la stupeur. Apprendre les tests et toute autre chose - par exemple, comment crĂ©er une application Web, comment fonctionne http, cookie, etc. - est un moyen facile de tomber dans ce piĂšge. Et par consĂ©quent, je recommande gĂ©nĂ©ralement d'Ă©tudier le reste en premier et de tester en dernier. Vous pouvez toujours revenir Ă vos anciens projets et voir comment vous les reconstruiriez maintenant, lorsque vous avez Ă©tudiĂ© les tests, mais cela n'est possible que si vous n'ĂȘtes pas surchargĂ©, pas contrariĂ© et, finalement, n'avez pas abandonnĂ© cette activitĂ©.
Mais que faire si je veux apprendre à tester?! (et un million d'autres «et si»)
Cool en avant! Bien sĂ»r, vous pouvez d'abord Ă©tudier les tests, puis seulement le dĂ©veloppement Web ou un autre sujet. Je suis sĂ»r que certains l'ont fait et vous aimerez peut-ĂȘtre davantage ainsi. Quand je dis que les tests ne sont pas pour les dĂ©butants, je ne dis pas que c'est un mauvais sujet Ă Ă©tudier, je veux dire qu'essayer d'apprendre les tests et tout le reste est une erreur.
La plupart des gens veulent d'abord apprendre Ă crĂ©er des applications Web ou quelque chose de visuel, mais cela ne signifie pas que vous devez commencer par cela, vous pouvez trĂšs bien commencer par les tests. Vous ne commencerez probablement Ă rien comprendre avant d'avoir les bosses, mais ne me laissez pas vous empĂȘcher d'apprendre ce que vous voulez.
Cela ne signifie pas non plus que vous ne pouvez pas Ă©tudier pendant la programmation de paires ou quelque chose comme ça. Avec un mentor, vous pouvez apprendre beaucoup de choses en mĂȘme temps et rĂ©ussir Ă supporter cette charge, car vous avez quelqu'un qui vous guidera Ă travers tout cela. Dans cette situation, si vous vous perdez, vous n'entrerez pas dans une impasse et vous ne vous sentirez pas comme un Ă©chec, car il y aura quelqu'un qui dira: «Vous allez bien, c'est tout simplement trop difficile pour l'instant. La prochaine fois, essayez plutĂŽt X et Y! » Autrement dit, dans ce scĂ©nario, vous ne serez pas confus, déçu et quittez.