軟體業流傳有這麼一句話:
有兩種方式構建軟體設計:一種是把軟體做得很簡單以至於明顯找不到缺陷;另一種是把它做得很複雜以至於找不到明顯的缺陷。
最近接手一個項目。軟體是一個開發工具,類似VS那種的可視化開發。
原來的軟體使用了Interop.SourceSafeTypeLib.dll
用VSS進資料列版本設定,後來眾多因素,版本控制的功能也就去掉了,增加一個FTP功能。
中間接手的項目肯定會有各種各樣的問題,但是FTP這個功能基本是一個全新的且獨立的(自主性非常高,完全可以廢棄曾經做的),不存在閱讀他人代碼的問題。
需求給的很簡單:
FTP上傳,下載功能要求實現伺服器檔案和本地檔案的同步,上傳是將本地檔案同步到伺服器(Commit),下載是將伺服器上檔案同步到本地(Update),上傳和下載時需要進行判斷,當前兩面檔案是否一致,初步計劃以檔案大小或者更新時間為依據。
開發時遇到的一些問題
頁面配置簡直信手拈來:
但是做了兩天,發現需求無法確定軟體功能,而軟體功能究竟要做多少才是夠用
?
由於受Total Commander的影響,對於這種左邊一個目錄,右邊一個目錄感覺很“順眼。但是做起來卻是問題多多。
比如ListView的排序問題,從外部給目前的目錄增加檔案、刪除檔案後的重新整理問題,Unix檔案格式和Windows檔案格式問題,下載、上傳時檔案重名的覆蓋、跳過、重新命名問題……
尤其在做重新命名時,發現遠遠沒有自己想的那麼簡單。
這些功能,要說都是很基本的一些,檔案操作天天都在用,但是做起來遠遠沒有自己想的那麼容易。
功能到底要做多少
一個FTP的上傳、下載功能而已,有那麼難嗎?
是的,不難。
先不說類庫中專門有針對FTP的封裝,相信即使直接使用FTP命令做到“能上傳”、“能下載”都很簡單。但一個軟體光做到“能”還是遠遠不夠的。
我在軟體開發時,不止一次的想:
這個功能做不做?FTP代理(防火牆)做不做? FTP保持串連(發送虛包)做不做? 檔案差異高亮顯示功能做不做? 支援不支援上傳下載目錄? ……
某人曾經說我:你這是自己給自己找需求。
試想在需求如此空泛的情況下,我能不自己給自己找需求嗎?
本來軟體做了一個FTP的上傳功能,對於當前編輯的檔案,選擇菜單中的上傳,自動上傳當前檔案到設定的預設FTP伺服器,如果伺服器上已經有同名檔案,進行提示。
要說這個功能也就夠了,能滿足所謂的“需求”。
功能是不是越多越好
把這個功能做上,即使用不到先放在那裡。 這個是錦上添花的功能,做了更好。 時間充足的情況下,這個功能還是做上。 ……
正如本文開始所說,軟體越複雜,缺陷、問題越多。
功能不是越多越好,功能不是想到了用不到加上無所謂。
每增加一個功能,要考慮對這個影響不影響,對那個影響不影響,要進行多少測試才可以,怎能是隨便就能增加?
要說功能應該在軟體設計前期確定下來,但我經曆的幾個公司,只有粗略的計劃,而沒有詳細的設計,只是說這個軟體“能幹什麼幹什麼”,完全一副行外人的感覺。就好比我告訴你QQ能聊天,IE能瀏覽網頁……
當然,我總是在批評,但是真正讓我開始做還是一樣。
大概去年,我完全負責一個小軟體開發,我一直告訴自己,設計、設計,但是還是軟體開始沒三天就開始進行編碼……
寫在後面
軟體開發真所謂一個複雜而漫長的學習旅途。
我越來越覺得曾經在小公司市老闆做法很對:
項目還沒確定下來,就讓我們先做出一個軟體出來,投標的時候,其他功能介紹自己的軟體有什麼什麼功能,能達到什麼什麼目的,而我們直接給客戶示範。
客戶本來是沒有需求的,但是當你給他軟體的時候他就有需求了。
我的部落格原文地址:軟體功能是不是越多越好
歡迎來我的部落格:nanqi.info