對軟件開發的思考

 
                                   對軟件開發的思考
     在開始這篇文章之前,我先給出構思這篇文章的人性假設。假設是人思考的出發點,人的思考活動往往圍繞着一定的假設展開的。
     人性假設:
P1:人總是有惰性的。
P2:人總是按照自己的習慣做事情,對陌生事物具有一定的牴觸。
(一)   界面程序
界面程序包括:桌面程序,web程序。對於桌面程序,用戶點擊桌面上的應用程序圖標,就可以打開該程序。而對於web程序,用戶得先打開瀏覽器、輸入URL。
而且用戶在暫停使用軟件的時候,桌面程序可以縮小給用戶的視覺。
這只是一些桌面程序和web程序之間的差異。這些差異是否會影響用戶對程序的選擇傾向?
 
但是從開發上,視覺效果良好的桌面程序比同等效果的web程序開發代價大。無論用VC++,還是利用C++BUILDER,開發視覺效果較好的程序不是一件很容易的事情。
從我的工作過程中,我發覺利用VC++、C++BUILDER開發出美觀界面程序,是具有一定的難度。因此在開發過程中,有些難於實現的,我總是改變其實現方式,但是這種改變不是隨意的改變,而是講究控件佈局的清晰性:樸實、簡潔,而且這種改變不會給用戶帶來使用上的麻煩。
 
如果一款軟件,既實用,又簡潔、樸實、方便,那麼應該是一款成功的軟件。因爲用戶使用該款軟件的目的是爲了提高其工作效率,又不想太麻煩。
 
相反有些軟件爲了界面上的花哨,但是運行速度挑戰用戶的耐性。我覺得這樣的軟件遲早會讓用戶抱怨的。比如SOHO、Yahoo、163、MOP等等。這些網站,加載速度比較慢,使用IE瀏覽器打開,經常遇到IE崩潰的現象。不過這些網站是門戶網站,是爲了吸引用戶的眼球,所以添加那些吸引眼球的因素。
 
但是如果用戶在工作過程中,遇到類似的問題,那麼用戶肯定會抱怨。工作性質的軟件跟門戶網站是有區別的。
 
那麼怎樣才能開發出一款成功的軟件呢?
軟件設計是考慮人的因素,要研究人的使用習慣。
人在使用軟件的過程中,會逐漸養成一些使用習慣。對於陌生的軟件,他或多或少會牴觸。
因此在開發的前期,研究用戶使用的軟件,可以爲開發帶來好處。研究用戶想要什麼,是成功開發軟件的基礎。
    通過實際的研究,也可以避免設計者進行自以爲是的設計——一種理想式、沒有驗證的設計,很多人往往從主觀去臆測用戶的內心。
   在我經歷過的項目中,我遇到的問題:
1:過分模仿同類軟件。這是在第一家公司遇到的問題。模仿有個好處,可以借鑑同類的產品,但是過分的模範,會喪失自己的特性。那家公司開發一款類似QQ的IM軟件,本來的目標是開發所謂第二代IM軟件,但是在開發的過程中,模仿QQ、LAWALAWA之類的軟件,導致使自己的產品變得臃腫。
 那時我一直在分析,如果用戶對你的軟件特性很熟悉,還會被你的軟件吸引嗎?
 爲什麼UC一直競爭不過QQ?我覺得跟用戶選擇軟件的社會性有關。比如A的一些朋友都用QQ聊天,如果A想跟他們聊天,那麼只能選擇QQ。因爲他不大可能要求他的朋友都選擇UC,況且UC跟QQ的功能大同小異。在UC出現的時候,QQ的用戶已經具有一定的規模了。
2:操作過於負責。那是在第二家公司的時候,這家公司是開發一款面向建築行業的軟件,結果開發的功能極其負責,權限驗證負責。用戶在使用的過程中,操作繁瑣,而且有些權限驗證相互矛盾。
   這可能與是否有完整的需求設計有關?
3:寫設計文檔的人,想象力太豐富。這是在現在的公司,準備開發一款用戶管理軟件UI程序。那些做界面規劃的人,發揮極大的想象力,規劃出極花哨的界面,給開發人員帶來很大的沮喪感。結果在開發過程中,返工很多。
 
從那些遇到過的問題,我總是在思考有效的開發,嘗試找到一些可行的想法,但是由於個人經歷的侷限,這些想法還沒被驗證,沒有得到驗證的想法不是方法。以下是我的想法:
1:定位待開發的軟件。軟件之所以被開發,是因爲要解決特定的問題,這也是該軟件的本性。如果沒有定位好自己的軟件本性,往往在開發過程中,感覺相似產品的既有功能好,陷入過分的模仿。
2:初步定義軟件的操作集合,再根據用戶的習慣,簡化操作集合。
3:結合開發實力,把程序員當作人,而不是神。合理規劃軟件的界面。如果沒有實力開發出很漂亮的界面,那麼就考慮軟件佈局的清晰性、簡潔度,使用的友好性。
4:功能實用,運行穩定。
 
 
(二)   軟件的狀態序列性
什麼是軟件的狀態序列性呢?在分析這個問題之前,我先分析人的工作流程。
人的一般工作流程:等待任務——>完成任務。在這簡單的流程,蘊藏着序列的操作。
其實每個動作是由一序列的基本操作組合成的,可以表示成一序列的狀態遷移過程。狀態之間有着前續、後繼關係的關係,姑且將這個性質解釋動作的狀態序列性。
其實,人在使用軟件的過程也是蘊含着序列的操作,也因此具有狀態序列性。
 
但是狀態之間的遷移,有的比較快,快得基本可以忽略這個間隔;有的遷移比較慢,使得人不得不關注它。
 
人使用軟件進行辦公,這種狀態序列性就演化爲軟件任務的狀態序列性。人使用軟件就是爲了完成相應的任務。
因此設計軟件也要注意到行爲的狀態序列性。在企業中使用的軟件,我覺得這樣的特性更加明顯。因爲企業中人與人的行爲具有行爲鏈的關係。比如B展開工作的基礎是A的工作,而C展開工作的基礎是B的工作,如此下去。這種操作鏈的關係一般是體現在部門之間的協作上,這樣的協議,其遷移間隔比較大。
 
考慮如下的設計思路,是否可以提高軟件的自動化程度呢?比如有項任務J,有A、B、C、D順序協作完成。其中前面一個是後面一個工作的基礎。因此可以定義J的四個狀態JAJBJCJD。J是可以保存在數據庫中,因此我們對J的四個不同狀態跟A、B、C、D做了關係綁定,我們就可以對J進行不同狀態的管理、及任務的分派。
 
 如果我們在軟件開發的過程中考慮軟件的狀態序列性,我們是否得考慮我們的設計規劃呢?
 
 或者說如果我們考慮到這些,我們是否可以開發出對用戶更有效的軟件?
如果我們考慮到這些,我們可能是要把很多軟件的功能,集成到一塊,共同完成用戶的需求。
 
 
發佈了49 篇原創文章 · 獲贊 24 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章