開發(fā)者:如何選擇合適的開源庫?
豐富的開源資源為開發(fā)者提供了便利,但如何在這么多的資源中找到適用自己項(xiàng)目的呢?國(guó)外開發(fā)者Daniel Marbach(他的介紹)在其博客中詳細(xì)介紹了相關(guān)技巧。
Daniel Marbach認(rèn)為利用開源庫可以大大提高開發(fā)速度,他經(jīng)常鼓勵(lì)自己的團(tuán)隊(duì)成員在開發(fā)中選用開源項(xiàng)目。他總結(jié)選用開源庫的技巧如下:
1. 首先根據(jù)自己的項(xiàng)目性質(zhì)選擇合適的開源許可證。
對(duì)你所開發(fā)軟件的顧客和應(yīng)用對(duì)象來說,許可證是否適用非常重要。例如,在受監(jiān)管的環(huán)境下,通常只有Apache2可用。
2. 定義你要解決的問題類型。
例如需要解決的是軟件的分發(fā)、緩存、持久性還是松散耦合?
3. 提煉出問題的mate標(biāo)簽和描述性短語。
例如,如果你需要解決的問題是關(guān)于在多個(gè)機(jī)器中的***路徑,你的標(biāo)簽或短語可能會(huì)是遺傳算法、job-Shop Scheduling、規(guī)劃圖、優(yōu)化調(diào)度算法、最短路徑等。
4. 瀏覽codeplex, google code or sourceforge (github.com 也是個(gè)很有價(jià)值的網(wǎng)站) ,并列出初步篩選到的項(xiàng)目。
例如:在IoC/DI列表里,可以找到ninject, structuremap, autofac, windsor等開源項(xiàng)目。
5. 找到這些項(xiàng)目的主頁,分別查看項(xiàng)目的***進(jìn)展,標(biāo)出那些很久沒有更新或者已經(jīng)停止開發(fā)的項(xiàng)目。
注意主頁上的新聞、發(fā)布通告、提交記錄、網(wǎng)站更新等。我一般會(huì)從列表中刪除掉那些超過6個(gè)月沒有做更新的項(xiàng)目。
6. 到代碼庫頁找到相關(guān)測(cè)試組件。
建議你將沒有單元測(cè)試組件的項(xiàng)目從列表中刪去,也許你覺得這個(gè)要求過于苛刻了,但如果沒有單元測(cè)試,如何能保證這個(gè)項(xiàng)目的質(zhì)量呢?
7. 在項(xiàng)目主頁中確認(rèn)有相關(guān)文檔。
從選好的項(xiàng)目列表中刪去那些沒有文檔、代碼示例或適用指南的項(xiàng)目。畢竟學(xué)習(xí)一個(gè)全新的工具或框架我們需要付出一定的精力,一個(gè)全面細(xì)致的文檔是非常必要的。
8. 檢查項(xiàng)目源代碼是否指定了版本控制系統(tǒng),并查看是否有擴(kuò)展點(diǎn)(extension points)。
理想的開源軟件庫或框架并不限制你使用特定的日志框架或依賴注入容器(DI container)。而多種擴(kuò)展點(diǎn)可以為你提供定制化日志系統(tǒng)、容器等的可能性。
還有其他一些篩選原則,你可以根據(jù)所作項(xiàng)目的需求進(jìn)行考查:
1. 是否附有構(gòu)建腳本(build script)
2. 該開源項(xiàng)目小組是否持續(xù)使用同一集成開發(fā)環(huán)境。
3. 該開源項(xiàng)目是否有清晰的road map。
4. 該項(xiàng)目是否設(shè)有問題跟蹤器(issue tracker)?
5. 是否很快就有社區(qū)補(bǔ)丁推出?
6. 在社區(qū)中,關(guān)于該項(xiàng)目的問題反饋是否迅速?
7. 其他的開發(fā)者是否樂于使用該開源項(xiàng)目,在社區(qū)中關(guān)于該項(xiàng)目的知識(shí)技巧是否很快傳播。
8. 有多少活躍的項(xiàng)目貢獻(xiàn)者?
9. 版本號(hào)管理是否清晰?
10. 對(duì)于來自社區(qū)的具體需求,該項(xiàng)目的改進(jìn)和集成情況?
外文出處:http://www.planetgeek.ch/2010/06/20/how-to-select-open-source-libraries/
【編輯推薦】