《精益软件度量——实践者的观察与思考》—第1章1.1节精益软件开发的度量体系...
本節書摘來自異步社區《精益軟件度量——實踐者的觀察與思考》一書中的第1章1.1節精益軟件開發的度量體系,作者張松,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。
第1章 度量謎題
精益軟件度量——實踐者的觀察與思考
“我們所能擁有的最美好的經歷是感受到神秘,它是觸發所有真正藝術和科學起源的基本情感。”
艾爾伯特·愛因斯坦(1879—1955)
按照IEEE的定義,“軟件工程是將系統化、規則,以及可控的體系方法,應用于軟件設計、開發、操作和維護;換言之,即工程理念在軟件中的貫徹。”1看上去很美,不是嗎?當我們看到一個又一個軟件開發組織,特別是大型的組織,特別是擁有輝煌歷史的組織,把過程可控作為主要的管理目標時,一次又一次地驚訝于人們是如此容易被誤導,而我自己在開發管理的日常工作中,軟件工程那些條條框框所帶來的虛假的安全感,也曾使我一次又一次地迷失于其中。反思之后,我現在不得不重新審視軟件開發的目標和軟件工程方法的目的。
可控應該只是我們在軟件開發管理中期望優化的屬性之一,而不是全部。退一步講,奧運會的口號或許比IEEE的定義更好地詮釋了我們的目標——“更快,更高,更強”,還有一句俗話——“多、快、好、省”,我感覺也比IEEE的那句話更全面。但是為什么人們的注意力都放在了可控性上呢?雖然可控的生產過程可以幫助管理人員更有針對性地優化和改進。不過在向“多、快、好、省”的方向前進的過程中,管理層和項目管理人員的避險本能,在相當程度上扭曲了我們的注意力,有意無意地遺失了原始的目標。
風險源于不確定性。然而軟件之所以“軟”,就是由其生命周期中所面對的變化和不確定所決定的;從另一個角度講,不確定性又是與創新如影隨行。跟其他行業相比,軟件領域的創新之活躍也不能不說與此密切相關,反過來說,那些非常確定、穩定的東西或許就不應該用軟件來實現,既然要開發軟件,就要正視其固有的變化性,利用其變化性取得優勢。
Roger Martin在他的著作《The Design of Business: Why Design Thinking is the Next Competitive Advantage》把知識的演進用一個知識漏斗(Knowledge Funnel)生動形象地描述了出來。這個漏斗總是從一個問題開始,需要經過謎題(Mystery)、啟發(Heuristic)和算法(Algorithm)3個階段2 ,如圖1-1所示。
Roger Martin認為,復雜問題的解決總是從謎題階段開始。探索一個神秘的問題,可能會有無限種可能的方式。以我們的交通工具為例,人類一直在孜孜以求地獲取更快更好的交通工具。那么如果說“更好的交通工具”是一個謎題,經過了幾千年的摸索,在工業革命之前,交通工具這個謎題曾經已經被降解成一系列的啟發式的問題。其中的兩個可能是:更好的馬車和更好的帆船。相對于謎題,啟發式問題是將探索的領域縮小到一個更加可控、可管理的大小。當有了這兩個啟發式的問題之后,人們就傾向于不再去考慮“更好的交通工具”這么一個沒邊兒的問題,目標就變成了“如何制作更精致的馬車,讓馬車更輕便、更結實”,“如何制作更大的帆船和有效的風帆,讓帆船載貨量更大,速度更快”。問題的解決聚焦在了產品的升級和演進,這兩個問題又被進一步降解成了一系列的算法化問題。算法化的問題指的是已經有固定的公式、模式來解決的問題。對于馬車和帆船的例子來講,馬車和帆船的制作就是一個算法化的問題,經過訓練的工匠能夠依據固定的流程和工藝,順利地重復制作多個產品。
不過世界并沒有就此止步。到了工業革命之后,伴隨著技術約束的突破,“更好的馬車”和“更好的帆船”,這兩個啟發性的問題已經不再合理。我們需要重新回到“更好的交通工具”這個命題,將其降解成了另外一系列問題,“更好的汽車”、“更好的輪船”、“更好的飛機”……而那些醉心于舊的啟發性和算法性問題的人們或是行業,逐漸被時代所淘汰。我們可以看到,隨著時間的變化、場景的轉換(陸地、海洋,還有天空、太空)、科技的突破,我們要解決的基本謎題可能會降解出不同的啟發式問題。
回到軟件開發這個謎題上來,Gerald M. Weinberg在他的《質量·軟件·管理—系統思路》中寫到“雖然人類的大腦或多或少存在些許的差別,然而都有一定的限制;隨著程序規模的不斷增加,軟件的復雜度也將至少以平方的速度增加。”3Weinberg稱其為自然軟件動力學。Weinberg認為“軟件工程學的歷史過程,也就是人類試圖通過建立簡化方法,降低隨著問題規模的擴大而提高的問題復雜度,從而不斷對規模/復雜度動力提出挑戰的歷史過程。如果沒有這種追求,也就不需要軟件工程專業了。”
軟件開發這個謎題,就像其他復雜而又會隨著時間和場景不斷轉移重心的謎題一樣,我們似乎也有無數種的方式來做到一定程度的簡化,在某種程度上或是在某個方面上解決了這個問題。IEEE對軟件工程的定義,“系統化、規則,并且可控”就是對這個謎題在一個維度(可控性)上簡化而得出的一個啟發式問題。
Roger在書中提出了兩種思考問題的方式:分析性思維和啟發性思維4。分析性思維的驅動力是標準化,消除個體的判斷所帶來的偏見和差異,而啟發性思維的驅動力是發現和創新。這兩種思路在具體實現上體現出的區別在于,分析性思維傾向于可靠性,而啟發性思維傾向于有效性。
IEEE的這個定義,因為并不直接關注更好地開發軟件本身,明顯帶著可靠性的傾向,對于有效性則顯得缺乏應有的關注。我猜測這應該是1965年到1985年軟件危機的產物。那個時代,計算機行業剛剛擺脫萌芽期,硬件能力大幅提升,人們開始在各種領域嘗試用計算機軟件來解決愈來愈復雜的問題。大型軟件項目紛紛出現,可又紛紛失敗,軟件開發就像怪獸,失去了控制,主要的表現是大幅地超時和超預算,又或是軟件的質量極不靠譜。為了解決這個謎題,可靠性似乎是理所當然的,也是最迫切的切入點。
度量體系給人的直觀感受就是可以提高開發過程和開發結果的可靠性,但可靠和成功,這兩者真的是等價的嗎?度量本身似乎就是一個分析性思維的產物,但這并不妨礙我們回歸問題本身,同時利用分析性和啟發性思維,判斷到底哪些要素跟“成功”更相關,并嘗試用一個度量體系來幫助我們在動蕩的環境中捕捉和把控這些要素。
1The Institute of Electrical and Electronics Ehgineers, 1990。
2 Martin, 2009
3杰拉爾德·溫伯格, 2004, 頁 169
4Martin, 2009
本文僅用于學習和交流目的,不代表異步社區觀點。非商業轉載請注明作譯者、出處,并保留本文的原始鏈接。
1.1 精益軟件開發的度量體系
精益軟件度量——實踐者的觀察與思考
度量本身不是目的,是手段。我問過很多人,你們這兒度量信息是在什么地方用呀?我經常聽到的是,“現在不是都要用數字說話嘛,咱得搞點兒量化管理”,“這玩意兒(數字)就是給上面看看,沒啥用”,“沒這些數字,我怎么知道下面的人干得咋樣?”我們發現:
在很多情況下,數據的生產者不是數據的使用者;
數據的生產者沒什么動力去分辨信息的價值,也不關心信息準確與否;
數據的生產者關心的是數據是否會對自己帶來懲罰或是收益,而不是數據跟軟件開發的關系;
在很多管理者的認識當中,度量的主要目的,是確保事情在掌控之中,為的是獲得可靠性和安全感;
相對于“更高效的開發軟件”這樣模糊的目標而言,很多一線人員對度量指標的使用其實更加一個簡單、清晰、樸實——一旦開發出了問題,一個自我保護的理由就是“我已經滿足了度量的要求了呀?”
軟件項目中可能出現各種各樣的沖突,權衡并把握住進度、質量和人員能力提升等各種不同目標,總是要消耗掉項目管理人員很多的腦細胞。可是不管多么努力,做出的決定仍然不是得罪了這個,就是讓那一個不爽。 度量體系中的指標通常是那些復雜、模糊的目標經過分解和簡化的結果。一套度量體系被實施之后,很多人都有一種光明初現的感覺,好像做決定變得有章可循,容易多了。出于趨利避害的考慮,人們經常會把目光聚焦在片面滿足相對明確的指標上,回避了對綜合的項目目標和復雜上下文的思考和權衡。
為了規避指標替代目標的陷阱,我們希望在設計和運營度量體系的時候,將各類相關人員都融入到一個共同的理念之下。
精益的一個核心理念是持續改進,豐田澳大利亞技術中心(Toyota Technical Center – Australia)對持續改進的詮釋是:“我們從來不認為當前的成功是我們最終的成就。我們從來不會滿足于當前所處的位置,而是會一直竭盡全力,尋求最佳的思路持續改善我們的工作:我們熱衷于創造更好的替代方案,質疑已有的成果,尋求新的成功定義”1。挺復雜的一句話,咱老祖宗在3000多年前,只用了9個字就把這事兒說清楚了。商湯王,也就是商朝的開國君主,在他自己的洗澡盆兒上刻了一行字以自勉:“茍日新,日日新,又日新”2,就是提醒自己:棄舊圖新是每天都要干的事兒。
如圖1-2所示,在理念上,我們希望把度量的重心從“控制”轉向“改進”。雖然控制和改進都是對系統采取的干預性措施,“控制”給人造成的心理暗示是圍繞著靜態目標而行動;而“改進”則將動態的目標植入人們的思維模式。這有助于我們在識別軟件開發的成功路徑時,由可靠性轉向一個更廣泛的視角。
在這樣的理念指導下,度量體系的作用就是提供信息來幫我們知道現在哪里,距離目標到底有多遠,我們是否在向目標前進,進展的程度如何。因此簡單地說,度量是通過對目標位置、相對位置、移動方向的描述,幫助組織達成其業務目標。
我們把度量體系的實現分成3個不同的層次 ——理念、設計、應用,如圖1-3所示。
在后續的第2、3、4章,我們會從組織目標、軟件產品開發過程中的決策場景,以及指標體系框架3方面來分析度量體系的設計。第5章至第12章會系統地討論幾個主要的度量維度。而在最后的3章里,將會嘗試驗證導入和推廣實施兩個階段,討論如何在一個組織內建立起一個有效、有價值的度量機制。
不過在那之前,我們需要進一步就理念上澄清一下,本書中的度量是什么?不是什么?
《大學》第三章:“湯之《盤銘》曰:‘茍日新,日日新,又日新。’”
本文僅用于學習和交流目的,不代表異步社區觀點。非商業轉載請注明作譯者、出處,并保留本文的原始鏈接。
總結
以上是生活随笔為你收集整理的《精益软件度量——实践者的观察与思考》—第1章1.1节精益软件开发的度量体系...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Unity 3.x游戏开发实例》——2
- 下一篇: 《Unity虚拟现实开发实战》——第1章