軟體開發出來後,無非就兩大團體來接觸他。一個是使用者,一個是開發人員。所以在設計軟體的時候這兩個團體要同時考慮,從各個角度來權衡每個設計點的偏重點。
開發的軟體是給使用者操作的,使用者每天都要與之打交道,所以介面的美觀性,功能的實用性,操作的簡易性,資料傳遞的速度以及比較貼近的商務邏輯對於使用者來講都是很重要的。
而對於開發人員來說,軟體開發完成後並不是就不用管了,軟體的後期維護也是一項很重要,很繁瑣的事情。使用者會隨著時間的推移,不斷的改變著他的需求,要你對軟體進行改進。當然,你會把一些需求擋回去,把一些需求通過現有的條件變種方式來實現,但總有一些你需要增加或修改。這時,你的軟體在開始設計的時候是不是夠靈活,在你修改的時候便知道了。
如果維護的軟體讓你頭疼,寧願重新開發也不願意去修改,那就說明這個軟體設計的很不成功。
要想讓軟體不發生腐化,使以後的維護工作更加容易,那麼設計軟體的時候應該盡量避免以下幾個問題:
1.僵化性(Rigidity):設計難以改變
當使用者提出一個新的需求時,需要對程式的一些地方進行改動,可當你開啟代碼,發現雖然是添加一個很小的功能,卻牽涉到了很多地方。這樣單一的改動導致有依賴關係的模組中的連鎖改動,那麼設計就是僵化的。沒人願意為了一小塊玉石而去移掉整座山,愚公移山的精神在這裡不值得發揚。
2.脆弱性(Fragility):設計易於遭到破壞
使用者想要添加的功能改完了,然後重新進行測試,這時卻發現跟這個新加功能沒有概念性關聯的其他功能發生了錯誤。而去修正這些問題又會引出更多的問題。就像在玻璃上DingTalk子--越釘越碎。
3.牢固性(Immobility):設計難以重用
同類系統,總是會有許多相似的地方,甚至有些地方完全相同。當作完一個項目後,又接了一個項目,這兩個項目功能方面很相似,只是給不同的客戶用,商務邏輯上稍有不同,但是在人員管理和許可權管理上基本一致。這時你想把之前的項目中人員管理和許可權管理這部分拷過來改改就用,卻發現改動的工作量相當巨大,還不如重新作,這就說明之前的項目在設計時重用效能太差了。
4.粘滯性(Viscosity):難以做正確的事情
改動一個功能時,往往會有多種改動的方法。其中一些方法會保持初始的設計,另外一些方法會破壞初始的設計。按照常理來說,一般會選擇保持初始設計的方法,可是你卻發現那些保持設計的方法的改動比那些破壞設計方法的改動更難以對付,這就表明初始設計具有高粘滯性。
5.不必要的複雜性(Needless Complexity):過分設計
不是說越複雜的軟體就是好軟體,現在的電器還不是功能越多,越容易壞嗎!軟體也是一樣,設計的越複雜,邏輯就會很繁雜,開發起來也會很費時間。本來一個類型列表頁面只有三個欄位,最多不過10條記錄,你非要在頁面上加上一個翻頁控制項,這不是畫蛇添足嗎!
6.不必要的重複(Needless Repetition):濫用滑鼠(亂拷貝)
拷貝和粘貼確實是能提高開發效率,但是有時會造成過分的濫用。系統中有一個計算總金額的公式過程,在很多地方要用到,於是每個開發人員都
拷貝粘貼到自己的程式裡,過了一段時間,國家下政策了,調息了,計算公式要改動,這下大家傻眼了,滿“項目”找這個公式過程。費時費力。
7.晦澀性(Opacity):混亂的表達
開發的模組難以讓別人理解。一個軟體有時要經過很多開發人員編寫,如果模組的命名和編程的格式都按照自己的方式來進行開發,時間一久,愈是往後接手的開發人員就越痛苦,開啟代碼,根據裡面的命名都不知道這段代碼是幹什麼用的,總是要花很多時間先來理解代碼。