今天對忽然對本身平時的開發凡是思考了一下,出於如下兩個緣由:算法
1.本身對本身負責的需求的開發時間評估老是不許或者說壓根就沒有認真評估過,致使一直都沒思考這個主題的內容。數據庫
2.以爲本身對某個功能的開發週期太長,或者說是開發出來了,老是記不住本身的開發思路,老大問起的時候,老是解釋不全,要從新翻看本身的代碼才知道本身的邏輯,有點好笑。編程
3.本身開發出來以後,bug老是比較多。架構
基於以上緣由,本身回顧了一下軟件開發過程,以下。以爲任何一個功能,都要按照軟件開發流程的模式去執行才符合一個高級工程師或者說架構師的風格。根據本身的思考,手繪瞭如下圖(ps.哪位朋友有比較好的關於畫圖這方面的軟件,但願能夠介紹幾個,下次我就不用手工畫圖了,嘿嘿~)併發
問題1:編程語言
開發需求,只有每次都本身主動去評估開發週期,本身才會對本身更瞭解,同時對需求的開發週期評估纔會更準確,更有經驗。——這樣你纔有膽量去作項目經理或者說「老大」。至於說如何去評估開發週期,我我的認爲有兩個參考點:①業務複雜度;②算法複雜度;高併發
這裏附帶個鏈接,挺有意思的:人生經驗——如何在三分鐘內完成開發週期評估性能
問題2:單元測試
軟件開發,任什麼時候候思考都比編碼更重要。思考過的編碼才更清晰更少bug。大牛都是90%的時間思考,而後10%的時間用於編碼的。若是思考好了,編碼真的是個簡單的事情。關於如何思考,在軟件開發這方面,固然是按照工業的軟件開發流程啦,認真想一想,這個流程真的是頗有道理的,按照流程去開發(也不用嚴格按照要求每一步都作完,可是思路上得是這樣),開發出來系統(功能),才更具可擴展性,可用性以及可伸縮性。軟件開發就是要求開發系統要考慮如下幾個特性:①可擴展性;②可伸縮性;三高性能;④可用性。至於這幾個詞是什麼意思,這裏我就根據本身的理解大概說一下:測試
可擴展性:能適應需求的變化,以及後面軟件的擴大,達到改動最小;
可伸縮性:單機性能達到瓶頸的時候,能夠方便的經過橫向擴展,增長機器就能夠承載更大的請求;
可靠性:其實就是容錯性,在系統正常處理的過程當中,出現異常的時候,也能保證系統整理邏輯正常的,最簡單的例子就是:數據庫的事務,等等~
高性能:這個就不用說啦,就是讓系統的處理能更加高效,更少的資源佔用或者說處理邏輯更加簡單等等~
問題3:
其實答案和問題2同樣,只是開發出來以後,本身要認真地作單元測試走一遍流程。在臨界值的地方,要認真度量好,最好也作一下臨界值測試~
下面是關於上面這樣圖的如下思考總結:
1.其實軟件開發流程,就是跟哲學同樣解決幾個問題:能夠作?-》作什麼-》怎麼作-》怎麼樣
可行麼:
可行性分析:經濟可行性+法律政策可行性...
作什麼:
需求分析:功能+性能+硬件環境條件
怎麼作:
概要設計:創建系統的邏輯模型,與計算機無關;架構(分模塊等)+數據庫(那些表,不用具體到表字段)
詳細設計:物理模型,能夠直接翻譯成代碼;算法+數據庫(表字段)
編碼:根據詳細設計,把詳細設計的文字翻譯成具體的編程語言而已~
怎麼樣:
測試:單元測試+迴歸測試+系統測試
2.概要設計階段要認真考慮如下幾個特性(各個特性的含義以上已經有解釋):
可擴展性,可伸縮性,可靠性,高性能
3.平時說的電商網站有如下幾個特性:
高併發,高可用,高性能
即所謂的三高。這只是電商網站或者說是一些軟件的特性而已。而咱們平時說,設計一個系統的時候,要考慮的是不同的概念來的,好比說,咱們設計一個系統,要考慮:可擴展性,可伸縮性,可用性,高性能~