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

1.2 軟件工程的形成與概念

為了克服“軟件危機”,1968年在北大西洋公約組織(NATO)召開的計算機科學會議上,Fritz Bauer首先提出了“軟件工程”的概念,試圖用工程的方法和管理手段將軟件開發納入工程化的軌道,以便開發出成本低、功能強、可靠性高的軟件產品。幾十年來,人們一直在努力探索克服軟件危機的途徑。

1.2.1 軟件工程的形成與發展

自1968年NATO會議上提出軟件工程這一概念以來,人們一直在尋求更先進的軟件開發的方法與技術。當出現一種先進的方法與技術時,就會使軟件危機得到一定程度的緩解。然而,這種進步又促使人們把更多、更復雜的問題交給計算機去解決,于是又需要探索更先進的方法與技術。幾十年來,軟件工程研究的范圍和內容也隨著軟件技術的發展不斷變化和拓展。軟件工程的發展經歷了以下3個階段。

第一階段:20世紀70年代,為了解決軟件項目失敗率高、錯誤率高以及軟件維護任務重等問題,人們提出了軟件生產工程化的思想,希望使軟件生產走上正規化的道路,并努力克服軟件危機。人們發現將傳統工程學的原理、技術和方法應用于軟件開發,可以起到使軟件生產規范化的作用。它有利于組織軟件生產,提高開發質量,降低成本和控制進度。隨后,人們又提出了軟件生命周期的概念,將軟件開發過程劃分為不同階段(需求分析、概要與詳細設計、編程、測試、維護等),以適應更加復雜的應用。人們還將計算機科學和數學用于構造模型與算法上,圍繞軟件項目開展了有關開發模型、方法以及支持工具的研究,并提出了多種開發模型、方法與多種軟件開發工具(編輯、編譯、跟蹤、排錯、源程序分析、反匯編、反編譯等),并圍繞項目管理提出了費用估算、文檔評審等一些管理方法和工具,基本形成了軟件工程的概念、框架、方法和手段,成為軟件工程的第一代—傳統軟件工程時代。

第二階段:20世紀80年代,面向對象的方法與技術受到了廣泛的重視,Smalltalk-80的出現標志著面向對象的程序設計進入了實用和成熟階段。20世紀80年代末逐步發展起來的面向對象的分析與設計方法,形成了完整的面向對象技術體系,使系統的生命周期更長,適應更大規模、更廣泛的應用。這時,進一步提高軟件生產率、保證軟件質量就成為軟件工程追求的更高目標。軟件生產開始進入以過程為中心的第二階段。這個時期人們認識到,應從軟件生命周期的總費用及總價值來決定軟件開發方案。在重視發展軟件開發技術的同時,人們提出軟件能力成熟度模型、個體軟件過程、群組軟件過程等概念。在軟件定量研究方面提出了軟件工作量估計COCOMO模型等。軟件開發過程從目標管理轉向過程管理,形成了軟件工程的第二代—過程軟件工程時代。

第三階段:進入20世紀90年代以后,軟件開發技術的主要處理對象為網絡計算和支持多媒體信息的WWW。為了適合超企業規模、資源共享、群組協同工作的需要,企業需要開發大量的分布式處理系統。這一時期軟件工程的目的在于不僅提高個人生產率,而且通過支持跨地區、跨部門、跨時空的群組共享信息,協同工作來提高群組、集團的整體生產效率。因整體性軟件系統難以更改、難以適應變化,所以提倡基于構件的開發方法—即部件互連及集成。同時人們認識到計算機軟件開發領域的特殊性,不僅要重視軟件開發方法和技術的研究,更要重視總結和發展包括軟件體系結構、軟件設計模式、互操作性、標準化、協議等領域的復用經驗。軟件復用和軟件構件技術正逐步成為主流軟件技術,軟件工程也由此進入了新的發展階段—構件軟件工程時代。

1.2.2 軟件工程的基本概念

軟件工程這一概念已提出40多年,人們對軟件工程的理解是不斷深入的。作為一門新興的交叉性學科,它所研究的對象、適用范圍和所包含的內容都在不斷發展和變化。

1. 軟件工程的定義

在NATO會議上,軟件工程被定義為:“為了經濟地獲得可靠的和能在實際機器上高效運行的軟件,而建立和使用的健全的工程原則”。這個定義雖然沒有提到軟件質量的技術層面,也沒有直接談到用戶滿意程度或要求按時交付產品等問題,但人們已經認識到借鑒和吸收人類對各種工程項目開發的經驗無疑對軟件的開發是有益的。

軟件工程是指導計算機軟件開發和維護的工程學科。它強調按照軟件產品的生產特性,采用工程的概念、原理、技術和方法來開發與維護軟件,把經過時間考驗而證明正確的管理技術和當前最好的技術結合起來,以便經濟地開發出高質量的軟件并有效地維護它。

由于引入了軟件工程的思想,其他工程技術研究和開發領域中行之有效的知識和方法被運用到軟件開發工作中來,人們又提出了按工程化的原則和方法組織軟件開發工作的解決思路和具體方法,這在一定程度上緩解了“軟件危機”。

2. 軟件工程的目標

軟件工程的目標是基于軟件項目目標的成功實現而提出的,主要體現在以下幾方面。

① 軟件開發成本較低。

② 軟件功能能夠滿足用戶的需求。

③ 軟件性能較好。

④ 軟件可靠性高。

⑤ 軟件易于使用、維護和移植。

⑥ 能按時完成開發任務,并及時交付使用。

在實際開發中,試圖讓以上幾個質量目標同時達到理想的程度往往是不現實的。軟件工程目標之間存在的相互關系如圖1.1所示。從圖1.1中可以看出,有些目標之間是相互補充的,如易于維護和高可靠性之間、功能強與可用性之間;有些目標是彼此相互沖突的,如若只考慮降低開發成本,很可能同時也降低了軟件的可靠性,如果一味追求提高軟件的性能,可能造成開發出的軟件對硬件的依賴性較強,從而影響到軟件的可移植性;不同的應用對軟件質量的要求不同,如對實時系統來說,其可靠性和效率比較重要,對生命周期較長的軟件來說,其可移植性、可維護性比較重要。

014-01

圖1.1 軟件工程目標之間的關系

軟件工程的首要問題是軟件質量。軟件工程的目的就是在以上目標的沖突之間取得一定程度的平衡。因此,在涉及平衡軟件工程目標這個問題的時候,軟件的質量應該擺在最重要的位置加以考慮。軟件質量可用功能性、可靠性、可用性、效率、可維護性和可移植性等特性來評價。功能性是指軟件所實現的功能能夠達到它的設計規范和滿足用戶需求的程度;可靠性是指在規定的時間和條件下,軟件能夠正常維持其工作的能力;可用性是指為了使用該軟件所需要的能力;效率是指在規定的條件下用軟件實現某種功能所需要的計算機資源的有效性;可維護性是指當環境改變或軟件運行發生故障時,為了使其恢復正常運行所做努力的程度;可移植性是指軟件從某一環境轉移到另一環境時所做努力的程度。在不同類型的應用系統中對軟件的質量要求是不同的。

3. 軟件工程知識體系及知識域

軟件工程作為一門學科,在取得對其核心的知識體系的共識方面已經達到了一個重要的里程碑。2005年9月,ISO/IEC JTC1/SC7正式發布為國際標準,即ISO/IEC 19759—2005軟件工程知識體系指南(SWEBOK)。SWEBOK將軟件工程知識體系劃分為10個知識域,包含在兩類過程中。一類過程是開發與維護過程,包括軟件需求、軟件設計、軟件構造、軟件測試和軟件維護;另一類過程是支持過程,包括軟件配置管理、軟件工程管理、軟件工程過程、軟件工程工具與方法、軟件質量。每個知識域還可進一步分解為若干個論題,在論題描述中引用有關知識的參考文獻,形成一個多級層次結構,以此確定軟件工程知識體系的內容和邊界。每個知識域的具體內容如表1.1所示。有關知識的參考文獻涉及相關學科,包括計算機工程、計算機科學、管理學、數學、項目管理、質量管理、軟件人類工程學、系統工程等。

表1.1 軟件工程知識體系指南的內容

015-01

軟件工程知識體系中涉及的主要技術要素包括軟件開發方法、軟件開發工具和軟件過程。

(1)軟件開發方法

軟件開發方法是在工作步驟、軟件描述的文件格式及軟件的評價標準等方面做出規定。它主要解決什么時候做什么以及怎樣做的問題,是軟件工程最核心的研究內容。實踐表明,在開發的早期階段多做努力,就會使后來的測試和維護階段縮短,從而大大縮減費用。因此,針對分析和設計階段的軟件開發方法特別受到重視。目前,人們提出了結構化方法、面向數據結構方法、原型化方法、面向對象的方法、形式化方法等多種實用有效的軟件開發方法,利用這些方法確實也開發出不少成功的系統,但各種開發方法具有一定的適用范圍,所以選擇正確的開發方法是非常重要的。

針對軟件開發方法的評價一般通過以下4個方面來進行。

① 技術特征:支持各種技術概念的方法特征,如層次性、抽象性(包括數據抽象和過程抽象)、并行性、安全性、正確性等。

② 使用特征:具體開發時的有關特征,如易理解性、易轉移性、易復用性、工具的支持、使用的廣度、活動過渡的可行性、易修改性、對正確性的支持等。

③ 管理特征:對軟件開發活動管理的能力方面的特征,如易管理性、支持協同工作的程度、中間階段的確定、工作產物、配置管理、階段結束準則和代價等。

④ 經濟特征:對軟件機構產生的質量和生產力方面的可見效益,如分析活動的局部效益、整個生命周期效益、獲得該開發方法的代價、使用它和管理它的代價等。

下面重點介紹一些常用的軟件開發方法。

① 結構化方法。結構化方法是傳統的基于軟件生命周期的軟件工程方法,自20世紀70年代產生以來,獲得了極有成效的軟件項目應用。結構化方法是以軟件功能為目標來進行軟件構建的,包括結構化分析、結構化設計、結構化實現、結構化維護等內容。這種方法主要通過數據流模型來描述軟件的數據加工過程,并可以通過數據流模型,由對軟件的分析過渡到對軟件的結構設計。

② JSD方法。JSD方法主要用在軟件設計上,于1983年由法國學者Jackson提出。它以軟件中的數據結構為基本依據來進行軟件結構與程序算法設計,是對結構化軟件設計方法的有效補充。在以數據處理為主要內容的軟件系統開發中,JSD方法具有比較突出的設計建模優勢。

③ 面向對象方法。面向對象方法是從現實世界中客觀存在的事物出發來構造軟件,包括面向對象分析、面向對象設計、面向對象實現、面向對象維護等內容。一個軟件是為了解決某些問題,這些問題所涉及的業務范圍被稱作該軟件的問題域。面向對象強調以問題域中的事物為中心來思考問題、認識問題,并根據這些事物的本質特征,把它抽象地表示為系統中的對象,作為系統的基本構成單位。確定問題域中的對象成分及其關系,建立軟件系統對象模型,是面向對象分析與設計過程中的核心內容。自20世紀80年代以來,人們提出了許多有關面向對象的方法,其中,由Booch、Rumbaugh、Jacobson等人提出的一系列面向對象方法成為了主流方法,并被結合為統一建模語言(UML),成為了面向對象方法中的公認標準。

(2)軟件開發工具

軟件開發工具是指用來輔助軟件開發、維護和管理的軟件。現代軟件工程方法得以實施的重要保證是軟件開發工具和環境。軟件開發工具使軟件在開發效率、工程質量,以及減少軟件開發對人的依賴性等多方面得到改善。軟件開發工具與軟件開發方法有著密切的關系,軟件開發工具是軟件方法在計算機上的具體實現。

軟件開發環境是方法與工具的結合以及配套軟件的有機組合。該環境旨在通過環境信息庫和消息通信機制實現工具的集成,從而為軟件生命周期中某些過程的自動化提供更有效的支持。集成機制主要實現工具的集成,使之能夠系統、有效地支持軟件開發。

(3)軟件過程

盡管有軟件開發工具與工程化方法,但這并不能使軟件產品生產完全自動化,它們還需要合適的軟件過程才能真正發揮作用。軟件過程是指生產滿足需求且達到工程目標的軟件產品所涉及的一系列相關活動,它覆蓋了需求分析、系統設計、實施以及支持維護等各個階段。這一系列活動就是軟件開發中開發機構需要制訂的工作步驟。

軟件過程有各種分類方法。按性質劃分軟件過程可概括為基本過程、支持過程類和組織過程。按特征劃分有管理過程、開發過程與綜合過程。按人員的工作內容來分類有獲取過程、供應過程、開發過程、運作過程、維護過程、管理過程與支持過程。軟件過程研究的對象涉及從事軟件活動的所有人。提高軟件的生產率和質量,其關鍵在于管理和支持能力。所以,軟件過程特別重視管理活動和支持活動。

主站蜘蛛池模板: 十堰市| 吉安市| 湖州市| 沂南县| 吴旗县| 当涂县| 桐柏县| 黄大仙区| 焦作市| 安新县| 泽普县| 英德市| 凤台县| 郁南县| 岳阳市| 乌审旗| 九龙城区| 兖州市| 日照市| 伊春市| 红安县| 汉中市| 海晏县| 汝阳县| 大城县| 永修县| 宜君县| 云安县| 布尔津县| 大港区| 湟源县| 深泽县| 文安县| 广州市| 嘉兴市| 陕西省| 西贡区| 兴仁县| 星子县| 博爱县| 遂溪县|