基本介紹
軟體工程一直以來都缺乏一個統一的定義,很多學者、組織機構都分別給出了自己的定義:
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系統等等。軟體系統的結構通常被定義為兩個部分:一個是計算部件。另一個就是部件之間的互動。如果把軟體系統看成一幅圖的話,計算部件就是其中的節點,而部件之間的互動就是節點之間的弧線。部件之間的連線可以被認為是一種連線器,比如過程調用、事件廣播、資料庫查詢等等。正確的體系結構設計是軟體系統成功的關鍵。
軟體工程
軟體工程的方法有很多方面的意義。包括專案管理,分析,設計,程式的編寫,測試和質量控制。
軟體設計方法可以區別為重量級的方法和輕量級的方法。重量級的方法中產生大量的正式文檔。
著名的重量級開發方法包括ISO9000,CMM,和統一軟體開發過程(RUP)。
輕量級的開發過過程沒有對大量正式文檔的要求。著名的輕量級開發方法包括極限編程(XP)和敏捷流程(AgileProcesses)。
根據《新方法學》這篇文章的說法,重量級方法呈現的是一種防禦型的姿態。在套用重量級方法的軟體組織中,由於軟體項目經理不參與或者很少參與程式設計,無法從細節上把握項目進度,因而會對項目產生恐懼感,不得不要求程式設計師不斷撰寫很多“軟體開發文檔”。而輕量級方法則呈現“進攻型”的姿態,這一點從XP方法特彆強調的四個準則—“溝通、簡單、反饋和勇氣上有所體現。目前有一些人認為,重量級方法合於大型的軟體團隊(數十人以上)使用,而“輕量級方法”適合小型的軟體團隊(幾人、十幾人)使用。當然,關於重量級方法和輕量級方法的優劣存在很多爭論,而各種方法也在不斷進化中。
一些方法論者認為人們在開發中應當嚴格遵循並且實施這些方法。但是一些人並不具有實施這些方法的條件。實際上,採用何種方法開發軟體取決於很多因素,同時受到環境的制約
開發方法
國外大的軟體公司和機構一直在研究軟體開發方法這個概念性的東西,而且也提出了很多實際的開發方法,比如:生命周期法、原型化方法、面向對象方法等等。下面介紹幾種流行的開發方法:
結構化方法
結構化開發方法是由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世紀擁有最大產業規模和最廣闊前景的新興產業之一。軟體領域是一個包括系統軟體,中間軟體,嵌入式軟體,資料庫軟體,財務和企業管理軟體,教育軟體,遊戲軟體等。軟體行業中軟體外包和軟體產品化是投資的兩大主線,未來中國的外包市場規模將不斷增長,同時行業集中度將逐步提升,而領先的企業獲得的增長速度將高於行業的平均增長速度。各個企業將集中受益於軟體外包的行業趨勢,利用其充分提升企業的業績。中國的系統集成類上市公司軟體產品化比例非常低,造成了企業盈利狀況不明顯。產品化程度高的公司主要集中在管理軟體,金融行業軟體,及聚焦於某個行業的軟體公司。提升軟體的產品化程度將非常有益於中國軟體企業競爭力的提高。軟體產業屬於第三產業的服務業,具有高智力投入,高成長,低成本投入,服務性強,全球性強,與國民經濟關係密切等特點,一個高質量的軟體會給企業和社會帶來很大的便利。所以軟體行業是一個發展前景很好的第三產業。