Comment la tâche de test est-elle devenue une bibliothèque de production

Bonjour à tous!

Aujourd'hui, je vais vous expliquer comment la tâche de test pour l'entretien d'embauche est devenue la bibliothèque Image Comparison . C'est une bibliothèque open source, qui héberge sur GitHub.

logo

Avant de commencer, permettez-moi de me présenter. Je m'appelle Roman. Je suis mari et père. Je suis ingénieur logiciel chez Epam Systems avec 4 ans d'expérience en informatique.

L'idée principale de ce sujet est de dire que créer un produit open source ce n'est pas perdre du temps, non! C'est une expérience incroyable, qui vient de toute la communauté open-source. C'est un moment où vous êtes développeur, chef de projet, chef de produit dans une tête.

Pendant que cette bibliothèque grandit, je travaille avec des gens de plus de 10 (!!) pays, tels que les États-Unis, l'Allemagne, la Chine, l'Inde, la Russie, l'Ukraine, etc.

Passons au début de cette histoire ...

Tâche de test à l'entretien d'embauche. Août 2017.


Début août 2017, j'ai eu un entretien dans une entreprise informatique, où la première étape a été de faire la tâche de test.

La tâche était de créer le programme en Java qui compare 2 images avec les mêmes tailles et montre la différence visuellement en dessinant des rectangles. Une exigence détaillée peut être trouvée ici .

J'ai décidé que je voulais faire de mon mieux. Dans ce but, j'ai décidé d'héberger ma tâche de test sur GitHub. Je voulais tuer deux oiseaux avec une pierre: fournir la solution, qui en tant que source ouverte et rechercher comment fonctionne GitHub.

Après un certain temps, j'ai trouvé Marketplace sur GitHub, qui a beaucoup de services à utiliser avec les référentiels GitHub. Pour les projets open source tous gratuits. C'est la première fois que je constate que l'open source est la meilleure communauté.

J'ai ajouté les prochains services:

  • Codacy - est un service de qualité de code.
  • Travis CI - Outil d'intégration continue.
  • Combinaisons - testez l'historique de la couverture et les statistiques
  • BetterCodeHub - service de qualité de code.

Les résultats de ces services peuvent être ajoutés à README sous forme de barge. À mon avis, il est plus intéressant de lire le fichier README.

Une fois la tâche de test terminée, je l'ai envoyée et j'ai attendu les commentaires. J'ai plusieurs problèmes, qui étaient importants et ont été ajoutés à la section ISSUE du référentiel.

L'un d'eux - des rectangles qui se chevauchent ...
Les rectangles peuvent se chevaucher et être inclus un à un. Ce comportement entraîne des ordures sur l'image résultante. Effet souhaité: fusionner des rectangles qui incluaient un à un rectangle.

Tâche de test en tant que bibliothèque. Juillet 2018


Après un certain temps, j'ai exploré que de nombreuses personnes visitent ma bibliothèque sur GitHub. Vraiment, je ne pensais pas que quelqu'un s'intéresse à mon projet de test.

Le logo


Ensuite, j'ai découvert que quelqu'un proposait un logo. C'était un graphiste dee-y. Je n'étais pas dans la communauté open-source auparavant et cette proposition était vraiment étrange pour moi. Pourquoi quelqu'un veut le faire gratuitement. Mais il m'a dit qu'il aimait contribuer à des projets open source. Une sorte d'objectif de vie. C'est vraiment incroyable.

Logo pour le projet - c'est une bonne idée et je l'ai acceptée. Il y avait de nombreuses options.

À partir de

image

À

image

Finale

image

C'était la première fois que je communiquais dans la communauté open-source. La nouvelle expérience, une nouvelle connaissance.

Le premier bug de la communauté


Après un certain temps, j'ai trouvé un problème GitHub ouvert avec le bogue. C'était un développeur chinois.
Le bug concernait le problème des grandes images. Il a utilisé de grandes images et a obtenu StackOverflowError. J'ai été surpris que quelqu'un ait utilisé mon code et ait trouvé le bogue. De plus, le développeur a créé un problème.

C'était mon premier défi. Mettez au défi de comprendre comment résoudre ce bogue.

Après un certain temps, l'ingénieur en automatisation de l'assurance qualité de Russie a proposé une solution à ce bogue, mais je l'ai refusée car la Pull-Request n'était pas préparée comme il se doit. C'était ma faute, j'avais besoin de voir et d'essayer de comprendre la solution. Cela pourrait m'aider à le résoudre beaucoup plus rapidement.

À ce moment-là, j'avais eu deux problèmes majeurs, qui étaient critiques.

Utilisation de la ligne de commande. Automne 2018


L'étape suivante du développement a été de travailler avec Renato Athaydes, un développeur de logiciels de Stockholm, en Suède.

Il a proposé des changements en permettant d'utiliser la comparaison d'images comme une CLI traditionnelle. C'était tellement excitant d'entendre que quelqu'un veut étendre l'utilisation de la comparaison d'images et ouvrir une nouvelle niche en développement.

Renato a résolu tous les commentaires que j'ai créés et j'ai ajouté une nouvelle version - v2.0. J'ai commencé à créer des versions dans le référentiel GitHub. C'est vraiment utile, pour la raison, que je peux obtenir rapidement toutes les modifications, qui étaient dans une version spécifique, toute la description de la version, qui y contribue, etc.

Ensuite, Renato m'a demandé d'ajouter une comparaison d'images à Maven Central. Je n'ai aucune expérience de la publication de bibliothèques sur Maven Central et Renato est heureux d'ajouter toutes les modifications nécessaires au projet de publication. La publication dans Maven Central permet d'ajouter la bibliothèque en tant que dépendance sans aucun problème. Un gros problème était de le publier.

Mais avant de publier, j'ai dû corriger deux bugs majeurs dans le système. J'ai passé beaucoup de temps à les corriger et en avril 2019, j'ai ajouté une nouvelle version - v.2.0.2.

Publication dans Maven Central. Avril 2019


Pour publier correctement la bibliothèque, vous devez gérer le contrôle de version. Après avoir étudié ce problème, j'ai commencé à adhérer au schéma suivant: MAJOR.MINOR.PATCH

où:

MAJOR - version lorsque des modifications d'API incompatibles sont effectuées
MINEUR - version lorsque ajoute des fonctionnalités d'une manière rétrocompatible
PATCH - version quand fait des corrections de bugs rétrocompatibles.

L'étape suivante consiste à comprendre comment configurer correctement artifactId et groupId.

J'ai mis à jour tous mes packages:
de ua.comparison.image
à com.github.romankh3.image.comparison

Cela rend plus compréhensible la recherche où se trouve la base de code.
Et le résultat a été libéré - v2.1.0.

Nouveau contributeur de Suède. Mai 2019


J'ai reçu un e-mail, où un consultant indépendant et l'entrepreneur m'ont demandé de voir une nouvelle contribution de Mika. C'est un développeur suédois.

Il a dit que les personnes malvoyantes ont du mal à voir les rectangles diff s'ils sont trop fins. J'ai aimé cette idée et je l'ai ajoutée au projet.

Avec ces changements, j'ai été ajouté une contribution d'un de mes amis, qui voulait s'exercer à utiliser GitHub Flow.

En conséquence, j'ai publié une nouvelle version v2.2.0.

La nouvelle étape de la bibliothèque. Mai 2019


J'ai un problème avec TobseF de Karlsruhe, en Allemagne. Il voulait utiliser la comparaison d'images comme bibliothèque pour les tests. Mais il voulait plus de fonctionnalités.

A cette époque, la bibliothèque avait la méthode principale compareImages () qui renvoyait de nouvelles images en conséquence.

TobseF a proposé de mettre à jour la valeur de retour de la méthode compareImages () pour renvoyer l'objet ComparisonResult avec les images en cours de comparaison, ComparisonState (match, missmatch, sizemissmatch). Cela aidera à utiliser dans les tests.

Il a également proposé d'ajouter quelques options de configuration, ce qui l'aiderait.

J'ai aimé ces propositions, mais les changements n'étaient pas rétrocompatibles et ont supprimé une partie de la base de code, que je voulais garder telle quelle. C'est pourquoi j'ai rejeté les modifications.

Néanmoins, j'ai décidé de le mettre en œuvre par moi-même. C'était une excellente idée pour améliorer la comparaison d'images.

En outre, Mika a proposé de nouveaux changements - ajouter des zones, qui peuvent être ignorées dans la comparaison. Il est également utile pour les tests. C'est pourquoi ces modifications ont également été ajoutées.

En conséquence, la v3.0.0 est sortie.

La version 3.0.0 est devenue une véritable bibliothèque, qui peut être utile aux développeurs. J'étais tellement génial que la comparaison d'images grandit.

Utilisation en production. Juin 2019


Début juin, j'ai reçu un e-mail d'un ingénieur QA en automatisation, qui avait plusieurs questions sur la comparaison d'images. Il a dit qu'il voulait l'utiliser dans les tests d'automatisation de la qualité pour la production.

Tests de production! J'étais tellement excité de l'entendre. Ce n'était pas un projet pour animaux de compagnie sur GitHub, c'était une vraie production. Super! J'ai décrit tout ce que je pouvais.

Il a dit que la comparaison d'images était la seule bibliothèque qu'il avait trouvée, qui pouvait comparer deux images avec des zones exclues. Mais la fonctionnalité des zones exclues ne fonctionnait pas comme il le souhaitait.

Nous travaillons ensemble depuis deux mois pour améliorer la comparaison d'images.

En conséquence, c'était la version v3.1.1.

Recherche de niche. Juillet 2019


J'ai compris que la comparaison d'images peut être utile à un ingénieur QA en automatisation pour l'utiliser dans des tests.

C'est pourquoi j'ai trouvé aqa-forum, où j'ai publié un article sur la comparaison d'images. J'ai des commentaires utiles et j'ai publié les versions v3.2.0 et v3.3.0.

S'il vous plaît, si vous connaissez un autre forum, où peut être montré la comparaison d'images - écrivez-le dans les commentaires. Cela aidera la comparaison d'images à être meilleure qu'elle ne l'est.

Ensuite, j'ai trouvé des référentiels GitHub, qui contiennent des liens utiles vers les bibliothèques et y ont ajouté une comparaison d'images.

Maintenant. Novembre 2019


La comparaison d'images a 60 démarrages, 33 fourchettes, 10 utilisations sur Github comme dépendance.
Je pense que c'est un excellent résultat de la communauté open source qui m'aide à apporter une nouvelle bibliothèque.

C'est un long chemin et je crois que ce n'est qu'un début.

Je voudrais dire merci à tous les contributeurs, qui construisent une comparaison d'images avec moi.

Merci d'avoir lu.

Cordialement,
Romain

Source: https://habr.com/ru/post/fr475482/


All Articles