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