JavaRush /Blog Java /Random-PL /Jak test rozmowy kwalifikacyjnej zamienił się w bibliotek...
Roman Beekeeper
Poziom 35

Jak test rozmowy kwalifikacyjnej zamienił się w bibliotekę open source

Opublikowano w grupie Random-PL
Witam wszystkich, społeczność JavaRush! Trochę o sobie: Od wiosny 2016 roku pracuję jako Inżynier Oprogramowania Java. Uwielbiam tu przychodzić i rozwiązywać problemy, których nie rozwiązałem na studiach. Dzisiaj opowiem Wam o bibliotece - Porównanie obrazów . Jest to biblioteka typu open source, która jest publicznie dostępna w serwisie GitHub . Jak zadanie testowe rozmowy kwalifikacyjnej zamieniło się w bibliotekę typu open source - 1Celem tego artykułu jest przekazanie, że tworzenie produktu typu open source to nie tylko strata czasu, nie! To bogate doświadczenie, które czerpie się z różnych stron, kiedy masz kontrolę nad całym procesem tworzenia, kiedy trzeba zagłębić się w każdy szczegół. Open Source to świat wokół Ciebie. Nie żartuję, w czasie istnienia tej biblioteki kontaktowałem się z ludźmi z różnych krajów, takich jak USA, Indie, Chiny, Egipt, Rosja, Niemcy, Ukraina, Szwecja, Nowa Zelandia, Norwegia. Oznacza to, że jest to prawdziwe doświadczenie we wspólnym rozwoju, znajdowaniu kompromisów, sprawdzaniu kodu i tak dalej. To był wstęp, teraz zacznijmy po kolei:

Test. Początek sierpnia 2017 r

Wszystko zaczęło się od tego, że odbyłem rozmowę kwalifikacyjną w jednej z firm, gdzie pierwszym krokiem było napisanie zadania testowego. Zadanie polegało na napisaniu kodu, który porówna dwa obrazki tej samej wielkości, znajdzie różnice między nimi, pogrupuje je i narysuje wokół nich prostokąt. Jest pierwsze zdjęcie:
Jak zadanie testowe rozmowy kwalifikacyjnej zamieniło się w bibliotekę typu open source - 2
Jest drugie zdjęcie:
Jak zadanie testowe rozmowy kwalifikacyjnej zamieniło się w bibliotekę typu open source - 3
Należało znaleźć różnice i zakreślić je tak, jak pokazano poniżej:
Jak zadanie testowe rozmowy kwalifikacyjnej zamieniło się w bibliotekę typu open source - 4
Jak widać, istnieje różnica w polu Nazwa użytkownika , które jest otoczone czerwonym trójkątem. Bardziej szczegółowy opis zadania . Postanowiłam, że chcę to zrobić nie tylko poprawnie z funkcjonalnego punktu widzenia, ale i pięknie, tak aby nie było wstydu. Aby to zrobić, zdecydowałem, że opublikuję to jako projekt na GitHub . Od dawna chciałem poznać GitHuba i zdobyć doświadczenie w pracy z nim. Po szybkim przejrzeniu stwierdziłem, że dobrze byłoby dodać usługi stron trzecich do analizy jakości kodu, generowania pokrycia kodu testami itp. Dodano następujące narzędzia:
  • Codacy - jakość kodu. Naprawdę warto zwrócić na to uwagę.

  • Travis CI to narzędzie CI (ciągłej integracji), które buduje projekt, uruchamia testy i informuje, czy projekt został pomyślnie zbudowany. Na przykład, jeśli jeden z testów nie przeszedł pomyślnie w wyniku nowych zmian, pojawi się informacja, że ​​kompilacja projektu nie powiodła się i pokoloruje go na czerwono.

  • Kombinezony to narzędzie, które pokazuje, jaki procent Twojego kodu objęty jest testami.

  • BetterCode Hub to kolejne narzędzie do analizy jakości kodu. Bardzo przydatna rzecz, która nie tylko powie co jest źle, ale też opisze dlaczego i poda link do książki, gdzie można zdobyć wiedzę na ten temat.

Każda z tych usług ma swoją własną plakietkę z wynikami danych, np. projekt pokrycia kodu. I tę odznakę można dodać w głównym opisie projektu - pliku README. Zadanie było gotowe - wysłałem je do sprawdzenia. Po recenzji natychmiast, z świeżej pamięci, dla każdego komentarza stworzyłem Github Issue , co pomogło mi następnie ulepszyć ten projekt. Ze strony pracodawcy nie było żadnego zadania usprawniającego, więc na chwilę zapomniałem o projekcie...

Ścieżka biblioteczna. Lipiec 2018

Logo

W pewnym momencie odkryłem, że ludzie często odwiedzają mój projekt i dzieje się to codziennie. Byłem tym zdumiony, a jeszcze bardziej zdumiony faktem, że jakiś rok później powstał NUMER, w którym napisano, że pewien grafik zaproponował mi wykonanie logo do mojego projektu. Mówią, że uwielbia to robić w przypadku produktów Opensource i zrobi to całkowicie za darmo. Rozpoczęliśmy współpracę. Zaproponowano kilka opcji, ale ostatecznie zdecydowaliśmy się na tę:
Jak zadanie testowe rozmowy kwalifikacyjnej zamieniło się w bibliotekę typu open source - 5
Byłem wtedy jeszcze młody i nieobeznany ze społecznością open source, a sam fakt takiej oferty był dla mnie szalony i zapytałem, dlaczego on to robi? Na co on odpowiedział: "Lolz, och, tylko dlatego, że uwielbiam brać udział w projektach open source. Coś w rodzaju celów życiowych..." ( sam problem jest tutaj ). Wtedy po raz pierwszy poczułem, jak wspaniale jest, gdy różni ludzie znajdują Cię poprzez projekty open source i oferują tak ciekawe rzeczy!

Wada pierwsza

Zauważyłem, że pewien programista z Chin stworzył dla mnie problem , w którym opisał, że znalazł defekt w działaniu biblioteki, że jeśli użyjesz dużych obrazów, wyskakuje StackOverflowError . Mężczyzna postanowił to wykorzystać i znalazł błąd. I nie tylko ja to znalazłem. i też o niej pisałem. To nowy krok w rozwoju biblioteki. Co więcej, tak naprawdę nie miałem rozwiązania. W pewnym momencie jeden z testerów z Rosji zaproponował rozwiązanie. Ale było surowe i niewłaściwie zrobione, więc tego nie zaakceptowałem. A kiedy przyszedł czas na publikację biblioteki w Maven Central, trzeba było coś z tą wadą rozwiązać, a nie chciałem publikować jej razem z nią. Poza tym pojawił się jeszcze jeden defekt, którego nigdy nie naprawiłem i który również przyniósł sporo niedogodności.

Użycie wiersza poleceń. Jesień 2018

Kolejnym etapem rozwoju była komunikacja ze Szwedem (Renato Athaydes), który chciał korzystać z biblioteki poprzez linię poleceń i do tego konieczne było wprowadzenie pewnych zmian i uzupełnień. Po raz kolejny byłem tym zdumiony i zaskoczony. Po tym jak grafik do mnie napisał, moje zdziwienie było nieco mniejsze, ale nadal bardzo duże. Myśl, że ktoś naprawdę potrzebował mojego kodu, napełniła mnie niesamowitymi uczuciami. Dokonał niezbędnych zmian i przygotował kod. Przeprowadziłem przegląd kodu, czyli przyjrzałem się zmianom, były komentarze, które zostały zmienione i zmiany były już w bibliotece. Zmiany te oznaczyłem jako wersję v2.0. Kolejnym krokiem było dodanie biblioteki do Maven Central – centralnego repozytorium, skąd można ją pobrać do dowolnego projektu i wykorzystać jako zależność. Nie miałem wtedy pojęcia jak to zrobić, nawet zdalnie, więc powiedziałem, że jestem zajęty i poprosiłem go o wykonanie wszystkich kroków niezbędnych do założenia projektu. To jednak okazało się zupełnie za mało i najciekawsze było nawiązanie połączenia z Maven Central. To ogromny ból, którego nie udało mi się zrobić za pierwszym razem i dopiero 15 kwietnia udało mi się opublikować projekt na Maven Central. Nie było to łatwe, ale jak mówią inni, „każdy, kto chce opublikować swój kod Java, przechodzi przez to”. Zanim opublikowałem bibliotekę w końcu znalazłem co i jak zrobić z defektami które pojawiały się już od dłuższego czasu i wypuściłem nową wersję v2.0.2 w której podziękowałem wszystkim którzy mi pomogli, opisali co i jak zrobiłem .

Publikowanie w Maven Central. Wiosna 2019

Aby poprawnie opublikować bibliotekę, musisz dobrze rozumieć wersjonowanie i prawidłowe ustawianie wersji. Będę się trzymał tego schematu:
  • XX.YY.BBBB , gdzie XX to aktualizacja wersji głównej, która pociąga za sobą zmiany niezgodne z poprzednią (np. zmiana zwracanego wyniku w metodach);
  • YY to drobna aktualizacja - wewnętrzna zmiana lub rozszerzenie, które nie zmienia tego, czym jest BBBB - są to wady, które zostały naprawione.
  • Na przykład wersja 2.0.2 oznacza, że ​​wersja główna to 2, nie było żadnych mniejszych aktualizacji i istnieją dwie aktualizacje dotyczące defektów.
Następnie ważne było, aby dowiedzieć się, jak poprawnie ustawić groupId i artifactId . Należało je jednorazowo wybrać i wykorzystać dalej. Stanowią one pakiet, w którym przechowywany jest kod. Było: ua.comparison.image Teraz: com.github.romankh3.image.comparison I to jest wyraźnie lepsze, ponieważ wszyscy wiedzą, że jest to projekt z GitHuba i można go znaleźć od osoby o pseudonimie romankh3. Kiedy to wszystko zrobiłem, wydałem nową wersję v2.1.0 .

Komunikacja ze Szwedami. Maj 2019

Po opublikowaniu biblioteki inny Szwed (Mika Kytöläinen) wysłał mi e-mail i poprosił swojego przyjaciela o wprowadzenie zmian w mojej bibliotece. Mówi, że bardzo tego potrzebuje i będzie bardzo szczęśliwy, jeśli to zrobimy i to szybko. Oczywiście nie byłem przeciwny koniecznym zmianom. Zasugerował dodanie konfiguracji grubości linii, która rysuje prostokąt. Na przykład dla tych, którzy mają słaby wzrok, będzie to przydatna zmiana. Przygotowano kod . Po dodaniu jeszcze kilku zmian wydałem wersję v2.2.0

Komunikacja z Niemcem. Maj 2019

Następnie jeden Niemiec stworzył problem , w którym twierdzi, że chce go użyć do testów, ale brakuje mu funkcjonalności. Poczynił wiele bardzo interesujących propozycji, sugerował, aby zamiast zwracać jedynie wynikowy obraz z wynikiem porównania, zwrócić zbiór danych: co porównywano, wynik (jeśli to konieczne) i stan, w jakim się znajduje będzie MATCH, MISMATCH, SIZE_MISMATCH . Nawet wprowadził zmiany. Ale w ogóle nie uwzględniły poprzedniego kodu i zostały wykonane w pośpiechu. Odrzuciłem je i zaproponowałem, że wykonam je według własnego uznania. Mimo to odpowiedział więcej i zdecydowałem, że sam to zrobię i wypuszczę nową wersję. Jednocześnie Mika Kytöläinen zaproponował kolejną ciekawą funkcjonalność – dodanie obszarów, które nie zostaną uwzględnione w porównaniu. To jest prawdziwy przypadek. A wszystko to zostało wydane w wersji 3.0.0

Użyj w prawdziwym projekcie

Pod koniec maja napisał do mnie tester automatyzujący z Kijowa, który zainteresował się biblioteką i chce ją wykorzystać w realnym projekcie, który przyniesie pieniądze. To był przełom! Użycie go gdzieś w projekcie zwierzaka to jedno, ale użycie go w prawdziwym projekcie to zupełnie inna sprawa. Omówiliśmy, co i jak to działa. Aplikacja jest bardzo ciekawa: w ich aplikacji są czeki, które są drukowane i trzeba było sprawdzić, czy czeki są tworzone według określonego szablonu i to się nie zmienia. Pojawił się jednak problem polegający na tym, że sekcje takie jak data i godzina zawsze się zmieniały i należało je zignorować. Dodaliśmy już funkcjonalność, aby zignorować niektóre obszary, ale okazała się ona nadal bardzo surowa do rzeczywistego użytku i nadal owocnie pracowaliśmy nad tym przez kilka tygodni. Rezultatem było wydanie wersji v3.1.1

Znalezienie niszy

Potem zdałem sobie sprawę, że prawdziwą niszą dla mojej biblioteki jest używanie jej w testach. W tym celu postanowiłem znaleźć jakieś forum dla testerów i napisać do nich w tej sprawie, aby uzyskać informację zwrotną i zwiększyć sławę. Znalazłem rosyjskojęzyczne forum i opublikowałem tam artykuł: Organizacja obrazów testowych - porównanie dwóch podobnych . Otrzymałem w nim realną informację zwrotną na temat kodu i funkcjonalności, którą zastosowałem i wypuściłem nową wersję v3.2.0 , a następnie v.3.3.0 .

Teraz

Biblioteka ma obecnie 60 gwiazdek na Githubie i 33 forki. Myślę, że to bardzo fajne, zważywszy, że nie promowałem tego w żaden sposób poza artykułem na forum dla automatów. Dziękuję wszystkim, którzy przeczytali do końca. W rzeczywistości artykuł okazał się znacznie dłuższy, niż się spodziewałem. Artykuł o tym, jak opublikować bibliotekę w Maven Central. Jeśli masz coś do dodania, napisz! Jeśli masz coś do zasugerowania ulepszenia biblioteki, napisz! Przeczytam wszystko i poświęcę temu odpowiednią ilość czasu. Każdy, komu spodobał się artykuł i uznał go za przydatny - oceń go i napisz w komentarzach. Subskrybuj także moje konto na githubie romankh3 Zobacz także inne moje artykuły:
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION