陸戌辰 臧珠萍
摘要: 本文針對“學習階段的軟件開發(fā)”的特定情況,提出了均分模式的分工方法,將該方法與傳統(tǒng)分工方法進行了比較,提出了在項目各階段將功能相近、實現(xiàn)手段和步驟相似的任務平均分配給每個組員,以使整個團隊共同進退的創(chuàng)新性項目分工方法。
關鍵詞:軟件開發(fā);小組分工;項目體會
中圖分類號:G642 文獻標識碼:B
軟件開發(fā)是一項復雜的系統(tǒng)工程,牽涉到多方面因素,以前作坊式的開發(fā)早已無法適應當前的形勢。隨著軟件越來越復雜,系統(tǒng)越來越龐大,軟件開發(fā)人員的組織和分工便成了一項復雜而又重要的工作,對軟件項目的開發(fā)進度與最終成果有著不容小覷的影響,甚至可能會直接決定項目的成敗。本文針對學習階段的軟件開發(fā),提出了相應的分工模式與方法。
1應用環(huán)境介紹——學習階段的軟件開發(fā)
在闡述具體的分工方法之前,需要先介紹一下該方法適用的特定情況——學習階段的軟件開發(fā)。
“學習階段的軟件開發(fā)”看似陌生,但無論是計算機專業(yè)的教師還是學生,對這個概念包含的情形都是相當熟悉的。
所謂學習階段,就是指計算機專業(yè)水平正從初級向中級過渡的階段,該階段對應的群體一般為計算機專業(yè)的低年級本科生,該特定群體具有如下特點:
對計算機專業(yè)知識的學習范圍廣、深度淺,偏重于概念理論方面,實踐經驗較少。
還未確定自己的專業(yè)研究方向,對于計算機的各個領域沒有突出的偏向和特長。
通過學院開課等多種途徑,開始有機會接觸一些綜合性軟件開發(fā)。
其中一些優(yōu)秀的個體對計算機技術有濃厚的興趣,并且具備較強的自學能力。
該階段的軟件開發(fā)一般分為如下3種情況:
第一,學院開設的實踐性課程一般分小組進行,在規(guī)定時間內完成一個綜合性軟件的開發(fā),針對整個群體。該情況又分為兩種,一是針對特定課程的實踐,對編程語言、所用的技術都有規(guī)定限制,涉及到的課外知識較少,對自學能力要求不高;另一種情況是針對特定應用的實踐,該情況只需實現(xiàn)應用需求,對編程語言、所用的技術均無限制,涉及到的課外知識較多,大部分技術需自學。
第二,國家級/市級創(chuàng)新項目或者其他綜合性競賽,該情況針對比較優(yōu)秀的學生,對自學能力有很高的要求,并且需要扎實的計算機專業(yè)基礎和創(chuàng)新思維,對團隊精神也有較高要求。
第三,協(xié)助導師完成企業(yè)項目或者科研項目的一部分,該情況也是針對比較優(yōu)秀的學生。該情況下,導師挑選幾個平時表現(xiàn)優(yōu)異的學生參與項目的開發(fā),分配一些比較基礎簡單又與大學課程有關聯(lián)的模塊給學生完成。對學生的自學能力和理解能力有很高的要求。
每種情況的一個共同點就是軟件開發(fā)小組是由3~5人臨時組建的小團體,并且對開發(fā)時限有較嚴格的要求。
以上簡要介紹了“學習階段的軟件開發(fā)”這一概念,本文就是針對該特定條件下軟件開發(fā)過程中的分工方法進行討論與探索。
2傳統(tǒng)方法及其對學習階段軟件開發(fā)的弊處
在傳統(tǒng)的項目分工里,考慮到充分發(fā)揮每位組員的特長和經驗,一般都會將軟件開發(fā)劃分為幾個子任務,每個子任務包含若干模塊,再將各個子任務按專業(yè)特長分配給相應的組員。舉個例子,要設計實現(xiàn)一個動態(tài)網站時,經常會根據MVC模式,將項目分為數(shù)據庫設計、前臺頁面、后臺管理三大部分,然后把數(shù)據庫設計部分交給擅長數(shù)據庫的組員去做,前臺頁面由精通美工及HTML語言等的組員去做,后臺管理則會交給擅長網頁編程的組員去做,并由掌握大局觀的項目負責人統(tǒng)一協(xié)調管理。為降低系統(tǒng)開發(fā)過程的復雜性,小組內程序員之間的任務界面一般都很清楚且盡量簡化。
上述傳統(tǒng)分工方法在發(fā)揮組員特長、優(yōu)化團隊結構和降低軟件各模塊耦合度等方面作用顯著,對大多數(shù)軟件開發(fā)情況都適用,并且應該是首選的。然而,針對上文提到的“學習階段的軟件開發(fā)”,由于比普遍的軟件開發(fā)階段多了一個學習階段,如果仍舊采用傳統(tǒng)的分工方法,一些始料未及的問題便暴露出來。
按傳統(tǒng)的技術類型分工,由于時間和精力的限制,組員必定只會盯著自己負責的那部分技術資料研究,而對其他組員負責的部分毫不關心,整個團隊將會缺少互動交流,更嚴重的是,無論在技術學習階段還是應用階段,由于負責某一特定技術模塊的只有單獨一人或兩人,對技術知識點甚至模塊功能的理解可能產生偏差,孤軍奮戰(zhàn)的形勢又似回到了從前各自為營的軟件開發(fā)模式,軟件開發(fā)期間比較容易產生挫敗感等負面情緒。
3針對學習階段軟件開發(fā)的均分模式分工方法
所謂均分,是指在工作量、工作性質、工作難度、技術領域相同的條件下,在各階段對項目進行平均分配,即全組成員在各個階段共同致力于某一功能相同的模塊組,將功能相近、實現(xiàn)手段和步驟相似的任務平均分配給每個組員完成。以下就學習階段的軟件開發(fā)過程中運用均分模式分工方法與運用傳統(tǒng)分工方法有較大差別的幾個階段進行說明。
3.1技術學習階段
在技術學習階段,全組成員共同學習本次軟件開發(fā)所要用到的全部技術。對此,也許有人會提出質疑,學習全部技術與傳統(tǒng)方法中的只學習某一特定領域技術相比,是不是要花費成倍的時間與精力?其實不然。針對本文討論的學習階段軟件開發(fā)情況,要完成一個軟件項目,往往只需中級專業(yè)知識水平,而不像一個完整的科研項目,需要相應領域的高級知識、經驗及運用技巧,因此在進入自學階段之前,學生可以向教師或相關領域的前輩請教完成這個軟件項目所要用到的具體知識塊,盡量壓縮學習范圍。全體組員共同學習,交流對知識點的不同理解,碰到疑難問題還可以一起討論,從而提高學習效率,加快學習進程,加深對該技術的認識。同時,整個小組在學習時就統(tǒng)一編程風格及各種表示方式,為今后的設計編程提供很大便利?,F(xiàn)今社會需要的是復合型人才,要求人才對某一領域有所專長之外,對其他領域的知識也須有一定程度的了解,而均分模式下的技術學習方法正為培養(yǎng)這種人才奠定了堅實的基礎,學生學得多,收獲也多。
3.2系統(tǒng)設計階段
在系統(tǒng)設計階段,小組中的每個成員都站在相同的全局角度去看問題,考慮問題更全面,能更好地看清系統(tǒng)的結構及各模塊間的具體關系,保證系統(tǒng)設計不會與需求分析產生太大偏差。模塊實現(xiàn)流程由小組成員共同討論,能更全面地對實現(xiàn)方案進行設計,從而產生更多的方案,從中挑選最合適的。另外,組員共同討論同一模塊的設計,還能提出更多的可能碰到的突發(fā)狀況,以彌補經驗不足的缺陷。而采用傳統(tǒng)的分工方法,每個模塊由特定的負責人員設計,由于缺乏經驗,再加上技能學習階段遺留下的知識點掌握不扎實的隱患,設計方案必定存在許多漏洞,而自己卻渾然不知。由此可見,經過全組討論設計出的系統(tǒng)結構以及模塊內部結構將更趨向完善。
3.3編碼實現(xiàn)階段
在編碼實現(xiàn)階段,雖然,由于該小組是臨時組織的,且每個組員參加綜合性軟件項目的經驗不多,但小組成員普遍具有良好的大局觀和全局概念,考慮問題會立足于整個系統(tǒng)。
在均分模式分工方法中,各個模塊被分為功能相近,實現(xiàn)技術相同,實現(xiàn)手段、步驟相似的模塊組,模塊組按照層次關系或難易緩急排序,分階段順序攻克,每一階段的當前模塊組均分給組員實現(xiàn)。單從心理來看,由于不是一個人單獨面對從未接觸過的編程技術,遇到問題時可以向小組成員請教,個人的自信心將增強不少。更重要的是,在計算機技能應用方面,初學者遇到的問題往往是相似的,遇到共同的問題時,通過集體討論、查資料,或者向導師求助等途徑,一般很快就可以解決,從而大幅度加快開發(fā)進程。
然而,如果在學習階段的軟件開發(fā)中使用傳統(tǒng)方法,組員往往只關注于自己的工作領域,沒有時間也沒有精力去關心系統(tǒng)的其他部分,這就喪失了全局觀,與相關人員的交流也將產生困難。更糟糕的是,如此分工很有可能帶來系統(tǒng)開發(fā)中的本位主義,而遇到問題時,既沒有解決這些問題的經驗,又由于組員的專攻方向不同而不能與同組組員討論研究,通過其他渠道得到幫助往往會花費較長時間和較多精力,也會影響總體進度,使其他組員難以把握步調。同時,系統(tǒng)設計階段遺留下來的弊病也將逐漸顯現(xiàn)。從理論上來說,組員對自己負責模塊的接口不能自由修改,對系統(tǒng)整體設計的改進則更是困難。自己這一部分的改進往往需要其他部分的相應修改,這樣就會帶來很多的麻煩,最后大家的工作被相互抵消了。
在學習階段的軟件開發(fā)過程中,如果實行傳統(tǒng)分工,必然導致程序員視野狹隘,系統(tǒng)中存在的錯誤被詳細的分工掩蓋起來,最后等到系統(tǒng)整體測試時才發(fā)現(xiàn)錯誤,這時只好在上面修補,使整個系統(tǒng)變得雜亂無章,讓項目組不能自拔。而均分模式分工方法正好彌補了這些缺陷,從而達到提高軟件開發(fā)效率、保證軟件質量的目標。
4均分模式分工方法的注意事項
均分模式的運用還有以下幾點需要注意。
首先,這里所提的均分模式分工方法是針對“學習階段軟件開發(fā)”的特殊分工方法。對于學習階段軟件開發(fā)的幾種子情況來說,該方法更適用于第2和第3種組員能力比較均衡的情況。
其次,均分模式與傳統(tǒng)的分工模式也有共通的地方,實現(xiàn)效果如何,最重要的還是看團隊合作。
最后,該方法還需要經過多次實踐不斷完善。如果條件允許,可以嘗試在軟件開發(fā)正式啟動前,請業(yè)內人士進行簡要的工程開發(fā)流程與團隊合作的培訓。
總之,軟件開發(fā)的分工模式并不是一成不變的,應本著具體問題具體分析的態(tài)度分配工作,真正發(fā)揮項目分工的優(yōu)勢。
參考文獻:
[1] Ian Sommerville. 軟件工程[M]. 8版. 北京:機械工業(yè)出版社,2007.
[2] 楊少波,盧葦. J2EE項目實訓——UML及設計模式[M]. 北京:清華大學出版社,2008.