天天看點

《軟體工藝》—第1章“有組織的、可計量的”軟體開發過程現實嗎?

本節書摘來自異步社群《軟體工藝》一書中的第1章“有組織的、可計量的”軟體開發過程現實嗎?,作者【美】pete mcbreen,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

“有組織的、可計量的”軟體開發過程現實嗎?

軟體工藝

對于軟體開發來說,所謂“确定的、可重複的過程”真的能夠達到嗎?scrum軟體開發過程1的創始人曾經這樣說道:

如果某個過程能夠完全确定下來(即能夠了解過程所涉及的所有細節,進而将其設計為可以重複地多次運作,并且完全能夠預測其結果),那麼該過程就被稱為“确定過程”。從理論上來說,一切确定的過程都可以被自動完成。另一方面,如果人們并未了解某個過程中的所有細節,隻是大緻地知道在某些初始條件下、通過某些調節和控制就能得到想要的結果,這樣的過程就被稱為“經驗過程”。2

按照這個定義,軟體開發不是一個确定過程。實際上,我們所能希望獲得的最好結果也就隻是一個經驗過程而已。之是以這樣說,是因為所有的軟體需求都來自于人。需求的擷取無法自動完成,開發者必須和使用者彼此溝通才可能了解使用者真正的需求。同樣,使用者也必須在與開發者的交流中了解項目中存在的技術局限性和克服這些局限所需要的開銷,進而不斷調整自己要求的功能,使軟體項目的成本效益達到最佳。

在軟體開發者了解使用者的需求之後,下一個問題就是:如何将這些需求記諸文檔。在一個确定的開發過程中,我們應該從一開始就整理出完整而明确的需求。可是,在一般情況下,要想做到這一點難于登天。gause和weinberg曾經非常精辟地闡釋過這個問題3:對于一個最簡單的句子,“瑪麗有一隻小羊”,根據語句的重音不同,就可能有截然不同的含義。

瑪麗有一隻小羊。(是瑪麗的羊,而不是約翰的。)

瑪麗有一隻小羊。(她的确有這隻羊,不是騙人的。)4

瑪麗有一隻小羊。(她隻有一隻羊,沒有更多的。)

瑪麗有一隻小羊。(這隻羊真小,小得令人吃驚。)

瑪麗有一隻小羊。(她擁有的是一隻羊,而不是火雞。)

從這個例子中,我們就可以清楚地看到:對于任何一種自然語言,實際上根本無法做到精确無誤的地步。需求擷取要求開發者與使用者保持緊密的聯系,即使在需求文檔成型之後,開發者也需要不斷與使用者交流,因為誰都無法保證需求文檔中所寫的内容不會有多種不同的解釋。由于自然語言與生俱來的不精确性,你不可能喜歡一個确定而僵死的需求擷取過程。

我們當然可以将軟體開發中的某些部分自動化,不是嗎?

當然,我們可以。但隻有确定的過程才能被自動化,而那些需要大量人際交流的部分則無法被自動化。現在的确有很多這樣的工具存在,它們将軟體開發中的一些小規模的、精确定義的行為自動化了,它們對于提高軟體開發的效率大有裨益。例如,配置管理工具和建構工具能夠自動地将進階程式設計語言的代碼轉換成相應的低級語言代碼甚至機器代碼。我們能夠實作這樣的自動化工具,是因為我們可以精确地定義這個轉換的過程。

但是,我們必須記住:在軟體開發中,絕大部分可以被自動化的工作都已經被自動化了。也就是說,我們已經擁有了軟體開發所需要的絕大多數工具——唯一缺少的就是使用現有工具的技巧和能力。仍然以建構工具為例:自動化的建構過程可以在無人值守的情況下自動運作,并将建構過程中的失敗資訊通過電子郵件通知關鍵開發者,進而極大地減少建構的工作量。可是,我所觀察過的大多數商用軟體開發項目都沒有這樣的自動化建構過程,是以,擁有這一能力的項目組就占了很大的優勢。而且,自動化建構還是項目的一張安全網:每當項目的核心源碼被修改時,整個應用程式就會被重新建構,随後自動運作回歸測試,以確定這次修改沒有造成任何破壞。如果一個項目沒有這樣的安全網,我簡直無法想象如何在其中工作。

當我們将軟體開發中一個又一個的部分自動化以後,我們卻發現:軟體開發仍然是一團亂麻,其中的複雜性和困難性并沒有消失,隻是換了個形式而已。隻有對那些能夠完全了解的問題,我們才能用系統化的方式來解決,是以軟體工程就将我們的注意力集中到了軟體開發中機械的部分,進而忽視其他非機械的部分。是以,盡管我們有了進階語言的編譯器和解釋器,盡管我們有了各種各樣的新技術,實際上仍然沒有任何辦法幫助我們設計使用者真正需要的東西,而且能夠幫助我們找出使用者的真實需求的工具或技術更是少之又少。

3 don gause和gerald weinberg,《在設計之前,先了解需求品質》(undersanding requirements quality before design),dorset house,1989。

4譯注:此處原文是“mary had a little lamb”,表示的含義是“瑪麗現在已經不再擁有這隻小羊”。為了友善讀者了解,譯者根據漢語的語言習慣做了調整。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

繼續閱讀