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