做者:蘇康勝
前言 本人從事軟件行業以來,經歷了屢次的成功與失敗的體驗,總以爲中國的軟件應該能夠作得更好些,但結果並非我想象中的那樣,許多的項目實際都還只是以假的、虛的面孔而存在,其中起因你們均可以說得出不少不少,但怎麼改呢?一些問題的存在只是由於其餘問題存在而存在的,因此我想尋找中國軟件行業爲何不能崛起的根源。 中國人智商不夠?那絕對是錯的。 中國人不夠勤奮?那也絕對是錯的。 科技不如其它國家發達?通信如此發達的現代,那不是理由。 中國人作軟件的少?那更加不是理由。 ...... 爲何呢?中國缺乏高效的軟件開發團隊嗎?這也許是問題的根源。
正文: 喜歡足球的朋友應該很是清楚一件事情,那就是在一場足球賽中假如球員之間缺乏默契的配合或教練的指導思想執行不到位等狀況下,那場比賽多半是以失敗了結的,由於這支球隊並非優秀的球隊。開發軟件項目就象一場進行中的足球賽,是靠項目管理、系統分析設計、程序編制、測試、市場營銷等不一樣角色人員共同協做完成的,不一樣角色的人執行的工做相互促進和制約着其它角色的人的工做,所以一個高效的軟件開發團隊是高質量軟件項目或產品的保證,可如何才能營造高效軟件開發團隊呢?從如下幾個方面來講明:
1、 高效軟件開發團隊的特徵 高效的軟件開發團隊是創建在合理的開發流程及團隊成員密切的合做的基礎之上的,成員共同的迎接挑戰、有效的計劃、協調和管理各自的工做以致完成明確的目標,高效的開發團隊具備以下特徵: 一、 具備明確且有挑戰性的共同目標 一個具備明確的並且有挑戰性目標的團隊比目標不明確或不具備很大的挑戰性目標的團隊效率高得多,一般技術人員每每會由於完成了某個明確的任務,並且這個任務的完成具備挑戰性的意義而感到自豪,反過來團隊成員爲了獲取這種自豪的感受而更加積極的工做從而帶來團隊開發的高效率,如做爲系統設計人員很清楚的知道在何時要作到什麼,何時開始作,何時必須完成,爲了完成工做必須面臨哪些挑戰,怎麼解決這些困難等爲設計出一個高質量的軟件項目提供了重要保證,而模模糊糊的去設計一個系統或模模糊糊的就去編寫代碼是很是危險的,並且會爲此付出高昂代價,所以高效的軟件開發團隊具備挑戰性的共同目標。
二、 團隊具備很強的凝聚力 在一個高效的軟件開發團隊中,成員們凝聚爲一個總體共同進行工做,他們是相互支持、互相交流、互相尊重的,而不是相互推卸責任、保守、相互指責的,在一些散亂的開發團隊中每每存在這樣的問題,一些程序員是比較保守的,明明知道另外的模塊中須要用到一段與本身已經編寫完成但有些難度的程序代碼,他也不肯拿出來給其它程序員共享,不肯與系統設計人員交流,這樣給項目的進度形成了些不可度量的因素。
三、 具備融洽的交流環境 在一個開發團隊中,每一個人行使本身的職責,如需求分析人員制定需求規格說明、系統設計人員作系統概要設計和詳細設計、項目經理配置項目開發環境而且制定項目計劃等,但每一個人的工做不可能作到完美的,如系統概要設計的文檔可能有個別地方詞不達意,作詳細設計的時候就可能會形成誤解,項目經理制定計劃時可能忽略了某種風險的存在而形成執行者過於緊張的壓力等等狀況都須要你們經過交流、反饋的手段而後協商解決的,所以高效的軟件開發團隊是具備融洽的交流環境的,而不是那種簡單的命令執行式的。
四、 具備共同的工做規範和框架 高效軟件開發團隊具備規範性及共同框架的工做,對於項目管理具備規範的項目開發計劃,對於分析設計具備規範和統一框架的文檔及審評標準,對於代碼具備程序規範條例,對於測試有規範且可推理的測試計劃及測試報告等等。而且全部成員都明白本身的職責,知道必須完成什麼計劃?由誰來完成?何時開始?何時結束?按什麼順序?等,總之一個高效的開發團隊不管是工做內容仍是工做流程都具備不一樣程度的規範性和標準風格的框架。
五、 採用合理的開發過程 軟件的開發不一樣於通常商品的研發和生產,開發過程當中會面臨着各類難以預測的風險,好比需求的變化、人員的異動、技術的瓶頸、同行的競爭等,高效的軟件開發團隊每每是採用了合理的開發過程去控制開發過程當中的風險、提升軟件的質量、下降開發費用,這樣的團隊會根據自身的必要程度決定要執行哪些工做?如配置管理、資源管理、版本控制、代碼控制等,團隊還合理的分劃並定義開發過程的里程碑,決定每項活動內容的底線和審評標準,決定各項活動的前後關係或迭代的關係等。總之高效的軟件開發團隊的開發過程的原則是高效率、高質量、低成本。
2、 目前國內軟件開發團隊容易存在的問題
因爲傳統的舊體制下的管理思想的沿襲、大部分中國人傳統的思惟習慣及軟件行業在中國發展的處於初期階段等緣由,使國內的許多軟件開發團隊在領導、合做、質量、參與等方面存在一些問題,具體以下: 一、 領導不力 有效的領導是高效率軟件開發團隊的基本要求,若是領導不力,工做計劃就不必定會合理,團隊成員也不必定會投入工做的熱情,使團隊的凝聚力大打折扣;若是領導不力,就不必定有明確且具備挑戰性的目標,團隊成員就沒法完成高質量的項目產品,沒法投入信心和激情。傳統的舊體制下的管理思想的沿襲,是部分領導還具備老大爺的心態,因而貪功、推卸責任、明則保身等一系列現象也相繼而生;若是領導不力,就沒法營造融洽的交流環境,團隊的工做即是死板的沒有生氣的;若是領導不力,就不知道採用什麼樣的開發過程是合理的,就不可能高效率、高質量的完成軟件項目。領導不力還可能致使其它問題的出現。
二、 缺乏必要的信心和激情 也許你會發現周圍的一些同事僅僅是爲了薪水而工做,在執行工做的時候即便發現了上層領導忽略的問題依然照糊塗畫瓢也不反饋問題所在,即使他是個天才,但成功不會屬於他的,由於成功垂青於有激情的人才,其實這些同事並非一開始就缺乏激情的,緣由也許是失去了信心,而暫時作糊塗人而已,不管如何,缺乏信心和激情的團隊,只會是人心渙散。
三、 軟件質量的價值觀念模糊 軟件質量這個問題已是老調老談了,但質量的標準是如何?是否在團隊中有明確的評價標準?目前國內的許多軟件開發團隊都很難給出正確的答案,許多的項目最終僅僅是以能夠交差、收到錢、套概念、圈錢等市場行爲作爲標準。目前流行的許多開發過程、質量體系如:RUP、XP、CMM、ISO9000、SEI等真正應用的又有多少?一些公司僅僅是用來提高公司形象而已。缺乏正確的軟件質量價值觀念的軟件開發團隊是不可能有明確目標的,不可能會採用合理的開發過程,也不可能有共同的工做規範和框架的。
五、 無效的內耗佔據了開發過程的主體 也許是一些不良的傳統觀念和思想的沿襲,一些軟件開發團隊出現了排擠其它有異議的成員、推卸責任、相互指責、貪功等,這種狀況是最壞的,但卻事實存在。沒有凝聚力的團隊是不可能作得很好的。
六、 模糊不清的角色職責定義 軟件開發是由不一樣角色的成員共同協做完成的,但目前國內的一些開發團隊卻沒有對各類角色成員的職責作出明確的定義,成員就沒法明確知道本身的目標,很簡單的道理,都不知道要作的是什麼,能按時準確的完成嗎?若是每人都按本身想象中的職責去工做,那麼有多少工做衝突、多少遺漏,誰能給出正確的估計?沒有明確的職責定義人力資源的安排可能合理嗎?結果多是找了個資格較老的程序員作了項目經理,找了個沒有理會對象概念的人去作面向對象的系統分析,找個不顧網絡安全、網絡流量、事務特性、運行費用的人去設計一個分佈式系統。。。有才華的人也許只能跺在被窩裏激呼懷才不遇或許能作個好夢安慰本身。
3、 營造高效軟件開發團隊的關鍵因素
若是作到了高效軟件開發團隊的特徵,那麼這個團隊確定是高效的團隊,但是如何才能營造這樣的一個團隊呢?上面分析了國內軟件開發團隊容易出現的一些問題,解決這些問題及避免這些問題的出現是營造高效軟件開發團隊的出發點,但一些問題產生的緣由是其它問題的存在,關鍵是解決問題的根源,因此營造高效軟件開發團隊的因素是如下幾點: 一、 選拔或培養適合角色職責的人才 軟件項目是由不一樣角色的人共同協做完成的,每種角色都必須有明確的職責定義,所以選拔和培養適合角色職責的人才是首要的因素,如:選拔軟件項目開發經理必定要注意,這人要熟悉各類設計方法,願意聽取其餘人的意見而且客觀上和邏輯上把本身的思想與其它人意見相比,掌握激發團隊成員的積極性的方法等;選拔系統分析員,必定要注意,這人要熟悉須要的設計方法,掌握系統分析和設計的原則,擁有完成職責所需技能和豐富經驗等。選拔或培養適合角色職責的人才,特別是合適的軟件開發經理是營造高效軟件開發團隊的最重要的因素。
三、 自我管理 做爲團隊的成員,應該以開發經理爲首堅持管理自我,對工做負責,與同事友好合做,遵照工做紀律、自我技能培訓等。
四、 學習國外成功經驗 學習國外的一些成功開發過程、分析方法、設計思想、體系結構、設計模式等,如學習合理統一開發過程(RUP)的一些實踐,概括適合本身的合理開發過程;學習先進的系統分析、設計的思想力求完成更高質量要求的軟件項目;學習各類體系結構優缺點及適應狀況,設計出知足系統需求的軟件體系結構;學習國外成功設計模式,使代碼的編寫知足更高質量的需求。程序員