如何做好一个开源项目(一)
做好一個(gè)開源項(xiàng)目其實(shí)是一件比較費(fèi)時(shí)費(fèi)力費(fèi)心的工作,它的最大難點(diǎn)除了代碼維護(hù)之外,還包括后期的維護(hù)和持續(xù)的跟進(jìn)。我曾經(jīng)做過(guò)不少開源項(xiàng)目,但是堅(jiān)持下來(lái)的,目前有信心能夠持續(xù)維護(hù)的也只有Magicodes.IE。這里請(qǐng)?jiān)试S我來(lái)一波硬廣:
Magicodes.IE
導(dǎo)入導(dǎo)出通用庫(kù),支持Dto導(dǎo)入導(dǎo)出以及動(dòng)態(tài)導(dǎo)出,支持Excel、Word、Pdf、Csv和Html。已加入NCC開源組織。
Github:
https://github.com/dotnetcore/Magicodes.IE
碼云(手動(dòng)同步,不維護(hù)):
https://gitee.com/magicodes/Magicodes.IE
如何打造一個(gè)好的開源項(xiàng)目?
我們回歸正題。如何做好一個(gè)開源項(xiàng)目呢?接下來(lái)來(lái)說(shuō)道說(shuō)道:
1)有一個(gè)好的理念和創(chuàng)意
如果大家都在做重復(fù)的事情,但是又沒(méi)有合適的輪子的時(shí)候,那么我們就可以創(chuàng)造一個(gè)。
如果輪子很多,但是沒(méi)有好用的,或者不夠通用,那么我們就可以動(dòng)手寫一個(gè)。
Magicodes.IE就是在這種情況下誕生的。導(dǎo)入導(dǎo)出是一個(gè)非常普遍的場(chǎng)景,相關(guān)的組件也很多,比如就拿導(dǎo)出Excel來(lái)說(shuō),主流的就有EPPlus、NPOI等等庫(kù)。那么為什么我們還需要再造輪子呢?因?yàn)槲覀儼l(fā)現(xiàn),在大部分場(chǎng)景下使用這些庫(kù)我們都需要進(jìn)行一些重復(fù)性的編碼以及特定針對(duì)Excel的操作的編碼才能滿足我們的需求,那么有沒(méi)有更合適的做法?所以就有了Magicodes.IE,通過(guò)設(shè)置Dto就能滿足大部分導(dǎo)入導(dǎo)出的場(chǎng)景,并且還支持除了Excel之外的其他導(dǎo)入導(dǎo)出格式。
2)寫好代碼
代碼規(guī)范,易于閱讀這些都是必不可少的。尤其是在多人遠(yuǎn)程協(xié)作的情況下,代碼審閱,定期重構(gòu)也非常有必要。否則大家就算是想貢獻(xiàn)代碼,但是也要看得懂不是?
3)充分的測(cè)試
代碼寫好了,上去就是干明顯就是挖坑。隨著項(xiàng)目的時(shí)間越長(zhǎng),代碼重構(gòu)或者功能迭代就越需要測(cè)試的保障,而不是個(gè)人感覺(jué)或者編譯通過(guò)即可。
那么如何做好充分的測(cè)試呢?
1.完善的單元測(cè)試
每一次功能迭代或者Bug修復(fù),均要完善好相關(guān)的單元測(cè)試。單元測(cè)試是代碼可靠程度的最基本的保障。
2.盡可能提高代碼覆蓋率
代碼覆蓋率作為一個(gè)指導(dǎo)性指標(biāo),可以一定程度上反應(yīng)測(cè)試的完備程度,是軟件質(zhì)量度量的一種手段。100%覆蓋的代碼并不意味著100%無(wú)bug的應(yīng)用,代碼覆蓋率作為質(zhì)量目標(biāo)沒(méi)有任何意義,而我們應(yīng)該把它作為一種發(fā)現(xiàn)未被測(cè)試覆蓋的代碼的手段。
通過(guò)代碼覆蓋率測(cè)試,我們可以了解測(cè)試過(guò)程中覆蓋和未覆蓋的地方,可能存在的風(fēng)險(xiǎn)。分析未覆蓋代碼,反推在測(cè)試設(shè)計(jì)是否充分,進(jìn)一步明確測(cè)試設(shè)計(jì)階段的問(wèn)題。
代碼覆蓋率測(cè)試也有助于我們發(fā)現(xiàn)測(cè)試死角、冗余代碼、歷史廢棄代碼,便于重構(gòu)。
3.使用自動(dòng)化測(cè)試來(lái)保障每次提交和驗(yàn)證PR
開源項(xiàng)目有很多DevOps的服務(wù)可以選擇,我們可以基于其打造自己的自動(dòng)化測(cè)試來(lái)保障開源項(xiàng)目的質(zhì)量,以針對(duì)每次提交、PR進(jìn)行驗(yàn)證,并且作為資源發(fā)布的參考依據(jù)。
4)友好的文檔
文檔一直是開源項(xiàng)目運(yùn)作的一個(gè)難題:
代碼寫的歡,文檔難產(chǎn)。
本地化文檔(中文文檔)沒(méi)問(wèn)題,其他語(yǔ)言文檔(英文文檔)難以編寫。
文檔的更新永遠(yuǎn)跟不上代碼的更新,版本的迭代。
友好的文檔一直是開源項(xiàng)目吸引用戶的首要標(biāo)準(zhǔn),所以文檔是必須的。
Magicodes.IE的文檔也在積極補(bǔ)充和完善之中,希望大家能夠多多支持:
Magicodes.IE之導(dǎo)入學(xué)生數(shù)據(jù)教程
Magicodes.IE基礎(chǔ)教程之導(dǎo)出Excel
Magicodes.IE基礎(chǔ)教程之導(dǎo)出Pdf
Excel模板導(dǎo)出之導(dǎo)出教材訂購(gòu)表
使用Magicodes.IE.Excel完成Excel圖片的導(dǎo)入和導(dǎo)出
5)版本規(guī)劃和管理
對(duì)于開源項(xiàng)目來(lái)說(shuō),版本規(guī)劃和發(fā)布版本也不應(yīng)該是一件隨意的事情。畢竟錯(cuò)誤的版本可能會(huì)給用戶帶來(lái)災(zāi)難性的問(wèn)題。不合理的規(guī)劃,也可能會(huì)將項(xiàng)目帶入溝渠。
這里分享幾個(gè)經(jīng)驗(yàn):
版本規(guī)劃我們通過(guò)收集反饋來(lái)進(jìn)行規(guī)劃。如Magicodes.IE就通過(guò)Issue收集用戶反饋、討論以推出新的版本:
資源發(fā)版提供詳細(xì)的版本日志,以供用戶參考和追蹤:
測(cè)試版預(yù)先發(fā)布Beta版的包,如上圖中的2.2.0-beta2。
6)做好推廣
其實(shí)也就是讓可能需要他、真正需要他的人知道他的存在。從技術(shù)人的角度建議如下:
和技術(shù)社區(qū)合作,分享干貨,不水群,不瞎聊
加入知名開源組織,比如Magicodes.IE就加入了NCC開源組織
不要理會(huì)噴子。干自己認(rèn)為有價(jià)值的事情,不要理會(huì)那些只會(huì)噴但是啥也不會(huì)做的麻瓜。對(duì)于開源作者傷害最大的其實(shí)就是噴子和嘴炮,大家都是利用業(yè)余精力去支持和付出,為社區(qū)做貢獻(xiàn),不圖你支持,但是希望你別圖一時(shí)嘴快!不愛(ài)用那你就滾啊,不好用那你寫個(gè)更好用的分享出來(lái)啊!
7)關(guān)注反饋,持續(xù)更新
從Issue中來(lái),到代碼中去。
在開源項(xiàng)目達(dá)到一定規(guī)模時(shí),社區(qū)就會(huì)給出非常多的反饋。這是單兵作戰(zhàn)肯定是不適合的,那么適時(shí)組成自己的開源團(tuán)隊(duì)或者開源管理委員會(huì)就非常有必要了。同時(shí),社區(qū)反饋的很多問(wèn)題往往都是過(guò)于偏具體業(yè)務(wù)的需求,這時(shí)就需要我們?nèi)コ槿〕鐾ㄓ玫男枨罅恕?/p>
歡迎PR,及時(shí)處理PR!
開源項(xiàng)目在前期往往均只能利用業(yè)余精力運(yùn)作,那么每一個(gè)PR都是非常寶貴的,團(tuán)隊(duì)一定要及時(shí)驗(yàn)證并處理。先以功能優(yōu)先,再適當(dāng)重構(gòu)。
大小版本提前規(guī)劃,小版本快速迭代!
開源項(xiàng)目既需要有長(zhǎng)期的規(guī)劃,以確保長(zhǎng)期的方向,也需要有短期的計(jì)劃和目標(biāo)。這樣對(duì)團(tuán)隊(duì)對(duì)用戶都是有幫助的。同時(shí)小版本規(guī)劃或者考慮的功能也可以通過(guò)Issue的方式和用戶探討:
最后
本篇僅是筆者結(jié)合Magicodes.IE講解如何做好一個(gè)開源項(xiàng)目的第一篇,接下來(lái),我們會(huì)講解如何基于開源項(xiàng)目完成徽章、DevOps等等。
轉(zhuǎn)載是一種動(dòng)力 分享是一種美德
如果喜歡作者的文章,請(qǐng)關(guān)注【麥扣聊技術(shù)】訂閱號(hào)以便第一時(shí)間獲得最新內(nèi)容。本文版權(quán)歸作者和湖南心萊信息科技有限公司共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
文檔官網(wǎng):docs.xin-lai.com
QQ群:
編程交流群<85318032>?
產(chǎn)品交流群<897857351>
總結(jié)
以上是生活随笔為你收集整理的如何做好一个开源项目(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 以Blog.Core的方式来打开Abp.
- 下一篇: Abp商业版 - Identity Se