軟件工程誕生背景:
幾十年前,軟件行業(yè)很不規(guī)范,小程序雖然個人能很好完成,但缺乏良好的代碼管理;大程序設(shè)計人員多,工程復(fù)雜,由于缺乏相關(guān)理論知識和經(jīng)驗,導(dǎo)致很多失敗的大項目產(chǎn)生,為了解決這種情況誕生了軟件工程。建議你去讀《人月神話》,能管窺一二。
軟件工程專業(yè)誕生背景:
當年中國這片神奇的大地上缺少計算機方面剛畢業(yè)就能很好與企業(yè)接軌的人,因為高校供給企業(yè)的生源往往只知道理論知識,卻不能又快又好地上手工作,企業(yè)又往往不愿意花費太多精力去培養(yǎng)這樣的人,所以為了解決這種蛋疼的狀況,中國的軟件工程專業(yè)誕生了,更重視計算機實踐方面的教學(xué)!
軟件項目管理的提出是在20世紀70年代中期的美國,當時美國國防部專門研究了軟件開發(fā)不能按時提交,預(yù)算超支和質(zhì)量達不到用戶要求的原因,結(jié)果發(fā)現(xiàn)70%的項目是因為管理不善引起的,而非技術(shù)原因。
于是軟件開發(fā)者開始逐漸重視起軟件開發(fā)中的各項管理。到了20世紀90年代中期,軟件研發(fā)項目管理不善的問題仍然存在。
據(jù)美國軟件工程實施現(xiàn)狀的調(diào)查,軟件研發(fā)的情況仍然很難預(yù)測,大約只有10%的項目能夠在預(yù)定的費用和進度下交付。1995年,據(jù)統(tǒng)計,美國共取消了810億美元的商業(yè)軟件項目,其中31%的項目未做完就被取消,53%的軟件項目進度通常要延長50%的時間,只有9%的軟件項目能夠及時交付并且費用也控制在預(yù)算之內(nèi)。
軟件項目管理和其他的項目管理相比有相當?shù)奶厥庑?。首先,軟件是純知識產(chǎn)品,其開發(fā)進度和質(zhì)量很難估計和度量,生產(chǎn)效率也難以預(yù)測和保證。
其次,軟件系統(tǒng)的復(fù)雜性也導(dǎo)致了開發(fā)過程中各種風(fēng)險的難以預(yù)見和控制。Windows這樣的操作系統(tǒng)有1500萬行以上的代碼,同時有數(shù)千個程序員在進行開發(fā),項目經(jīng)理都有上百個。
這樣龐大的系統(tǒng)如果沒有很好的管理,其軟件質(zhì)量是難以想象的。軟件項目管理的內(nèi)容主要包括如下幾個方面:人員的組織與管理,軟件度量,軟件項目計劃,風(fēng)險管理,軟件質(zhì)量保證,軟件過程能力評估,軟件配置管理等。
這幾個方面都是貫穿、交織于整個軟件開發(fā)過程中的,其中人員的組織與管理把注意力集中在項目組人員的構(gòu)成、優(yōu)化;軟件度量把關(guān)注用量化的方法評測軟件開發(fā)中的費用、生產(chǎn)率、進度和產(chǎn)品質(zhì)量等要素是否符合期望值,包括過程度量和產(chǎn)品度量兩個方面;軟件項目計劃主要包括工作量、成本、開發(fā)時間的估計,并根據(jù)估計值制定和調(diào)整項目組的工作;風(fēng)險管理預(yù)測未來可能出現(xiàn)的各種危害到軟件產(chǎn)品質(zhì)量的潛在因素并由此采取措施進行預(yù)防;質(zhì)量保證是保證產(chǎn)品和服務(wù)充分滿足消費者要求的質(zhì)量而進行的有計劃,有組織的活動;軟件過程能力評估是對軟件開發(fā)能力的高低進行衡量;軟件配置管理針對開發(fā)過程中人員、工具的配置、使用提出管理策略。因為大家對人力資源管理和軟件過程能力比較有興趣,下面就詳細的對這兩方面展開討論。
軟件工程師需要學(xué)習(xí)以下知識:
(1) 熟悉計算機系統(tǒng)的基礎(chǔ)知識;
(2) 熟悉網(wǎng)絡(luò)操作系統(tǒng)的基礎(chǔ)知識;
(3) 理解計算機應(yīng)用系統(tǒng)的設(shè)計和開發(fā)方法;
(4) 熟悉數(shù)據(jù)通信的基礎(chǔ)知識;
(5) 熟悉系統(tǒng)安全和數(shù)據(jù)安全的基礎(chǔ)知識;
(6) 掌握網(wǎng)絡(luò)安全的基本技術(shù)和主要的安全協(xié)議與安全系統(tǒng);
(7) 掌握計算機網(wǎng)絡(luò)體系結(jié)構(gòu)和網(wǎng)絡(luò)協(xié)議的基本原理;
(8) 掌握計算機網(wǎng)絡(luò)有關(guān)的標準化知識;
(9) 掌握局域網(wǎng)組網(wǎng)技術(shù),理解城域網(wǎng)和廣域網(wǎng)基本技術(shù);
(10) 掌握計算機網(wǎng)絡(luò)互聯(lián)技術(shù);
(11) 掌握TCP/IP協(xié)議網(wǎng)絡(luò)的聯(lián)網(wǎng)方法和網(wǎng)絡(luò)應(yīng)用服務(wù)技術(shù);
(12) 理解接入網(wǎng)與接入技術(shù);
(13) 掌握網(wǎng)絡(luò)管理的基本原理和操作方法;
(14) 熟悉網(wǎng)絡(luò)系統(tǒng)的基本性能測試和優(yōu)化技術(shù),以及可靠性設(shè)計技術(shù);
(15) 理解網(wǎng)絡(luò)應(yīng)用的基本原理和技術(shù);
(16) 理解網(wǎng)絡(luò)新技術(shù)及其發(fā)展趨勢;
(17) 了解有關(guān)知識產(chǎn)權(quán)和互聯(lián)網(wǎng)的法律、法規(guī);
(18) 正確閱讀和理解本領(lǐng)域的英文資料。
軟件工程誕生背景:幾十年前,軟件行業(yè)很不規(guī)范,小程序雖然個人能很好完成,但缺乏良好的代碼管理;大程序設(shè)計人員多,工程復(fù)雜,由于缺乏相關(guān)理論知識和經(jīng)驗,導(dǎo)致很多失敗的大項目產(chǎn)生,為了解決這種情況誕生了軟件工程。
建議你去讀《人月神話》,能管窺一二。軟件工程專業(yè)誕生背景:當年中國這片神奇的大地上缺少計算機方面剛畢業(yè)就能很好與企業(yè)接軌的人,因為高校供給企業(yè)的生源往往只知道理論知識,卻不能又快又好地上手工作,企業(yè)又往往不愿意花費太多精力去培養(yǎng)這樣的人,所以為了解決這種蛋疼的狀況,中國的軟件工程專業(yè)誕生了,更重視計算機實踐方面的教學(xué)。
初級部分:
1. Java 面向?qū)ο蟪绦蛟O(shè)計、Java API使用、數(shù)據(jù)結(jié)構(gòu)及算法基礎(chǔ)、Java高級類特性、異常處理;
2. AWT及Swing圖形程序設(shè)計、流、網(wǎng)絡(luò)程序設(shè)計、對象序列化、Applet、多線程程序設(shè)計、Java應(yīng)用國際化基礎(chǔ);
3. Java桌面系統(tǒng)項目開發(fā);
4. Java編程基礎(chǔ)提高課程:反射機制、設(shè)計模式(I)、正則表達式,Java SE5.0新特性等;
5. 基于Oracle的數(shù)據(jù)庫開發(fā)及管理、數(shù)據(jù)庫設(shè)計、標準SQL、PL/SQL編程;
6. JDBC、JSP2.0、Servlet2.4、JavaBean編程;Tomcat服務(wù)器使用、Jbuilder及Eclipse 等集成開發(fā)環(huán)境;
7. Linux操作系統(tǒng)中的Java程序開發(fā)、Linux系統(tǒng)管理;
8. Java Web編程提高課程:JDBC進階、高效分頁處理、過濾器使用技巧、Struts中動態(tài)表單驗證、DispatchForm等;
高級部分
1. MVC設(shè)計模式、Struts架構(gòu)核心工作機制、國際化、驗證框架、Struts Taglib、ORM基礎(chǔ)、基于Hibernate的企業(yè)級應(yīng)用;
2. JavaME手機游戲設(shè)計、界面程序設(shè)計、數(shù)據(jù)庫程序設(shè)計、手機短信、多媒體短信(彩信)開發(fā);
3 .JavaEE核心技術(shù)、XML、Web Service、異構(gòu)系統(tǒng)整合、分布式應(yīng)用開發(fā)、WebLogic和JBoss等應(yīng)用服務(wù)器;
4 .CMM、UML與系統(tǒng)建模和設(shè)計、Rational Rose、軟件工程和軟件過程模型、版本控制及設(shè)計模式;
6. Java 企業(yè)級應(yīng)用開發(fā)提高課程:Hibernate使用技巧、設(shè)計模式(II)、Spring編程入門、提高Java EE應(yīng)用的性能;
.NET程序設(shè)計
.NET架構(gòu)、.NET桌面和Web程序設(shè)計、.NET與JavaEE平臺應(yīng)用的整合;
職業(yè)素質(zhì)
IT職業(yè)規(guī)劃、溝通技巧、團隊合作、專業(yè)技術(shù)規(guī)范、面試技巧等職業(yè)技能培訓(xùn)。
完成以上培訓(xùn)課程后,通過考核就可以獲得培訓(xùn)機構(gòu)頒發(fā)的合格證書。
現(xiàn)在比較吃香的是JAVA,特別是J2EE,未來3G出來后,手機編程將成為熱點,J2EE當然就會很吃香了。
關(guān)于證書的權(quán)威性,建議你要去知名的培訓(xùn)機構(gòu)去,最好是像SUN這類國際大公司有關(guān)認證所指定的培訓(xùn)機構(gòu),這樣權(quán)威性高些。
一般來講,軟件公司是非常喜歡通過了軟件工程師的人員,學(xué)歷對他們來說并不重要,而重要的是能力。如果你的能力夠強,在一個好的公司的話,這個月薪我想應(yīng)該是可以拿到的。
開發(fā)過程 軟件開發(fā)過程分為5個階段:分析 軟件需求分析就是回答做什么的問題。
它是一個對用戶的需求進行去粗取精、去偽存真、正確理解,然后把它用軟件工程開發(fā)語言(形式功能規(guī)約,即需求規(guī)格說明書)表達出來的過程。本階段的基本任務(wù)是和用戶一起確定要解決的問題,建立軟件的邏輯模型,編寫需求規(guī)格說明書文檔并最終得到用戶的認可。
需求分析的主要方法有結(jié)構(gòu)化分析方法、數(shù)據(jù)流程圖和數(shù)據(jù)字典等方法。本階段的工作是根據(jù)需求說明書的要求,設(shè)計建立相應(yīng)的軟件系統(tǒng)的體系結(jié)構(gòu),并將整個系統(tǒng)分解成若干個子系統(tǒng)或模塊,定義子系統(tǒng)或模塊間的接口關(guān)系,對各子系統(tǒng)進行具體設(shè)計定義,編寫軟件概要設(shè)計和詳細設(shè)計說明書,數(shù)據(jù)庫或數(shù)據(jù)結(jié)構(gòu)設(shè)計說明書,組裝測試計劃。
在任何軟件或系統(tǒng)開發(fā)的初始階段必須先完全掌握用戶需求,以期能將緊隨的系統(tǒng)開發(fā)過程中哪些功能應(yīng)該落實、采取何種規(guī)格以及設(shè)定哪些限制優(yōu)先加以定位。系統(tǒng)工程師最終將據(jù)此完成設(shè)計方案,在此基礎(chǔ)上對隨后的程序開發(fā)、系統(tǒng)功能和性能的描述及限制作出定義。
設(shè)計 軟件設(shè)計可以分為概要設(shè)計和詳細設(shè)計兩個階段。實際上軟件設(shè)計的主要任務(wù)就是將軟件分解成模塊是指能實現(xiàn)某個功能的數(shù)據(jù)和程序說明、可執(zhí)行程序的程序單元。
可以是一個函數(shù)、過程、子程序、一段帶有程序說明的獨立的程序和數(shù)據(jù),也可以是可組合、可分解和可更換的功能單元。模塊,然后進行模塊設(shè)計。
概要設(shè)計就是結(jié)構(gòu)設(shè)計,其主要目標就是給出軟件的模塊結(jié)構(gòu),用軟件結(jié)構(gòu)圖表示。詳細設(shè)計的首要任務(wù)就是設(shè)計模塊的程序流程、算法和數(shù)據(jù)結(jié)構(gòu),次要任務(wù)就是設(shè)計數(shù)據(jù)庫,常用方法還是結(jié)構(gòu)化程序設(shè)計方法。
編碼 軟件編碼是指把軟件設(shè)計轉(zhuǎn)換成計算機可以接受的程序,即寫成以某一程序設(shè)計語言表示的"源程序清單"。充分了解軟件開發(fā)語言、工具的特性和編程風(fēng)格,有助于開發(fā)工具的選擇以及保證軟件產(chǎn)品的開發(fā)質(zhì)量。
當前軟件開發(fā)中除在專用場合,已經(jīng)很少使用二十世紀80年代的高級語言了,取而代之的是面向?qū)ο蟮拈_發(fā)語言。而且面向?qū)ο蟮拈_發(fā)語言和開發(fā)環(huán)境大都合為一體,大大提高了開發(fā)的速度。
測試 軟件測試的目的是以較小的代價發(fā)現(xiàn)盡可能多的錯誤。要實現(xiàn)這個目標的關(guān)鍵在于設(shè)計一套出色的測試用例(測試數(shù)據(jù)和預(yù)期的輸出結(jié)果組成了測試用例)。
如何才能設(shè)計出一套出色的測試用例,關(guān)鍵在于理解測試方法。不同的測試方法有不同的測試用例設(shè)計方法。
兩種常用的測試方法是白盒法測試對象是源程序,依據(jù)的是程序內(nèi)部的的邏輯結(jié)構(gòu)來發(fā)現(xiàn)軟件的編程錯誤、結(jié)構(gòu)錯誤和數(shù)據(jù)錯誤。結(jié)構(gòu)錯誤包括邏輯、數(shù)據(jù)流、初始化等錯誤。
用例設(shè)計的關(guān)鍵是以較少的用例覆蓋盡可能多的內(nèi)部程序邏輯結(jié)果。白盒法和黑盒法依據(jù)的是軟件的功能或軟件行為描述,發(fā)現(xiàn)軟件的接口、功能和結(jié)構(gòu)錯誤。
其中接口錯誤包括內(nèi)部/外部接口、資源管理、集成化以及系統(tǒng)錯誤。黑盒法用例設(shè)計的關(guān)鍵同樣也是以較少的用例覆蓋模塊輸出和輸入接口。
黑盒法。維護 維護是指在已完成對軟件的研制(分析、設(shè)計、編碼和測試)工作并交付使用以后,對軟件產(chǎn)品所進行的一些軟件工程的活動。
即根據(jù)軟件運行的情況,對軟件進行適當修改,以適應(yīng)新的要求,以及糾正運行中發(fā)現(xiàn)的錯誤。編寫軟件問題報告、軟件修改報告。
一個中等規(guī)模的軟件,如果研制階段需要一年至二年的時間,在它投入使用以后,其運行或工作時間可能持續(xù)五年至十年。那么它的維護階段也是運行的這五年至十年期間。
在這段時間,人們幾乎需要著手解決研制階段所遇到的各種問題,同時還要解決某些維護工作本身特有的問題。做好軟件維護工作,不僅能排除障礙,使軟件能正常工作,而且還可以使它擴展功能,提高性能,為用戶帶來明顯的經(jīng)濟效益。
然而遺憾的是,對軟件維護工作的重視往往遠不如對軟件研制工作的重視。而事實上,和軟件研制工作相比,軟件維護的工作量和成本都要大得多。
在實際開發(fā)過程中,軟件開發(fā)并不是從第一步進行到最后一步,而是在任何階段,在進入下一階段前一般都有一步或幾步的回溯。在測試過程中的問題可能要求修改設(shè)計,用戶可能會提出一些需要來修改需求說明書等。
編輯本段 開發(fā)平臺 軟件開發(fā)平臺源于繁瑣的實踐開發(fā)過程中。開發(fā)人員在實踐中將常用的函數(shù)、類、抽象、接口等進行總結(jié)、封裝,成為了可以重復(fù)使用的“中間件”,而隨著“中間件”的成熟和通用,功能更強大、更能滿足企業(yè)級客戶需求的——軟件開平臺應(yīng)運而生。
平臺是一段時間內(nèi)科研成果的匯聚,也是階段性平臺期的標志,為行業(yè)進入新的研發(fā)領(lǐng)域提供了基礎(chǔ)。由于平臺對企業(yè)核心競爭力的提升非常明顯,目前國內(nèi)的管理軟件市場,軟件開發(fā)平臺的應(yīng)用已經(jīng)成為一種趨勢。
由于開發(fā)環(huán)境、開發(fā)人員、功能定位、行業(yè)背景等的不同,不同品牌的平臺存在較大差別。編輯本段 開發(fā)環(huán)境 軟件開發(fā)環(huán)境在歐洲又叫集成式項目支援環(huán)境(Integrated Project Support Environment,IPSE)。
軟件開發(fā)環(huán)境的主要組成成分是軟件工具。人機界面是軟件開發(fā)環(huán)境與用戶之間的一個統(tǒng)一的交互式對話系統(tǒng),它是軟件開。
如何成為好的程序員?How To Become a good Programmer?首先問你一個問題:你們在學(xué)校都學(xué)些什么課程?問這個問題的原因是,我認為學(xué)校的計算機科學(xué)基礎(chǔ)課很重要。
如果你所在學(xué)校的課程設(shè)置合理,那你應(yīng)該先把主要精力花在這些基礎(chǔ)課上。很多學(xué)生看到基礎(chǔ)理論就茫然,不知道這些圖表,符號,甚至硬件的知識對將來的軟件開發(fā)有什么用。
用處大得很哪。比如,操作系統(tǒng)課里講到的多線程的東西在系統(tǒng)編程里很有用。
又比如,盡管你將來不會去涉及電腦的硬件,計算機架構(gòu)里的知識對分析算法的性能(快慢等等)很有用。可以把計算機語言和開發(fā)工具比作文字,而把計算機科學(xué)的知識比做思想。
只有思想,不會行文,不行;但是,行文流暢,思想空洞,也不行。大學(xué)的階段正是打好基礎(chǔ),豐富思想的年代。
成為一名好的程序員,不是簡單地通過學(xué)幾門課程就能做到的。我個人認為成為一名好的程序員的要素有:1。
扎實的基礎(chǔ)知識;2。很強的解決問題的能力;3。
熟練的編程調(diào)試能力;4。創(chuàng)新能力;5。
團隊合作能力;6。持續(xù)的自學(xué)能力;7。
好奇心 這些能力和品質(zhì)(甚至可以說是習(xí)慣)都應(yīng)該從大學(xué)階段就著手培養(yǎng),并且從身邊的小事開始培養(yǎng)。比如,很多中國的大學(xué)畢業(yè)生都缺乏編程和調(diào)試經(jīng)驗。
學(xué)習(xí)C語言,考試過關(guān)就算學(xué)會了。課題項目中,只要程序能夠編譯,運行,并且輸入輸出滿足要求就了事了。
但是,寫程序的時候是否想過如何把程序?qū)懙酶泳珶?,高效,高質(zhì)量?對程序調(diào)試中出現(xiàn)的問題是否刨根問底知道原因,還是不求甚解搪塞過去算數(shù)?還有,很多中國的大學(xué)畢業(yè)生對于知識的掌握膚淺,機械,沒有好奇心,不會刨根問底。比如,學(xué)會了C++,有沒有看過一個object在編譯后,在匯編代碼中是如何被初始化的?這個object的各個成員在內(nèi)存中是如何放的?在一個成員函數(shù)被調(diào)用的時候編譯器在匯編代碼中加入了哪些額外的動作?虛函數(shù)的調(diào)用是如何實現(xiàn)的? 這些東西恐怕在編程語言或編譯原理中都沒有詳細提到。
但是,你是否有過好奇心去知道?最后,一些中國學(xué)生的大問題就是死記硬背,沒有學(xué)到某種算法技術(shù)的根本原理,沒有應(yīng)變和創(chuàng)新的能力。比如,有個問題是如何在不用額外內(nèi)存的情況下把一棵樹的同一層節(jié)點都連起來。
很多學(xué)生都能夠回答這是一個廣度遍歷的問題。但是,課本上說了廣度遍歷是一定要有額外數(shù)據(jù)結(jié)構(gòu)輔助的(隊列)。
所以,不給額外內(nèi)存怎么行?請看,課本上說的用隊列的方法記住了,但是就是不知道為什么要用隊列。如果深刻掌握了這個隊列的作用,那么這個問題是很容易的。
舉了這么多例子,我想說明的事,想成為一位好程序員(其實從事任何一個行業(yè)都是如此),重要的是要養(yǎng)成一個鉆研,好奇,創(chuàng)新,動手,合作,不滿足于填鴨,不滿足于考試交差,不滿足于表象的一種優(yōu)秀的習(xí)慣。這不是學(xué)幾門課能夠一蹴而就的。
當然,如果你的在校課程不能使你滿足,我以及論壇上的朋友可能能夠給你推薦一些書或科目。我覺得要提高編程的能力,有一位良師很重要。
這位良師可以是在編程方面比你走在前面的同學(xué),也可以是學(xué)校里你幫他做項目的老師,也可以是校外公司里的老師或老板。很多東西在實際的項目中,有一位良師察看你的程序,幫你指出不足,手把手地指導(dǎo)你調(diào)試,會對你很有幫助。
所以,當學(xué)會了書本上的基本知識以后,可以努力尋找一些有實用性的項目,借機在項目中找到高手指導(dǎo)。這個項目可以在學(xué)校找,也可以到校外找。
一開始不要計較報酬,甚至如果能夠?qū)さ礁呤种更c,白干也行。其次是讀好的源代碼。
多讀好的源代碼就象多讀好的文章,會有利于自己寫作。能夠讀懂別人的代碼也是一門硬功夫。
將來很多項目中你不會重頭做,而是在半途加入(一般文檔又不很齊全),因此需要能夠很快讀懂別人代碼和想法的能力。再次是看一些編程方面的好書。
Writing Solid Code是一本很經(jīng)典的書。最近出的Writing Secure Code也不錯。
在你熟練掌握C以后,可以學(xué)一下C++并熟悉面向?qū)ο蟮某绦蛟O(shè)計思路。在掌握C++的基礎(chǔ)上可以看一下Design Patterns。
看你要把編程學(xué)到多么專業(yè)。到一定程度,你會發(fā)現(xiàn)如果沒有學(xué)過數(shù)據(jù)結(jié)構(gòu),算法原理,編譯原理和操作系統(tǒng),可能在某些方面會遇到一些障礙。
所以,如果有精力和條件的話,可以同時了解這些方面的知識。最后,我要提醒你不要因為編程這一業(yè)余愛好而影響了你本專業(yè)的課程,除非你決定轉(zhuǎn)行。
對很多在校學(xué)生來說,本專業(yè)的成績很重要,因為這個成績可能會影響到將 來找工作,申請研究生院等等。英語也很重要。
我讀翻譯的計算機書總覺得隔了一層,翻得不貼切。能夠直接閱讀英文資料更好。
計算機專業(yè)修煉和武俠小說中功夫修煉都是一樣的:金庸先生小說中提到高手習(xí)武包括內(nèi)功和外功,其實這個道理在計算機專業(yè)同學(xué)中一樣適用!內(nèi)功包括:基本心法和高級心法 基本心法需要每個習(xí)武者必須修煉,包括:數(shù)據(jù)結(jié)構(gòu)、編譯原理、計算機組成原理、高等數(shù)學(xué)、線性代數(shù)以及外語等。高級心法根據(jù)個人需要定,比如:網(wǎng)絡(luò)類需要學(xué)習(xí)包括TCP/IP原理等;軟件工程需要學(xué)習(xí)包括軟件工程的基礎(chǔ)課程。
外功包括:基本招。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時間:3.417秒