淺談對軟體工程的認識與理解
資料結構與演算法、計算機組成原理、計算機作業系統、計算機網路- 軟體工程需重視的。。
軟體工程涉及的資源有:人力、資金、時間的合理分配,涉及到文化與管理等,及各種規劃化。
軟體開發是一個把使用者需要轉化為軟體需求,把軟體需求轉化為軟體設計,用軟體程式碼來實現軟體設計,對軟體程式碼進行測試,並簽署確認它可以投入執行使用的過程。在這個過程中的每一階段,都包含有相應的文件編制工作。軟體開發過程當中,遵循一定的流程,主要包括系統分析、系統設計、系統編碼、系統測試以及系統的維護等幾個階段。依次概述如下:
1、系統分析
系統分析包括軟體需求分析和系統可行性分析。軟體需求分析就是回答做什麼的問題。它是一個對使用者的需求進行去粗取精、去偽存真、正確理解,然後把它用軟體工程開發語言(形式功能規約,即需求規格說明書)表達出來的過程。系統可行性分析就是通過需求調查來確定此係統是否具有可行性。
2、系統設計
系統設計可以分為概要設計和詳細設計兩個階段。實際上軟體設計的主要任務就是將軟體分解成模組。概要設計就是結構設計,其主要目標就是給出軟體的模組結構,用軟體結構圖表示。詳細設計的首要任務就是設計模組的程式流程、演算法和資料結構,次要任務就是設計資料庫,常用方法還是結構化程式設計方法。
3、系統編碼
系統編碼是指把軟體設計轉換成計算機可以接受的程式,即寫成以某一程式設計語言表示的"源程式清單"。
4、系統測試
系統測試的目的不是驗證軟體的正確性,而是以較小的代價發現儘可能多的錯誤。測試從需求階段開始,此後與整個開發過程並行,換句話說,伴隨著開發過程的每一個階段,都有一個重要的測試活動,它是預期內按時交付高質量的軟體的保證。
5、系統維護
系統維護是指在已完成對軟體的研製(分析、設計、編碼和測試)工作並交付使用以後,對軟體產品所進行的一些軟體工程的活動。即根據軟體執行的情況,對軟體進行適當修改,以適應新的要求,以及糾正執行中發現的錯誤。編寫軟體問題報告、軟體修改報告。在實際開發過程中,軟體開發並不是從第一步進行到最後一步,而是在任何階段,在進入下一階段前一般都有一步或幾步的回溯。在測試過程中的問題可能要求修改設計,使用者可能會提出一些需要來修改需求說明書等。
總的說來,軟體開發是一個環環相扣的設計和實施過程,整個系統開發的過程當中,系統分析和設計是重中之重。只有把握好系統分析,才能使後續改動儘可能多的減少;只有把握好系統設計,才能保證軟體的根基比較穩固。也即是它們很大程度上決定著軟體開發的週期以及壽命。另外,完美的開發團隊和開發過程的合理控制是軟體成功開發關鍵要素之一。
>> 軟體工程
過去幾十年,軟體技術經歷了一系列重要的變化和發展,構成軟體的軟體實體的粒度不斷增大,軟體基本模型越來越符合人類的思維模式;軟體執行平臺的能力不斷增強,越來越多地遮蔽掉計算機底層的複雜性;軟體支撐平臺的能力不斷增強,越來越多地遮蔽了軟體開發過程的複雜性;軟體技術的應用範圍不斷擴大,越來越廣地滲透到人類生活的各個方面。網路技術的發展日新月異,基於新一代網路技術的各種應用的融合是大勢所趨。網路新技術與軟體新技術的相互促進必將為人類創造一個更為燦爛多彩的IT世界。
這世上同時存在著兩種對立的聲音:本質決定成敗和細節決定成敗。偏好本質的人喜歡說本質論。偏好細節的人則喜歡說精細化管理。但如果在較長的時間軸上考量這兩種觀點,就會發現他們之間並不真的對立。
----------------------------
程式設計師幾個發展方向:
走向管理:有兩種原因會使部分程式設計師走上管理的道路,一是與生俱來的對 權力的慾望;一是在程式設計師的崗位上對自我價值重新認知。對於前者如果慾望過去強烈就會急功進利,很容易走捷徑,會出現不能服眾的情況。對於後者自我價值的重新認知是一個緩慢的過程,一個程式設計師在長期的開發過程中會慢慢發現一個人的力量是有限的,做一件事情必須要藉助其他人的幫助,如果需要別人的幫助就必須能影響他人。從而認識到一個人的價值對公司來說幾乎是不值一文,如果想讓自己的價值得到提升必須要影響到他人,藉助他人的力量使自己的價值得到最大提升。
走向行業:即成為某個行業的行業專家。一般來說走這個方面需要機遇,需 要長時間的從事某一個領域的開發與管理工作,對某個行業無論是大局還是細節都瞭如指掌。
走向專業:即成為架構師。一般來說這些人對開發有狂熱的興趣,逐漸的從程式碼的編寫中認識到設計與軟體架構的重要性,並對軟體設計樂此不疲。
自已幹:這些人是野心家,也是風險最大的一條路。好多程式設計師都認為軟體開發不需要什麼成本,只要能接到單子完全可以自己幹,自己當老闆。然而很少了解只有長期持續的訂單才是一個企業不斷穩定發展的最重要因素。
------------------------------
程式設計師具備:恆心、耐心、細心
興趣決定一切:當一個人把自己的職業僅當成謀生的手段時,那他的人生將會失去很多樂趣。如果你不喜歡軟體開發,那最好離開這個職業,沒有興趣只會讓你一事無成。
自我學習:做程式設計師就是這樣,走上了一條永無止境的學習之路,不學習新知就會被淘汰。然而學習也是有方法的:1)拿來主義;2)知其然也要知其所以然,細細分析與研究別人的優秀框架會對你大有好處。
自我修復:不斷的重構與完善你的程式碼,是對所學知識的達到溶匯貫通的最簡捷的途徑。
找到一個圈子或老師:有時別人的一句話會對你的點撥很大。對於知識點有時只是一層窗戶紙,看似玄妙,也許你差的只是那靈光一現或是換一個角度思考,這並不難。難的是將你所瞭解的知識點串接起來,使其能上下貫通運用自如,而在這點上通過一己之力會變得非常的漫長與痛苦。
---------------------------
軟體開發要融入工程化的思想,要有高度的設計能力,關注更多的軟體執行屬性和設計質量屬性,同樣的系統,不同的軟體人員會做出完全不同的軟體,正規,高效的開發團隊要比游擊隊開發團隊不只高出幾十倍。軟體開發,不僅僅關注功能,效能,更應該去研究可維護性,可擴充套件性等質量屬性,不僅僅只關注程式碼,而更要上升為設計,複用等。
還有更高層次的設計開發,軟體重構,模組化,系統構架,搭建統一軟體平臺,度量軟體質量等.軟體開發人員,要作的事情太多了,軟體實在是一個浩大的腦力工程,甚至會讓人覺得這是一個投入/產出比最低的行業,因為要學習的知識實在太多了,每時每刻都要處於不斷的學習和更新當中.
這是指導整個軟體開發的指南,這裡包括軟體從開始到結束的整個過程,包括制定計劃、需求分析和定義、軟體設計、程式編寫、軟體測試、執行/維護,這六個步驟每一步的執行是保證專案成功完成的保證,以後將對這六個過程進行一一的分析。
軟體生命週期
其中包括:瀑布模型、演化模型、螺旋模型、噴泉模型、智慧模型。
模型特點:
瀑布模型:週期長,跟使用者見面比較晚,從計劃到和使用者一起計劃外,其他的部分使用者和開發人員是分離的,使用者不能直接把問題直接反應過去。
演化模型:由於在專案開發的初始階段人們對軟體的需求認識常常不夠清晰,因而使得開發專案難於做到一次開發成功,出現返工再開發在所難免。做兩次第一次只是實驗開發,其目標只是在於探索可行性,弄清軟體需求第二次則再此基礎上獲得較為滿意的軟體產品
螺旋模型:多次原型反覆並增加風險評估的開發模型
噴泉模型:有嚴格的數學理論和形式化的技術支援,但目前在所研究試驗階段,不能實現
智慧模型:1.通過領域的專家系統,可使需求說明更加完善、準確和無二義性。2.通過軟體工程的專家系統,提供一個設計庫支援,在開發過程中成為設計者的助手。3.通過軟體工程知識和特定應用領域的知識和規則的應用來提供對開發的幫助。但是,要建立適合於軟體設計的專家系統,或建立一個即適合軟體工程又適合應用領域的知識庫都是非常困難的。
--------------------------------
對軟體的基本認識
i.開發軟體為什麼要工程化
有很多人,尤其是很多學生存在這樣的誤區,平時感覺自己能用語言寫一個鬧鐘,寫一個記事本等一些小東西,就以為自己一個人就可以完成一個小的專案,所以很不理解為什麼開發軟體有時候不能讓一個人獨立完成,也有個人英雄主義在作怪。其實原因很簡單,比如說,高中我們做題應該很有體會,感覺一張卷子一點問題也沒有,但是等成績下來的時候總不是一百分,為什麼,因為我們很難發現自己的錯誤,哪怕是重複很多次,這是思維定勢。
ii.軟體開發與其說是技術活,不如說是規範活.
軟體開發是程式設計師奇思妙想的時候,用什麼方法都是隨心所欲的,有的人則為了追求速度或者說是彰顯個性而用一些很不大眾的演算法,以為這是體現自己高明的地方,恰恰相反,這真是不懂程式設計的表現,一般的專案一般都不是一個人來完成的,它分為開發階段和維護階段,然而維護階段一般又非開發人員所為,所以如果程式碼技術性過於高,反而對後面的維護不利,另外,IT是個跳槽率很高的職業,如果一項工程沒有完成就離開,剩下高明的演算法要讓誰看呢,出於對公司的考慮,最好還是規規矩矩,符合大眾的口味。
iii.文件的重要性
很多人,尤其是大學生,剛開始學習程式設計的時候,難免會有一些急功近利的想法,想快點做出點成績,但是往往欲速則不達,就想前段時間做的機房收費系統一樣,在一種完全沒有文件的情況下,雖然最後做完了,而且也跑起來了,問題似乎也沒有想象的那麼多,但是其中的過程只有自己知道,程式碼啦,資料庫啦都不忍心看,可以說是亂七八糟的,想加個資料庫就加,想加個功能就加,很有文件,就像沒有目的的去雕塑,雕成什麼樣,算什麼樣,而且很多情況是中途發現需要這個樣子了,才發現,那部分材料已經被自己給去掉了,所做的程式自然沒有規律可言,如果現在有人說那個機房收費系統那個功能要修改一下,我估計我的得全盤改動.
iv.開發軟體為什麼時間總是那麼緊,開發的人總是那麼累
曾經有過單純的想法,為什麼工作非要加班呢,多用些人不就行了嗎,人多力量大嘛,但是自從軟工看完後便覺得這種想法蕩然無存了,其實,原因並不是說老闆多黑心,而是取決於軟體開發工作的性質,這是一項需要智慧的工作,首先,這不是工廠,沒有機器,只有手工;其次,這裡需要殘雜很大一部分人文因素,比如說個人習慣,同樣輸出一個結果,兩個人的演算法往往就有很大的區別,所以參加人數越多,在專案中的不同因素就越多,因為各個模組之間的銜接問題就越大,所以參加人數應該是少而精,所以這也是為什麼藍精靈體中說程式設計師是“聰明而辛苦”,聰明在他們每個人都是一個設計師,辛苦在一項任務,自己又無可取代的位置,只能是自己的事情自己幹。
v.如果自己無法適應社會中的潛規則,那麼就學程式設計吧(不知道這樣說對不對)
從我目前的認識來看,突然發現軟體行業是整個社會的一片淨土,這裡不像其他行業一樣靠嘴吃飯,更多的是需要能力,除非老闆想賠錢,不然絕對不會用一個靠關係而不是靠技術的人來當專案經理,因為這個關係到整個專案生存的決定性因素;雖然同事之間保持著微妙的競爭關係,但是一個專案要想如期完成必須要和同事上司好好合作;做軟體開發的每個專案的每個功能,無處不能體現全心全意為人民服務的宗旨,所以開發軟體的人無疑又是心細如絲,必定是善良的,體貼的,嫁人就嫁程式設計師哦。所以,以此可見,這裡的確是一片淨土。