程式的成長過程

來源:互聯網
上載者:User

程式如何才叫做好了

原創文章,如有轉載,請註明出處:http://blog.csdn.net/yihui823/article/details/6737757

我們總是在加班,在加班。總是在提交測試後發現自己的程式是那麼多BUG,總是在交貨前一天發現好多問題。在領導問我們,程式做的怎麼樣的時候,我們是怎麼回答的?做好了。是的,做好了。可是結果呢。

從程式員的角度,程式做好了的定義,和測試人員的角度定義的“做好了”,還是有很大差距了。那麼,我們的程式,到底如何才能算“做好了”呢?我覺得,這裡是有一個流程的:

1        開發人員做好了。

這個階段,只是程式員自己把程式調通了。一般的項目,都會有架構,都會有與其他系統的介面,都會有一些硬體模擬器。開發人員只是在自己的一小塊功能裡實現好了。例如,A程式員只是開發一個登入功能,B程式員開發的只是對話功能。那麼B程式員說的做好了,一定是類比登入成功的情況,或者是他的程式不需要登入就能用,或者是他已經把登入資訊寫死了,或者其他的什麼。

這個階段的代碼,精簡有效,基本沒什麼錯誤處理。

2        小組聯調。

聯調是一個很重要的步驟。任何多人開發的工程,聯調的時候都會出這樣那樣的問題。聯調通過,那麼系統的功能才算是流暢了,業務的流程才算是可以走通了。例如,B程式員開發的對話功能,一定是登入過後才能使用。、

在聯調的時候,需要各個程式員耐心細緻的找問題。這個階段,最考驗團隊合作能力。一個到處推卸責任的人,會影響大家計程車氣;到處都是推卸責任的人,則這個團隊會陷入扯皮的境地。

這個階段的代碼,一不小心會就陷入高耦合的杯具中。所以要及時調整代碼架構。

3        與硬體環境調試。

系統多多少少都會與外界有介面,一些是與硬體的介面,一些是與環境的介面。例如登入需要指紋驗證,那麼剛開始調試的時候,可能只是類比了一個指紋驗證裝置,我們按照協議發送一定格式的資料給一個軟體模擬器,然後軟體模擬器再返回一個結果。但是一旦真正把裝置接入到程式,總會出現各種各樣的問額。

這個階段,是項目攻堅階段,需要有精兵強將,人海戰術是不行的。

這個階段的代碼,開始加入許多介面。一定要注意保持良好架構,不要讓程式的耦合度越來越高。

4        可以展示

與硬體環境調試成功後,這個程式就可以拿去展示了。但是在展示前的預示範過程中,會發現各種異常情況,各種沒考慮到的情況。展示可能是給領導看,可能是放在展覽會上,也可能是給客戶示範。不管怎樣,展示之前是需要示範的,那麼展示的內容是可控的。這個時候,可以根據展示的具體情況,做一些應急措施去解決棘手的問題。例如,對話的時候,如果有人發送了”stop”字樣,程式就會退出。這是個BUG,但是不是必須修改的,因為展示的時候記住不要輸入”stop”就行了。

這個版本的代碼,應該是充滿了TODO,到處都是寫死和注釋掉的代碼。

5        測試人員測試。

用來展示的版本,只能作為主線版本的一個分支,大量充斥了臨時方案,這個對系統的進化是有害的。這就像周芷若練九陰真經,以速成的方式,總是會有問題的。主線版本裡,還是需要提交測試人員,經過精心安排的測試case,把程式的各個功能,各個路徑都驗證好。

測試是個反覆的過程,需要幾輪的沉澱。測試出的BUG,也是以一個曲線方式消減下來。也就是說,每天發現的BUG數,是慢慢降下來的過程。你無法用一輪測試就找出所有的問題,有些問題是有相互依賴的,A問題不解決,B問題就根本發現不了。

幾輪測試之後,系統趨於穩定,各個功能都能正常工作,各個商務程序都能走通。這樣系統就算是可以使用了。

經過測試的代碼,有了大量的錯誤處理和容錯機制。一般來說,之前寫的if,在這個階段都會加上寫else之類的。

6        客戶現場調通。

永遠不要指望,測試完美的程式能在客戶現場一遍就安裝成功。客戶現場與開發環境總是有這樣那樣的不同。把我們自認為測試完好的系統,在客戶現場部署、安裝,這是一個曲折的過程。你可能發現,客戶的網路根本不足以承受我們系統的流量,客戶的伺服器不足以運行我們的系統,還有其他各式各樣的問題。

客戶現場調通,需要有很強的交流溝通能力,因為有時候客戶答應做一點點改動,就能節省我們幾個通宵。

代碼開始有壞味道。為了趕快調通,達到客戶想要的結果,代碼開始不遵守編碼規範。架構開始傾斜。所以這個時候一定要注意保持清醒的頭腦,不能越改越亂。

7        客戶驗收

客戶現場調通之後,就交付客戶使用了。不要指望交付使用就大功告成,就可以催著客戶驗收了。客戶驗收之前,在客戶的使用過程中,你會發現我們的系統是多麼脆弱。為什麼客戶會這麼操作,為什麼客戶不按照我們的提示來,為什麼客戶會用這麼不可思議的方式折磨我們的系統?不要問為什麼,是他們花錢讓我們做東西,那麼我們就得讓人家用的舒服,不是嗎?

這裡同樣需要注意,不能完全按照客戶說的來做,我們要挖掘客戶深層次的需求,有時候我們可以給點提議,稍微改動一點他們的想法,可以節省我們很多的工作。例如,客戶需要在對話的過程中,加入一些可以自行配置的表徵圖。我們就需要跟客戶仔細溝通,是否真的需要做到“自行配置”,能不能我們在程式裡給他們配好一些表徵圖,然後告訴他們配置表徵圖的方式。這裡的差別是,“自行配置”就需要做一個配置頁面,而手工配置可能就是告訴他們如何改一個xml檔案而已。

這個時候,看上去系統已經穩定了,但是代碼已經開始走向衰減。除非下定決心重構,否則代碼開始慢慢的臃腫,開始到處都是補丁,開始越改越難改。但是重構一定要在迴歸測試的基礎上,否則很可能帶來新的問題,讓客戶咆哮。

8        成為產品

以上說的,是針對一個客戶的情況。很多時候,跟客戶搞好關係,會讓你減少很多工作量。並且,客戶的需求是單一的,可控的。但是作為產品,那就沒這麼好的事情了。

產品是針對大量客戶的情況。單一客戶,我們還可以引導客戶的使用習慣,但是大量客戶的話,只能產品去湊合客戶的習慣。當然,擁有大量粘性高的使用者,可以去引導客戶的習慣,例如QQ和360。但是成為這種產品之前,最好還是老老實實的去迎合各種客戶的使用習慣。

並且,客戶的操作會更讓你崩潰。知道手機出廠前會做一個什麼測試嗎?就是隨機亂操作上萬次,要保證手機不會死機。這就是說,你根本無法預測客戶會怎麼操作的。不是產品的系統,你可以跟你的客戶說,你這麼操作是不對的,我有操作手冊在此。但是產品呢?如果約束太多,人家就不用你的產品了啊。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.