軟件業流傳有這么一句話:
有兩種方式構建軟件設計:一種是把軟件做得很簡單以至於明顯找不到缺陷;另一種是把它做得很復雜以至於找不到明顯的缺陷。
最近接手一個項目。軟件是一個開發工具,類似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