活用 XP 六 強化溝通

2021-03-31 08:56:31 字數 4320 閱讀 5771

林星(**自-900.ibm.***)    2023年10月27日

結對程式設計是本系列文章討論的最後乙個主題,也是備受爭議的乙個主題。為什麼乙個人的工作要兩個人來完成,這對於老闆來說簡直就是犯罪。和前面的主題類似的,我們要學習和應用一項實踐,關鍵的還是要把握其實質。

溝通為王

溝通問題是乙個專案成功最重要的因素之一。乙個專案可能並沒有什麼正式的軟體過程,但是只要團隊成員能夠進行有效的溝通,專案成功的可能性就很大,但是如果專案中缺乏有效的溝通渠道,再優秀,再嚴謹的軟體過程也沒有用。優秀的軟體方法學,總是會在溝通渠道的建立,推動有效溝通上花費大量的精力。我們分析rup、xp等方法學,都會看到很多這樣的實踐。溝通對乙個專案而言是重要的,對乙個軟體組織而言就更重要了。從長期來看,內部能夠進行有效溝通的組織能夠得到很好的發展,但是反過來,內部溝通不暢的組織將會出現很多的問題。

在軟體開發過程存在的乙個很大的問題就是溝通不暢的問題。事實上,這個問題並不僅僅在乙個開發過程中存在,在整個軟體組織內都將長期的存在,並成為阻礙軟體組織發展的一大障礙。這樣的說法可能過於理論化,但是我們只要想想,如果現在的專案中,乙個主力程式設計師離開的話,是否會給專案,甚至組織帶來重大的影響,就能夠理解這段話的含義了。造成這種現象的主要問題是程式是分散在各個程式設計師手中的。各個**塊就像是程式設計師們的私有財產一樣,神聖不可侵犯。

更為糟糕的是,任何乙個程式設計師都不願意閱讀他人的**,比起理解別人的**,程式設計師們寧可自己重新編寫**,這導致另乙個嚴重的問題――軟體組織中大部分的工作都是重複的,以至於程式設計師天天忙於開發**,卻難以把精力放在更有價值的地方(關於什麼是更有價值的地方,我們在下文會詳細的描述)。

在一些專案中,我們經常看到這樣一種開發環境:每個程式設計師都擁有個人的隔離空間,彼此之間不進行交流,甚至有時候他們整天不說一句話。在和專案中的一位主力程式設計師進行溝通之後,我們發現了他們的真實想法:

專案非常緊張,團隊成員之間的關係非常的微妙,主力程式設計師必須要保持自己的主力地位,對他們來說,必須努力寫出優秀的**,同時,你還需要承擔專案進度的壓力,並提防著其它的程式設計師。將程式掌握在手中是自己安全感的**。壓力如此之大,他們不得不每天工作12個小時以上。程式開發就如同噩夢一樣。

雖然未必所有的團隊都如此不良的開發人文環境,但是或多或少都存在一些不好的環境因素。可以肯定的說,沒有多少人願意在這樣乙個開發環境中工作。這些環境因素都影響了溝通問題的形成。

xp的四大價值觀中的一項就是溝通。xp中的溝通範圍很廣,有開發人員和客戶之間的溝通(我們在需求和故事一章中也提到了溝通問題),有程式設計師和設計師之間的溝通,有程式設計師和測試人員之間的溝通。但是本文的重點集中在開發團隊內部,即,如何改進開發團隊內部的溝通質量。

改進溝通的實踐-結對程式設計

xp方**非常強調營造一種輕鬆的開發氛圍,重視人的價值勝於重視過程。溝通是xp的一大價值觀。xp中大量的實踐是圍繞溝通這個價值觀設計的。例如,使用者故事,現場客戶,**集體所有權等等,但是我們這裡要強調的,是結對程式設計這一實踐。本文中不對結對程式設計做介紹,這方面的資料有很多,沒有必要在這裡浪費筆墨。本文要討論的,是我們如何在專案的角度上考慮結對程式設計。

結對程式設計是一種非常有效的改善溝通的方法。一對程式設計人員是協作過程中最基本的溝通單元。在經典的xp方法中,結對程式設計指的是兩個程式設計師在同一時間、同一機器前,主動的共同的解決統一問題。也許經理們聽到這句話的第乙個反應就是:"這不可能,我花了兩倍的錢,卻只做乙個人的事情!"事實上,結對程式設計運用得當的話,是能夠提高工作效率的,不但體現在進度上,還體現在**質量、以及專案風險上。

個人程式設計

個人程式設計往往會遇到各種各樣的問題。在軟體開發中,編寫**往往只佔構建過程中很小一部分的時間,很多的時間花在除錯**、改進**結構,以及針對需求或是設計的變更修改**。想必很多人都有這樣的經歷,在一些關鍵的技術問題上卡殼,而單人進行研究不但費時費力,而且很容易導致士氣的低落。

在另一些時候,程式設計師往往需要在不同的設計選擇之間進行權衡,而乙個人做出技術決策往往造成內心的不安,這時候就希望能夠有另乙個同伴支援你做出決定。

說**是最嚴謹的工件是一點錯也沒有,任何乙個微小的錯誤,例如缺少分號,都會造成程式執行的錯誤。雖然編譯器能夠檢查大部分的錯誤,可是仍然會有一些深藏其中的,時不時出來搗亂的小錯誤。乙個人的眼睛往往容易錯過一些錯誤,但是兩個人同時進行編碼,這種出錯的概率將會大幅度的下降。

為了修正**缺陷而進行的除錯工作往往會占用大量的人月,如果**缺陷到了測試團隊的手中才被發現,修改缺陷的代價會很高,而如果**缺陷一直持續到客戶手中才被發現,這個代價更是驚人。而通過對開發人員配對,可以減少缺陷的數量。根據一些資料顯示,結對程式設計可以讓缺陷的數量減少15%。相對於在軟體過程後期改正缺陷所付出的高昂代價,採用結對程式設計還是值得的。

以上討論的是個人程式設計中遇到的一些問題,這些是很小的問題,但是都會對開發人員的情緒、進度產生影響。而在乙個團隊環境中,這些問題還會擴大,公升級為團隊問題。

團隊程式設計

雖然軟體組織規定了軟體編碼規範,但是編碼規範不可能約定的過細,過細的編碼規範不具備可操作性。因此不同人寫出的**仍然相差很大,優秀的**和拙劣的**同時存在,每個人都熟悉各自的**,但卻不願意碰別人的**。各種各樣風格的**逐漸產生的**的混亂。這會產生很多問題。首先,軟體組織內部復用的目標難以實現,如果人人都不願意看別人的**,你又如何建立乙個內部復用的框架呢?現存的**無法進行控制,舊專案的維護成本不斷上公升,團隊積累也成為一句空話,

其次,**複審的難度加大。**複審是非常重要的工作,但是**的混亂將會加大**複審的難度,因為複審小組的成員不得不花費時間來了解**的風格,並做出指導。更糟糕的是,**複審小組的成員往往都是軟體組織中的重要成員,他們的時間都代表了高昂的成本。也許沒有人仔細計算過這樣的成本,但是這些成本累積起來,也會是乙個令人吃驚的數字。

再次,專案風險和組織風險都隨之增大。這種在以專案開發為結算單位的軟體開發組織中尤為明顯,因專案開發人員離開而導致專案源**難以維護的情況非常的普遍。對於已經完工的專案而言,這使得專案維護成本上公升,對於尚未完工的專案而言,這會打亂現有的專案進度,導致專案進度的延後。

最後,也是致命的乙個問題,內部溝通難以有效的進行。軟體開發不是乙個單獨的活動。優秀的程式設計師組成的團隊未必就是乙個優秀的團隊。究其原因,大部分都是因為溝通不善造成的原因。組織內部的知識很難形成流動,開發人員之間難以共享知識,而新成員也無法從經驗豐富的老員工那裡學習。

溝通不暢最終會積累形成組織軟體設計平均水平無法提高的問題。軟體設計屬於腦力勞動,但是個人的知識覆蓋程度和思考能力都有限,個人的設計往往都是有缺陷的,而僱傭大師級的開發人員的成本是相當高昂的,並不是所有的軟體組織都能夠像ibm或是微軟那樣僱傭大量的優秀人才。因此面對有限的人力資源(數量和質量兩方面),關鍵的問題就在於如何讓有限的資源發揮最大的作用。

軟體工藝

在參與一家軟體組織的**複審之後,我加入了這一小節的內容。既然是工藝,當然是一些很細微的環節,例如瀏覽集合的寫法、類和方法的命令、注釋的規則等等。這些都屬於程式設計師自身修養的部分,但是很多組織恰恰是在這個環節上存在問題。編碼的隨意性導致了**可理解性的下降,為團隊共享**設定了障礙,沒有人會主動的去看別人的**。在前面我們說**的混亂會導致複審的困難,而**混亂同時產生的另乙個影響,就是軟體組織的平均軟體工藝水平無法提高。雖然每個程式設計師都希望能夠編寫優美的**,但編寫優美**需要一定的毅力和時間,尤其是在專案時間壓力大的時候,**的優美性常常是被忽略的。但是,強制要求**優美性並不容易實現,需要監督的成本,效果也難以令人滿意。

結對程式設計可以從組織結構上緩解這個問題。程式設計師大多是驕傲的,如果有乙個同伴在身邊,那程式設計師可拉不下臉來編寫難看的**。這是很有意思的現象,但是挺有效的。程式設計師通過這種方式,可以相互促進,提高程式設計工藝水平。雖然軟體工藝解決的都是一些微小的問題,但是正是這些問題,最終影響到了軟體的質量。從**管理的角度上來說,管理的基本任務都是這些"小問題"。

過程保證

結對程式設計可以在有效的解決這些問題的同時保證成本最小,這是結對程式設計之所以成為結對程式設計而不是三人程式設計的原因。在硬體裝置的執行過程中,單點故障的最好解決方法是雙機備份。這一思想運用到團隊和過程上就形成了結對程式設計的基礎。我們見過乙個軟體組織實施結對程式設計的初衷是為了保證產品的安全性,在產品的各個重要部件上都至少配備了兩位負責人。一開始他們沒有意識到他們朝著結對程式設計邁出了第一步,後來他們發現這種方法非常的有效,並針對這種方法進行擴充套件,形成了完整的結對程式設計體系。

在傳統的軟體開發中,一般都會在軟體過程中建立幾個檢查點(check point),在這個點上,軟體的各個部分都需要進行檢查,設計是否符合規範,是否滿足需求,程式中是否存在缺陷。但是在每個check point上花費的時間往往是非常可怕的。每個cp上花費的工作包括:

熟悉他人的設計思路和**風格

將不同的系統整合起來

對缺陷進行改進

而結對程式設計的實踐實際上就是將這部分的成本分攤到每乙個人天中去。通過兩兩互配,讓組織中所有的人都能能夠熟悉軟體的各個部分。這個成本在剛開始時確實會比較高,但是隨著對結對程式設計理解的深入,這個成本會慢慢的降低。根據資料顯示,結對程式設計並不是像大多數人想象的那樣,會增加100%成本,這個數字取決於具體的實現形式,但絕對不會到100%。

成功溝通的六要素

溝通在我們的生活 工作中必不可少,成功的溝通有助於事業成功,家庭美滿!下面分享一篇關於溝通的文章,成功溝通六要素 當蜘蛛網連線起來,可以捆住一頭獅子。衣索匹亞諺語 我們所做的每一件事情都是在溝通 溝通的6個要素 每天,我們以許多方式進行溝通。我們交流思想 情感以及我們的期待。我們交流著關於那麼多各自...

成功溝通的六要素

溝通在我們的生活 工作中必不可少,成功的溝通有助於事業成功,家庭美滿!下面分享一篇關於溝通的文章,成功溝通六要素 當蜘蛛網連線起來,可以捆住一頭獅子。衣索匹亞諺語 我們所做的每一件事情都是在溝通 溝通的6個要素 每天,我們以許多方式進行溝通。我們交流思想 情感以及我們的期待。我們交流著關於那麼多各自...

成功溝通的六要素

溝通在我們的生活 工作中必不可少,成功的溝通有助於事業成功,家庭美滿!下面分享一篇關於溝通的文章,成功溝通六要素 當蜘蛛網連線起來,可以捆住一頭獅子。衣索匹亞諺語 我們所做的每一件事情都是在溝通 溝通的6個要素 每天,我們以許多方式進行溝通。我們交流思想 情感以及我們的期待。我們交流著關於那麼多各自...