1. 程式人生 > >如何設計一款軟體的一些感想

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

        想想入行已經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年有餘,我感受到自己這方面必須要加強了,程式碼的功底時間長了機器人都能熟悉,只有思想需要時刻的磨練著。

相關推薦

如何設計軟體一些感想

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

3、找到大學生的某個痛點,設計手機產品

技能培訓 會有 激勵 職業 虛擬貨幣 互聯 幫助 結構 設置 詳解: 第一步:需求調研 針對大學生的職業技能培訓平臺 目標用戶: 還未步入職場的年輕人 初入職場的年輕人 第一期主要功能: 主推互聯網公司的職業技能培訓 幫助學生找到真正適合自己的職業 第二步:需求分析

如何從零開始設計漂亮的移動APP?

原型設計 交互設計 界面設計 APP開發 以下內容由Mockplus團隊翻譯整理,僅供學習交流,Mockplus是更快更簡單的原型設計工具。 我13歲時開始學習平面設計。我從網上課程學會了設計網站,並習慣於全天使用Photoshop和Affinity Designer進行設計

進階學習,如何無代碼設計美觀且實用的網站?

可用性測試 很好 product 收獲 遷移 落地 流行 最好的 人員 作為一門新興的邊緣性職業,網站設計既要從外觀上創意,又要適當結合圖形、版面及交互設計等相關原理,使得它成為一門獨特且令人神往的藝術。毫無疑問,好的設計能讓網站在諸多站點中脫穎而出,優秀的創意和表現方式能

設計c#自動程式碼生成器 (1)

1,構思配置驅動檔案生成 網上自動化指令碼生成的思路是 1)設定好對應的模板 2)讀取資料庫對應的檔案 3)根據模板對應的欄位替換生成 模板》讀取資料》生成對應檔案 為什麼會有做自動化指令碼的想法,是因為工作中發現protobuf 這個工具可以自動編譯根據伺服器生成對應的cs檔案 所以我這裡想仿

利用Python來爬取空姐私密照!把它做成了軟體!人人可用哦!

空姐鎮樓   標題如題:給出Python爬蟲程式原始碼與支援庫Tkinter的軟體繪製程式碼,然後做出一個爬蟲軟體。 淺顯的說就是,我給你爬蟲程式碼和軟體模型製作的程式碼,然後結合成一個可使用的軟體。   這個題對於Python新手來說應該是個非常

利用二叉樹設計簡單的huffman編碼器

從磁碟讀入一個僅包括英文字母及標點符號的文字檔案(如f1.txt),統計各字元的頻度,據此構建huffman樹,對各字元進行編碼,並將字符集,頻度集及相應編碼碼字集輸出在顯示器或儲存在另一個文字檔案(如 f1_code.txt)中. 思路: Void Huffman

如何設計基於ROS的移動機器人?

編者按:本文是EAI科技創始人兼CEO李金榜在硬創公開課的文字稿,感謝作者和雷鋒網授權轉載。   最近幾年各種移動機器人開始湧現出來,不論是輪式的還是履帶式的,如何讓移動機器人移動都是最核心的工作。要讓機器人實現環境感知、機械臂控制、導航規劃等一系列功能,就需要

CAD圖紙轉換成DWF格式應該使用哪軟體操作?

CAD圖紙轉換成DWF格式應該使用哪一款軟體操作?我們經常在工作中需要將CAD圖紙的格式轉換成其他一些的格式,所以一款好用的CAD轉換軟體對於CAD工作者來說是必不可少的,如果是想將一張CAD圖紙轉換成DWF格式我們應該使用哪一款軟體來進行操作,今天小編就要來給大家安利一款好用的CAD轉換器軟體的下

.Net架構篇:思考如何設計實用的分散式監控系統?

前言無論從最早期的unix作業系統,還是曾經大行其道的單體式應用,還是現在日益流行的微服務架構,始終都離不開監控的身影。如windows的工作管理員,linux的top命令,都可以看作是監控的面板。再聯絡起現實生活,無處不在的路網攝像頭,為交通機關監控交通人流提供了方便。系統規模越大,越離不開監控。缺少了監控

使用THREE-js設計3D遊戲.md

使用THREE.js製作一款3D遊戲 前言 這個學期選修了一門計算機圖形學的課程,課程選用的教材是基於WebGL。在此之前我對計算機圖形學是沒有任何概念的,只知道如果想要設計一款遊戲具有圖形學的知識是很重要的。我從來就有一個念想就是製作一款遊戲,因此我對這方面

【乾貨分享】用AI工具設計吸引人的字型效果

乾貨又來啦!今天教大家如何使用AI工具設計一款引人注目的字型效果,話不多說,我們直接開始! 1、在AI畫布中使用鋼筆工具勾勒出字母的線條,如圖所示 2、使用橢圓工具畫一個小的正圓,並填充藍色漸變。 3、我們再複製一個小圓,並填充紫色漸變,使用混合工具分別在

工作年的一些感想

       已經加入軟體開發行業一年多一個月,從最開始做前端,到後來轉了後端並決定以後以後端開發為主,再到現在勉強能寫一些東西,一路上磕磕絆絆,收穫多少還是有。        自己在得到一些東西的同時,也是在失去,

如何設計分散式發號器

在網際網路的世界裡,產生唯一流水號的服務系統俗稱發號器。Twitter的Snowflake是一個流行的開源的發號器的實現。Slowfake是由Scala語言實現的,並且文件簡單、釋出模式單一、缺少支援和維護,很難在現實的專案中直接使用。 為了能讓Java領域的小夥伴們在不同

程式設計策略(設計APP的步驟)

偉大的程式起源於一個偉大的想法,但這並不意味著講想法孕育成成功的程式是一件輕鬆的事。本文介紹的是一些能用於精煉想法、回顧設計選擇(design options)的策略,幫助我們設計出人見人愛的程式。 明確程式定義 在開發早期就完成程式的定義,能

如何步步設計微服務的補償方案

背景 隨著微服務化的系統越來越多,系統間的互動也呈現幾何倍增的趨勢,系統間面臨一致性問題越來越突出。為了保障服務提供方與服務消費方的一致性,特別是面臨最大努力通知型或補償性的技術需求,服務化前做法是服

設計師怎樣從零開始設計APP?

作為設計師最大的成就感,是著手一個專案,看著它從0到1,慢慢孵化成形,再接著改版進行優化,受到越來越多的使用者歡迎。這個系列的文章把整個過程的經驗總結成文,篇幅較長,逐點分享,今天是概述+立項。 從上圖可以知道,在整個過程中,設計師的工作可以分為做人和做事兩大類。 學會做人

從零開始設計APP之如何做原型圖

@Sophia的玲瓏閣 :這個系列的文章把整個設計過程的經驗總結成文,逐點分享,上期是概述+立項,這期聊聊低保真和高保真原型圖的作用、處理工具和檔案要求等。 Low-fi,即低保真原型圖,整個APP設計階段,設計師真正開始上手的環節。待PM製作好PRD文件和邏輯流程圖之後,

唯有軟體,能用盜版的我堅決不用正版

幾年來花在正版軟體上的錢也有上萬了。一是自己是做軟體的,二是經濟條件允許的情況,儘量用正版的了。大到花幾千元買的 IntelliJ IDEA,小到幾十塊錢的SizeUp,不是找不到盜版,而是覺得花錢用正

如何設計多場景分散式發號器(Vesta)

作者:李豔鵬,支付平臺架構師,專注線上和線下支付平臺的應用架構和技術架構的規劃與落地,負責交易、支付、渠道、賬務、計費、風控、對賬等系統的設計與實現,在移動支付、聚合支付、合規賬戶、掃碼支付、標記化支付等業務場景上有產品應用架構規劃的經驗。微信