Entretien de la communauté Python avec Bruno Oliveira – Real Python

By | août 12, 2020

Formation Python

Aujourd'hui, je suis rejoint par Bruno Oliveira, qui est peut-être le plus connu pour être un pytest développeur principal. Dans cette interview, nous couvrons la migration d'une grande base de code de C ++ vers Python, comment démarrer avec pytestet son amour pour Dark Souls.

Ricky: Bienvenue à Real Python, Bruno. Je suis heureux que vous ayez pu nous rejoindre. Commençons de la même manière que nous le faisons avec tous nos invités: comment avez-vous commencé la programmation et quand avez-vous commencé à utiliser Python?

Bruno: Salut, Ricky. Merci de m'avoir.
Bruno Oliveira

J'ai commencé à programmer il y a environ vingt-trois ans. J'étais juste en train de me lancer dans les ordinateurs lorsqu'un de mes amis m'a montré ce livre sur Visual Basic, et j'étais absolument étonné que vous pourriez écrire votre propre calculatrice.

Quelque temps plus tard, mon père m'a acheté le Delphi 3 Bible. J'ai dévoré ça, et après un certain temps, j'ai commencé à programmer en DirectX et à créer des jeux très simples.

Après cela, je suis entré à l'université, et au deuxième semestre j'ai réussi à obtenir un stage pour travailler sur une application Delphi pour le traitement d'image. Après le stage, j'ai rejoint l'ESSS, l'entreprise dans laquelle je travaille encore aujourd'hui.

Mon rôle chez ESSS en tant que leader technique est de gérer les aspects techniques des projets sur lesquels je travaille, y compris la conception et les revues de code au jour le jour. Je suis actuellement impliqué dans quatre projets.

Avec les autres responsables techniques, je développe et supervise également nos efforts de haut niveau, tels que la migration de tout le code d'une version Python à la suivante, la résolution de problèmes dans notre CI, la mise en œuvre de workflows de développement, et bien d'autres.

Chez ESSS, nous développons des applications d'ingénierie spécifiquement pour l'industrie pétrolière et gazière. Quand j'ai rejoint, tout était codé en C ++, et l'équipe a tout développé elle-même, y compris une bibliothèque d'interface graphique multiplateforme. Un an environ après mon embauche, nous avons commencé à nous pencher sur Python (version 2.4 à l'époque) et comment nous pourrions l'utiliser avec PyQt pour développer rapidement nos applications.

Aujourd'hui, nous avons la grande majorité de notre base de code en Python, avec un peu de C ++ pour les simulations et le calcul numérique. En janvier 2019, nous avons terminé le passage de tous les projets de Python 2 à Python 3 (version 3.5 à l'époque), ce qui était un effort impliquant toute l'équipe travaillant chaque fois que nous le pouvions pendant plus de quatre ans.

Ricky: Vous avez été l'un des principaux développeurs de pytest depuis un certain temps maintenant. Comment as-tu découvert pytest, et pourquoi avez-vous fait le saut pour devenir l'un de ses contributeurs?

Bruno: Depuis que nous avons commencé à utiliser Python, nous avons immédiatement vu la valeur des tests automatisés, et pas seulement parce que Python est dynamique. Lorsque tout notre code était en C ++ pur, les applications plantaient tout le temps, même avec la sécurité relative d'avoir un compilateur.

Nous avons fait évoluer notre base de code de test de manière organique, en ajoutant la prise en charge de Qt, le parallélisme, la collection de tests riche, etc. Vers 2013, j'ai découvert pytest et a été étonné par la bibliothèque. Il contenait tout ce que nous avions implémenté en interne plus un tas de choses que nous voulions, et il comportait également un système de plugins très expressif qui pouvait ensuite être étendu aux fonctionnalités qui n'étaient pas encore disponibles.

J’ai toujours aimé les tests automatisés. À cette époque, j’ai donc créé le pytest-qt plugin, et pytest-mock a été créé juste après cela. J'ai alors commencé à m'impliquer dans la liste de diffusion et à contribuer aux corrections de bogues et aux nouvelles fonctionnalités. Finalement, le créateur de pytest, Holger Krekel, m'a transformé en développeur principal.

Quelques années plus tard, nous avons réussi à remplacer l'ensemble de notre base de code de test personnalisé par pytest et plugins.

Ricky: Au moment de cet entretien, pytest 6.0 est actuellement au stade de la version candidate. Qu'est-ce qui vous passionne le plus avec la nouvelle version? Y a-t-il de nouvelles fonctionnalités qui pourraient changer la façon dont les gens testent leur code?

Bruno: Je pense que la caractéristique la plus intéressante pour beaucoup est que pytest est maintenant entièrement annoté de type, permettant aux utilisateurs d'utiliser mypy pour vérifier le type de leur code de test. Cela a pris de nombreux mois d'efforts et a été dirigé par l'un de nos nouveaux contributeurs principaux, Ran Benita.

Une autre fonctionnalité attendue depuis longtemps est la possibilité d'utiliser pyproject.toml fichiers de configuration.

Ricky: Vous avez également écrit un livre avec Packt Publishing intitulé Guide de démarrage rapide pytest: rédigez un meilleur code Python avec des tests simples et maintenables. Comment avez-vous trouvé l'expérience de l'écriture d'un livre et comment le processus vous a-t-il aidé avec vos propres tests Python?

Bruno: Bien qu'il soit amusant d'essayer de trouver des exemples de code différents de ce que nous voyons habituellement dans les livres et articles de programmation, comme Dark Souls et les références télévisées, l'expérience globale a été un peu épuisante, pour être honnête.

Cela n'a rien à voir avec l'éditeur et les éditeurs, qui ont été vraiment utiles. C’est juste que je ne pense pas avoir une passion pour ça, donc tout était un travail difficile par rapport à la programmation, qui est quelque chose que j’aime et qui me fait plaisir.

Mais l'expérience globale a été positive. Avoir à écrire un tas de modèles, comme comment porter de grandes suites de tests à partir de Test de l'unité à pytest, d'une manière facile à comprendre, m'a aidé à les solidifier dans mon esprit.

Ricky: Pour tous les débutants qui liront ceci, pourquoi est-il important de tester votre code, et comment peut-on commencer avec pytest?

Bruno: L'écriture de tests automatisés n'est pas très différente de ce que la plupart des gens font déjà lorsqu'ils écrivent un nouveau code. Souvent, ils ouvriront le REPL pour essayer rapidement quelque chose, comme ceci:

>>>

>>> de mymodule importer mysum
>>> mysum(4, 5)
9
>>> mysum(1, -1)
0
>>> # Woot! Ça marche

Les gens peuvent également écrire un code rapide sous si __nom__ == __main__: dans le module, comme ceci:

si __Nom__ == "__principale__":
    impression(mysum(4, 5))
    impression(mysum(1, -1))
    # Voyez qu'il imprime '9' et '0' et woot! Ça marche

Bien que cela soit approprié pour voir si les choses fonctionnent, faire le saut pour écrire un test automatisé est très simple. Il suffit de créer un test_mymodule.py fichier et écrivez ce qui suit:

def test_mysum():
    affirmer mysum(4, 5) == 9
    affirmer mysum(1, -1) == 0

C'est tout. Maintenant vous pouvez exécuter pytest, et il vérifiera que mysum () fonctionne encore. Bien qu'il puisse sembler idiot au début de tester quelque chose alors que vous savez déjà que cela fonctionne, la chose importante à réaliser est que ce test automatisé garantit que la fonction sera continue de travailler A l'avenir. Plus vous ajoutez de tests, plus votre système entier est validé en permanence.

C'est la partie la plus brillante des tests automatisés pour moi. Cela garantit non seulement que votre système fonctionne, mais aussi qu'il continuera à fonctionner à l'avenir, même si vous décidez de tout refactoriser. À tout le moins, il signalera les erreurs que vous pourriez commettre. Les tests manuels ne sont tout simplement pas adaptés.

Ricky: Passons maintenant à mes dernières questions. Que faites-vous d'autre pendant votre temps libre? Quels autres loisirs et intérêts avez-vous en dehors de Python et de la programmation?

Bruno: J'aime vraiment regarder des séries télévisées (qui n'aime pas?) Et jouer sur mon PC. Je suis un grand fan de Dark Souls et j'aime vraiment jouer à des RPG riches comme The Witcher 3 et des jeux multijoueurs coopératifs avec mes amis.

Ricky: Merci de vous joindre à moi, Bruno. Ce fut un plaisir.


Si vous souhaitez entrer en contact avec Bruno, vous pouvez le trouver sur Twitter. Vous pouvez également récupérer une copie de son livre.

S'il y a quelqu'un dans la communauté Python que vous aimeriez que je interviewe, laissez un commentaire ci-dessous ou contactez-moi sur Twitter.

Bon codage!