複製鏈接
請複製以下鏈接發送給好友

軟件工程

(軟件工程概述)

鎖定
軟件工程是研究和應用如何以系統性的、規範化的、可定量的過程化方法去開發和維護軟件,以及如何把經過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來的學科。它涉及到程序設計語言、數據庫、軟件開發工具、系統平台、標準、設計模式等方面。
中文名
軟件工程概述
外文名
Summary of software engineering
簡    稱
SE
相關專業
通信工程、計算機科學與技術,電子商務

軟件工程簡介

軟體工程的方法有很多方面的意義。包括專案管理,分析,設計,程序的編寫,測試和質量控制。
軟體設計方法可以區別為重量級的方法和輕量級的方法。重量級的方法中產生大量的正式文檔。
著名的重量級開發方法包括ISO9000,CMM,和統一軟體開發過程(RUP)。
輕量級的開發過過程沒有對大量正式文檔的要求。着名的輕量級開發方法包括極限編程(XP)和敏捷流程(AgileProcesses)。
根據《新方法學》這篇文章的説法,重量級方法呈現的是一種防禦型的姿態。在應用重量級方法的軟體組織中,由於軟體項目經理不參與或者很少參與程序設計,無法從細節上把握項目進度,因而會對項目產生恐懼感,不得不要求程式設計師不斷撰寫很多“軟體開發文檔”。而輕量級方法則呈現“進攻型”的姿態,這一點從XP方法特別強調的四個準則—“溝通、簡單、反饋和勇氣上有所體現。有一些人認為,重量級方法合於大型的軟體團隊(數十人以上)使用,而“輕量級方法”適合小型的軟體團隊(幾人、十幾人)使用。當然,關於重量級方法和輕量級方法的優劣存在很多爭論,而各種方法也在不斷進化中。
一些方法論者認為人們在開發中應當嚴格遵循並且實施這些方法。但是一些人並不具有實施這些方法的條件。實際上,採用何種方法開發軟體取決於很多因素,同時受到環境的制約

軟件工程基本介紹

軟件工程一直以來都缺乏一個統一的定義,很多學者、組織機構都分別給出了自己的定義:
BarryBoehm:運用現代科學技術知識來設計並構造計算機程序及為開發、運行和維護這些程序所必需的相關文件資料。
IEEE:在軟件工程術語彙編中的定義:軟件工程是:1.將系統化的、嚴格約束的、可量化的方法應用於軟件的開發、運行和維護,即將工程化應用於軟件;2.在1中所述方法的研究
FritzBauer:在NATO會議上給出的定義:建立並使用完善的工程化原則,以較經濟的手段獲得能在實際機器上有效運行的可靠軟件的一系列方法。
《計算機科學技術百科全書》:軟件工程是應用計算機科學、數學、邏輯學及管理科學等原理,開發軟件的工程。軟件工程借鑑傳統工程的原則、方法,以提高質量、降低成本和改進算法。其中,計算機科學、數學用於構建模型與算法,工程科學用於制定規範、設計範型(paradigm)、評估成本及確定權衡,管理科學用於計劃、資源、質量、成本等管理。
比較認可的一種定義認為:軟件工程是研究和應用如何以系統性的、規範化的、可定量的過程化方法去開發和維護軟件,以及如何把經過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來。
內涵:
一、軟件工程過程是指為獲得軟件產品,在軟件工具的支持下由軟件工程師完成的一系列軟件工程活動,包括以下四個方面:
1、P(Plan)——軟件規格説明。規定軟件的功能及其運行時的限制。
2、D(DO)——軟件開發。開發出滿足規格説明的軟件。
3、C(Check)——軟件確認。確認開發的軟件能夠滿足用户的需求。
4、A(Action)——軟件演進。軟件在運行過程中不斷改進以滿足客户新的需求。
二、從軟件開發的觀點看,它就是使用適當的資源(包括人員,軟硬件資源,時間等),為開發軟件進行的一組開發活動,在活動結束時輸入(即用户的需求)轉化為輸出(最終符合用户需求的軟件產品)。三個階段:定義階段:可行性研究初步項目計劃、需求分析; 開發階段:概要設計、詳細設計、實現、測試;運行和維護階段:運行、維護、廢棄原則:1、抽象;2、信息隱蔽;3、模塊化;4、局部化;5、確定性;6,一致性;7、完備性;8、可驗證性

軟件工程發展過程

軟件是由計算機程序和程序設計的概念發展演化而來的,是在程序和程序設計發展到一定規模並且逐步商品化的過程中形成的。軟件開發經歷了程序設計階段、軟件設計階段和軟件工程階段的演變過程。
程序設計階段
程序設計階段出現在1946年~1955年。此階段的特點是:尚無軟件的概念,程序設計主要圍繞硬件進行開發,規模很小,工具簡單,無明確分工(開發者和用户),程序設計追求節省空間和編程技巧,無文檔資料(除程序清單外),主要用於科學計算。
軟件設計階段
軟件設計階段出現在1956年~1970年。此階段的特點是:硬件環境相對穩定,出現了“軟件作坊”的開發組織形式。開始廣泛使用產品軟件(可購買),從而建立了軟件的概念。隨着計算機技術的發展和計算機應用的日益普及,軟件系統的規模越來越龐大,高級編程語言層出不窮,應用領域不斷拓寬,開發者和用户有了明確的分工,社會對軟件的需求量劇增。但軟件開發技術沒有重大突破,軟件產品的質量不高,生產效率底下,從而導致了“軟件危機”的產生。
軟件工程階段
自1970年起,軟件開發進入了軟件工程階段。由於“軟件危機”的產生,迫使人們不得不研究、改變軟件開發的技術手段和管理方法。從此軟件產生進入了軟件工程時代。此階段的特定是:硬件已向巨型化、微型化、網絡化和智能化四個方向發展,數據庫技術已成熟並廣泛應用,第三代、第四代語言出現;第一代軟件技術:結構化程序設計在數值計算領域取得優異成績;第二代軟件技術:軟件測試技術、方法、原理用於軟件生產過程;第三代軟件技術:處理需求定義技術用於軟件需求分析和描述。
(關於軟件危機的詳細介紹可以閲讀參考資料:)

軟件工程基本目標

軟件工程的目標是:在給定成本、進度的前提下,開發出具有適用性、有效性、可修改性、可靠性、可理解性、可維護性、可重用性、可移植性、可追蹤性、可互操作性和滿足用户需求的軟件產品。追求這些目標有助於提高軟件產品的質量和開發效率,減少維護的困難。
(1)適用性:軟件在不同的系統約束條件下,使用户需求得到滿足的難易程度。
(2)有效性:軟件系統能最有效的利用計算機的時間和空間資源。各種軟件無不把系統的時/空開銷作為衡量軟件質量的一項重要技術指標。很多場合,在追求時間有效性和空間有效性時會發生矛盾,這時不得不犧牲時間有效性換取空間有效性或犧牲空間有效性換取時間有效性。時/空折衷是經常採用的技巧。
(3)可修改性:允許對系統進行修改而不增加原系統的複雜性。它支持軟件的調試和維護,是一個難以達到的目標。
(4)可靠性:能防止因概念、設計和結構等方面的不完善造成的軟件系統失效,具有挽回因操作不當造成軟件系統失效的能力。
(5)可理解性:系統具有清晰的結構,能直接反映問題的需求。可理解性有助於控制系統軟件複雜性,並支持軟件的維護、移植或重用。
(6)可維護性:軟件交付使用後,能夠對它進行修改,以改正潛伏的錯誤,改進性能和其它屬性,使軟件產品適應環境的變化等。軟件維護費用在軟件開發費用中佔有很大的比重。可維護性是軟件工程中一項十分重要的目標。
(7)可重用性:把概念或功能相對獨立的一個或一組相關模塊定義為一個軟部件。可組裝在系統的任何位置,降低工作量。
(8)可移植性:軟件從一個計算機系統或環境搬到另一個計算機系統或環境的難易程度。
(9)可追蹤性:根據軟件需求對軟件設計、程序進行正向追蹤,或根據軟件設計、程序對軟件需求的逆向追蹤的能力。
(10)可互操作性:多個軟件元素相互通信並協同完成任務的能力。

軟件工程開發過程

生產一個最終能滿足需求且達到工程目標的軟件產品所需要的步驟。軟件工程過程主要包括開發過程、運作過程、維護過程。它們覆蓋了需求、設計、實現、確認以及維護等活動。需求活動包括問題分析和需求分析。問題分析獲取需求定義,又稱軟件需求規約。需求分析生成功能規約。設計活動一般包括概要設計和詳細設計。概要設計建立整個軟件系統結構,包括子系統、模塊以及相關層次的説明、每一模塊的接口定義。詳細設計產生程序員可用的模塊説明,包括每一模塊中數據結構説明及加工描述。實現活動把設計結果轉換為可執行的程序代碼。確認活動貫穿於整個開發過程,實現完成後的確認,保證最終產品滿足用户的要求。維護活動包括使用過程中的擴充、修改與完善。伴隨以上過程,還有管理過程、支持過程、培訓過程等。

軟件工程開發原則

軟件工程的原則是指圍繞工程設計、工程支持以及工程管理在軟件開發過程中必須遵循的原則。
軟件工程的原則有以下四項基本原則:
選取適宜開發範型
該原則與系統設計有關。在系統設計中,軟件需求、硬件需求以及其他因素之間是相互制約、相互影響的,經常需要權衡。因此,必須認識需求定義的易變性,採用適宜的開發範型予以控制,以保證軟件產品滿足用户的要求。
採用合適的設計方法
在軟件設計中,通常要考慮軟件的模塊化、抽象與信息隱蔽、局部化、一致性以及適應性等特徵。合適的設計方法有助於這些特徵的實現,以達到軟件工程的目標。
提供高質量的工程支持
“工欲善其事,必先利其器”。在軟件工程中,軟件工具與環境對軟件過程的支持頗為重要。軟件工程項目的質量與開銷直接取決於對軟件工程所提供的支撐質量和效用。
重視開發過程的管理
軟件工程的管理,直接影響可用資源的有效利用,生產滿足目標的軟件產品,提高軟件組織的生產能力等問題。因此,僅當軟件過程得以有效管理時,才能實現有效的軟件工程。
這一軟件工程框架告訴我們,軟件工程的目標是可用性、正確性和合算性;實施一個軟件工程要選取適宜的開發範型,要採用合適的設計方法,要提供高質量的工程支撐,要實行開發過程的有效管理;軟件工程活動主要包括需求、設計、實現、確認和支持等活動,每一活動可根據特定的軟件工程,採用合適的開發範型、設計方法、支持過程以及過程管理。根據軟件工程這一框架,軟件工程學科的研究內容主要包括:軟件開發範型、軟件開發方法、軟件過程、軟件工具、軟件開發環境、計算機輔助軟件工程(CASE) 及軟件經濟學等。

軟件工程基本原理

自從1968年提出“軟件工程”這一術語以來,研究軟件工程的專家學者們陸續提出了100多條關於軟件工程的準則或信條。美國著名的軟件工程專家巴利·玻姆(Barry Boehm)綜合這些專家的意見,並總結了美國天合公司(TRW)多年的開發軟件的經驗,於1983年提出了軟件工程的七條基本原理。
玻姆認為,這七條原理是確保軟件產品質量和開發效率的原理的最小集合。它們是相互獨立的,是缺一不可的最小集合;同時,它們又是相當完備的。人們當然不能用數學方法嚴格證明它們是一個完備的集合,但是可以證明,在此之前已經提出的100多條軟件工程準則都可以有這七條原理的任意組合藴含或派生。
下面簡要介紹軟件工程的七條原理:
用分階段的生命週期計劃嚴格管理
這一條是吸取前人的教訓而提出來的。統計表明,50%以上的失敗項目是由於計劃不周而造成的。在軟件開發與維護的漫長生命週期中,需要完成許多性質各異的工作。這條原理意味着,應該把軟件生命週期分成若干階段,並相應制定出切實可行的計劃,然後嚴格按照計劃對軟件的開發和維護進行管理。玻姆認為,在整個軟件生命週期中應指定並嚴格執行6類計劃:項目概要計劃、里程碑計劃、項目控制計劃、產品控制計劃、驗證計劃、運行維護計劃。
堅持進行階段評審
統計結果顯示:大部分錯誤是在編碼之前造成的,大約佔63%錯誤發現的越晚,改正它要付出的代價就越大,要差2到3個數量級。 因此,軟件的質量保證工作不能等到編碼結束之後再進行,應堅持進行嚴格的階段評審,以便儘早發現錯誤。
實行嚴格的產品控制
開發人員最痛恨的事情之一就是改動需求。但是實踐告訴我們,需求的改動往往是不可避免的。這就要求我們要採用科學的產品控制技術來順應這種要求。也就是要採用變動控制,又叫基準配置管理。當需求變動時,其它各個階段的文檔或代碼隨之相應變動,以保證軟件的一致性。
採納現代程序設計技術
從六、七十年代的結構化軟件開發技術,到最近的面向對象技術,從第一、第二代語言,到第四代語言,人們已經充分認識到:方法大似氣力。採用先進的技術即可以提高軟件開發的效率,又可以減少軟件維護的成本。
結果應能清楚地審查
軟件是一種看不見、摸不着的邏輯產品。軟件開發小組的工作進展情況可見性差,難於評價和管理。為更好地進行管理,應根據軟件開發的總目標及完成期限,儘量明確地規定開發小組的責任和產品標準,從而使所得到的標準能清楚地審查。
開發小組的人員應少而精
開發人員的素質和數量是影響軟件質量和開發效率的重要因素,應該少而精。 這一條基於兩點原因:高素質開發人員的效率比低素質開發人員的效率要高几倍到幾十倍,開發工作中犯的錯誤也要少的多;當開發小組為N人時,可能的通訊信道為N(N-1)/2, 可見隨着人數N的增大,通訊開銷將急劇增大。
承認不斷改進軟件工程實踐的必要性
遵從上述六條基本原理,就能夠較好地實現軟件的工程化生產。但是,它們只是對現有的經驗的總結和歸納,並不能保證趕上技術不斷前進發展的步伐。因此,玻姆提出應把承認不斷改進軟件工程實踐的必要性作為軟件工程的第七條原理。根據這條原理,不僅要積極採納新的軟件開發技術,還要注意不斷總結經驗,收集進度和消耗等數據,進行出錯類型和問題報告統計。這些數據既可以用來評估新的軟件技術的效果,也可以用來指明必須着重注意的問題和應該優先進行研究的工具和技術。

軟件工程體系結構

軟件體系結構表示了一個軟件系統的高層結構,主要特點有:
1.軟件系統結構是一個高層次上的抽象,它並不涉及具體的系統結構(比如B/S還是C/S),也不關心具體的實現。
2.軟件體系結構必須支持系統所要求的功能,在設計軟件體系結構的時候,必須考慮系統的動態行為。
3.在設計軟件體系結構的時候,必須考慮有現有系統的兼容性、安全性和可靠性。同時還要考慮系統以後的擴展性和伸縮性。所以有時候必須在多個不同方向的目標中進行決策。
當前已經有一些關於規範化軟件體系結構,比如:ISO的開放系統互聯模型、X Window系統等等。軟件系統的結構通常被定義為兩個部分:一個是計算部件。另一個就是部件之間的交互。如果把軟件系統看成一幅圖的話,計算部件就是其中的節點,而部件之間的交互就是節點之間的弧線。部件之間的連接可以被認為是一種連接器,比如過程調用、事件廣播、數據庫查詢等等。正確的體系結構設計是軟件系統成功的關鍵。

軟件工程開發方法

國外大的軟件公司和機構一直在研究軟件開發方法這個概念性的東西,而且也提出了很多實際的開發方法,比如:生命週期法原型化方法、面向對象方法等等。下面介紹幾種流行的開發方法:
結構化開發方法是由E.Yourdon 和 L.L.Constantine 提出的,即所謂的SASD 方 法, 也可稱為面向功能的軟件開發方法或面向數據流的軟件開發方法。Yourdon方法是80年代 使用最廣泛的軟件開發方法。它首先用結構化分析(SA)對軟件進行需求分析,然後用結構化設計(SD)方法進行總體設計,最後是結構化編程(SP)。它給出了兩類典型的軟件結構(變換型和事務型)使軟件開發的成功率大大提高。
面向數據結構的軟件開發方法
Jackson方法是最典型的面向數據結構的軟件開發方法,Jackson方法把問題分解為可由三種基本結構形式表示的各部分的層次結構。三種基本的結構形式就是順序、選擇和重複。三種數據結構可以進行組合,形成複雜的結構體系。這一方法從目標系統的輸入、輸出數據結構入手,導出程序框架結構,再補充其它細節,就可得到完整的程序結構圖。這一方法對輸入、輸出數據結構明確的中小型系統特別有效,如商業應用中的文件表格處理。該方法也可與其它方法結合,用於模塊的詳細設計。
面向問題的分析法
PAM(Problem Analysis Method)是80年代末由日立公司提出的一種軟件開發方法。 它的基本思想是考慮到輸入、輸出數據結構,指導系統的分解,在系統分析指導下逐步綜 合。這一方法的具體步驟是:從輸入、輸出數據結構導出基本處理框;分析這些處理框之間的先後關係;按先後關係逐步綜合處理框,直到畫出整個系統的PAD圖。這一方法本質上是綜合的自底向上的方法,但在逐步綜合之前已進行了有目的的分解,這個目的就是充分考慮系統的輸入、輸出數據結構。PAM方法的另一個優點是使用PAD圖。這是一種二維樹形結構圖,是最好的詳細設計表示方法之一。當然由於在輸入、輸出數據結構與整個系統之間同樣存在着鴻溝,這一方法仍只適用於中小型問題。
原型化方法
產生原型化方法的原因很多,主要隨着我們系統開發經驗的增多,我們也發現並非所有的需求都能夠預先定義而且反覆修改是不可避免的。當然能夠採用原型化方法是因為開發工具的快速發展,比如用VB,DELPHI等工具我們可以迅速的開發出一個可以讓用户看的見、摸的着的系統框架,這樣,對於計算機不是很熟悉的用户就可以根據這個樣板提出自己的需求。

軟件工程軟件需求

軟件需求包括 3 個不同的層次――業務需求、用户需求和功能需求。
除此之外,每個系統還有各種非功能需求。
業務需求(Business requirement)表示組織或客户高層次的目標。業務需求通常來自項目投資人、購買產品的客户、實際用户的管理者、市場營銷部門或產品策劃部門。業務需求描述了組織為什麼要開發一個系統,即組織希望達到的目標。使用前景和範圍( vision and scope )文檔來記錄業務需求,這份文檔有時也被稱作項目輪廓圖或市場需求( project charter 或 market requirement )文檔。
用户需求(user requirement)描述的是用户的目標,或用户要求系統必須能完成的任務。用例、場景描述和事件――響應表都是表達用户需求的有效途徑。也就是説用户需求描述了用户能使用系統來做些什麼。
功能需求(functional requirement)規定開發人員必須在產品中實現的軟件功能,用户利用這些功能來完成任務,滿足業務需求。功能需求有時也被稱作行為需求( behavioral requirement ),因為習慣上總是用“應該”對其進行描述:“系統應該發送電子郵件來通知用户已接受其預定”。功能需求描述是開發人員需要實現什麼。
系統需求(system requirement)用於描述包含多個子系統的產品(即系統)的頂級需求。系統可以只包含軟件系統,也可以既包含軟件又包含硬件子系統。人也可以是系統的一部分,因此某些系統功能可能要由人來承擔。
業務規則包括企業方針、政府條例、工業標準、會計準則和計算方法等。業務規劃本身並非軟件需求,因為它們不屬於任何特定軟件系統的範圍。然而,業務規則常常會限制誰能夠執行某些特定用例,或者規定系統為符合相關規則必須實現某些特定功能。有時,功能中特定的質量屬性(通過功能實現)也源於業務規則。所以,對某些功能需求進行追溯時,會發現其來源正是一條特定的業務規則。
功能需求記錄在軟件需求規格説明( SRS )中。 SRS 完整地描述了軟件系統的預期特性。 SRS 我們一般把它當作文檔,其實, SRS 還可以是包含需求信息的數據庫或電子表格;或者是存儲在商業需求管理工具中的信息;而對於小型項目,甚至可能是一疊索引卡片。開發、測試、質量保證、項目管理和其他相關的項目功能都要用到 SRS 。
除了功能需求外, SRS 中還包含非功能需求,包括性能指標和對質量屬性的描述。
質量屬性(quality attribute)對產品的功能描述作了補充,它從不同方面描述了產品的各種特性。這些特性包括可用性、可移植性、完整性、效率和健壯性,它們對用户或開發人員都很重要。其他的非功能需求包括系統與外部世界的外部界面,以及對設計與實現的約束。
約束(constraint)限制了開發人員設計和構建系統時的選擇範圍。

軟件工程專業介紹

IOS軟件開發
IOS軟件開發培養德、智、體全面發展,面向龐大的Mac用户羣,立足於正蓬勃發展的移動互聯行業,具備良好職IOS軟件業道德與敬業精神,同時掌握最前沿iOS架構、應用、遊戲開發技術的高素質技能型人才。
IOS就是運行在iphone上的一個系統,是由蘋果公司開發的,就好比電腦上的XP一樣,IOS就是iphone的靈魂。眾所周知,人們在被它智能的應用所折服的同時也將研發智能軟件的3G行業看做是最具發展力、最有前途的行業之一。IOS最初是設計給iphone使用,後來陸續套用到ipod touch、ipad以及apple tv產品上。也就是説,ios是蘋果所有移動產品的操作系統,蘋果ios是全球最完善、生態環境最優秀的移動開發平台。[1]
移動終端應用開發
移動終端應用開發培養移動互聯高端開發型人才。移動應用開發方向將最新的移動開發技術IOS和Android進引入移動終端應用開發教學體系,通過以項目為中心,以學生為中心的教學理念,注重培養學生的實際完成項目能力和團隊合作意識,擁有在IOS和Android移動終端上設計、開發和測試移動應用軟件和移動終端遊戲的能力。
計算機軟件
計算機軟件在現代社會經濟生活中佔有極其重要的地位,在各個領域中發揮着越來越重要的作用。該專業畢業的學生擁有龐大的就業市場,具有廣闊的就業前景。主要課程有:C語言程序設計、VB程序設計、Java面向對象程序設計、數據結構、計算機網絡與通訊、網絡操作系統、軟件工程、多媒體技術與應用、大型數據庫處理技術等。

軟件工程研究領域

軟件架構
軟件設計方法
軟件領域建模
軟件工程決策支持
軟件工程教育
軟件測試技術自動化的軟件設計
合成基於組件的軟件工程計算機支持的協同工作編程語言
軟件工程計算機
網絡信息與通信安全
計算機圖形學與人機交互多媒體技術應用
人工智能與識別嵌入式軟件與應用
自動控制分佈式計算與網格計算
雲計算技術存儲技術數據庫技術
研究計算機輔助設計與應用技術大數據分析與處理

軟件工程就業形勢

軟件產業的發展已經關係到一個國家的政治和未來,軟件產業將成為21世紀擁有最大產業規模和最廣闊前景的新興產業之一。軟件領域是一個包括系統軟件,中間軟件,嵌入式軟件,數據庫軟件,財務和企業管理軟件,教育軟件,遊戲軟件等。軟件行業中軟件外包和軟件產品化是投資的兩大主線,未來中國的外包市場規模將不斷增長,同時行業集中度將逐步提升,而領先的企業獲得的增長速度將高於行業的平均增長速度。各個企業將集中受益於軟件外包的行業趨勢,利用其充分提升企業的業績。中國的系統集成類上市公司軟件產品化比例非常低,造成了企業盈利狀況不明顯。產品化程度高的公司主要集中在管理軟件,金融行業軟件,及聚焦於某個行業的軟件公司。提升軟件的產品化程度將非常有益於中國軟件企業競爭力的提高。軟件產業屬於第三產業的服務業,具有高智力投入,高成長,低成本投入,服務性強,全球性強,與國民經濟關係密切等特點,一個高質量的軟件會給企業和社會帶來很大的便利。所以軟件行業是一個發展前景很好的第三產業。