如何設計一款軟件的一些感想

        想想入行已經1年有餘,天天出了拿需求寫代碼,完成一個個功能外,自己對整個軟件的開發如何誕生,如何設計卻瞭解的很有限。這些天一直在思考着一款軟件在讓我編碼之前都做了什麼?一款軟件到我這樣的程序員開始功能代碼的編寫之前都是由誰完成的?都是怎麼設計的?都是怎麼規劃的?

        我覺得是時候思考這個問題了,我不是什麼牛人,相反我和大多數人一樣是一個大學啥都沒有學過的超級菜鳥,只是頂個計算機系畢業的頭銜混混沌沌的加入了程序員的行列。如果一直這麼編寫功能下去,我想以後再也走不出代碼民工的範疇,其實這也沒有什麼,關鍵是思想上已經不可能再有什麼進展了,無疑是人生的悲哀。思想被禁錮在一個狹小的範圍內,永遠不能指點江山。我追求思想上的開放和整體的感知,我覺得這是每個熱愛生活的人都該具備的基本素質,具體到軟件開發,我覺得每個人都應該把軟件架構師等頂級職位當成自己的量化目標。因爲當你實現這個目標的時候,意味着你的思想高度也已經達到了思考生活,享受生活的地步了。

        講了一些自己的想法,說說我最近的感觸吧。(設計主線和代碼主線)

        一款軟件從需求調研,到概要設計,再到詳細設計,再到可以形成文檔,緊接着編程,測試,發佈。以前在軟件工程上學到這些條條框框都扔給了老師。現在重新找回來,發現其實樹上說的和現實中的差別並不大。我們很多時候的軟件都是這樣設計出來的。我就以這個作爲一個設計主線說說吧。

        需求調研: 說白了,這個就是向軟件的使用者羅列一些處理功能需求。其實這個就是問和答的問題。有的時候我們想到我們的軟件需要什麼功能,然後寫出來,參考別人的類似軟件放到自己這裏來。這個階段決定了你的軟件具備什麼樣的功能和軟件的特色和定位。一款軟件有個清晰的定位很重要。(PS:軟件不該是萬能的,功能的明確纔會讓你的軟件有特色)。

       概要設計:這就是整合用戶的需求,列出一個列表來。把整個軟件具有的功能劃分一個個功能區域和模塊。(PS:這裏不是程序邏輯模塊, 僅僅是功能模塊)。這個完成了,基本軟件90%的功能就確定了下來。一個概要設計主要完成的其實就是讓你明確加深對軟件功能的熟悉,更加明確軟件的方向。讓你接下來的詳細設計變的更符合邏輯更通用。(PS:這個概要設計在一些公司應該被什麼策劃部門列爲最詳盡的文檔吧,其實我想對開發者來說這就是一份功能性文檔)。

       詳細設計:在我的想法裏,這個詳細設計是應該由一個項目組的項目經理來主導完成,整個項目成員參與進來的過程。這裏是整個軟件開發的關鍵所在。因爲這裏要完成整個軟件的功能的細分,功能模塊和邏輯模塊的結合。(PS:我所說的邏輯模塊是相對於代碼來說,由各個邏輯模塊聯合完成某個功能模塊的需求,也可以是一個邏輯模塊對應了一個功能模塊,如果非要劃分,我想把它劃分爲:一對多的關係。一個功能模塊對應了一個或者多個邏輯模塊)。在詳細設計裏我覺得要做到以下幾點:

      1、用戶的角度來看:結合一項功能如何展現給用戶,用戶如何操作,將這些場景一個個和概要設計裏的功能對應起來。說到代碼裏這就對應一個函數塊或者一個模塊的功能

      2、分析概要設計裏的關鍵元素,我記得有術語,不過我忘了。我就叫他關鍵的對象吧。然後抽象出對象的屬性。設計出基本的數據結構。(PS:說到代碼裏我覺得enum, 

             struct,class, define, const等主要的你能夠感知到的對象(再次PS:什麼是你能感知到的,說白了就是你能很快想到的,玄吧,比如說人這個對象:身高,年齡等這個就是

            可感知,比如,一個通知類,這種就是非可感知,因爲這個是你虛構的)在這個時間確定的)

     3、基本的元素有了,元素要完成的功能有了,這個時候就可以設計整個功能的活動圖了,用功能爲一條精神指引,用元素作爲支撐點,一步步的搭建起來一個活動圖。(PS:

           這個是我覺得畫活動圖的最高境界),兩個元素,或者功能無法直接產生聯繫的時候,那就開始發揮你的想象吧,這就像一條公路的修建,遇水架橋,遇山開山。(PS: 程序

           中的一些“現實中不存在的對象類”我個人覺得就是這麼產生的)

     4、當你能夠把整個軟件的功能以這樣一種形式跑通的時候,我覺得整個軟件的邏輯模塊基本上就定型了,接下來的類圖,數據流圖,接口的設計應該在前面都思考過,這個

            時候只是整理出來而已了。把這些東西搞好,這個軟件的骨架應該就算完成。

     5、以上基本上還沒有牽扯到代碼,下面的就是我所說的代碼主線的主要部分。這個時候,項目經理開始用編譯器或者什麼神器之類的工具搭建軟件的基礎框架。不需要寫什

           麼詳細的類啥的,只是把工程的類型,編譯選項,要使用的庫,以及主要使用的技術等糅合起來,讓一個軟件的代碼基礎都顯示出來(PS:我不想說這類似人體的骨架,我

           想把他比喻成人體的表皮他們是把骨架和血肉組合起來變成了一個活人,你說呢,不要踹我)

    6、我想到了這個階段就是我現在從事的代碼編寫階段了,大家各司其職。項目經理應該在小組成員開始之前把基本的數據結構等相關代碼編寫完畢,每個人需要通用的代碼

          編寫完畢。緊接着我想就是想我這樣的程序員開始登場了。寫,寫,寫...

    7、基本就是測試,修改BUG了,就不詳述..

綜上:其實我把一個軟件的需求分析,概要設計,詳細設計的前1和2兩點劃分爲軟件中的純設計主線,詳細設計的3,4有設計的影子也有代碼的影子,屬於設計和代碼的結合部分,而詳細設計第四點以後的部分就被我劃分爲代碼主線的部分了,這時候代碼是整個軟件項目的主導。前面設計是主導。

       其實我只是說了一個軟件設計的大概流程,只是最近的一些感想。具體的實施在這個過程中有很多需要細化的地方。

       有的時候我們在看書,看很多關於軟件設計的書,但卻忘了停下來思考,停下來結合實際反思。書有的時候僅僅是給了我們一種思考的方式,或者說給了我們一種擴展視野的方式。尤其是軟件工程和軟件設計類的書,大都泛泛而談。所以結合實際形成一套自己設計軟件的方式纔是最重要的,工作1年有餘,我感受到自己這方面必須要加強了,代碼的功底時間長了機器人都能熟悉,只有思想需要時刻的磨練着。

           

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