軟件工程

軟件工程是一種基於工程的軟件開發方法。軟件工程師是將工程設計過程應用於設計,開發,測試,維護和評估計算機軟件的人。該術語有時用作同義詞,但可能會強調軟件實施而不是設計,並且還可能缺乏工程教育或技能的含義。

工程技術用於告知軟件開發過程,該過程涉及定義,實施,評估,測量,管理,變更,以及軟件生命週期過程本身的改進。它大量使用軟件配置管理,這是關於系統地控製配置的變化,並在整個系統生命週期中保持配置和代碼的完整性和可追溯性。現代流程使用軟件版本

歷史

從1960年代開始,軟件工程被視為其自己的工程類型。此外,軟件工程的開發被視為一場鬥爭。很難跟上硬件,這給軟件工程師帶來了許多問題。問題包括超出預算,超出截止日期,需要進行大量調試和維護的軟件,並且未成功滿足消費者的需求,甚至從未完成。 1968年,北約舉行了第一次與軟件有關的軟件工程會議,該會議已解決:建立了軟件開發的指南和最佳實踐。

軟件工程一詞的起源歸因於各種來源。該術語出現在1965年6月發行的“計算機和自動化”的公司提供的服務列表中,並在1966年8月的ACM通信(第9卷,第8卷,第8卷)中更正式使用“致ACM成員的信“ ACM主席Anthony A. Oettinger。它也與弗里德里希·L·鮑爾(Friedrich L. Bauer)教授在1968年舉行的北約會議標題有關。瑪格麗特·漢密爾頓(Margaret Hamilton)在阿波羅任務中描述了“軟件工程”的紀律,以賦予他們在做合法性的事情。當時被認為是“軟件危機”。第40屆國際軟件工程會議(ICSE 2018)以弗雷德里克·布魯克斯(Frederick Brooks)瑪格麗特·漢密爾頓(Margaret Hamilton)的全體會議主題演講慶祝了50年的“軟件工程”。

1984年,該軟件工程學院(SEI)成立為總部位於賓夕法尼亞州匹茲堡的卡內基梅隆大學校園的聯邦資助的研發中心。 Watts Humphrey建立了SEI軟件流程計劃,旨在理解和管理軟件工程流程。引入的過程成熟度水平將成為開發能力成熟度模型集成(CMMI-DEV),該模型定義了美國政府如何評估軟件開發團隊的能力。

ISO/IEC JTC 1/SC 7小組委員會收集了現代,公認的軟件工程最佳實踐,並作為軟件工程知識體(SWEBOK)出版。軟件工程被認為是主要計算學科之一。

定義和術語

軟件工程的顯著定義包括:

  • “科學和技術知識,方法和經驗在設計,實施,測試和文檔中的系統應用” - 勞工統計局 - IEEE系統和軟件工程 - 詞彙
  • “在軟件的開發,操作和維護中應用系統,紀律,可量化的方法” - IEE EEE軟件工程術語標準詞彙表
  • “與軟件生產的各個方面有關的工程學科” -伊恩·索默維爾(Ian Sommerville)
  • “建立和使用聲音工程原則,以便從經濟上獲得可靠並有效地在真實機器上工作的軟件” -弗里茨·鮑爾(Fritz Bauer)
  • “處理複雜計算機程序的設計,實施和維護的計算機科學分支” - Merriam-Webster
  • “'軟件工程'不僅涵蓋編寫代碼的行為,還包括組織隨時間構建和維護該代碼的所有工具和處理。[...]可以將軟件工程視為隨著時間的推移集成的編程。'“ - Google的軟件工程

該術語的正式使用量也不那麼正式:

  • 作為以前稱為計算機編程系統分析的廣泛活動的非正式術語;
  • 作為計算機編程實踐的各個方面的廣義術語,而不是計算機編程理論,該理論被正式研究為計算機科學的子學科;
  • 當該術語體現了一種特定的計算機編程方法的倡導時,它敦促將其視為工程學科而不是藝術或工藝,並提倡對推薦實踐的編纂

“軟件工程師”的詞源

瑪格麗特·漢密爾頓(Margaret Hamilton)阿波羅計劃(Apollo Program)的工作期間推廣了“軟件工程”一詞。 “工程”一詞被用來承認,應與對技術進步的其他貢獻一樣認真對待這項工作。漢密爾頓詳細介紹了她對該術語的使用:

當我第一次想到這個詞時,至少在我們的世界中,沒有人聽說過它。很長一段時間以來,這是一個持續的笑話。他們喜歡向我開玩笑我的激進想法。這是一個令人難忘的一天,最受尊敬的硬件大師之一向每個人解釋了他同意我的同意,即建立軟件的過程也應被視為工程學科,就像與硬件一樣。不是因為他接受了新的“術語”本身,而是因為我們已經贏得了他的和房間中其他人的接受,因為他本身就在工程領域。

術語的適用性

個人評論員在如何將軟件工程或其合法性作為工程學科方面急劇不同意。大衛·帕納斯(David Parnas)表示,軟件工程實際上是一種工程形式。史蒂夫·麥康奈爾(Steve McConnell)說不是,但應該如此。唐納德·諾斯(Donald Knuth)說,編程是一門藝術和科學。 Edsger W. Dijkstra聲稱軟件工程軟件工程師術語已被濫用,應被視為有害,尤其是在美國。

大規模項目中的任務

軟件要求

需求工程是關於軟件要求的啟發,分析,規範和驗證。軟件要求可以是三種不同類型的。有功能要求非功能要求和域要求。應該執行軟件的操作,並應期望用戶使用適當的輸出。非功能要求涉及可移植性,安全性,可維護性,可靠性,可伸縮性,性能,可重複使用性和靈活性等問題。它們分類為以下類型:接口約束,性能約束(例如響應時間,安全性,存儲空間等),操作約束,生命週期約束(可維護性,可移植性等)和經濟約束。在指定非功能要求時,需要了解系統或軟件的工作方式。域要求與某些類別或項目域的特徵有關。

軟件設計

軟件設計是關於定義系統或組件的架構,組件,接口和其他特徵的過程。這也稱為軟件體系結構。軟件設計分為三個不同級別的設計。這三個級別是界面設計建築設計詳細設計。界面設計是系統及其環境之間的相互作用。這與系統的內部運作一起在高水平的抽像中進行。建築設計與系統的主要組成部分及其責任,屬性,接口及其之間發生的關係和互動有關。詳細的設計是所有主要係統組件,它們的屬性,關係,處理以及其算法數據結構的內部元素。

軟件構建

軟件構建是軟件開發的主要活動,是編程單元測試集成測試調試以實施設計的組合。該階段的測試通常由程序員在構建軟件時執行,以驗證剛剛編寫的內容並確定何時準備將代碼發送到下一步。

軟件測試

軟件測試是一項經驗,技術調查,旨在為利益相關者提供有關正在測試的產品或服務質量的信息,並採用不同的方法(例如單元測試集成測試) 。這是軟件質量的一個方面。作為軟件開發的單獨階段,通常由質量保證人員或編寫代碼的開發人員執行。

軟件分析

軟件分析是分析計算機程序對屬性諸如性能魯棒安全性等屬性的行為過程。

軟件維護

軟件維護是指在運輸軟件產品後提供具有成本效益的支持所需的活動。軟件維護正在修改和更新分發後的軟件應用程序,以糾正故障並提高其性能。軟件與現實世界有很大關係,當現實世界發生變化時,需要軟件維護。軟件維護包括:錯誤校正,優化,未使用和廢棄功能的刪除以及已經存在的功能的增強。通常,維護佔項目成本的40%至80%,因此著重於維護可以降低成本。

教育

計算機編程的了解是成為軟件工程師的先決條件。 2004年, IEEE計算機協會生產了Swebok ,該協會已出版為ISO/IEC技術報告1979:2005,描述了他們建議由具有四年經驗的研究生軟件工程師掌握的知識體系。許多軟件工程師通過在職業學校獲得大學學位或培訓來進入該行業。本科軟件工程學位的一項標準國際課程是由IEEE計算機協會計算機協會的計算課程聯合工作組定義的,並於2014年進行了更新。許多大學具有軟件工程學位課程;截至2010年,在美國,有244個校園軟件工程課程,70個在線計劃,230個碩士課程,41個博士學位課程和69個證書級別的計劃。

除了大學教育外,許多公司還贊助希望從事信息技術職業的學生實習。這些實習可以向學生介紹有趣的現實世界任務,這些任務每天都會遇到典型的軟件工程師。可以通過軟件工程中的兵役獲得類似的經驗。

軟件工程學位課程

當今所有從業人員的一半在計算機科學信息系統信息技術方面具有學位。一個小但不斷增長的從業者擁有軟件工程學位。 1987年,倫敦帝國學院的計算系推出了英國和世界的第一個三年軟件工程學士學位。次年,謝菲爾德大學建立了類似的計劃。 1996年,羅切斯特理工學院在美國建立了第一個軟件工程學士學位課程,但是直到2003年,它才與萊斯大學克拉克森大學密爾沃基工程學院密西西比州立大學,直到2003年才獲得Abet認證。獲得了他們的。 1997年,印度哥印拜陀的PSG理工學院是第一個啟動五年綜合科學碩士學位的軟件工程碩士學位。

從那時起,許多大學就建立了軟件工程本科學位。一項針對本科軟件工程學位的標準國際課程, SE2004 ,由2001年至2004年之間的指導委員會定義,並獲得了計算機機械協會IEEE計算機協會的資助。截至2004年,在美國,大約50所大學提供了軟件工程學位,該學位教授計算機科學和工程原理和實踐。第一個軟件工程碩士學位是在1979年在西雅圖大學成立的。從那時起,研究生軟件工程學位已獲得更多大學。同樣,在加拿大,加拿大專業工程師委員會的加拿大工程認證委員會(CEAB)也認可了幾個軟件工程計劃。

1998年,美國海軍研究生院(NPS)建立了世界軟件工程學的第一個博士學位課程。此外,已經出現了許多軟件工程的在線高級學位,例如富勒頓加州州立大學的計算機科學和工程系提供的軟件工程學碩士(MSE)學位。史蒂夫·麥康奈爾(Steve McConnell)認為,由於大多數大學教授計算機科學而不是軟件工程,因此缺乏真正的軟件工程師。 IEEE要求ETS (écolede Technologiesupérieure)大學和UQAM (Montréal大學),以開發軟件工程知識體( SWEBOK ),該體系已成為描述軟件工程師涵蓋的ISO標準。

職業

專業軟件工程師許可或認證的法律要求在世界範圍內各不相同。在英國,沒有許可或法律要求可以承擔或使用職位標題軟件工程師。在加拿大的某些地區,例如艾伯塔省,不列顛哥倫比亞省,安大略省和魁北克,軟件工程師可以持有專業工程師(P.ENG)的指定和/或信息系統專業人員(ISP)指定。在歐洲,軟件工程師可以獲得歐洲工程師(EUR)專業頭銜。軟件工程師還可以通過英國計算機協會成為特許工程師的專業資格。

在美國, NCEES於2013年開始為軟件工程提供專業的工程師考試,從而允許軟件工程師獲得許可和認可。由於缺乏參與,NCEES在2019年4月之後結束了考試。目前,強制性許可仍在很大程度上辯論,並被認為是有爭議的。

IEEE計算機協會ACM (美國兩個主要的軟件工程專業組織)為軟件工程專業發布指南。 IEEE的軟件工程知識體係指南 - 2004年版本Swebok定義了該領域,並描述了IEEE的知識,期望一名實踐軟件工程師擁有的知識。最新的Swebok V3是一個更新版本,並於2014年發布。IEEE還頒布了“軟件工程道德守則”。

就業

截至2022年,全球估計有2690萬個專業軟件工程師,高於2016年的2100萬。

許多軟件工程師擔任員工或承包商。軟件工程師與企業,政府機構(平民或軍事)和非營利組織合作。一些軟件工程師作為自由職業者為自己工作。一些組織有專家可以在軟件開發過程中執行每個任務。其他組織要求軟件工程師進行許多或全部。在大型項目中,人們可能只專注於一個角色。在小型項目中,人們可能會同時填補幾個或所有角色。許多公司在暑假或實習期間僱用實習生,通常是大學或大學生。專業包括分析師建築師開發人員測試人員技術支持中間件分析師項目經理軟件產品經理教育工作者研究人員

大多數軟件工程師和程序員每週工作40個小時,但約有15%的軟件工程師和11%的程序員在2008年每週工作50個小時以上。這些職業的潛在傷害是可能的,因為像其他長期坐著的工人一樣在鍵盤上打字的計算機終端的正面,工程師和程序員容易受到眼睛疲勞,背部不適以及手和腕部問題,例如腕管綜合症

美國

美國勞工統計局(BLS)計數1,365,500個軟件開發人員在2018年在美國從事工作。由於其相對新穎的研究領域,經常在軟件工程領域作為計算機科學課程的一部分進行教學,許多教育軟件工程師擁有計算機科學學位。 BLS估計2014年至2024年,計算機軟件工程將增長17%。對於軟件工程的20122年,這是20122年的BLS估計值為22%。並且,從2010年的30%到2020年的BLS估計值更遠。由於這種趨勢,就業增長可能不如過去十年那樣快,因為在美國,本來可以去的計算機軟件工程師的工作將被外包給印度和其他國外等國家的計算機軟件工程師。此外,美國勞工統計局(BLS)職業前景的BLS職位前景預測,從2016年到2026年,職業前景的下降將下降-7%,從2019年到2029年下降了-9%,下降了-9 %,下降了-ds。從2021年到2031年10%。然後從2022年到2032年下降-11%。由於可以從世界任何地方進行計算機編程,因此公司有時在工資較低的國家/地區僱用程式設計師.此外,與其他工程領域相比,多年來,許多軟件領域的女性也一直在下降。然後還有一個其他問題,即人工智能的最新進展可能會影響對後代軟件工程師的需求。但是,隨著美國市場當前的許多軟件工程師在未來幾十年中逃離市場或年齡,這種趨勢可能會改變或緩慢。

認證

軟件工程學院提供有關安全,流程改進和軟件體系結構等特定主題的認證。 IBMMicrosoft和其他公司還贊助自己的認證考試。許多IT認證計劃針對特定技術,並由這些技術的供應商管理。這些認證計劃是針對僱用使用這些技術的人員的機構量身定制的。

通用軟件工程技能的更廣泛認證可通過各種專業社會獲得。截至2006年, IEEE已認證了575多個軟件專業人員作為認證的軟件開發專業人員(CSDP)。 2008年,他們添加了一項入門級認證,稱為認證軟件開發助理(CSDA)。 ACM在1980年代初進行了專業認證計劃,由於缺乏興趣而停產。 ACM檢查了1990年代後期對軟件工程師進行專業認證的可能性,但最終認為這種認證不適用於軟件工程專業工業實踐。

在英國,英國計算機協會已經開發了一項合法認可的專業認證,稱為Chartered IT專業人員(CITP) ,可用於完全合格的成員( MBC )。軟件工程師可能有資格獲得英國計算機協會工程和技術機構的會員資格,因此有資格通過這兩個機構將特許工程師地位視為特許工程師。在加拿大,加拿大信息處理協會已經開發了一項具有法律認可的專業認證,稱為信息系統專業人員(ISP) 。在加拿大安大略省,從加拿大工程認證委員會(CEAB)認可的計劃畢業的軟件工程師,成功完成PEO(安大略省的專業工程師)專業練習考試(PPE),並擁有至少48個月的可接受工程經驗,有資格獲得許可通過安大略省的專業工程師,可以成為專業工程師P.Eng。但是,PEO不認識任何在線或遠程教育;儘管兩者之間存在巨大的重疊,但並不認為計算機科學程序等於軟件工程計劃。這引發了爭議和認證戰爭。它還持有該行業的P.Eng持有人的數量。該領域的絕大多數工作專業人員擁有CS,而不是SE學位。鑑於非SE學位持有人的艱難認證路徑,大多數人永遠不會費心尋求許可證。

全球化的影響

外包的最初影響以及國際人力資源在發展第三世界國家的相對較低的成本導致了從北美和歐洲的公司到印度以及後來的軟件開發活動的大規模遷移:中國,俄羅斯和其他發展中國家。這種方法有一些缺陷,主要是距離 /時區差異,這阻止了客戶與開發人員之間的人際關係以及大規模的工作轉移。這對軟件工程專業的許多方面產生了負面影響。例如,由於擔心離岸外包(從其他國家進口軟件產品或服務)和外國簽證工人流離失所,因此發達國家的一些學生避免了與軟件工程有關的教育。儘管統計數據目前沒有對軟件工程本身構成威脅;相關職業,計算機編程似乎確實受到了影響。然而,通過以下工作流巧妙地利用海上和近岸資源的能力提高了許多組織的整體運營能力。當北美人離開工作時,亞洲人剛剛到達工作。當亞洲人離開工作時,歐洲人將到達工作。這提供了每天24小時對業務關鍵流程進行監督的持續能力,而無需支付加班費或破壞關鍵的人力資源,睡眠模式。

儘管全球外包具有多個優勢,但全球和通常分佈的開發可能會遇到由於開發人員之間距離而造成的嚴重困難。這是由於這種類型的距離的關鍵要素已被確定為地理,時間,文化和交流(包括在不同位置使用不同語言和英語方言)。在過去的15年中,在全球軟件開發領域進行了研究,並發表了廣泛的相關工作,突出了與復雜活動相關的好處和問題。與軟件工程研究的其他方面一樣,在該和相關領域也在進行中。

獎品

軟件工程領域有幾個獎品:

批評

軟件工程將其從業人員視為遵循定義明確的工程方法解決問題的個人。這些方法在各種軟件工程書籍和研究論文中指定,始終具有可預測性,精度,可緩解風險和專業精神的含義。這種觀點導致呼籲獲得許可,認證和編纂的知識體,作為傳播工程知識和成熟領域的機制。

軟件工程擴展了工程,並藉鑑了工程模型,即工程過程,工程項目管理,工程要求,工程設計,工程構建和工程驗證。這個概念是如此新,以至於很少被理解,並且被廣泛誤解,包括軟件工程教科書,論文以及程序員和手工藝者的社區中。

軟件工程中的核心問題之一是,其方法不夠經驗,因為通常不存在對方法的現實驗證,或者非常有限,因此軟件工程通常僅在“理論環境”中被誤解為可行的。

當今軟件開發中許多概念的創始人埃德斯格·迪克斯特(Edsger Dijkstra)拒絕了“軟件工程”的想法,直到他在2002年去世,認為這些術語對他所謂的計算機科學的“激進新穎性”的類比很差:

這些現像中的許多現像以“軟件工程”的名稱捆綁在一起。由於經濟學被稱為“痛苦的科學”,因此軟件工程應被稱為“注定紀律”,注定要失敗,因為它甚至無法實現其目標,因為其目標是自相矛盾的。當然,軟件工程將自己表現為另一個值得的原因,但這是眼睛:如果您仔細閱讀其文獻並分析其奉獻者的實際工作,您會發現軟件工程已被接受為“如果不能不能編程,則如何進行編程。”

也可以看看

學習和實踐

角色

專業方面