1. 程式人生 > >淺談對軟體工程的認識與理解

淺談對軟體工程的認識與理解

資料結構與演算法、計算機組成原理、計算機作業系統、計算機網路- 軟體工程需重視的。。

  軟體工程涉及的資源有:人力、資金、時間的合理分配,涉及到文化與管理等,及各種規劃化

  軟體開發是一個把使用者需要轉化為軟體需求,把軟體需求轉化為軟體設計,用軟體程式碼來實現軟體設計,對軟體程式碼進行測試,並簽署確認它可以投入執行使用的過程。在這個過程中的每一階段,都包含有相應的文件編制工作。
    軟體開發過程當中,遵循一定的流程,主要包括系統分析、系統設計、系統編碼、系統測試以及系統的維護等幾個階段。依次概述如下:
  1、系統分析
    系統分析包括軟體需求分析和系統可行性分析。軟體需求分析就是回答做什麼的問題。它是一個對使用者的需求進行去粗取精、去偽存真、正確理解,然後把它用軟體工程開發語言(形式功能規約,即需求規格說明書)表達出來的過程。系統可行性分析就是通過需求調查來確定此係統是否具有可行性。
  2、系統設計
    系統設計可以分為概要設計和詳細設計兩個階段。實際上軟體設計的主要任務就是將軟體分解成模組。概要設計就是結構設計,其主要目標就是給出軟體的模組結構,用軟體結構圖表示。詳細設計的首要任務就是設計模組的程式流程、演算法和資料結構,次要任務就是設計資料庫,常用方法還是結構化程式設計方法。
  3、系統編碼
    系統編碼是指把軟體設計轉換成計算機可以接受的程式,即寫成以某一程式設計語言表示的"源程式清單"。
  4、系統測試
    系統測試的目的不是驗證軟體的正確性,而是以較小的代價發現儘可能多的錯誤。測試從需求階段開始,此後與整個開發過程並行,換句話說,伴隨著開發過程的每一個階段,都有一個重要的測試活動,它是預期內按時交付高質量的軟體的保證。
  5、系統維護
    系統維護是指在已完成對軟體的研製(分析、設計、編碼和測試)工作並交付使用以後,對軟體產品所進行的一些軟體工程的活動。即根據軟體執行的情況,對軟體進行適當修改,以適應新的要求,以及糾正執行中發現的錯誤。編寫軟體問題報告、軟體修改報告。在實際開發過程中,軟體開發並不是從第一步進行到最後一步,而是在任何階段,在進入下一階段前一般都有一步或幾步的回溯。在測試過程中的問題可能要求修改設計,使用者可能會提出一些需要來修改需求說明書等。
    總的說來,軟體開發是一個環環相扣的設計和實施過程,整個系統開發的過程當中,系統分析和設計是重中之重。只有把握好系統分析,才能使後續改動儘可能多的減少;只有把握好系統設計,才能保證軟體的根基比較穩固。也即是它們很大程度上決定著軟體開發的週期以及壽命。另外,完美的開發團隊和開發過程的合理控制是軟體成功開發關鍵要素之一。
>> 軟體工程
  過去幾十年,軟體技術經歷了一系列重要的變化和發展,構成軟體的軟體實體的粒度不斷增大,軟體基本模型越來越符合人類的思維模式;軟體執行平臺的能力不斷增強,越來越多地遮蔽掉計算機底層的複雜性;軟體支撐平臺的能力不斷增強,越來越多地遮蔽了軟體開發過程的複雜性;軟體技術的應用範圍不斷擴大,越來越廣地滲透到人類生活的各個方面。網路技術的發展日新月異,基於新一代網路技術的各種應用的融合是大勢所趨。網路新技術與軟體新技術的相互促進必將為人類創造一個更為燦爛多彩的IT世界。
  這世上同時存在著兩種對立的聲音:本質決定成敗和細節決定成敗。偏好本質的人喜歡說本質論。偏好細節的人則喜歡說精細化管理。但如果在較長的時間軸上考量這兩種觀點,就會發現他們之間並不真的對立。

----------------------------
程式設計師幾個發展方向:
    走向管理:有兩種原因會使部分程式設計師走上管理的道路,一是與生俱來的對  權力的慾望;一是在程式設計師的崗位上對自我價值重新認知。對於前者如果慾望過去強烈就會急功進利,很容易走捷徑,會出現不能服眾的情況。對於後者自我價值的重新認知是一個緩慢的過程,一個程式設計師在長期的開發過程中會慢慢發現一個人的力量是有限的,做一件事情必須要藉助其他人的幫助,如果需要別人的幫助就必須能影響他人。從而認識到一個人的價值對公司來說幾乎是不值一文,如果想讓自己的價值得到提升必須要影響到他人,藉助他人的力量使自己的價值得到最大提升。
    走向行業:即成為某個行業的行業專家。一般來說走這個方面需要機遇,需 要長時間的從事某一個領域的開發與管理工作,對某個行業無論是大局還是細節都瞭如指掌。
    走向專業:即成為架構師。一般來說這些人對開發有狂熱的興趣,逐漸的從程式碼的編寫中認識到設計與軟體架構的重要性,並對軟體設計樂此不疲。
    自已幹:這些人是野心家,也是風險最大的一條路。好多程式設計師都認為軟體開發不需要什麼成本,只要能接到單子完全可以自己幹,自己當老闆。然而很少了解只有長期持續的訂單才是一個企業不斷穩定發展的最重要因素。

------------------------------
程式設計師具備:恆心、耐心、細心
  興趣決定一切:當一個人把自己的職業僅當成謀生的手段時,那他的人生將會失去很多樂趣。如果你不喜歡軟體開發,那最好離開這個職業,沒有興趣只會讓你一事無成。
  自我學習:做程式設計師就是這樣,走上了一條永無止境的學習之路,不學習新知就會被淘汰。然而學習也是有方法的:1)拿來主義;2)知其然也要知其所以然,細細分析與研究別人的優秀框架會對你大有好處。
  自我修復:不斷的重構與完善你的程式碼,是對所學知識的達到溶匯貫通的最簡捷的途徑。
  找到一個圈子或老師:有時別人的一句話會對你的點撥很大。對於知識點有時只是一層窗戶紙,看似玄妙,也許你差的只是那靈光一現或是換一個角度思考,這並不難。難的是將你所瞭解的知識點串接起來,使其能上下貫通運用自如,而在這點上通過一己之力會變得非常的漫長與痛苦。

---------------------------
    軟體開發要融入工程化的思想,要有高度的設計能力,關注更多的軟體執行屬性和設計質量屬性,同樣的系統,不同的軟體人員會做出完全不同的軟體,正規,高效的開發團隊要比游擊隊開發團隊不只高出幾十倍。軟體開發,不僅僅關注功能,效能,更應該去研究可維護性,可擴充套件性等質量屬性,不僅僅只關注程式碼,而更要上升為設計,複用等。
還有更高層次的設計開發,軟體重構,模組化,系統構架,搭建統一軟體平臺,度量軟體質量等.軟體開發人員,要作的事情太多了,軟體實在是一個浩大的腦力工程,甚至會讓人覺得這是一個投入/產出比最低的行業,因為要學習的知識實在太多了,每時每刻都要處於不斷的學習和更新當中.

   這是指導整個軟體開發的指南,這裡包括軟體從開始到結束的整個過程,包括制定計劃、需求分析和定義、軟體設計、程式編寫、軟體測試、執行/維護,這六個步驟每一步的執行是保證專案成功完成的保證,以後將對這六個過程進行一一的分析。
軟體生命週期
   其中包括:瀑布模型、演化模型、螺旋模型、噴泉模型、智慧模型。
模型特點:
   瀑布模型:週期長,跟使用者見面比較晚,從計劃到和使用者一起計劃外,其他的部分使用者和開發人員是分離的,使用者不能直接把問題直接反應過去。
   演化模型:由於在專案開發的初始階段人們對軟體的需求認識常常不夠清晰,因而使得開發專案難於做到一次開發成功,出現返工再開發在所難免。做兩次第一次只是實驗開發,其目標只是在於探索可行性,弄清軟體需求第二次則再此基礎上獲得較為滿意的軟體產品
   螺旋模型:多次原型反覆並增加風險評估的開發模型
噴泉模型:有嚴格的數學理論和形式化的技術支援,但目前在所研究試驗階段,不能實現
   智慧模型:1.通過領域的專家系統,可使需求說明更加完善、準確和無二義性。2.通過軟體工程的專家系統,提供一個設計庫支援,在開發過程中成為設計者的助手。3.通過軟體工程知識和特定應用領域的知識和規則的應用來提供對開發的幫助。但是,要建立適合於軟體設計的專家系統,或建立一個即適合軟體工程又適合應用領域的知識庫都是非常困難的。

--------------------------------
對軟體的基本認識
    i.開發軟體為什麼要工程化
有很多人,尤其是很多學生存在這樣的誤區,平時感覺自己能用語言寫一個鬧鐘,寫一個記事本等一些小東西,就以為自己一個人就可以完成一個小的專案,所以很不理解為什麼開發軟體有時候不能讓一個人獨立完成,也有個人英雄主義在作怪。其實原因很簡單,比如說,高中我們做題應該很有體會,感覺一張卷子一點問題也沒有,但是等成績下來的時候總不是一百分,為什麼,因為我們很難發現自己的錯誤,哪怕是重複很多次,這是思維定勢。
    ii.軟體開發與其說是技術活,不如說是規範活.
軟體開發是程式設計師奇思妙想的時候,用什麼方法都是隨心所欲的,有的人則為了追求速度或者說是彰顯個性而用一些很不大眾的演算法,以為這是體現自己高明的地方,恰恰相反,這真是不懂程式設計的表現,一般的專案一般都不是一個人來完成的,它分為開發階段和維護階段,然而維護階段一般又非開發人員所為,所以如果程式碼技術性過於高,反而對後面的維護不利,另外,IT是個跳槽率很高的職業,如果一項工程沒有完成就離開,剩下高明的演算法要讓誰看呢,出於對公司的考慮,最好還是規規矩矩,符合大眾的口味。
    iii.文件的重要性
很多人,尤其是大學生,剛開始學習程式設計的時候,難免會有一些急功近利的想法,想快點做出點成績,但是往往欲速則不達,就想前段時間做的機房收費系統一樣,在一種完全沒有文件的情況下,雖然最後做完了,而且也跑起來了,問題似乎也沒有想象的那麼多,但是其中的過程只有自己知道,程式碼啦,資料庫啦都不忍心看,可以說是亂七八糟的,想加個資料庫就加,想加個功能就加,很有文件,就像沒有目的的去雕塑,雕成什麼樣,算什麼樣,而且很多情況是中途發現需要這個樣子了,才發現,那部分材料已經被自己給去掉了,所做的程式自然沒有規律可言,如果現在有人說那個機房收費系統那個功能要修改一下,我估計我的得全盤改動.
    iv.開發軟體為什麼時間總是那麼緊,開發的人總是那麼累
曾經有過單純的想法,為什麼工作非要加班呢,多用些人不就行了嗎,人多力量大嘛,但是自從軟工看完後便覺得這種想法蕩然無存了,其實,原因並不是說老闆多黑心,而是取決於軟體開發工作的性質,這是一項需要智慧的工作,首先,這不是工廠,沒有機器,只有手工;其次,這裡需要殘雜很大一部分人文因素,比如說個人習慣,同樣輸出一個結果,兩個人的演算法往往就有很大的區別,所以參加人數越多,在專案中的不同因素就越多,因為各個模組之間的銜接問題就越大,所以參加人數應該是少而精,所以這也是為什麼藍精靈體中說程式設計師是“聰明而辛苦”,聰明在他們每個人都是一個設計師,辛苦在一項任務,自己又無可取代的位置,只能是自己的事情自己幹。
    v.如果自己無法適應社會中的潛規則,那麼就學程式設計吧(不知道這樣說對不對)
從我目前的認識來看,突然發現軟體行業是整個社會的一片淨土,這裡不像其他行業一樣靠嘴吃飯,更多的是需要能力,除非老闆想賠錢,不然絕對不會用一個靠關係而不是靠技術的人來當專案經理,因為這個關係到整個專案生存的決定性因素;雖然同事之間保持著微妙的競爭關係,但是一個專案要想如期完成必須要和同事上司好好合作;做軟體開發的每個專案的每個功能,無處不能體現全心全意為人民服務的宗旨,所以開發軟體的人無疑又是心細如絲,必定是善良的,體貼的,嫁人就嫁程式設計師哦。所以,以此可見,這裡的確是一片淨土。

相關推薦

軟體工程認識理解

資料結構與演算法、計算機組成原理、計算機作業系統、計算機網路- 軟體工程需重視的。。   軟體工程涉及的資源有:人力、資金、時間的合理分配,涉及到文化與管理等,及各種規劃化。   軟體開發是一個把使用者需要轉化為軟體需求,把軟體需求轉化為軟體設計,用軟體程式碼來實現軟體設計

POW的認識理解

目錄   一、理清POW:POW共識機制的原理 二、 工作量證明的優缺點 POW的優點 POW的缺點 三、 本人對POW存在問題的解決思路 一、理清POW:POW共識機制的原理 在區塊鏈中,核心的技術之一就是工作量證明機制(Proof-of-Work)。

Java象的認識理解

創建類型 鞏固 當我 com 編寫 回收 jpg 回收機制 span   今天是我學習編程以來第一次寫博客,記下平日學習所得,本來這幾日都在學習web框架 但覺得梳理一下之前所學很有必要。畢竟之前學習Java感覺很粗略只是以考試為目的。所以就以《Thinking in

js閉包的理解

閉包就是能夠讀取其他函式內部變數的函式。由於在javascript中,只有函式內部的子函式才能讀取區域性變數,所以閉包可以理解成“定義在一個函式內部的函式“。在本質上,閉包是將函式內部和函式外部連線起來的橋樑。(引用了自由變數的函式) function f1(){ var a=10;

Js面向物件的理解(1)

    面向物件的語言有一個標誌,那就是它們都有類的概念,通過類來建立任意多個具有相同屬性和方法的物件。它是一種程式開發的方法,它將物件作為程式的基本單元,將邏輯和資料封裝其中,以提高程式碼的靈活性、重用性和擴充套件性。物件是把資料及對資料的操作方法放在一起,作為一個相互依存的整體。簡單的

Spring IOC容器的理解

看過很多關於Ioc容器的文章,自我理解。 首先,Ioc即“控制反轉”,是一種設計思想。 1、在Java開發中,Ioc意味著將你設計好的物件交給容器控制,而不是傳統的在你的物件內部直接控制。 2、傳統Java SE程式設計,我們直接在物件內部通過new進行建立物件,是程式

談談SEO的認識理解

SEO(Search Engine Optimization)全稱是搜尋引擎優化, 其目的是為了使網站能夠更好的被搜尋引擎抓取,提高在搜尋引擎內的自然排名,從而帶來更多的免費流量,獲取收益。 SEO主要有兩種方法,站內優化和站外優化,其中技術上主要以站內優化為主。 站內優

js原型鏈的理解

最近重新學習了一下JS原型鏈的知識,為了避免之後自己再忘記,在此記錄下自己對原型鏈的理解,歡迎大家一起討論交流 js中的物件分為函式物件與普通物件,函式物件有prototype與__proto__,普通物件只有__proto__,那麼怎麼區分這兩種物件呢? var f =

執行緒池的理解

1、首先由幾個介面和類的關係是需要先說明的: extends   implementsextends Executor(介面)----------------->ExecutorService(介面)------------------->AbstractExe

【設計模式之一】MVC設計模式的理解

    在APP開發中,我們經常提MVC,顧名思義,M:Model,模型層,或者叫資料層,V:View,檢視層.C:Control,控制器層,或者叫邏輯層.每次實現某項功能的時間,本著唯一責任制的原則

軟體工程的一點理解

從大學學程式設計以來,寫程式碼幾乎是以一種拼湊功能的方法來寫 直到負責視訊摘要這個專案以後, 對編碼規範和架構設計有了些感覺, 因為需求總是在變, 如果只是拼湊功能,後面維護和新增功能變得很麻煩。 這也算是一種領悟吧。見到一些程式設計師還是以拼湊功能為中心寫程式碼。

多線程的理解(一)

cpu 動態 tor 包裝 list star and jvm 周期 今天我們先來聊聊有關線程的話題...... 一. 線程概述 1. 簡單區分程序、進程和線程 程序是指一段靜態的代碼 進程是指正在執行的程序,將靜態的代碼運行起來 線程是指正在執行程序的

“面向物件”“面向過程”的理解

面向過程,顧名思義是更注重過程。面向物件,是更注重物件。面向過程的實現過程是整個程式以步驟劃分,如五子棋第一步開始遊戲,第二步黑方先行等等。面向物件的實現過程是整個程式以物件劃分,以物件有什麼功能(方法)來實現,如五子棋分為黑白雙方、棋盤物件、規則物件。

express中介軟體的的理解

一、什麼是express? Express 是一個簡潔、靈活的 node.js Web 應用開發框架, 它提供一系列強大的特性,幫助你建立各種 Web 和移動裝置應用。Express專案的底層由許多的中介軟體在協同工作,可以這麼說,一個 Express 應用就是在呼叫

後綴自動機的一點理解

字符串 變化 post .... 初始 mar 一起 樹狀 子集 後綴自動機入門詳解及模板

xmpp的理解及應用

mpp 通信 new xmpp times div log 傳輸數據 重新 參考原文鏈接 http://blog.sina.com.cn/s/blog_69f68f880102uyeg.html 一、xmpp是基於xml的協議。具有遵循標準,有安全性,使用TCP傳的xml的

NaN的理解

def 淺談 nan 理解 個數字 sna efi 數字 color 1.NaN : Not a Number 不是一個數字 2.NaN 與其他數值進行比較的結果總是不相等的,包括它自身在內 3.判斷是否是NaN, 方法一 :is.NaN(變量);

二分思想的理解

搜索問題 turn class 中一 不能 運算 color arch 因此 1、什麽是二分思想? 二分思想可以理解為是一種將一個大問題分成兩個子題,當每次分析完兩個子問題後,舍棄其中一個不符合條件的子問題,再將符合條件的子問題一分為二,反復循環搜索判斷的操作,直至找到所求

Css屬性:positon的認識理解

Position的值有:absolute,fixed,relative,static,inherit. absolute的描述:1.生成絕對定位的元素,相對於static定位以外的第一個父元素定位。               &nbs

web前端開發技術之HTML5 智能表單的理解

提示 goods 表單 加載完成 空格 日期和時間 url 顯示 指向 Html5新增input的form屬性,用於指向特定form表單的id,實現input無需放在form標簽之中,即可通過表單進行提交。 <FORM id=xinzeng> … </FO