第一章 緒論
第一節 軟件工程的產生
軟件:計算機程序及其說明程序的各種文檔。“程序”是計算任務的處理對象和處理規則的描述。
軟件的特點:
1 是一種邏輯產品,與物質產品有很大的區別。
2 軟件產品的生產主要是研制,生產成本主要在開發和研制,開發研制完成后,通過復制就產生了大量軟件產品。
3 軟件產品不會用壞,不存在磨損,消耗。
4 生產主要是腦力勞動,還末完全擺脫手工開發方式,大部分產品是“定做”的。
5 開發軟件的費用不斷增加,致使生產成本相當昂貴。
按軟件的功能劃分:
系統軟件:能與計算機硬件緊密配合在一起,使計算機系統各個部件、相關的軟件和數據協調、高效率地工作的軟件。如操作系統、數據庫管理系統、設備驅動程序以及通信處理程序等。系統軟件是計算機系統中必不可少的一個組成部分。
應用軟件:是在特定的領域內開發,為特定目的服務的一類軟件。如,CAD-CAM 計算機輔助制造-CAI 計算機輔助教學, 專家系統,模式識別,剎車系統。
支撐軟件:是協助用戶開發軟件的工具性軟件,其中包括幫助程序人員開發軟件產品的工具,也包括幫助管理人員控制開發的進程的工具。
按規模劃分:
1、微型:只有一個人,甚至是半時,在幾天之內完成的軟件。寫出的程序不到500行語句。
2、小型:一個人半年之內完成的2千行以內的程序。例如,數值計算問題或是數據處理問題就是這種規模的課題。這種程序通常沒有與其他程序的接口。
如,有求伯君開發最初的 WPS,單獨完成BASIC 的比爾。蓋茨。
3、中型:5人以內在一年多時間里完成的5千到5萬行的程序。這種課題開始出現了軟件人員之間,軟件人員與用戶之間的聯系、協調和配合關系的問題。
4、大型:5人至10人在兩年多的時間里完成5萬行到10萬行的程序。例如編譯程序、小型分時系統、應用軟件包、實時控制系統等很可能都是這種軟件。
5、甚大型:100人至1000人參加。
6、極大型:2000-5000人參加,如,微軟的windows 2000項目就包含了近3000名工程師,他們被分成幾百個小的團隊。
按開發分:軟件產品和軟件項目
軟件產品:指的是不局限于特定領域的、可以被廣大用戶直接使用的軟件系統。如微軟的 Windows,Office等。這類系統的特點是技術含量高,開發時要考到各種不同的用戶需求。
軟件項目:也稱定制軟件,是受某個特定客戶(或少數客戶)的委托,由一個或多個軟件開發機構在合同的約如我們常說的管理信息系統(MIS)和電子商務系統。這類軟件的特點是領域知識所占的比重較大,相對技術而言工程性更強。例如,軍用防空指揮系統、衛星控制系統等均為這類軟件。
針對這兩種不同類型的軟件,應該有不同的軟件開發方法去指導項目開發過程。
軟件項目的開發,目前比較成熟的軟件開發方法有軟件成熟度模型(CMM)。 這種軟件開發模型試圖將整個軟件開發過程規范化和量化,直到可以對軟件開發過程進行定量的控制和優化。
軟件產品的開發,像微軟公司積累了許多成功的經驗。
軟件生產的發展:
1 程序設計時代:這個階段生產方式是個體勞動,生產工具是機器語言,匯編語言。(1946-1956年)
2 程序系統時代:這個階段生產方式是小集團合作生產,生產工具是高級語言,開發方法仍依靠個人技巧,但開始提出結構化方法。(1956-1968年)
3 軟件工程時代:這個階段生產方式是工程化的生產,使用數據庫,開發工具,開發環境,網絡,分布式面向對象技術來開發軟件。(1968年至今)
軟件危機: 軟件開發技術的進步未能滿足發展的要求。在軟件開發中遇到的問題找不到解決的辦法,問題積累起來,形態尖銳的矛盾,導致了軟件危機。
軟件危機的表現:
1 經費預算經常突破,完成時間一再拖延。
2 開發的軟件不能滿足用戶要求。
3 開發的軟件可維護性差。
4 開發的軟件可靠性差。
軟件危機產生原因:
1 軟件規模越來越大,結構越來越復雜。
2 軟件開發管理困難而復雜。
3 軟件開發費用不斷增加。
4 軟件開發技術落后。
5 生產方式落后,仍采用手工方式。
6 開發工具落后,生產率提高緩慢。
軟件工程:用科學的知識和技術原理來定義,開發,維護軟件的一門學科。
用工程科學的觀點進行費用估算,制定進度,制定計劃和方案。
用管理科學的方法和原理進行生產的管理。
用數學的方法建立軟件開發中的各種模型和算法。
那么為達到軟件優質高產這個目標,從技術到管理做了大量的努力,從而逐漸已形成了“軟件工程學”這一新學科。
它包含以下主要內容:
1、軟件開發方法:軟件工程的方法提供了建造軟件在技術上需要“如何做”。 方法涵蓋了一系列的任務:需求分析、設計、編程、測試和維護。
是在60年代后期才逐步形成了一種軟件開發方法,在不同的軟件開發階段對應有不同的方法,例如在軟件的設計階段有“結構化分析與設計”方法,在軟件測試階段有“黑盒”與“白盒”測試技術,等等。
象目前又有一種更新的技術“面向對象的程序設計方法”。在這一方法中,數據和數據的操作是被封閉在一個個稱為“對象(Object) ”的統一體中,對象之間則是通過“消息”(message“)進行相互聯系的。
從而使由軟件所描述的系統與客觀世界的系統在結構上十分相似,不僅提高了軟件的可修改性與可維護性,同時也提高了軟件的可重用性,那么這些都是工程多年來所追求的目標。從結構程序設計到面向對象程序設計,是程序設計方法的又一次飛躍。
2、軟件工具:所謂工具,在這里泛指是開發一切幫助開發軟件的軟件。為了提高軟件設計的質量和生產效率,現已經發展了許多的幫助開發和維護軟件的軟件 。例如,我們要用某種語言來開發一個應用軟件,這就要涉及到 ”編輯程序、編譯程序、連接程序等,另外在軟件測試階段還要用到 “測試數據產生器、排錯程序、跟蹤程序、靜態分析工具和覆蓋監視工具等。也就是說在不同的時期要用到不同的軟件開發工具。目前,軟件工具發展迅速,許多用于軟件分析和設計的工具正在建立,其目標 就是要實現軟件生產自動化。
3、軟件工程環境:軟件方法和工具是軟件開發的兩大支柱,她們之間密切相關。軟件方法提出了明確的工作步驟和標準的文檔格式,這是設計軟件工具的基礎,而軟件工具的實現又將促進軟件方法的推廣和發展。
“環境”一詞,對不同用戶有著不同的含義。對最終用戶(end user)而言,環境就是他們運行程序所使用的計算機系統。這類用戶對環境的要求,主要是運行可靠,操作方便,容易學習和使用。而對于軟件開發人員來說,則就不同了,可以說環境就是他們進行軟件開發活動動的舞臺。(例如,Algo-60,或者 資料管理系統(DbaseII DbaseIII),例如界面只能采用菜單來完成各種功能)
現在生產數據庫管理的軟件的環境有:大型數據庫軟件 Sybase ,還有能幫助進行程序設計的 PB 軟件。
4、軟件工程管理學:大家知道,對于一個企業來說,如果只有先進的設備和技術,而沒有完善的管理,是不可能獲得應有的經濟效益的(例如海爾的海爾文化就是企業管理的象征)、(例如微軟企業文化宗旨的一句話)
軟件生產也是一樣的,如果管理不善,是不可能高質量、按時完成任務的。
軟件工程管理就是對軟件工程生存期內的各階段的活動進行管理。軟件工程管理的目的是為了能按預期的時間和費用,成功地完成軟件的開發和維護任務。
軟件工程管理學的內容包括軟件費用管理、人員組織、工程計劃管理、軟件配置管理等各項方面的內容。
顯然,軟件工程管理也可借助計算機來實現。供經理人員估算成本、指定進度、生成報告等管理工具都已經在許多公司使用了。一個理想的軟件工程環境,應該同時具備 支持開發和支持管理兩個方面的工具。
以上簡介了軟件工程學的主要組成成分--軟件工程方法學、軟件工程環境以及軟件工程管理的基本內容臺和作用。它們即包括計算機科學家的研究成果,也概括了廣大軟件工作者的時間經驗。還必須指出,軟件開發技術可區分為形式化方法與非形式化方法兩大分支。前者以形式化的程序變化和嚴整為主要內容,目的在于達到程序設計的自動化,多用于計算機應用人員。本課程主要討論的是工程化的軟件開發技術。
軟件工程目標:付出較低開發成本;達到要求的功能;取得較好的性能;開發的軟件易于移植;只需較低的維護費用;能按時完成開發任務,及時交付使用;開發的軟件可靠性高。
軟件工程內容:研究內容包括開發技術和開發管理兩個方面。
開發技術主要研究 :軟件開發方法,開發過程,開發工具和環境。采集者退散
開發管理主要研究 :軟件管理學,軟件經濟學,軟件心理學。
軟件工程需要解決的問題:軟件的費用,可靠性,可維護性,軟件生產率和軟件的重用。
第二節 軟件生存周期模型,方法和工具
生存周期模型:描述軟件開發過程中各種活動如何執行的模型。對軟件開發提供強有力的支持,為開發過程中的活動提供統一的政策保證,為參與開發的人員提供幫助和指導,是軟件生存周期模型化技術的基礎,也是建立軟件開發環境的核心。
生存周期模型作用:確立了軟件開發中各階段的次序限制,活動準則,所要遵守的規定和限制,便于各種活動的協調,人員之間的有效通信,有利于活動重用和活動管理。
生存周期模型準則:模型能表示各種活動的實際工作方式,能隨情況變化而演化能表示各種活動間同步和制約關系,能表示活動的動態特性。容易為開發人員理解,能適應不同軟件項目,具有較強靈活性,能支持軟件開發環境的建立。
目前有:
1 瀑布模型:將軟件生存周期中各活動規定為依線性順序連接的若干階段。包括可行性分析,項目開發計劃,需求分析,概要設計,詳細設計,編碼,測試和維護。它是一種理想的線性開發模式,缺乏靈活,特別是無法解決軟件需求不明確的問題。適合于需求不明確,設計方案有一定風險的軟件項目。
2 增量模型:軟件在模型中是”逐漸“開發出來的,開發一部分,展示一部分,能及早發現問題。或者先開發一”原型“軟件,完成主要功能,然后逐步完善,最終獲得滿意的軟件產品。
3 螺旋模型:將瀑布模型與增量模型結合起來,加入風險分析,彌補了這兩種模型的不足。開發分四步:制定計劃,風險分析,開發實施,用戶評估。
4 噴泉模型:以用戶需求為動力,以對象為驅運動模型,適合于面向對象開發方法,使開發過程具有迭代性和無間隙性。
迭代性:系統有些部分常常重復工作多次,相關功能在每次迭代中隨之加入演化的系統。
無間隙:在分析,設計,實現等開發活動之間不存在明顯邊界。
5 基于知識的模型:瀑布模型與專家模型的結合。開發各階段都有利用相應專家系統來輔助設計,使維護在系統需求一級進行。
6 變換模型:適合于形式化開發方法的模型。
軟件開發方法:使用早已定義好的技術集及符號表示習慣來組織軟件生產的過程。
軟件開發開發的目標:通過使用成功的軟件開發方法,在規定的投資和時間內,開發出符合用戶需求的高質量的軟件。
軟件開發方法是克服軟件危機的重要方面之一,對軟件工程及軟件包產業的發展起了不可估量的作用。
已使用的成功方法有:
1、結構化方法:一種面向數據流的開發方法,適合數據處理領域。指導指導思想是自頂向下,逐步求精。用數據流圖建立系統功能模型,完成需求分析工作。用軟件結構圖建立系統物理模型,實現概要設計。最后將每個模塊的功能用相應標準控制結構表示出來,從而實現詳細設計。
2、JACKSON方法:一種面向數據結構的開發方法,適合小規模項目。首先描述問題的輸入,輸出數據結構,分析其對應性,然后推出相應程序結構,從而給出問題的軟件過程描述。當輸入與輸出數據結構無對應關系時,難于應用此方法,JSD(一完整的系統開發方法)對JSP進行了擴充
3、維也納開發方法(VDM):一種形式化開發方法,軟件的需求用嚴格的形式語言描述,然后把模型逐步變換成目標系統。
4、面向對象的開發方法:基本出發點是盡可能按人類認識世界的方法和思維方式來分析和解決問題。以對象作為最基本的元素,客觀世界中具體的事物,事件,概念和規則都有可看成對象,它也是分析問題,解決問題的核心。開發方法包括面向對象分析,面向對象設計,面向對象實現。主要有BOOCH方法,Coad方法和OMT方法。為統一這些方法的術語,概念和模型,(1997年)推出統一建模型語言UML。
結構化方法可用:瀑布模型,增量模型,螺旋模型進行開發。
JACKSON方法可用:瀑布模型,增量模型進行開發。
面向對象的開發方法可用:噴泉模型,瀑布模型,增量模型進行開發。
形式化的維也納方法只能用變換模型進行開發 。
軟件工具:為支持軟件人員開發和維護活動而使用的軟件。使用軟件工具后,可提高軟件生產率。目前軟件工具發生了很大變化,目的是生成軟件周期各個環節的自動化。主要用于軟件的分析和設計,使用這些工具軟件開發人員就能在微機或工作站上以對話方式建立各種軟件系統。
工具箱:最初的軟件工具是以工具箱形式出現的。但界面不統一,工具內部無聯系,工具切換由人工操作。它們對大型軟件的開發和維護的支持能力有限。
軟件開發環境:目的是使軟件工具支持整個生存周期。而且做到不僅支持各階段的技術工作,還要支持管理和操作工作,保持項目開發的高度可見性,可控制性和可追蹤性。
計算機輔助軟件工程:可簡單定義為軟件開發的自動化,簡稱為CASE。實質是為軟件開發提供一組優化集成的,大量節省人力的軟件開發工具。是軟件工具和軟件開發方法的結合。目的是實現軟件生存周期各環節的自動化,并使之成為一個整體。
CASE工具與以往軟件工具不同體現在:
1 支持專用的個人計算環境;
2 使用圖形功能對軟件系統進行說明并建立文檔;
3 將生存周期各階段的工作連接在一起;
4 收集和連接軟件系統從最初的軟件需求到軟件維護各個環節的所有信息;
5 用人工智能實現軟件開發和維護工作的自動化。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |