官术网_书友最值得收藏!

  • 實用軟件工程
  • 趙池龍 楊林主編
  • 3840字
  • 2018-12-28 21:55:49

1.2 軟件工程的定義

1.軟件危機

軟件工程來源于軟件危機,即先有軟件危機,后有軟件工程。

20世紀60年代中期,在美國出現(xiàn)了軟件危機(Software Crisis),它表現(xiàn)在研發(fā)大型軟件時,軟件開發(fā)的成本增大、進度延期、維護困難和質量得不到保障。最突出的例子是美國IBM公司于1963—1966年開發(fā)的IBM360系列機操作系統(tǒng)。該軟件系統(tǒng)花了大約5000人年的工作量,最多時有1000人投入開發(fā)工作,源程序代碼近100萬行。盡管投入了這么多的人力和物力,得到的結果卻極其糟糕。據(jù)統(tǒng)計,該操作系統(tǒng)每次發(fā)行的新版本,都是從前一個舊版本中找出1000個程序錯誤而修正的結果。可想而知,這樣的軟件質量糟糕到什么地步。

由此可見,所謂軟件危機,就是在軟件開發(fā)和維護過程中所遇到一系列難以控制的問題。“軟件危機”這個專業(yè)術語的首次出現(xiàn),是1968 年NATO(North Atlantic Treaty Organization,北約)的計算機科學家,在聯(lián)邦德國召開的國際學術會議上提出的。

為了克服軟件危機,同樣是在1968年,北約科技委員會召集了近50名一流的編程人員、計算機科學家和工業(yè)界巨頭,討論和制定擺脫“軟件危機”的對策。就在那次會議上,第一次提出了軟件工程(Software Engineering)這個專業(yè)術語。當時人們的想法是:若借用建筑工程或機器制造工程的思想、標準、規(guī)范、規(guī)程去開發(fā)軟件與維護軟件,也許能克服軟件危機。以后的實踐證明:用工程的方法開發(fā)軟件與維護軟件是個好主意,但是要完全克服軟件危機,還有許多其他工作要做。

2.軟件工程定義

1993年,權威雜志IEEE對軟件工程的定義是:軟件工程是將系統(tǒng)化的、嚴格約束的、可量化的方法,應用于軟件開發(fā)、運行和維護中去。

2001年,軟件工程大師Roger S Pressman對軟件工程的定義是:軟件工程是一個過程、一組方法和一系列工具。

由于軟件技術飛速發(fā)展,所以軟件工程的定義也要與時俱進。下面,根據(jù)當前軟件技術的進展狀況,給出現(xiàn)代軟件工程的最新定義。

軟件工程是研究軟件開發(fā)和軟件管理的一門工程學科。

這里,一是強調開發(fā)。開發(fā)是軟件工程的主體,開發(fā)是在規(guī)定的時間、按照規(guī)定的成本、開發(fā)出符合規(guī)定質量要求的軟件。二是強調管理,或過程管理。當然,開發(fā)中有管理,管理是為了更好地開發(fā)。所以開發(fā)和管理是一個問題的相輔相成的兩個方面。許多軟件項目的失敗,不是在開發(fā)技術上出了問題,而是在管理過程上出了問題。所以在某種程度上說,對于一個軟件企業(yè),過程管理比開發(fā)技術更重要。三是強調工程。要將軟件的開發(fā)(包括維護)當作一項工程,既要按照工程的辦法去開發(fā),又要按照工程的辦法去管理。四是強調學科。時至今日,軟件工程不只是一門課程,而是一個學科體系,即軟件工程知識體系。

3.軟件工程學科體系

軟件工程作為一個學科體系,到21世紀初才初步形成。2001年4月18日,美國發(fā)布了軟件工程知識體系指南SWEBOK(guide to the SoftWare Engineering Body Of Knowledge)0.95版。2004年,軟件工程學科體系的內(nèi)容才基本確立,就在這一年,美國ACM和IEEE-CS聯(lián)合制訂了SWEBOK 2004年版,它將軟件工程學科體系的知識劃分為如下10個知識域:

(1)軟件需求(Software Requirements)。軟件需求是真實世界中的問題而必須展示的特性。軟件需求知識域有7 個子域:需求基礎、需求過程、需求獲取、需求分析、需求規(guī)格說明、需求確認、實踐考慮。

(2)軟件設計(Software Design)。軟件設計既是定義一個系統(tǒng)的體系結構、組件、接口和其他特征的過程,又是這個過程的結果。軟件設計知識域有6 個子域:軟件設計基礎、軟件設計關鍵問題、軟件結構與體系結構、軟件設計質量的分析與評價、軟件設計符號、軟件設計的策略與方法。

(3)軟件構造(Software Construction)。它指通過編碼、驗證、單元測試、集成測試和排錯的組合,具體創(chuàng)建一個可以工作的、有意義的軟件。其知識域有3個子域:軟件構造基礎、管理構造、實際考慮。

(4)軟件測試(Software Testing)。它是由在有限測試用例集合上,根據(jù)期望的行為對程序的行為進行的動態(tài)驗證組成,測試用例是從實際上無限的執(zhí)行域中適當選擇出來的。軟件測試知識域有5 個子域:軟件測試基礎和測試級別、測試技術、需求分析、與測試相關的度量、測試過程。

(5)軟件維護(Software Maintenance)。軟件一旦投入運行,就可能出現(xiàn)異常,運行環(huán)境可能發(fā)生改變,用戶會提出新的需求。生命周期中的軟件維護,從軟件交付時開始。軟件維護的知識域有4個子域:軟件維護基礎、軟件維護的關鍵問題、維護過程、維護技術。

(6)軟件配置管理(Software Configuration Management)。軟件配置是為了系統(tǒng)地控制配置的變更,維護軟件在整個系統(tǒng)生命周期中的完整性及可追蹤性,而標志軟件在不同時間點上的配置的學科。軟件配置管理知識域有6個子域:軟件配置管理過程管理、軟件配置標志、軟件配置控制、軟件配置狀態(tài)統(tǒng)計、軟件配置審核、軟件發(fā)行管理和交付。

(7)軟件工程管理(Software Engineering Management)。進行軟件工程的管理與度量,雖然度量是所有知識域的一個重要方面,但是這里所說的是度量程序的主題。軟件工程管理知識域有6 個子域:啟動和范圍定義、軟件項目計劃、軟件項目實施、評審與評價、關閉、軟件工程度量。前5個覆蓋軟件過程工程管理,第6個描述軟件度量的程序。

(8)軟件工程過程(Software Engineering Process)。涉及軟件工程過程本身的定義、實現(xiàn)、評定、度量、管理、變更和改進。軟件工程過程知識域有4 個子域:過程實施與改變、過程定義、過程評定、過程和產(chǎn)品度量。

(9)軟件工程工具和方法(Software Engineering Tool and Method)。它有軟件工程工具、軟件工程方法兩個子域。

(10)軟件質量(Software Quality)。處理跨越整個軟件生命周期過程的軟件質量的考慮,由于軟件質量問題在軟件工程中無處不在,其他知識域也涉及質量問題。軟件質量知識域有3個子域:軟件質量基礎、軟件質量過程、實踐考慮。

在上述軟件工程學科體系中,前5個知識域是講軟件開發(fā),后5個知識域是講軟件管理。由此可見,軟件工程知識體系包括軟件開發(fā)和軟件管理兩大部分,所以軟件工程的定義也應該包括軟件開發(fā)和軟件管理兩項內(nèi)容。

4.軟件工程課程研究的內(nèi)容

軟件工程課程與軟件工程學科體系是有區(qū)別的:前者是一門或一組課程,后者是一個知識體系;前者是一個局部問題,后者是一個整體問題。

作為一門軟件工程課程,它研究的內(nèi)容至今沒有統(tǒng)一的說法。可以這么認為,軟件工程課程研究的內(nèi)容,應該涵蓋“軟件生命周期模型、軟件開發(fā)方法、軟件支持過程、軟件管理過程”這4個方面,如表1-4所示。

表1-4 軟件工程課程研究的內(nèi)容

盡管軟件生命周期模型和軟件支持過程非常重要,但是現(xiàn)代軟件工程研究的重點,仍然是軟件開發(fā)方法和軟件管理過程。在軟件管理過程的內(nèi)容中,除了ISO 9001和CMMI之外,還將軟件企業(yè)文化也列入其中,如微軟企業(yè)文化、敏捷文化現(xiàn)象和IBM企業(yè)文化。

【例1-2】 請讀者開發(fā)一個“圖書館信息系統(tǒng)”,即圖書館MIS。這是一項小型軟件工程,為了完成這項任務,讀者首先要選擇軟件生命周期模型,確定開發(fā)方法,準備開發(fā)工具,設計開發(fā)環(huán)境和運行環(huán)境,然后進行需求分析、概要設計、詳細設計、編程、測試、試運行、正式運行、驗收和交付,最后是系統(tǒng)維護或系統(tǒng)升級換代。這樣,讀者就按照所選擇的開發(fā)模型,走完了軟件的一個生命周期。這一系列的軟件開發(fā)過程和管理過程,就是軟件工程。

5.軟件工程基本原理

習慣上,人們常常把軟件工程的方法(開發(fā)方法)、工具(支持方法的工具)、過程(管理過程)稱為軟件工程三要素。而把美國著名的軟件工程專家B.W Boehm于1983年提出的7條原理,作為軟件工程的基本原理。

(1)用分階段的生命周期計劃嚴格管理軟件開發(fā)。階段劃分為計劃、分析、設計、編程、測試和運行維護。

(2)堅持進行階段評審。上一階段評審不通過,就不能進入下一階段開發(fā)。

(3)實行嚴格的產(chǎn)品版本控制。

(4)采用現(xiàn)代程序設計技術。

(5)結果應能清楚地審查。因此,對文檔要有嚴格要求。

(6)開發(fā)小組的成員要少而精。

(7)要不斷地改進軟件工程實踐的經(jīng)驗和技術,要與時俱進。

上述7 條原理,雖然是在面向過程的程序設計時代(結構化時代)提出來的。但是,直到今天,在面向元數(shù)據(jù)和面向對象的程序設計新時代,它仍然有效。根據(jù)“與時俱進”的原則,還有一條基本原理在軟件的開發(fā)和管理中特別重要,需要補充進去,作為軟件工程的第8條基本原理。

(8)二八定律。對軟件項目進度和工作量的估計:一般人主觀上認為已經(jīng)完成了80%,但實際上只完成了20%;對程序中存在問題的估計:80%的問題存在于20%的程序之中;對模塊功能的估計:20%的模塊,實現(xiàn)了80%的功能;對人力資源的估計:20%的人,解決了軟件中80%的問題;對投入資金的估計:企業(yè)信息系統(tǒng)中80%的問題,可以用20%的資金來解決。

在軟件開發(fā)和管理的歷史上,有無數(shù)的案例都驗證了二八定律。所以,軟件工程發(fā)展到今天,可以認為它的基本原理共有8條。

研究二八定律的現(xiàn)實意義,在于指導軟件開發(fā)計劃的制訂與執(zhí)行。如果事先掌握了二八定律,就能自覺地用二八定律去制訂、跟蹤與執(zhí)行軟件開發(fā)計劃。也就是說,計劃中要用開始的20%時間,去完成80%的開發(fā)進度;剩下20%的進度,要留下80%的時間去完成。只有這樣,項目的開發(fā)計劃與項目的開發(fā)進度才能吻合。

6.軟件工程在中國

1982年,軟件工程的創(chuàng)始人、美藉華人葉祖堯博士,帶著自己開創(chuàng)的“軟件工程學”理論來到中國,成為當時中國政府計算機領導小組的顧問。他制定了一項“中國軟件發(fā)展計劃”,提交給當時的國務院主要領導,從此,軟件工程在中國開始啟動。1984年,國家科委在北京召開“軟件工程”大會。會議期間,國防科技大學陳火旺院士與孟慶余教授,宴請了美國軟件工程專家葉祖堯博士。席間,時任美國馬里蘭大學計算機系主任的葉祖堯博士說:“軟件工程,只有你們長沙(國防科技大學)并行機的研究搞得最好!”

根據(jù)《軟件工程技術概論》(北京:科學出版社,2002)一書的記載,中國軟件工程的第一本書籍,是由朱三元等人編著的《軟件工程指南》,出版時間為1985年。

主站蜘蛛池模板: 信阳市| 彭山县| 抚顺县| 德令哈市| 平遥县| 上杭县| 休宁县| 元氏县| 三明市| 伊川县| 武强县| 达日县| 佳木斯市| 社旗县| 翼城县| 青神县| 临汾市| 陇西县| 朝阳市| 尼玛县| 图们市| 清远市| 平利县| 大安市| 汤阴县| 革吉县| 福贡县| 定结县| 万全县| 竹山县| 施甸县| 伊宁市| 金门县| 南雄市| 当雄县| 温泉县| 日喀则市| 阳原县| 鄂温| 旌德县| 福建省|