CMM & 敏捷開發,向左走?向右走?

近幾年來,敏捷開發模式在業界風生水起,SCRUM、XP、測試驅動開發等等,演化出很多方法論。有人說CMM就是過程規範,質量有保證;有人說CMM就是寫一堆無甚用處的文檔;有人說敏捷開發過程靈活,速度快;也有人說敏捷開發搞不好,就是裸奔;有人說CMM和敏捷開發是對立的,理念不同;有人說CMM和敏捷開發是統一的,可以融合。關於軟件開發流程和模式的討論數十年來不曾停止,人類智力活動的複雜性以及人性的多樣化使得軟件開發過程就像天上的雲彩一樣多姿多彩,卻又難於琢磨。

溝通中的隱喻無處不在,軟件開發尤其突出

古時有三個秀才同時進京趕考,路上偶遇一算命活神仙,這三個秀才就問起前程來,活神仙舉起一根手指頭,算是結果,並說是天機不可泄漏,自己理解去。秀才離去後,邊上的人問活神仙,一根手指頭是何意?活神仙笑而不答,一人回答說:這個“一”有很多種理解方式:一個考上了,就是一嘛;二個考上了就是一個沒考上嘛;三個都考上了就是一起都考上了嘛,要是都沒有考上就是一個都沒考上。不知活神仙說的是哪一種?

正如一個手指頭可以代表很多種含義,溝通中的隱喻無處不在,而很多時候我們並不能真正理解其背後的含義。比如在產品開發的過程中,我們的客戶提需求的時候,往往就像上面的活神仙一樣伸出了一個手指頭,然後市場向研發伸出了一個手指頭,開發人員在看了這個手指頭後,根據自己的理解,開發出了“一個手指頭”所代表的需求,而這個需求的目的和範圍往往和客戶的真實需求相去甚遠。有可能客戶要頭牛,你卻給了一隻羊,結果後面不得不再次開發;也有可能客戶要輛自行車,你卻給了一臺奔馳車,結果白白浪費了研發人力。現實生活中的溝通隱喻無處不在,對溝通隱喻的理解依賴於一個團隊共同體驗的多少,改善溝通隱喻的方法就是使用更合理的溝通途徑。

減少溝通隱喻的利器——敏捷開發

CMM注重文檔寫作,適合長時間保留證據,但從溝通效果上來說並不是最佳,要減少溝通中的隱喻,最好的方式就是兩個人頻繁的面對面溝通,敏捷開發正是通過強調溝通的方法來減少溝通隱喻,從而提升對軟件需求變化的響應。


我們來看一下敏捷開發宣言:

我們一直在實踐中探尋更好的軟件開發方法,身體力行的同時也幫助他人。我們建立了如下價值觀:

個體和互動 高於 流程和工具
工作的軟件 高於 詳盡的文檔
客戶合作 高於 合同談判
響應變化 高於 遵循計劃

也就是說,儘管右項有其價值,我們更重視左項的價值。

敏捷開發的本質就是通過良好的溝通減少團隊和客戶、以及團隊成員之間的溝通隱喻,確保大家理解一致,至於溝通的過程記錄、比如文檔等,並不是最重要的,溝通目的最重要,溝通方式可以靈活。

CMM提供可靠性,敏捷開發提供靈活性

如果我們把軟件開發的過程比作談戀愛,那麼CMM就像一個戀愛指南,結婚前要求兩人必須先通過介紹人見面一次,然後軋馬路、逛商場多少小時,一起看電影、喝咖啡幾次,見雙方父母,得到父母同意後纔可以結婚。而敏捷開發的理念是雙方一定要達到相互非常瞭解的程度纔可以結婚,至於戀愛過程,可以由團隊自己決定——當然這種戀愛過程也是有一定方法集的,比如迭代開發、任務牆、每日晨會、結對編程等。

曾經有開發人員聽到敏捷這個概念時說,我們早該敏捷了,CMM要寫這麼多文檔太浪費時間,敏捷開發可以大幅度提高生產率。其實這些都是對CMM和敏捷的誤解,那些認爲一敏捷就可以直接編碼的想法無異於剛剛見到一個姑娘,就衝上去對人家說,我們結婚吧。所以敏捷不等於快,CMM的文檔也不是完全沒有必要,敏捷開發對人員的技能和成熟度要求較高,要讓你們自己決定戀愛方式,自己決定什麼時候結婚,你必須得成熟,知道相互之間瞭解到什麼程度纔可以結婚,並且靈活掌握了溝通的技能。

CMM提供了一個大多數項目都可以實踐成功的路線,但有時候大家會質疑,我都按CMM的要求做了,規範程度也很高,但是爲什麼軟件質量還是不行?就像完全按照戀愛指南操作不能保證婚姻幸福一樣,貌合神離的按照CMM操作也不能保證軟件質量一定就高,有些項目在執行的時候,需求設計文檔都寫了,但是實際對需求和業務理解得並不好。做軟件是要傾注一個團隊的思想、感情和心血的,敷衍了事的看電影、喝咖啡根本無助於雙方的感情進展,反而是在浪費時間和金錢。CMM效果好不好,過程規範性是一方面,執行過程的人才是根本所在。

CMM&敏捷開發,相互借鑑、融合是趨勢

軟件開發是利用人的智慧進行產品生產的過程,是一項創造性的活動,人的因素至關重要,CMM重過程、重證據,但對人的積極性和創造力強調不夠;敏捷開發充分調動了人的主觀能動性,但對團隊的成熟度要求高。CMM對於那些成熟度不高的團隊而言,提供了一條可以讓成功複製的實踐路線,雖然它無法根據每個項目做到量身定做,但是在犧牲一定效率的情況下做到了普遍性的質量可控。敏捷開發爲每個項目提供了足夠的自主權,可以充分保證項目的效率,而且自主管理的方式對團隊士氣也非常有利。CMM和敏捷,都有值得借鑑的地方,磨合不夠成熟的團隊,業務功能複雜、難度高的項目,按照CMM好好的寫寫文檔,對質量是很有幫助的;成熟度高的團隊,或者業務功能邏輯很簡單的項目,使用敏捷開發,減少過程交付,有助於提升軟件開發效率。近期業界對於敏捷和CMM的判斷從最初的狂熱逐步轉向理性,提出了有紀律的敏捷,不論採用CMM還是敏捷,相互借鑑、融合將是未來的發展趨勢。

----------------華麗分割線-----------------

歡迎【訂閱】軟件架構師微信公衆號:ArchitectClub,爲您的軟件架構師之路添磚加瓦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章