"確認你已經理解問題, 由小型的有才干的團隊來實現解決方案, 并且讓你的客戶告訴你如何改進它. 這就是全部; 其他的都是注解."(軟件開發哲學,摘自<<Clouds to Code中文版>>)
做了這麼久的開發,看到這個開發哲學,真是很貼切,軟件開發的幾大要點概括的淋漓盡致.
"確認你已經理解問題" 即需求問題,宏觀上為軟件的商業目的,微觀上為每個功能需求的理解與分析,根據我的開發經驗,就是要獲取需求并且正確的理解它,我們往往對需求的問題不能夠達到全面的理解,大多數情況都是處在一知半解的狀態,各種情況導致獲取的需求并非真實有效,分析其原因主要有3點:
1.客戶對需求也不能完全解釋的清楚
2.業務邏輯確實很復雜,相關聯系繁多,造成理解上會達到理解問題的限制(5~7個關聯復雜性,超過就不易理解)
3.需求的獲取,設計到實現的各個階段出現了偏差,更嚴重的情況是無法追溯到原來提出的真實需求而造成的缺陷.
4.需求在軟件開發過程中,客戶實際情況已經變更,或是客戶改變了原先的想法而造成的需求變更
解決這些矛盾的方法很多,主要在于需求開發的經驗,設計開發的經驗,團隊的合做,有效全面及規范的需求記錄與追蹤,以及各階段追溯到需求的評審等來保證我們對需求的理解.
"由小型的有才干的團隊來實現解決方案" 即團隊合做與開發技能的問題.
高品質的團隊一直是成功的軟件開發的保證.否則軟件開發很容易陷入絕境.
至于團隊,以我的經驗主要提出幾點看法.
1.保證的團隊穩定性
團隊的核心成員要穩定,例如一個團隊一定要確認哪幾個是團隊的核心,在軟件的開發周期內一定要保證這些核心人員的穩定性,最好是不只是在一個項目周期,而是在組織面上也保證此團隊核心成員的穩定性,這樣才能夠使得團隊不斷進步,積累經驗,更重要的是合作的有效性,要知道一個人員更新頻繁,或是剛剛組建的團隊效率與合作性都是非常差的,需要很長時間的磨合與鍛煉,但往往會導致軟件開發的失敗,因為在你為建立新團隊的有效合作與開發過程的同時,軟件的開發已經錯誤百出,種下了失敗的種子,后面再想補救的代價就太高了.所以建立穩定的開發團隊是軟件開發的有效保證.
2.合理有效的團隊發展規劃.
1).明確有效的團隊目標.為團隊設立一個明確有效的目標,讓團隊中的核心成員都能夠一致的認同這個目標,并且將此目標與其自身的發展相互聯系,給每個人前進的動力與希望.這也是團隊穩定性的重要保證,沒有一個一致目標和奮斗方向的團隊,很難有凝聚力,也更不會成為一個高品質的團隊.
2).團隊成員合理的互補性.
我們要設定團隊成員各方面能力的基準線,每個成員不能低于這基準,否則會影響團隊的整體實力.
在此基準線上我們并不要求每個成員在各方面都優秀(這也是很難做到的),但一定會要求每個成員在某一個方面能力高于基準線,這樣才能根據特殊能力來建立互補性的團隊.
例如:開發團隊管理者要達到分析,設計,編碼,等工作能力的一個基準線, 在此之上他的管理能力一定是高于基準線之上,具備優秀管理能力的人.而不是讓一個各方面平庸或是其他能力(如他的編碼能力優秀)的人來充當管理者的角色. 這樣讓在各個方面的工作,都能夠找到在此方面優秀的人來執行,以達到建立互補性的團隊的目的.
同時團隊成員在此基礎上又能夠在各方面得到向他人學習提高的機會,以提高團隊能力的基準線,達到團隊發展的目的.
3).其他輔助性的策略與制度也不容忽視.
首先,團隊內部要有一個公平,公正的氛圍,每個人的能力,業績與其獲得的回報和在團隊中的位置要相互一致,形成一個良好的團隊發展環境.
第二,在保證核心成員穩定的同時,合理的團隊流動性也是必要的,因為不能保證團隊每個成員都能夠達到團隊的發展要求,所以將不適合的人員替換出去,再吸收新的成員,發展優秀的成員成為核心人員,以發展壯大團隊,并形成良好的團隊新陳代謝的模式.
第三,獲得管理層對此團隊的認同,鼓勵團隊的變革,鼓勵創新,愿意承擔相應的風險,也是關系到團隊是否能夠發展的一個非常重要的因素,這也要求團隊要不斷的獲得成功,創造業績,及良好的溝通來獲得管理層的支持.
"并且讓你的客戶告訴你如何改進它" 這里我的理解不僅僅是客戶,而且也包括市場
開發好的軟件,最重要的目的是達到客戶的需要,以及市場的需要.讓客戶與市場來引導我們軟件的開發方向是軟件獲得豐厚收益的重要保證,也是軟件開發的重要目標.當然這也是建立在我們能夠正確的理解客戶的需求與市場的需求的基礎之上的.
"這就是全部; 其他的都是注解." 這里我的理解是軟件開發要以上面所提到的需求,團隊,客戶與市場為主要關注點,而對于其他輔助性的方面,如過程改進,檢查與監測等都是實現主要關注點的有效工具與過程,要分清主次,不要一味的盯在這些輔助性的工作方面,而忽視了軟件開發成功的真正關鍵. 根據經驗,如果軟件開發時在還未理解需求,又沒有良好的開發團隊,客戶與市場也模糊不清時,而相反卻去注重文件表單規范,過程改進,ISO或CMMI等等相關的事務,這樣試問就算這些做的再好,我們的軟件開發能夠成功嗎.要分的清主次,合理應用其他輔助性事務,才是正道.
綜上所述,我對軟件開發的經驗之總結, 軟件開發需要以客戶與市場為導向理解軟件真正的需求,利用高品質優秀的團隊進行開發,以達到獲取最大商業利益的目的.
文章來源于領測軟件測試網 http://www.kjueaiud.com/