JavaRush /Java Blog /Random-IT /Come un test di intervista si è trasformato in una librer...
Roman Beekeeper
Livello 35

Come un test di intervista si è trasformato in una libreria open source

Pubblicato nel gruppo Random-IT
Ciao a tutti, comunità JavaRush! Un po' di me: lavoro come Java Software Engineer dalla primavera del 2016. Adoro venire qui e risolvere problemi che non ho risolto durante i miei studi. Oggi vi parlerò della libreria - Confronto immagini . Questa è una libreria open source disponibile pubblicamente su GitHub . Come un'attività di test di un colloquio si è trasformata in una libreria open source - 1Lo scopo di questo articolo è trasmettere che creare un prodotto open source non è solo una perdita di tempo, no! Questa è un'esperienza ricca che viene tratta da diversi lati, quando hai il controllo sull'intero processo di sviluppo, quando devi approfondire ogni dettaglio. L'Open Source è il mondo intorno a te. Non sto scherzando, durante l'esistenza di questa biblioteca, ho comunicato con persone provenienti da diversi paesi, come Stati Uniti, India, Cina, Egitto, Russia, Germania, Ucraina, Svezia, Nuova Zelanda, Norvegia. Cioè, questa è una vera esperienza nello sviluppo congiunto, nella ricerca di compromessi, nel controllo del codice e così via. Questa era l'introduzione, ora cominciamo con ordine:

Test. Inizio agosto 2017

Tutto è iniziato con il fatto che ho avuto un colloquio con una delle aziende, in cui il primo passo è stato scrivere un compito di prova. Il compito era scrivere un codice che confrontasse due immagini della stessa dimensione, trovasse le differenze tra loro, le raggruppasse e disegnasse un rettangolo attorno ad esse. C'è la prima immagine:
Come un'attività di test di un colloquio si è trasformata in una libreria open source - 2
C'è una seconda immagine:
Come un'attività di test di un colloquio si è trasformata in una libreria open source - 3
È stato necessario trovare le differenze e cerchiarle come mostrato di seguito:
Come un'attività di test di un colloquio si è trasformata in una libreria open source - 4
Come puoi vedere, c'è una differenza nel campo Nome utente , che è cerchiato da un triangolo rosso. Descrizione più dettagliata dell'attività . Ho deciso che volevo farlo non solo correttamente dal punto di vista funzionale, ma anche magnificamente, in modo che non fosse imbarazzante. Per fare ciò, ho deciso di pubblicarlo come progetto su GitHub . Desidero da tempo studiare GitHub e acquisire esperienza lavorando con esso. Dopo una rapida occhiata, ho scoperto che sarebbe stato utile aggiungere servizi di terze parti per analizzare la qualità del codice, generare copertura del codice con test, ecc. Aggiunti i seguenti strumenti:
  • Codacy : qualità del codice. Vale davvero la pena prestare attenzione.

  • Travis CI è uno strumento CI (integrazione continua) che crea un progetto, esegue test e indica se il progetto è stato creato con successo. Ad esempio, se uno dei test non è stato superato a causa delle nuove modifiche, dirà che la creazione del progetto non ha avuto successo e lo colorerà di rosso.

  • Coveralls è uno strumento che mostra quale percentuale del tuo codice è coperta dai test.

  • BetterCode Hub è un altro strumento per analizzare la qualità del codice. Una cosa molto utile che non solo ti dirà cosa è brutto, ma descriverà anche il perché e fornirà un collegamento a un libro dove potrai acquisire conoscenze al riguardo.

Ciascuno di questi servizi ha il proprio badge con i risultati dei dati, come ad esempio un progetto di code cover. E questo badge può essere aggiunto nella descrizione principale del progetto - file README. L'attività era pronta: l'ho inviata per la revisione. Dopo la revisione, ho subito, a memoria fresca, creato un Github Issue per ogni commento , che mi avrebbe poi aiutato a migliorare questo progetto. Non c'era alcun compito di miglioramento da parte del datore di lavoro, quindi per un po' mi sono dimenticato del progetto...

Percorso della Biblioteca. Luglio 2018

Logo

Ad un certo punto ho scoperto che le persone visitano spesso il mio progetto, e questo accade ogni giorno. Sono rimasto stupito da questo, e ancora più stupito dal fatto che circa un anno dopo hanno creato un ISSUE, in cui era scritto che un certo grafico mi stava offrendo di creare un logo per il mio progetto. Dicono che gli piace farlo per i prodotti Opensource e che lo farà in modo assolutamente gratuito. Abbiamo iniziato a collaborare. Sono state proposte diverse opzioni, ma alla fine abbiamo deciso su questa:
Come un'attività di test di un colloquio si è trasformata in una libreria open source - 5
Allora ero ancora giovane e non avevo familiarità con la comunità open source, e il fatto stesso di un'offerta del genere mi sembrava folle e gli ho chiesto, perché lo sta facendo? Al che lui ha risposto: "Lolz oh, solo perché amo contribuire a progetti open source. Una specie di obiettivo di vita..." ( il problema stesso è qui ). È stato allora che ho capito per la prima volta quanto sia bello quando persone diverse ti trovano attraverso progetti open source e ti offrono cose così interessanti!

Primo difetto laterale

Ho notato che un certo sviluppatore cinese ha creato per me un problema in cui descriveva di aver trovato un difetto nel lavoro della libreria, ovvero che se si utilizzano immagini di grandi dimensioni, si ottiene un StackOverflowError . L'uomo ha deciso di approfittarne e ha riscontrato un errore. E non l'ho semplicemente trovato. e ha anche scritto di lei. Questo è un nuovo passo nello sviluppo della biblioteca. Inoltre, non avevo davvero una soluzione. Ad un certo punto, uno dei tester russi ha proposto una soluzione. Ma era crudo e non realizzato correttamente e non l'ho accettato. E quando è arrivato il momento di pubblicare la libreria in Maven Central, era necessario risolvere qualcosa con questo difetto; non volevo pubblicarla insieme ad essa. Inoltre c'era un altro difetto che non ho mai risolto e che portava anche molti disagi.

Utilizzo della riga di comando. Autunno 2018

La fase successiva dello sviluppo è stata la comunicazione con uno svedese (Renato Athaydes), che voleva utilizzare la libreria tramite riga di comando e per questo è stato necessario apportare alcune modifiche e integrazioni. Sono rimasto ancora una volta stupito e sorpreso da questo. Dopo che il grafico mi ha scritto, la mia sorpresa è stata un po' minore, ma comunque molto alta. Il pensiero che qualcuno avesse davvero bisogno del mio codice mi riempiva di sentimenti incredibili. Ha apportato le modifiche necessarie e ha preparato il codice. Ho condotto una revisione del codice, ovvero ho esaminato le modifiche, c'erano commenti che erano stati modificati e le modifiche erano già nella libreria. Ho designato queste modifiche come versione v2.0. Il passo successivo è stato aggiungere la libreria a Maven Central, un repository centrale, da dove è possibile scaricarla per qualsiasi progetto e utilizzarla come dipendenza. A quel tempo non avevo idea di come farlo, nemmeno da remoto, quindi ho detto che ero occupato e gli ho chiesto di eseguire tutti i passaggi necessari per impostare il progetto. Ma questo si è rivelato non bastare e la cosa più interessante è stata stabilire una connessione con Maven Central. È una sofferenza incredibile, cosa che non potevo fare la prima volta, e solo il 15 aprile sono riuscito a pubblicare il progetto su Maven Central. Non è stato facile, ma come dicono gli altri, "tutti coloro che vogliono pubblicare il proprio codice Java passano attraverso questo." Prima di pubblicare la libreria, ho finalmente trovato cosa e come fare con i difetti che duravano da molto tempo e ho rilasciato una nuova versione v2.0.2 , in cui ho ringraziato tutti coloro che mi hanno aiutato, ho descritto cosa e come ho fatto .

Pubblicazione su Maven Central. Primavera 2019

Per pubblicare correttamente una libreria, è necessario avere una buona conoscenza del controllo delle versioni e di come impostare correttamente le versioni. Mi atterrò a questo schema:
  • XX.YY.BBBB , dove XX è un aggiornamento importante della versione che comporta modifiche incompatibili con la precedente (ad esempio, la modifica del risultato restituito nei metodi);
  • YY è un aggiornamento minore - una modifica interna o un'espansione che non cambia ciò che è BBBB - questi sono difetti che sono stati risolti.
  • Ad esempio, versione 2.0.2 significa che la versione principale è la 2, non sono presenti aggiornamenti minori e sono presenti due aggiornamenti per difetti.
Successivamente, era importante capire come impostare correttamente groupId e artifactId . Dovevano essere selezionati una volta e utilizzati ulteriormente. E costituiscono il pacchetto in cui è archiviato il codice. Era: ua.comparison.image Ora: com.github.romankh3.image.comparison E questo è chiaramente meglio, poiché tutti sanno che questo è un progetto di GitHub e può essere trovato da una persona con il soprannome romankh3. Quando ho fatto tutto questo, ho rilasciato una nuova versione v2.1.0 .

Comunicazione con gli svedesi. Maggio 2019

Dopo aver pubblicato la libreria, un altro svedese (Mika Kytöläinen) mi ha inviato un'e-mail chiedendo al suo amico di apportare modifiche alla mia libreria. Dice che ne ha davvero bisogno e che sarà molto felice se lo faremo e lo faremo rapidamente. Naturalmente non ero contrario ai cambiamenti necessari. Ha suggerito di aggiungere una configurazione di spessore della linea che disegna un rettangolo. Ad esempio, per coloro che hanno problemi di vista, questo sarà un cambiamento utile. Preparato il codice . Dopo aver aggiunto qualche altra modifica, ho rilasciato la versione v2.2.0

Comunicazione con un tedesco. Maggio 2019

Successivamente, un tedesco ha creato un problema in cui afferma di volerlo utilizzare per i test, ma non ha funzionalità. Ha fatto molte proposte molto interessanti, ha suggerito che invece di restituire solo l'immagine risultante con il risultato del confronto, restituire un insieme di dati: cosa è stato confrontato, il risultato (se necessario) e lo stato in cui si trova sarà CORRISPONDENZA, MISMATCH, DIMENSIONE_MISMATCH . Ho anche apportato le modifiche. Ma non hanno tenuto affatto conto del codice precedente e sono stati realizzati in tutta fretta. Li ho rifiutati e mi sono offerto di realizzarli come ritenevo opportuno. Nonostante ciò, ha risposto di più e ho deciso che lo avrei fatto da solo e avrei rilasciato una nuova versione. Allo stesso tempo, Mika Kytöläinen ha proposto un'altra funzionalità interessante: aggiungere aree che non sarebbero state incluse nel confronto. Questo è un caso reale. E tutto questo è stato rilasciato nella v3.0.0

Utilizzare in un progetto reale

Alla fine di maggio mi ha scritto un tester di automazione di Kiev, che si è interessato alla biblioteca e vuole utilizzarla in un progetto reale che porti soldi. È stata una svolta! Usarlo da qualche parte in un progetto per animali domestici è una cosa, ma usarlo in un progetto reale è una questione completamente diversa. Abbiamo discusso di cosa e come funziona. L'applicazione è molto interessante: nella loro applicazione hanno degli assegni che vengono stampati ed è stato necessario verificare che gli assegni siano creati secondo un determinato modello e questo non cambi. Ma c'era il problema che sezioni come data e ora cambiavano sempre e dovevano essere ignorate. Avevamo già aggiunto funzionalità per ignorare alcune aree, ma si è rivelato ancora molto grezzo per l'uso reale e abbiamo comunque lavorato fruttuosamente insieme per diverse settimane su questo. Il risultato è stato il rilascio della versione v3.1.1

Trovare una nicchia

Successivamente, mi sono reso conto che la vera nicchia per la mia libreria era utilizzarlo nei test. Per fare questo, ho deciso di trovare una sorta di forum per i tester e di scrivere loro per ottenere feedback e aumentare la fama. Ho trovato un forum in lingua russa e lì ho pubblicato un articolo: Organizzazione di immagini di test - confronto di due simili . In esso ho ricevuto un feedback reale sul codice e sulla funzionalità, che ho applicato e rilasciato una nuova versione v3.2.0 e poi v.3.3.0 .

Ora

La libreria attualmente ha 60 stelle su Github e ha 33 fork. Penso che sia molto interessante, considerando che non l'ho promosso in alcun modo se non con un articolo sul forum per automatismi. Grazie a tutti coloro che hanno letto fino alla fine. In realtà si è rivelato un articolo molto più lungo di quanto mi aspettassi. Un articolo su come pubblicare una libreria su Maven Central. Se hai qualcosa da aggiungere, scrivi! Se hai qualcosa da suggerire per migliorare la libreria, scrivi! Leggerò tutto e gli dedicherò il giusto tempo. Chiunque abbia apprezzato l'articolo e lo abbia trovato utile, valutalo e scrivi nei commenti. Inoltre, iscriviti al mio account github romankh3 Vedi anche i miei altri articoli:
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION