Olá pessoal!
Hoje vou contar como a tarefa de teste da entrevista de emprego se tornou a biblioteca
Image Comparison . É uma biblioteca de código aberto, hospedada no GitHub.

Antes de começar, deixe-me me apresentar. Meu nome é romano Sou marido e pai. Sou engenheiro de software na Epam Systems com 4 anos de experiência em TI.
A principal idéia deste tópico é dizer que criar um produto de código aberto não está perdendo tempo, não! É uma experiência incrível, proveniente de toda a comunidade de código aberto. É um momento em que você é desenvolvedor, gerente de projetos, gerente de produtos de uma só vez.
Enquanto esta biblioteca está crescendo, tenho trabalhado com pessoas de mais de 10 (!!) países, como EUA, Alemanha, China, Índia, Rússia, Ucrânia, etc.
Vamos seguir em frente desde o início desta história ...
Tarefa de teste para a entrevista de emprego. Agosto de 2017.
No início de agosto de 2017, tive uma entrevista em uma empresa de TI, onde é o primeiro passo para realizar a tarefa de teste.
A tarefa era criar o programa em Java que compara duas imagens com os mesmos tamanhos e mostra a diferença visualmente desenhando retângulos. Um requisito detalhado pode ser encontrado
aqui .
Eu decidi que quero fazer o meu melhor. Para esse fim, decidi hospedar minha tarefa de teste no GitHub. Eu queria matar dois coelhos com uma cajadada: fornecer a solução, que como código aberto e pesquisar como o GitHub funciona.
Depois de algum tempo, encontrei o Marketplace no GitHub, que possui muitos serviços para usar com os repositórios do GitHub. Para projetos de código aberto todos gratuitos. É a primeira vez que entendo que o código aberto é a melhor comunidade.
Eu adicionei os próximos serviços:
- Codacy - é um serviço de qualidade de código.
- Travis CI - Ferramenta de integração contínua.
- Macacão - histórico e estatísticas de cobertura de testes
- BetterCodeHub - serviço de qualidade de código.
Os resultados desses serviços podem ser adicionados ao README como uma barcaça. Na minha opinião, está ficando mais interessante ler o README.
Quando a tarefa de teste foi concluída, eu a enviei e esperei pelo feedback. Eu tenho vários problemas, que foram importantes e foram adicionados à seção ISSUE no repositório.
Um deles - retângulos sobrepostos ...
Os retângulos podem se sobrepor e ser incluídos um a um. Esse comportamento leva a algum lixo na imagem resultante. Efeito desejado: mescla retângulos que incluam um retângulo um em um.Teste a tarefa como uma biblioteca. Julho 2018
Depois de algum tempo, explorei que muitas pessoas visitam minha biblioteca no GitHub. Realmente, não achei que alguém estivesse interessado no meu projeto de teste.
Logomarca
Em seguida, descobri que alguém propôs um logotipo. Era um designer gráfico profundamente. Eu não estava na comunidade de código aberto antes e essa proposta era realmente estranha para mim. Por que alguém quer fazer isso de graça? Mas ele me disse que adorava contribuir para projetos de código aberto. Uma espécie de coisa de objetivos de vida. É realmente incrível.
Logomarca para o projeto - é uma ideia legal e eu a aceitei. Havia muitas opções.
A partir de

Para

Final

Foi a primeira vez que me comuniquei na comunidade de código aberto. A nova experiência, um novo conhecido.
O primeiro bug da comunidade
Depois de algum tempo, encontrei um problema aberto no GitHub com o bug. Foi um desenvolvedor da China.
O bug foi sobre o problema com imagens grandes. Ele usou imagens grandes e possui o StackOverflowError. Fiquei surpreso, que alguém usou meu código e encontrou o bug, além disso, o desenvolvedor criou um problema.
Foi o meu primeiro desafio. Desafio para entender como resolver esse bug.
Depois de algum tempo, o engenheiro de automação de controle de qualidade da Rússia propôs uma solução para esse bug, mas eu o recusei porque a solicitação de solicitação não estava preparada como deveria. Foi minha culpa, eu precisava ver e tentar entender a solução. Isso poderia me ajudar a resolvê-lo muito mais rápido.
Naquela época, eu já tinha dois grandes problemas, que eram críticos.
Uso da linha de comando. Outono de 2018
A próxima etapa do desenvolvimento foi trabalhar com Renato Athaydes, ele é desenvolvedor de software de Estocolmo, Suécia.
Ele propôs mudanças permitindo o uso de comparação de imagens como uma CLI tradicional. Foi tão emocionante ouvir que alguém quer estender o uso da comparação de imagens e abrir um novo nicho no desenvolvimento.
Renato resolveu todos os comentários que eu criei e adicionei uma nova versão - v2.0. Comecei a criar lançamentos no repositório GitHub. Isso é realmente útil, devido ao motivo, que eu posso obter rapidamente todas as alterações, que estavam em um release específico, toda a descrição do release, quem está contribuindo, etc.
Em seguida, Renato me pediu para adicionar comparação de imagens ao Maven Central. Eu não tive nenhuma experiência com publicação de bibliotecas no Maven Central e Renato satisfeito em adicionar todas as alterações necessárias ao projeto para publicação. A publicação no Maven Central permite adicionar a biblioteca como uma dependência sem problemas. Um grande problema foi publicá-lo.
Mas antes da publicação, eu tive que corrigir dois grandes erros no sistema. Gastei muito tempo para corrigi-los e, em abril de 2019, adicionei uma nova versão - v.2.0.2.
Publicação no Maven Central. Março 2019
Para publicar corretamente a biblioteca, você precisa lidar com o controle de versão. Após pesquisar esse problema, comecei a aderir ao seguinte esquema: MAJOR.MINOR.PATCH
onde:
MAJOR - versão quando faz alterações incompatíveis da API
MENOR - versão quando adiciona funcionalidade de maneira compatível com versões anteriores
PATCH - versão quando faz correções de erros compatíveis com versões anteriores.
A próxima etapa é entender como configurar corretamente artifactId e groupId.
Atualizei todos os meus pacotes:
de ua.comparison.image
com.github.romankh3.image.comparison
Torna mais compreensível para pesquisa onde está a base de código.
E o resultado foi o lançamento - v2.1.0.
Novo colaborador da Suécia. Maio 2019
Recebi um e-mail, onde um consultor independente e o contratado me pediram para ver uma nova contribuição da Mika. É um desenvolvedor da Suécia.
Ele disse que pessoas com visão ruim têm problemas para ver os retângulos diferenciais, se forem muito magros. Gostei dessa ideia e a adicionei ao projeto.
Com essas mudanças, adicionei uma contribuição feita por um amigo meu, que queria praticar usando o fluxo do GitHub.
Como resultado, lançamos uma nova versão v2.2.0.
A nova etapa da biblioteca. Maio 2019
Eu tenho um problema do TobseF de Karlsruhe, Alemanha. Ele queria usar a comparação de imagens como uma biblioteca para testes. Mas ele queria mais funcionalidade.
Naquela época, a biblioteca tinha o método principal compareImages (), que retornava novas imagens como resultado.
TobseF propôs atualizar o valor de retorno do método compareImages () para retornar o objeto ComparisonResult com imagens em comparação, ComparisonState (match, missmatch, sizemissmatch). Ajudará a usar nos testes.
Além disso, ele propôs adicionar algumas opções de configuração, o que o ajudaria.
Gostei dessas proposições, mas as alterações não eram compatíveis com versões anteriores e removeram parte da base de código, que eu queria permanecer como estava. Por isso rejeitei as mudanças.
No entanto, eu decidi implementá-lo sozinho. Foi uma ótima idéia para melhorar a comparação de imagens.
Além disso, Mika propôs novas mudanças - adicione áreas, que podem ser ignoradas na comparação. Também é útil para testes. É por isso que essas mudanças foram adicionadas também.
Como resultado, a v3.0.0 foi lançada.
A versão 3.0.0 tornou-se uma biblioteca real, que pode ser útil para desenvolvedores. Eu era tão bom que a comparação de imagens cresce.
Usando na produção. Junho 2019
No início de junho, recebi um email de um engenheiro de controle de qualidade de automação, que tinha várias perguntas sobre comparação de imagens. Ele disse que queria usá-lo em testes de controle de qualidade de automação para produção.
Testes de produção! Eu estava tão animado em ouvir isso. Não era um projeto de estimação no GitHub, era uma produção real. Ótimo! Eu descrevi tudo o que pude.
Ele disse que a comparação de imagens foi a única biblioteca que ele encontrou, capaz de comparar duas imagens com áreas excluídas. Mas a funcionalidade de áreas excluídas não funcionou como ele queria.
Trabalhamos juntos há dois meses para melhorar a comparação de imagens.
Como resultado, foi a versão v3.1.1.
Pesquisa de nicho. Julho 2019
Entendi que a comparação de imagens pode ser útil para um engenheiro de controle de qualidade de automação usá-lo em testes.
Foi por isso que encontrei o aqa-forum, onde publiquei um artigo sobre comparação de imagens. Eu tenho um feedback útil e liberei as v3.2.0 e v3.3.0.
Por favor, se você conhece outro fórum, onde pode ser mostrado a comparação de imagens - escreva nos comentários. Isso ajudará a comparação de imagens a ser melhor do que é.
Em seguida, encontrei os repositórios do GitHub, que contêm links úteis para as bibliotecas e adicionamos uma comparação de imagens a eles.
Agora Novembro 2019
A comparação de imagens tem 60 partidas, 33 garfos e 10 usos no Github como uma dependência.
Penso que este é um excelente resultado da comunidade de código aberto que me ajuda a trazer uma nova biblioteca.
É um longo caminho e acredito que isso é apenas o começo.
Gostaria de agradecer a todos os colaboradores que estão construindo uma comparação de imagens comigo.
Obrigado pela leitura.
Atenciosamente,
Romano