在漫長的生命周期中,有些軟件越做越好,有些軟件越做越差。現在我們要關注的是:如何在一個較長的時期內,把一個軟件越做越好。這就是軟件開發的控制與改進。
影響軟件質量的因素有很多,但本文主要考慮的是控制。為了達到這個目的,我們首先來設定一個理想的環境。在這個環境下,我們假設:
需求控制
需求控制的手段主要是評審和變更控制。需求控制的標準主要有兩個:價值符合度標準和目的符合度標準。價值符合度標準用來衡量需求的目的是否符合客戶和用戶的價值,是否可以直接或間接給用戶帶來益處。目的符合度標準用來判定需求的細節是否符合需求的最終目的。通過這兩個標準可以判斷一個需求的穩定程度,它變化的可能性有多大。需求的穩定程度要記錄下來,做為設計階段的參考。
設計控制
最有效的設計控制手段是封裝。封裝一般性的東西以重用;封裝穩定程度差的需求以適應將來的變化;封裝不太確定的設計決策以便將來可以采用更好的方法。良好的封裝是軟件質量持續改進的基礎?,F實世界本來就存在依賴關系,封裝在某種程度上可能會導致非自然的依賴關系。對依賴關系的控制從反面影響軟件的質量,要注意保持依賴關系是單向的,包之間絕不應該存在雙向的甚至是循環的依賴關系。依賴關系嚴重影響軟件的可修改性。
編碼控制
編碼控制的核心是避免錯誤。最大的錯誤就是違反設計,破壞封裝和引入設計定義之外的依賴關系。要對每一個編碼的單元進行這些方面的檢查,避免“千里之堤,潰于蟻穴”。
實施控制的時機
一般來說,階段性評審是最好的時機;變更控制過程是必須的時機;如果上述兩種時機你沒有把握住的話,周期性評估是最后的時機。
實施改進
改進是軟件越做越好的手段。控制不能讓你的軟件變好,只能讓你的軟件不會變得更壞。但是無論如何,控制是改進的基礎,沒有控制的話你就別想改進。改進的手段包括重構和重做。
需求變化時,極可能帶來設計的變化。這需要對需求變更和原來的設計進行評估,這是重構的好時機。這就是重構的原則,不要在錯誤的基礎上繼續工作。打補丁一樣的開發只會讓軟件越來越糟糕。
有時候重做整個或部分軟件也是必須的。原則上重做也是越早越好,付出的代價也越小。如果你的車油量降到了一半以下,你就永遠也不可能回到起點了。
影響軟件質量的因素有很多,但本文主要考慮的是控制。為了達到這個目的,我們首先來設定一個理想的環境。在這個環境下,我們假設:
- 意外不會發生。我是說災難性事件不會發生,沒有任何意料之外、完全不可控的事情。
- 團隊有一定的資格,相對穩定。
需求控制
需求控制的手段主要是評審和變更控制。需求控制的標準主要有兩個:價值符合度標準和目的符合度標準。價值符合度標準用來衡量需求的目的是否符合客戶和用戶的價值,是否可以直接或間接給用戶帶來益處。目的符合度標準用來判定需求的細節是否符合需求的最終目的。通過這兩個標準可以判斷一個需求的穩定程度,它變化的可能性有多大。需求的穩定程度要記錄下來,做為設計階段的參考。
設計控制
最有效的設計控制手段是封裝。封裝一般性的東西以重用;封裝穩定程度差的需求以適應將來的變化;封裝不太確定的設計決策以便將來可以采用更好的方法。良好的封裝是軟件質量持續改進的基礎?,F實世界本來就存在依賴關系,封裝在某種程度上可能會導致非自然的依賴關系。對依賴關系的控制從反面影響軟件的質量,要注意保持依賴關系是單向的,包之間絕不應該存在雙向的甚至是循環的依賴關系。依賴關系嚴重影響軟件的可修改性。
編碼控制
編碼控制的核心是避免錯誤。最大的錯誤就是違反設計,破壞封裝和引入設計定義之外的依賴關系。要對每一個編碼的單元進行這些方面的檢查,避免“千里之堤,潰于蟻穴”。
實施控制的時機
一般來說,階段性評審是最好的時機;變更控制過程是必須的時機;如果上述兩種時機你沒有把握住的話,周期性評估是最后的時機。
實施改進
改進是軟件越做越好的手段。控制不能讓你的軟件變好,只能讓你的軟件不會變得更壞。但是無論如何,控制是改進的基礎,沒有控制的話你就別想改進。改進的手段包括重構和重做。
需求變化時,極可能帶來設計的變化。這需要對需求變更和原來的設計進行評估,這是重構的好時機。這就是重構的原則,不要在錯誤的基礎上繼續工作。打補丁一樣的開發只會讓軟件越來越糟糕。
有時候重做整個或部分軟件也是必須的。原則上重做也是越早越好,付出的代價也越小。如果你的車油量降到了一半以下,你就永遠也不可能回到起點了。