JavaRush /Java Blog /Random-TW /面試測驗如何變成開源庫
Roman Beekeeper
等級 35

面試測驗如何變成開源庫

在 Random-TW 群組發布
大家好,JavaRush 社群! 自我介紹一下:自 2016 年春季以來,我一直擔任 Java 軟體工程師。我喜歡來這裡解決我學習期間沒有解決的問題。今天我要跟大家介紹一下這個函式庫——圖像比較。這是一個開源庫,可在GitHub上公開取得。 面試測驗任務如何變成開源庫 - 1本文的目的是傳達創建開源產品不僅僅是浪費時間,不!當你掌控整個開發過程,當你需要深入研究每一個細節時,這是從不同方面汲取的豐富經驗。開源是您周圍的世界。我不是開玩笑,在這個圖書館存在期間,我與來自不同國家的人們進行了​​交流,例如美國、印度、中國、埃及、俄羅斯、德國、烏克蘭、瑞典、紐西蘭、挪威。也就是說,這是共同開發、尋找妥協、檢查程式碼等等的真實經驗。介紹就到這裡了,現在讓我們按順序開始:

測試。2017 年 8 月開始

這一切都始於我接受了其中一家公司的面試,第一步是編寫測試任務。任務是編寫一個程式碼來比較兩張相同大小的圖片,找出它們之間的差異,將它們分組並在它們周圍繪製一個矩形。有第一張圖:
面試測驗任務如何變成開源庫 - 2
還有第二張圖:
面試測驗任務如何變成開源庫 - 3
有必要找出差異並圈出它們,如下所示:
面試測驗任務如何變成開源庫 - 4
正如您所看到的,用戶名字段存在差異,該字段以紅色三角形圈出。更詳細的任務描述。我決定不僅要從功能的角度正確地做到這一點,而且還要美觀,這樣就不會令人尷尬。為此,我決定將其作為專案發佈在GitHub上。我一直想學習 GitHub 並獲得使用它的經驗。快速瀏覽後,我發現添加第三方服務來分析程式碼品質、透過測試產生程式碼覆蓋率等會很好。新增了以下工具:
  • Codacy——程式碼品質。確實值得關注。

  • Travis CI是一個 CI(持續整合)工具,用於建立專案、運行測試並判斷專案是否建置成功。例如,如果其中一項測試由於新變更而未通過,那麼它會說專案建置不成功並將其標記為紅色。

  • Coveralls是一個工具,可以顯示測試覆蓋了程式碼的百分比。

  • BetterCode Hub是另一個用來分析程式碼品質的工具。這是一個非常有用的東西,它不僅會告訴您什麼是不好的,還會描述原因並提供一本書的鏈接,您可以在其中獲得相關知識。

其中每項服務都有自己的帶有資料結果的徽章,例如程式碼覆蓋率項目。並且可以將這個徽章添加到項目的主要描述 - README 文件中。任務已準備就緒 - 我將其發送以供審核。審核後,我立即憑記憶為每條評論創建了一個 Github Issue,這將幫助我改進這個專案。雇主沒有提出改進任務,所以我暫時忘記了這個專案...

庫路徑。2018年7月

標識

有一次,我發現人們經常訪問我的項目,而且這種情況每天都會發生。我對此感到驚訝,更驚訝的是大約一年後創建了一個 ISSUE,其中寫到某個圖形設計師邀請我為我的專案創建一個徽標。他們說他喜歡為開源產品做這件事,並且完全免費。我們開始合作。提出了幾個選項,但最終我們決定這樣做:
面試測驗任務如何變成開源庫 - 5
那時我還年輕,對開源社群不熟悉,而且這樣的提議對我來說很瘋狂,我問,他為什麼要這麼做?他回答說:「哈哈,哦,只是因為我喜歡為開源專案做出貢獻。有點人生目標…」(問題本身就在這裡)。那是我第一次感受到當不同的人透過開源專案找到你並提供如此有趣的東西是多麼偉大!

第一面缺陷

我注意到來自中國的某個開發人員為我創建了一個問題,他在其中描述了他發現該庫工作中的一個缺陷,即如果使用大圖像,則會出現StackOverflowError。男子決定乘虛而入,發現了一個錯誤。我不僅找到了它。還寫了關於她的事。這是圖書館發展的新措施。而且,我確實沒有解決辦法。在某個時刻,一位來自俄羅斯的測試人員提出了一個解決方案。但它是生的,製作不當,我不接受。當需要在 Maven Central 中發布該庫時,有必要解決這個缺陷;我不想將它與它一起發布。另外,還有一個缺陷我一直沒有修復,也帶來了很多不便。

命令列使用。2018年秋季

開發的下一階段是與瑞典人 (Renato Athaydes) 進行溝通,他希望透過命令列使用該庫,為此有必要進行一些更改和添加。我再次對此感到驚訝和驚訝。平面設計師寫信給我後,我的驚訝程度有所減輕,但仍然很高。一想到有人真的需要我的程式碼,我就充滿了難以置信的感覺。他進行了必要的更改並準備了程式碼。我進行了程式碼審查,即查看了更改,有更改的註釋以及更改已經在庫中。我將這些變更指定為v2.0 版本。 下一步是將庫新增至 Maven Central - 一個中央儲存庫,您可以從那裡為任何專案下載它並將其用作依賴項。當時,我不知道如何執行此操作,即使是遠端操作,所以我說我很忙,並請他執行設定專案所需的所有步驟。但事實證明這根本不夠,最有趣的是與 Maven Central 建立連接。這是一個巨大的痛苦,我第一次做不到,直到 4 月 15 日我才能夠在 Maven Central 上發布該專案。這並不容易,但正如其他人喜歡說的那樣,“每個想要發布 Java 程式碼的人都會經歷這個。” 在發布該庫之前,我終於找到了長期存在的缺陷是什麼以及如何處理,並發布了新版本v2.0.2,其中我感謝所有幫助我的人,描述了我做了什麼以及如何處理。

發佈到 Maven Central。2019年春季

要正確發布庫,您需要充分了解版本控制以及如何正確設定版本。我將堅持這個計劃:
  • XX.YY.BBBB,其中XX為重大版本更新,其中包含與先前版本不相容的變更(例如更改方法的返回結果);
  • YY是一個小更新 - 內部更改或擴展,不會改變BBBB 的內容- 這些是已修復的缺陷。
  • 例如,版本2.0.2表示主要版本為2,沒有次要更新,並且有兩個缺陷更新。
接下來,重要的是弄清楚如何正確設定groupIdartifactId。它們必須被選擇一次並進一步使用。它們組成了儲存代碼的套件。以前是:ua.comparison.image 現在是:com.github.romankh3.image.comparison 這顯然更好,因為每個人都知道這是來自 GitHub 的項目,並且可以從暱稱 romankh3 的人那裡找到。當我完成這一切後,我發布了新版本v2.1.0

與瑞典人的交流。2019年5月

在我發布該庫後,另一位瑞典人 (Mika Kytöläinen) 給我發電子郵件,要求他的朋友對我的庫進行更改。他說他確實需要這個,如果我們能做到並且盡快做到,他會非常高興。當然,我並不反對必要的改變。他建議添加繪製矩形的線寬配置。就像,對於那些視力不佳的人來說,這將是一個有用的改變。準備好代碼了。添加了更多更改後,我發布了v2.2.0版本

與德國人的交流。2019年5月

此後,一位德國人提出了一個問題,他說他想用它來測試,但它缺乏功能。他提出了很多非常有趣的建議,他建議不要只返回結果圖片以及比較結果,而是返回一組數據:比較的內容、結果(如果需要)以及比較的狀態。將是 MATCH、MISMATCH、SIZE_MISMATCH 。甚至做出了改變。但他們根本沒有考慮到之前的程式碼,而且是倉促制定的。我拒絕了他們,並提出按照我認為合適的方式進行。儘管如此,他還是做出了更多的回應,我決定自己做並發布一個新版本。同時,Mika Kytöläinen 提出了另一個有趣的功能 - 添加不包含在比較中的區域。這是一個真實的案例。而這一切都在v3.0.0發布

在實際項目中使用

五月底,一位來自基輔的自動化測試人員寫信給我,他對這個庫產生了興趣,並希望在一個真正賺錢的項目中使用它。這是一個突破!在寵物專案中的某個地方使用它是一回事,但在實際專案中使用它是完全不同的事情。我們討論了它的工作原理和原理。該應用程式非常有趣:在他們的應用程式中,他們有列印的支票,並且有必要檢查支票是否是根據特定模板創建的並且不會更改。但存在一個問題,即日期和時間等部分總是會發生變化,因此必須被忽略。我們已經添加了忽略某些區域的功能,但事實證明它對於實際使用來說仍然非常原始,而且我們仍然在這方面進行了數週的富有成效的合作。結果就是v3.1.1版本的發布

尋找利基市場

之後,我意識到我的庫的真正利基是在測試中使用它。為此,我決定為測試人員找到某種論壇並向他們寫信,以獲得一些回饋並提高聲譽。我找到了一個俄語論壇並在那裡發表了一篇文章:測試圖像的組織 - 兩個相似圖像的比較。在其中,我收到了有關程式碼和功能的真實回饋,我應用了這些回饋並發布了新版本v3.2.0,然後是v.3.3.0

現在

該庫目前在 Github 上有 60 個 star,並有 33 個分支。我認為這非常酷,因為除了自動化論壇上的一篇文章之外,我沒有以任何方式推廣它。感謝所有讀到最後的人。事實上,這篇文章比我預期的要長得多。 關於如何將庫發佈到 Maven Central 的文章。 如果還有什麼要補充的,就寫吧!如果您有任何改善圖書館的建議,請寫信!我會閱讀所有內容並投入適當的時間。 任何喜歡這篇文章並認為它有用的人 - 對其進行評分並寫在評論中。 另外,訂閱我的 github 帳戶romankh3 另請參閱我的其他文章:
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION