軟件設計-不是軟件開發的萬能靈丹妙藥!

一年前,出去和同事一塊兒去Woodbine打羽毛球,我們不經意間說起了軟件設計問題。

對話:

同事A:咱們買的印度公司的那套LIB庫怎麼樣?

     我:整體的架構設計是非常好的,雖然能夠明顯看出是融合了幾個架構師的設計思路;但是,一批低水平的程序員在實現的時候太過糟糕,代碼醜陋切危機四伏。系統經常隨機的crash,並且很難找到真正的問題在哪裏!

同事A: 好的軟件設計要保證能夠更容易定位bug

     :是的。

同事A:所以說,有了bug,如果很難定位,那就是軟件設計出的問題!

     :不對!不能這麼說;有很多case不是軟件設計的問題,是軟件實現帶來的問題。

同事A:我不同意你的說法。

     :軟件設計只能保證架構和基本流程的穩定性,一旦在實現環節出現問題有時候是很難歸咎到設計上。舉個例子:有些程序員在寫程序的時候不初始化變量,在有些場合會出現隨機數據,會導致不可預測的結果,並且,有時候因爲項目規模大的關係,這類錯誤很難被發現。

同事A:我還是不太同意,有沒有更具體詳細的例子。或者,你看,這個LIB中有好多模塊,去掉哪個模塊,系統運行穩定後,就可以確定是哪個模塊的問題。

     :這個邏輯本身就是錯誤的!不能因爲新加入模塊引起crash就把責任歸咎於該模塊!

同事A: why?

     :通常,真實的軟件系統是比較複雜的,譬如:系統使用了多線程,新加入了一個模塊,系統crash;崩潰的原因有可能不是因爲新加入的模塊,因爲,可能原來的系統就存在問題,只不過沒有特定的時序和條件,無法使這個錯誤出現,一旦加入了新的模塊,改變了原有的時序和條件,結果就有可能把原來系統的問題暴露出來。

     :再舉個例子,假設原來系統有個模塊有內存越界現象(事先未知); 新加入一個模塊,系統崩潰。原因就是,越界訪問正好影響到了新加入的模塊,破壞了它正常的地址,導致執行該模塊出錯,但是,問題不在這個新加入模塊本身;如果去掉這個新模塊,系統還是運行流暢!所以,這是實現上的問題,而不是軟件設計上的問題;也就是說系統總要被實現,再好的設計都依賴於程序員的code實現;並且,通常沒有完美的實現,所以程序總是有bug,並且,有些並不是軟件設計的問題;軟件設計不是軟件開發的萬能靈丹妙藥!

同事A:明白了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章