您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源測(cè)試管理工具 >
如何管理好開(kāi)源軟件社區(qū):開(kāi)源項(xiàng)目管理方法
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/3/18 14:52:50 ] 推薦標(biāo)簽:

  在這篇文章中,我想分享一下我在參與AS7開(kāi)發(fā)過(guò)程中用到的管理工具及協(xié)作流程,并談一些對(duì)開(kāi)源社區(qū)的理解。

  AS7的開(kāi)發(fā)流程主要涉及這樣一些核心工具:

  github – 從AS7開(kāi)始,幾乎JBoss的所有組件的代碼庫(kù)都轉(zhuǎn)移到github上面。

  Jenkins – Jenkins原名Hudson,是一個(gè)CI(Continuous Integration)工具。AS7使用它來(lái)進(jìn)行代碼的自動(dòng)化持續(xù)測(cè)試。

  JIRA – Jira用于根蹤項(xiàng)目Bug,記錄開(kāi)發(fā)任務(wù)等。

  聽(tīng)起來(lái)和普遍的項(xiàng)目管理流程沒(méi)什么太大區(qū)別:幾乎所有的項(xiàng)目都會(huì)有一個(gè)代碼倉(cāng)庫(kù),有一個(gè)Bug跟蹤系統(tǒng)。(當(dāng)然,可能有的項(xiàng)目并沒(méi)有集成測(cè)試環(huán)境,也不寫(xiě)單元測(cè)試,質(zhì)控基本靠人工-這是屬于管理水平較低的項(xiàng)目中的情況。)

  那么,當(dāng)一個(gè)社區(qū)項(xiàng)目成規(guī)模,成熟化以后,卻可以用看起來(lái)和別人沒(méi)什么不一樣的管理工具將項(xiàng)目管理得很好,這里面有什么秘密呢?我覺(jué)得差距主要體現(xiàn)在流程細(xì)節(jié),工具的使用水平,測(cè)試的自動(dòng)化程度這三個(gè)部分。

  JBoss的社區(qū)來(lái)講,我想分享一些具體經(jīng)驗(yàn)。首先我們要知道JBoss社區(qū)的Bug管理系統(tǒng)位于:

  https://issues.jboss.org/secure/Dashboard.jspa

  如果你有社區(qū)賬號(hào),可以登錄進(jìn)去,可以看到這里面管著多少項(xiàng)目。以下是部分項(xiàng)目的截圖:

  可以看到整個(gè)JBoss社區(qū)的項(xiàng)目規(guī)模是非常龐大的,這里面的很多項(xiàng)目既做為組件形成JBoss核心產(chǎn)品JBoss AS7,又可以獨(dú)立使用并與其它社區(qū)項(xiàng)目相結(jié)合,比如Hibernate,是JBoss社區(qū)的產(chǎn)品之一。

  這些項(xiàng)目的社區(qū)里面的開(kāi)發(fā)人員,大部分沒(méi)有交集,各自在自己的項(xiàng)目中進(jìn)行開(kāi)發(fā)。也有少數(shù)的成員同時(shí)給好幾個(gè)項(xiàng)目貢獻(xiàn)代碼,這樣的開(kāi)發(fā)人員一般是 Red Hat員工(Red Hat也會(huì)看社區(qū)里面的代碼的貢獻(xiàn)量;貢獻(xiàn)比較大的非Red Hat員工,往往會(huì)被高薪挖來(lái)成為全職)。

  可能對(duì)開(kāi)源社區(qū)的運(yùn)作不太了解的人,會(huì)認(rèn)為社區(qū)是“平的”,大家人人可以自由提交代碼,有大量的人貢獻(xiàn)代碼,然后一個(gè)好的項(xiàng)目誕生、成長(zhǎng)起來(lái)了。這可能是對(duì)社區(qū)模式的大誤讀了。

  實(shí)際情況恰恰相反,社區(qū)的人員組成結(jié)構(gòu)更像是金字塔。真正組成社區(qū)的核心開(kāi)發(fā)人員,一般也那么3、5個(gè)人,這些人往往擁有非常強(qiáng)的編碼能力,非常 豐富的經(jīng)驗(yàn),他們基本上可以在項(xiàng)目中貢獻(xiàn)80%~90%的代碼,并且項(xiàng)目設(shè)計(jì)由這些人完成,他們可能同時(shí)是標(biāo)準(zhǔn)制定者和代碼編寫(xiě)者。

  以JBoss項(xiàng)目RESTEasy為例:

  http://www.jboss.org/resteasy

  這個(gè)項(xiàng)目的社區(qū)領(lǐng)導(dǎo)Bill Burke身兼多重身份:首先他是Red Hat員工;然后他是JCP標(biāo)委會(huì)成員,參與包括EJB,JAX-RS等多個(gè)J2EE標(biāo)準(zhǔn)的制定;同時(shí),JAX-RS標(biāo)準(zhǔn)的框架實(shí)現(xiàn):RESTEasy的 核心部分幾乎全部由他一人撰寫(xiě),同時(shí)他參與多個(gè)社區(qū)的編碼工作。而B(niǎo)ill Burke本人也是JBoss社區(qū)的創(chuàng)始人之一,在商業(yè)上非常成功,做為一名技術(shù)人,他的富有程度并不會(huì)輸給Red Hat核心管理層。

  再來(lái)看RESTEasy的團(tuán)隊(duì)核心成員:

  https://community.jboss.org/wiki/ResteasyContributors

  幾乎都是Red Hat員工,享受公司很好的待遇,從事社區(qū)專門的工作。除了JBoss這種由Red Hat直接支持的“商業(yè)味”比較濃的社區(qū)之外,我們?cè)倏聪乱恍┯砷_(kāi)源基金會(huì)支持的“純正血統(tǒng)”的開(kāi)源社區(qū)。比如Apache社區(qū)的一些項(xiàng)目,拿HTTPD為例:

  http://httpd.apache.org/

  左邊有Get Involved鏈接,分三個(gè)部分:Mailing Lists, Bug Reports, Developer Info。

  可以看到,代碼開(kāi)發(fā)并不是參與社區(qū)開(kāi)發(fā)的全部?jī)?nèi)容。首先我們可以訂閱它的郵件列表,對(duì)社區(qū)中日常工作有一個(gè)大概了解,然后可以發(fā)現(xiàn)問(wèn)題后提交Bug給社區(qū)去解決,后是Developer Info,這里面可以找到代碼庫(kù):

  http://svn.apache.org/viewvc/httpd/httpd/trunk/

  仔細(xì)看下貢獻(xiàn)者,發(fā)現(xiàn)人數(shù)并不太多。除了Apache基金會(huì)自己的核心成員,還有不少來(lái)自Red Hat,IBM等各家參與開(kāi)發(fā)的公司的員工貢獻(xiàn)。在Red Hat的Security Team中,我的不少同事同時(shí)也是為HTTPD貢獻(xiàn)代碼的開(kāi)發(fā)人員。

  因此,我們要明確這樣一個(gè)概念,社區(qū)的平等,并不意味著社區(qū)是"平"的, 我參與過(guò)的所有社區(qū)幾乎都是金字塔型:核心團(tuán)隊(duì)規(guī)模保持小而精,貢獻(xiàn)絕大部分代碼,他們往往職于商業(yè)公司,或者在研究機(jī)構(gòu)或開(kāi)源組織中從事專業(yè)工作-憑 著技術(shù)狂熱和大量業(yè)余時(shí)間來(lái)參與社區(qū)開(kāi)發(fā),并形成了很大貢獻(xiàn)的人也有,但不是社區(qū)里面的主流情況。

  而用戶群體對(duì)于社區(qū)來(lái)講意味著什么呢?當(dāng)然,代碼寫(xiě)得再好,也得有用戶群才成。因此,項(xiàng)目流行程度取決于用戶規(guī)模,絕大部分用戶群體不會(huì)貢獻(xiàn)代碼, 但會(huì)貢獻(xiàn)使用心得,BUG報(bào)告,會(huì)幫助項(xiàng)目有意無(wú)意的做宣傳,貢獻(xiàn)各種各樣的外圍項(xiàng)目(比如Linux Kernel社區(qū)會(huì)收到各廠家貢獻(xiàn)的驅(qū)動(dòng)代碼,這樣做當(dāng)然也是因?yàn)楦鲝S家有自己的商業(yè)利益。)。因此,社區(qū)是一個(gè)生態(tài)系統(tǒng),必須有陽(yáng)光,有空氣,有水,有 鳥(niǎo)獸魚(yú)蟲(chóng),它才繁榮。

  而不管社區(qū)在商業(yè)化上是否成功,每一個(gè)運(yùn)營(yíng)良好的社區(qū)其背后管理模式有趨同的傾向。這種模式應(yīng)該說(shuō)首先是在Linux Kernel中的應(yīng)用起來(lái)的,我們不能不說(shuō)Kernel首先使用這種以Git為核心的代碼開(kāi)發(fā)流程非常符合實(shí)際情況,并且?guī)椭鶮ernel在商業(yè)上取得了 巨大成功。

  接下來(lái)我們?cè)賮?lái)看看github,為什么JBoss社區(qū)要幾乎把所有的項(xiàng)目都遷到github上面來(lái)呢?因?yàn)樗拇a管理流程非常貼合開(kāi)源項(xiàng)目的金字塔結(jié)構(gòu)。github要求使用Pull Request流程來(lái)提交代碼。這個(gè)流程有這樣幾個(gè)特點(diǎn):

  所有的開(kāi)發(fā)人員不可以直接向項(xiàng)目庫(kù)提交代碼

  所有的開(kāi)發(fā)人員必須將項(xiàng)目fork到自己的空間,在自己fork的項(xiàng)目里面寫(xiě)代碼

  所有的代碼必須以Patch的形式提交到大家共用的項(xiàng)目庫(kù)

  所有提交的的Patch必須要由團(tuán)隊(duì)核心成員審核后方可入庫(kù)(有的項(xiàng)目中,有這種權(quán)力的人只有一個(gè)。比如Linux Kernel,一些核心模塊,比如內(nèi)存管理和進(jìn)程調(diào)度,只有Linus本人有Patch合并權(quán)力)

  比如我要給RESTEasy項(xiàng)目交代碼:

  https://github.com/resteasy/Resteasy

  首先我要將項(xiàng)目fork到自己的空間:

  https://github.com/liweinan/Resteasy

  然后clone出來(lái)做修改,將修改提交進(jìn)自己的代碼庫(kù),并將修改內(nèi)容生成Patch交由Bill Burke審核:

  https://github.com/resteasy/Resteasy/pull/35

  可以看到,把代碼庫(kù)遷到Github,不光是改變一個(gè)代碼庫(kù)管理工具這樣簡(jiǎn)單,隨之而來(lái)的是整個(gè)流程管理的一種改變。圍繞著Git的這種代碼管理流 程,是Linux Kernel社區(qū)長(zhǎng)久以來(lái)一直使用的模式,是社區(qū)管理成功經(jīng)驗(yàn)的直接沿用。有關(guān)github的Pull Request,可以參考:

  http://help.github.com/pull-requests/

  接下來(lái)我們談?wù)勝|(zhì)控:在JBoss AS7這個(gè)項(xiàng)目中,測(cè)試過(guò)程基本上是全自動(dòng)化的,所有的測(cè)試終必須形成單元測(cè)試代碼,用到的技術(shù)也非常豐富,包括:JUnit,Arquillian, Selenium等等。

上一頁(yè)123下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd