




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第1章軟件工程引論1.1軟件產(chǎn)品的概念與特征1.2軟件危機1.3軟件工程的產(chǎn)生及其發(fā)展1.4軟件工程的技術基礎1.5軟件工程過程的概念1.6幾種軟件過程模型1.7過程技術1.8軟件重用技術1.9計算機輔助軟件工程工具1.10小結1.1軟件產(chǎn)品的概念與特征1.1.1軟件產(chǎn)品的概念與分類就本質而言,軟件就是一個信息轉換器,它的功能不外是產(chǎn)生、管理、獲取、修改、顯示或轉換信息。它擔任著雙重角色,首先,它是一種產(chǎn)品,表達了由計算機硬件體現(xiàn)的計算潛能;其次,它又是開發(fā)和運行產(chǎn)品的載體,是計算機控制(操作系統(tǒng))、信息通信(網(wǎng)絡)的基礎,也是創(chuàng)建和控制其他軟件(軟件工具和開發(fā)環(huán)境)的基礎。
對于軟件的一種公認的解釋是:軟件是計算機系統(tǒng)中與硬件相互依存的另一部分,它是包括程序、數(shù)據(jù)及其相關文檔的完整集合。其中,程序是為實現(xiàn)設計的功能和性能要求而編寫的指令序列;數(shù)據(jù)是使指令能夠正常操縱信息的數(shù)據(jù)結構;文檔是與程序開發(fā)、維護和使用有關的圖文資料。根據(jù)用途劃分,軟件可以大致劃分成如下類別:(1)系統(tǒng)軟件:就一般情況來說,系統(tǒng)軟件是為其他軟件服務的軟件。系統(tǒng)軟件與計算機硬件交互頻繁,處理大量的確定或不確定的復雜數(shù)據(jù),往往需要具有多用戶支持、資源精細調度、并發(fā)操作管理、多種外部設備接口支持等項功能。
(2)實時軟件:管理、分析、控制現(xiàn)實世界中所發(fā)生的事件的軟件稱為實時軟件。它一般有數(shù)據(jù)采集、數(shù)據(jù)分析、輸出控制等三方面的功能。實時軟件需要保持一個現(xiàn)實任務可以接受的響應時間,即必須保證能夠在嚴格限定的時間范圍內對輸入做出響應。(3)商業(yè)管理軟件:商業(yè)信息處理是最大的軟件應用領域,包括常規(guī)的數(shù)據(jù)處理軟件和一些交互式的計算處理(如POS軟件)軟件。它的基本功能是將已有的數(shù)據(jù)重新構造,變換成一種可以輔助商業(yè)操作和管理決策的形式。在這個過程中,幾乎都要涉及到對于大型數(shù)據(jù)庫的訪問。各類管理信息系統(tǒng)(MIS)、企業(yè)資源計劃(ERP)、客戶關系管理(CRM)等都是典型的商業(yè)管理軟件。(4)工程與科學計算軟件:此類軟件的特征是要實現(xiàn)特定的“數(shù)值分析”算法。例如離散傅立葉變換、有限元分析、演化計算等等。CAD/CAM軟件一般也可以歸屬到這一類型中來。
(5)嵌入式軟件:駐留在專用智能產(chǎn)品的內存中,用于控制這些產(chǎn)品進行正常工作,完成很有限、很專業(yè)的功能的軟件。例如各類智能檢測儀表、數(shù)碼相機、移動電話、微波爐等智能產(chǎn)品都必須在嵌入式軟件的支持下才能正常工作。(6)人工智能軟件:利用非數(shù)值算法去解決復雜問題的軟件。各類專家系統(tǒng)、模式識別軟件、人工神經(jīng)網(wǎng)絡軟件都屬于人工智能軟件。
(7)個人計算機軟件:文字處理系統(tǒng)、電子表格、游戲娛樂軟件等等。此外,還可以根據(jù)軟件的規(guī)模(代碼行及開發(fā)工作量,如表1.1)、軟件的工作方式、使用頻度、失效后造成的影響等對軟件產(chǎn)品進行分類。表1.1根據(jù)規(guī)模進行軟件分類軟件規(guī)模類別參加人員數(shù)開發(fā)期限產(chǎn)品規(guī)模(源代碼行數(shù))微型11~4周0.5?k小型11~6月1~2?k中型2~51~2年5~50?k大型5~202~3年50~100?k甚大型100~10004~5年1?M極大型2000~50005~10年1~10?M1.1.2軟件產(chǎn)品的特征在制造硬件時,人的創(chuàng)造性的勞動過程(分析、設計、建造、測試)能夠完全轉換成物理的形式,但軟件是邏輯的而不是物理的產(chǎn)品,因此軟件具有和硬件完全不同的特征:
(1)軟件是一種邏輯實體,具有抽象性。我們可以把軟件保存在媒體介質上,但卻無法直接看到軟件的形態(tài),因而必須通過運行、觀察、分析、思考、判斷才能夠了解軟件的功能、性能及其他特性。換句話說,軟件產(chǎn)品具有明顯的非可視特征。(2)軟件的生產(chǎn)與硬件不同。軟件是由開發(fā)或工程化而形成的,不是由傳統(tǒng)意義上的制造過程生產(chǎn)的。雖然軟件開發(fā)和硬件制造之間有一些相似之處,可是兩者在本質上是不同的。這兩者都能夠通過良好的設計獲得高質量的產(chǎn)品,但即使有了良好的設計和優(yōu)秀的樣品,硬件在批量制造過程中仍然可能引入質量問題,這種情況對于軟件而言幾乎不存在。軟件在開發(fā)完畢,形成為產(chǎn)品之后,其批量制造過程只是簡單的拷貝/復制;軟件的開發(fā)和硬件的制造都依賴于人,但參與者和他們完成的工作之間的關系不同;兩者的終極目的都是建造產(chǎn)品,但方法不同;軟件的成本集中在開發(fā)過程上,而硬件生產(chǎn)的成本更多地表現(xiàn)在原材料消耗上。因此,軟件項目開發(fā)過程不能完全像硬件制造過程那樣來管理。(3)軟件產(chǎn)品不會“磨損”。和硬件產(chǎn)品類似,軟件產(chǎn)品也會出現(xiàn)故障。所不同的是,硬件產(chǎn)品的故障多來自外在條件導致的“磨損”或“老化”,而軟件產(chǎn)品如果發(fā)生故障,無一例外的是在設計開發(fā)過程中留有隱患。因此,硬件的故障可以通過簡單的更換部件解決,而軟件的故障必須通過全面的軟件維護活動才有望克服。同時,不完善的維護活動又可能在軟件中注入新的故障,導致軟件質量的“退化”。也就是說,軟件故障的修復要比硬件故障的修復復雜得多。因此,衡量軟件產(chǎn)品質量的一個重要指標就是它的“可維護性”。圖1.1是軟、硬件產(chǎn)品的失效率曲線。圖1.1軟件/硬件產(chǎn)品失效率曲線1.1.3軟件發(fā)展的階段劃分自從20世紀40年代第一臺計算機問世以來,就有了“程序”的概念,可以認為它是軟件的前身。經(jīng)過了幾十年的發(fā)展,人們對軟件有了更為深刻的認識,在這幾十年中,軟件開發(fā)經(jīng)歷了三個發(fā)展階段:20世紀50~60年代屬于程序設計階段;20世紀60~70年代為程序系統(tǒng)階段;20世紀70年代之后進入軟件工程階段。各階段的特點與區(qū)別見表1.2。表1.2計算機軟件發(fā)展的三個階段及其特點
階段特點程序設計程序系統(tǒng)軟件工程軟件所指程序程序及說明書程序、文檔、數(shù)據(jù)主要程序設計語言匯編及機器語言高級語言軟件語言*軟件工作范圍程序編寫設計和測試整個軟件生命周期需求者程序設計者本人少數(shù)用戶市場用戶開發(fā)軟件的組織個人開發(fā)小組開發(fā)小組及大、中型開發(fā)機構軟件規(guī)模小型中、小型大、中、小型
階段特點程序設計程序系統(tǒng)軟件工程決定質量的因素個人技術小組技術水平技術與管理水平開發(fā)技術和手段子程序、程序庫結構化程序設計數(shù)據(jù)庫、開發(fā)工具、集成開發(fā)環(huán)境、工程化開發(fā)方法、標準和規(guī)范、網(wǎng)絡及分布式開發(fā)、面向對象技術、計算機輔助軟件工程維護責任者程序設計者開發(fā)小組專職維護人員硬件的特征高價、存儲量小、可靠性差降價,速度、容量和可靠性明顯提高向超高速、大容量、網(wǎng)絡化、微型化方向發(fā)展軟件的特征完全不受重視軟件的技術發(fā)展不能滿足需求,出現(xiàn)軟件危機開發(fā)技術有進步,但仍未完全擺脫軟件危機表1.2計算機軟件發(fā)展的三個階段及其特點1.2軟件危機1.2.1軟件危機及其表現(xiàn)現(xiàn)代計算機應用系統(tǒng)中,軟件的地位日益重要和突出。如何滿足日益增長的軟件需求,如何維護應用中的大量已有軟件,已經(jīng)成為了計算機應用系統(tǒng)進一步發(fā)展的瓶頸。1968年,北大西洋公約組織的計算機科學家們在聯(lián)邦德國召開的國際會議上討論了軟件危機問題,同時也是在這個會議上提出了“軟件工程”這個名詞,導致了一門新的工程學科的正式誕生。簡單地說,所謂軟件危機,就是指在軟件開發(fā)和軟件維護過程中所存在的一系列嚴重問題。具體地說,軟件危機具有如下一些表現(xiàn):(1)軟件開發(fā)沒有真正的計劃性,對軟件開發(fā)進度和軟件開發(fā)成本的估計常常很不準確,計劃的制定帶有很大的盲目因素,因此工期超出、成本失控的現(xiàn)象經(jīng)常困擾著軟件開發(fā)者。
(2)對于軟件需求信息的獲取常常不充分,軟件產(chǎn)品往往不能真正地滿足用戶的實際需求。
(3)缺乏良好的軟件質量評測手段,從而導致軟件產(chǎn)品的質量常常得不到保證。(4)對于軟件的可理解性、可維護性認識不夠;軟件的可復用性、可維護性不如人意。有些軟件因為過于“個性化”,甚至是難以理解的,更談不上進行維護。缺乏可復用性引起的大量重復性勞動極大地降低了軟件的開發(fā)效率。
(5)軟件開發(fā)過程沒有實現(xiàn)“規(guī)范化”,缺乏必要的文檔資料或者文檔資料不合格、不準確,難以進行專業(yè)維護。(6)軟件開發(fā)的人力成本持續(xù)上升,如美國在1995年的軟件開發(fā)成本已經(jīng)占到了計算機系統(tǒng)成本的90%(如圖1.2所示)。
(7)缺乏自動化的軟件開發(fā)技術,軟件開發(fā)的生產(chǎn)率依然低下,遠遠滿足不了急劇增長的軟件需求(如圖1.3所示)。圖1.2計算機系統(tǒng)硬件、軟件成本比例變化圖1.3軟件技術的發(fā)展落后于需求
軟件危機曾經(jīng)是歷史上的陰影,目前軟件工程界也仍然在一定程度上受到它的影響。軟件工程概念的提出,正是為了克服軟件危機。自1968年以來,隨著軟件工程學的不斷發(fā)展,軟件危機得到了一定程度的遏制,但還遠遠沒有被徹底解決?!禩heStandishGroup.Chaos.1995.》一文報告了20世紀90年代中期美國商用軟件產(chǎn)業(yè)的情況:1995年美國公司取消了810億美元的軟件項目;在所考察的軟件項目中,在完成前就取消了其中的31%;53%的軟件項目進度拖延,通常拖延的時間超過預定工期50%以上;只有9%的大型軟件項目能夠及時交付且費用不超支(對中型和小型軟件公司來說這一數(shù)據(jù)為16%)。1.2.2產(chǎn)生軟件危機的原因軟件危機的存在是不爭的事實。產(chǎn)生軟件危機的原因可以歸納為主、客觀兩個方面。從客觀上來看,軟件不同于硬件,它的生產(chǎn)過程和產(chǎn)品都具有明顯的“不可視”特征,這就導致在完成編碼并且上機運行之前,對于軟件開發(fā)過程的進展情況較難衡量,軟件產(chǎn)品的質量也較難進行先期評價,因此,對于開發(fā)軟件的過程進行管理和控制比較困難。在軟件工程的早期,制定詳細的開發(fā)計劃并且進行全程跟蹤調控,對于所有的階段產(chǎn)品和階段工作進展進行技術審查和管理復審,可望在一定程度上克服“開發(fā)過程不可視”造成的消極影響。
此外,軟件運行過程中如果發(fā)現(xiàn)了錯誤,那么必然是遇到了在開發(fā)時期(分析、設計、編碼過程)引入的,在檢測過程中沒有能夠檢查出來的故障。對于此類故障的維護,通常意味著要修改早期的分析結果、設計結果并調整編碼。由于軟件產(chǎn)品的不可視特征,維護過程不像硬件產(chǎn)品維護時只要簡單的更換損壞部件那樣容易,這在客觀上造成了軟件難以維護的結果。利用足夠的文檔資料使不可視的產(chǎn)品可視化,有助于提升軟件產(chǎn)品的可理解性和可維護性。
從主觀上分析,導致軟件危機發(fā)生的另一大原因,可以歸于在計算機系統(tǒng)發(fā)展的早期,軟件開發(fā)的“個體化”特點,主要表現(xiàn)為忽視軟件需求分析的重要性、忽視軟件的可理解性、文檔不完備、輕視軟件的可維護性、過分強調編碼技巧等等方面。只有軟件的用戶才真正了解他們自己的需求。而且應當承認,用戶一開始并不見得能夠清晰、準確、無二意地表達自己的需求。軟件開發(fā)人員需要做大量的、深入細致的調研工作,引導用戶逐步準確、具體地描述軟件的需求,才能夠得到對問題、目標的正確認識,從而獲得解決問題的恰當出發(fā)點,有望開發(fā)出真正能夠滿足用戶需求的軟件產(chǎn)品。在對用戶的需求沒有清楚的認識時就倉促進行程序編寫,最終必然會導致開發(fā)工作的失敗。
一般來說,軟件產(chǎn)品從策劃、定義、開發(fā)、使用與維護直到最后廢棄,要經(jīng)過一個漫長的時期,通常把這個時期稱為軟件的“生命周期”。可以將生命周期分作“軟件定義”、“軟件開發(fā)”和“運行與維護”三個階段。在軟件定義階段中,主要進行軟件目標的策劃、可行性研究和軟件的需求分析工作,通過和用戶多次交流,在所要開發(fā)的軟件必須“作什么”方面和用戶達成一致(當然在開發(fā)過程中也允許在嚴格的控制下進行需求變更)。
軟件被定義之后,進入開發(fā)階段,主要對軟件的體系架構、數(shù)據(jù)結構和主要算法進行設計和編碼實現(xiàn)。對于編碼結果,還要按照規(guī)范進行測試后,才能最終交付使用。如前所述,在開發(fā)階段也可能對于此前不夠準確的軟件定義結果進行調整。統(tǒng)計數(shù)據(jù)表明,在典型的軟件工程過程中,編碼工作量大約只占軟件開發(fā)全部工作量的15%~20%。
軟件的運行與維護階段在軟件生命周期中占據(jù)的比例最大。在軟件運行過程中,分析和設計階段的一些遺留缺陷可能會逐步暴露;運行環(huán)境的演變也會對運行中的軟件提出變更要求;用戶新需求的提出則常常要求擴充現(xiàn)有軟件的功能或者改進其性能,所有這些要求與問題都必須通過“軟件維護”工作去解決。在維護過程中,必須注意保持所有軟件工作產(chǎn)品之間的一致性。針對不同的需求,維護工作一般可以分為糾錯性維護、適應性維護、擴充性維護和預防性維護等不同類型。
作為軟件,應當有一個完整的配置。Boehm(美國著名的軟件工程專家,加州州立大學教授)指出,“軟件是程序以及開發(fā)、使用、維護程序所需要的所有文檔”。所以,軟件產(chǎn)品除包括程序之外,應當包括完整、準確、翔實的文檔資料。主要的文檔應當包括“需求規(guī)格說明書”、“體系結構設計說明書”、“詳細設計說明書”、“安裝手冊”、“操作手冊”、“系統(tǒng)管理員手冊”等。缺乏必要的配置文檔,將嚴重影響軟件的可理解性,從而給軟件的維護造成嚴重障礙。做好包括項目策劃、可行性研究、需求分析三項內容的軟件定義工作,是提高軟件質量、降低軟件成本、保證開發(fā)進度的關鍵環(huán)節(jié)。
值得注意的嚴重問題是,在軟件開發(fā)的不同階段進行修改所付出的代價是極其不同的。在早期引入變動,涉及的面比較小,因而代價也比較低;在開發(fā)的中期,因為許多配置項(被標識的工作產(chǎn)品)已經(jīng)完成,所以引入一個變動,就要對它所涉及的所有已經(jīng)完成的配置項進行變更,不僅工作量大,而且邏輯上也更復雜,因此付出的代價劇增;如果在軟件“已經(jīng)完成”時再引入變更,更是要付出高得多的代價。根據(jù)美國一些軟件公司的統(tǒng)計資料,軟件開發(fā)后期引入一個變動比在早期引入相同變動所需付出的代價高2~3個數(shù)量級。圖1.4定性地描繪了在不同時期引入一個變動需要付出的代價的變動趨勢。圖1.5是美國貝爾實驗室統(tǒng)計得出的定量結果。圖1.4變更代價隨時間變化的趨勢示意圖1.5改正一個問題需要付出的代價1.2.3解決軟件危機的途徑可以借鑒其他工程領域的成功經(jīng)驗,基于軟件危機產(chǎn)生的主、客觀原因,從軟件工程技術和軟件工程管理兩方面來采取措施,防范軟件危機的發(fā)生。軟件開發(fā)不是某種個體勞動的神秘技巧,而應當是一種組織良好、管理嚴密,分析、設計、編碼、測試、品保等各類人員協(xié)同配合、共同完成的工程項目。在軟件開發(fā)過程中,必須充分吸收和借鑒人類長期以來從事各種工程項目所積累的行之有效的原理、概念、技術和方法,特別要注意吸收幾十年來在計算機硬件研究和開發(fā)中積累的經(jīng)驗、教訓。
從管理層面上考慮,應當注意推廣和使用在實踐中總結出來的開發(fā)軟件的成功的技術和方法,并且探索更好的、更有效的技術和方法,注意積累軟件開發(fā)過程中的經(jīng)驗數(shù)據(jù)財富,逐步消除在計算機系統(tǒng)早期發(fā)展階段形成的一些錯誤概念和做法。建立適合于本組織的軟件工程規(guī)范;制定軟件開發(fā)中各個工作環(huán)節(jié)的流程文件、工作指南和階段工作產(chǎn)品模板;實施針對軟件開發(fā)全過程的計劃跟蹤和品質管理活動;為每一項工程開發(fā)活動建立配置管理庫;實施嚴格的產(chǎn)品基線管理并建立組織的軟件過程數(shù)據(jù)庫和軟件財富庫;為各類員工及時提供必要的培訓等等都是加強軟件開發(fā)活動管理工作的有效手段。
從技術角度考慮,應當開發(fā)和使用更好的軟件開發(fā)工具,提高軟件開發(fā)效率和開發(fā)工作過程的規(guī)范化程度。在計算機軟件開發(fā)的各個階段,都有大量的繁瑣重復的工作要做,在適當?shù)能浖ぞ叩妮o助下,開發(fā)人員可以把這類工作做的既快又好。目前廣為使用的統(tǒng)一建模語言(UML)、各種配置管理工具、缺陷管理工具和自動測試工具都在軟件工程活動中發(fā)揮了很好的作用。計算機輔助軟件工程(CASE)更是目前備受重視的一個旨在實現(xiàn)軟件開發(fā)自動化的新的領域。1.3軟件工程的產(chǎn)生及其發(fā)展1968年,北大西洋公約組織的計算機科學家們在原聯(lián)邦德國召開的國際會議上,針對軟件危機的嚴峻形勢,提出了把在其他工程領域中行之有效的一些工程學知識運用到軟件開發(fā)過程中來,從管理和技術兩個方面研究如何更好地開發(fā)和維護計算機軟件的設想。這也就是軟件工程的基本思路。在這次會議上首次提出并使用了“軟件工程”這一術語。簡單地說,軟件工程是指導軟件開發(fā)和維護的工程學科。它的核心思想是采用工程的概念、原理、技術和方法來開發(fā)和維護軟件,把經(jīng)過實踐考驗而證明是正確的管理技術和當前能夠得到的最好的技術方法結合起來,從而大大提高軟件開發(fā)的成功率和生產(chǎn)率。許多計算機專家都曾經(jīng)描述過“軟件工程”的定義。Boehm曾為軟件工程下過定義:“運用現(xiàn)代科學技術知識來設計并構造計算機程序及為開發(fā)、運行和維護這些程序所必需的相關文件資料”。
1983年,IEEE(電氣和電子工程師協(xié)會)給出的軟件工程定義為:“軟件工程是開發(fā)、運行、維護和修復軟件的系統(tǒng)方法”。
FritzBauer(美國著名的軟件工程專家)則給出了另一個關于軟件工程學的定義:“建立并使用完善的工程化原則,以較經(jīng)濟的手段獲得能在實際機器上有效運行的可靠軟件的一系列方法”。
后來又有一些從事軟件工程方法學研究的人陸續(xù)提出了許多更為完善的軟件工程的定義,但主要思想都是強調軟件開發(fā)過程中需要應用工程化原則的重要性。
IEEE給出了關于軟件工程的一個更加綜合的定義:
(1)將系統(tǒng)化的、規(guī)范的、可度量的方法應用于軟件的開發(fā)、運行和維護過程。即將工程化方法應用于軟件開發(fā)與維護過程中。
(2)對上述方法的研究。
就內容來看,軟件工程應當包括三個要素:方法、工具和過程。軟件工程方法為軟件開發(fā)提供了“如何做某項工作”的技術指南。它包括了多方面的任務。例如項目策劃和估算方法、軟件需求分析方法、體系結構的設計方法、詳細設計方法、軟件測試方法等等。使得整個開發(fā)過程的每一種階段任務都能夠“有章可循”。軟件工程工具為軟件工程方法提供了自動的或半自動的軟件支撐環(huán)境。目前這樣的工具已經(jīng)有許多種,而且已經(jīng)有人把諸多軟件工程工具集成起來,使得一種工具產(chǎn)生的信息可以為其他工具所使用,形成了一種稱之為計算機輔助軟件工程(CASE)的軟件開發(fā)支撐環(huán)境。CASE把各種軟件工具、開發(fā)機器和一個存放開發(fā)過程信息的工程數(shù)據(jù)庫組合起來,形成了一個完整的軟件工程環(huán)境。
軟件工程中的“過程”是將軟件工程的方法和工具綜合起來以達到合理、及時地進行計算機軟件開發(fā)的目的??梢詫④浖こ踢^程理解為軟件工程的工藝路線。過程定義了各種方法使用的順序、各階段要求交付的文檔資料、為保證質量和控制軟件變更所需要的管理環(huán)節(jié)和在軟件開發(fā)各個階段完成的里程碑。針對軟件工程的基本要件,有許多計算機科學家進行了詮釋,先后提出了100多條有關軟件工程的相關原則。著名軟件工程專家B.W.Boehm集眾家所長,并總結了TRW公司多年開發(fā)軟件的經(jīng)驗,在1983年提出了軟件工程的七項基本原則,作為保證軟件產(chǎn)品質量和開發(fā)效率的最小集合。具體包括:(1)用分階段的生命周期計劃嚴格管理軟件工程過程。(2)堅持在軟件工程過程中進行階段評審。(3)實行嚴格的產(chǎn)品控制。(4)采用現(xiàn)代的開發(fā)技術進行軟件的設計與開發(fā)。(5)工作結果應當是能夠清楚地審查的。(6)開發(fā)小組的人員應該“少而精”。(7)承認不斷改進軟件工程實踐的必要性。
這七條原則是互相獨立的、缺一不可的最小集合,同時又是相當完備的。可以證明,其他已經(jīng)提出的100多條軟件工程原理都可以由這七條原則的任意組合蘊含或派生。從首次提出“軟件工程”的概念開始,迄今已經(jīng)經(jīng)過了近半個世紀,在此期間,計算機硬件、軟件技術領域都有了長足的發(fā)展,各種新產(chǎn)品、新技術、新方法、新工具不斷問世。伴隨著計算機科學與技術的進步,軟件工程作為一門新興學科也同樣有了很大的發(fā)展。從傳統(tǒng)的軟件工程到面向對象的軟件工程,從一般的軟件工程到凈室軟件工程,從軟件工程到軟件再工程,從人工軟件工程到計算機輔助軟件工程,整個軟件工程學正在日趨走向成熟,并在計算機應用領域中發(fā)揮著越來越大的作用。1.4軟件工程的技術基礎圖1.6軟件工程過程層次圖
正如其他工程方法一樣,軟件工程必須以有組織的軟件質量保證為基礎。因此說,對質量的關注構成了軟件工程的根基。軟件工程過程是將技術層(包括工程技術與管理技術)結合在一起的凝聚力。過程層是軟件工程的基層。軟件工程過程定義了一組關鍵過程域(KPAs),這對于軟件工程技術的有效應用是必需的。這些關鍵過程區(qū)域是對軟件工程項目進行管理與控制的基礎,并且確定了上、下各區(qū)域之間的關系。其中,對于技術方法的采用、階段產(chǎn)品的產(chǎn)生、工程里程碑的建立、質量監(jiān)控與保證、變更控制等方面都進行了規(guī)定。除各個開發(fā)組織可以定義自己的軟件工程過程之外,目前流行比較廣泛的軟件工程過程包括有RUP過程、極限(XP)過程、敏捷軟件過程(AgileS.P)等等。
軟件工程方法涵蓋了需求分析、設計、編程、測試、維護等各個環(huán)節(jié),它給出了完成這些任務在技術上應當“如何做”的方法。它依賴于一組基本原則,這些原則控制了每一個技術區(qū)域,涉及到建模活動和其他描述技術。工具層對過程和方法提供支持,使得工程活動、管理活動得以自動、半自動的進行。例如,目前廣為使用的數(shù)據(jù)庫建模工具Erwin、面向對象的建模工具RationnalRose、配置管理工具等等。如果把一系列的工具集成起來使用,使得一個工具產(chǎn)生的信息可以被另一個工具使用時,就形成了一個支持軟件開發(fā)的系統(tǒng)。這種集成了軟件、硬件和一個軟件工程數(shù)據(jù)庫的軟件工程環(huán)境,稱為計算機輔助軟件工程(CASE)。1.5軟件工程過程的概念軟件工程過程是過去十年中人們關注的焦點。軟件工程和軟件工程過程之間是強相關的。軟件工程過程通常包括四種基本的過程活動:
(1)軟件規(guī)格說明:規(guī)定軟件的功能、性能及其運行限制。
(2)軟件開發(fā):產(chǎn)生滿足規(guī)格說明的軟件,包括設計與編碼等工作。
(3)軟件確認:確認軟件能夠滿足客戶提出的要求,對應于軟件測試。
(4)軟件演進:為滿足客戶的變更要求,軟件必須在使用的過程中演進,以求盡量延長軟件的生命周期。
在一個良好的軟件過程中,還應當包括一些“保護性”的活動,包括軟件項目的跟蹤監(jiān)控、正式的技術審核、軟件配置管理活動、軟件質量保證活動、文檔的準備和產(chǎn)生、軟件測試、風險管理等等。這些保護性活動貫穿于整個工程過程之中。在具體的工程過程中,可以根據(jù)實際需要,采用不同的過程模型來實現(xiàn)上述的基本活動和保護活動。事實上,軟件工程過程是一個軟件開發(fā)組織針對某一類軟件產(chǎn)品為自己規(guī)定的工作步驟,它應當是科學的、合理的,否則必將影響到軟件產(chǎn)品的質量。一個良好的軟件工程過程應當具備如下特點:(1)易理解性。
(2)可見性:每個過程活動都以得到明確的結果而告終,保證過程的進展對外可見。
(3)可支持性:容易得到CASE工具的支持。
(4)可接受性:比較容易被軟件工程師接受和使用。
(5)可靠性:不會出現(xiàn)過程錯誤,或者出現(xiàn)的過程錯誤能夠在產(chǎn)品出錯之前被發(fā)現(xiàn)。
(6)健壯性:不受意外發(fā)生問題的干擾。
(7)可維護性:過程可以根據(jù)開發(fā)組織的需求的改變而改進。
(8)高效率:從給出軟件規(guī)格說明起,就能夠較快地完成開發(fā)而交付使用。
一個軟件過程可以表示成如圖1.7所示的形式。其中,公共過程框架是通過定義若干適合于所有軟件項目的框架活動而建立的;若干任務集合中,每一個集合都由軟件工程工作任務、軟件項目里程碑、軟件工作產(chǎn)品和交付物以及質量保證點組成;保護性活動獨立于任何一個框架,貫穿于整個過程。圖1.7軟件工程過程1.6幾種軟件過程模型
在一個具體的實際工程活動中,軟件工程師必須設計、提煉出一個工程開發(fā)策略,用以覆蓋軟件過程中的基本階段,確定所涉及的過程、方法、工具。這種策略常被稱為“軟件工程過程模型”。這一模型的選擇應當是根據(jù)組織定義的標準軟件過程,參考具體工程項目的特點和資源狀況進行裁剪來進行的。
從宏觀上來看,所有的軟件開發(fā)過程都可以看成是一個循環(huán)解決問題的過程。其中包括四個截然不同的階段:狀態(tài)描述、問題定義、技術開發(fā)和方案綜述,如圖1.8所示。狀態(tài)描述表示了事物的當前狀態(tài);問題定義標識了要解決的特定問題;技術開發(fā)通過應用某些技術來解決問題;方案綜述提交解決結果(如文檔、程序、數(shù)據(jù)、新的商業(yè)功能、新產(chǎn)品)給那些從一開始就需要方案的人。前面定義的軟件工程的一般階段和步驟很容易映射到這些階段上。
圖1.8問題循環(huán)解決的各個階段
上述的問題循環(huán)解決過程可以應用于軟件工程的多個不同開發(fā)級別(階段)上,包括考慮整個系統(tǒng)開發(fā)的宏觀階段,開發(fā)程序構件的中間階段,甚至是代碼編制階段,因此可以采用分級集合表示??梢远x一個模式,然后在連續(xù)的、更小的規(guī)模上遞歸地應用它,這樣來提供一個關于過程的理想化的視圖。問題循環(huán)解決過程的每一個階段又包含一個相同的問題循環(huán)解決過程,如圖1.9所示。可以認為,軟件開發(fā)是從用戶到開發(fā)者再到技術的一個連續(xù)的過程。隨著向一個完整系統(tǒng)的逐步進展,上述的階段遞歸地應用于用戶的需求和開發(fā)者的軟件技術說明中。
圖1.9問題循環(huán)解決階段中的階段
要想像圖1.9那樣清楚地劃分階段活動是很困難的,因為階段內部和階段之間的活動往往是交叉的。但是對于任何一個軟件項目而言,不管選擇了什么樣的具體的軟件工程過程模型,所有四個活動階段在某個細節(jié)的級別上都是同時存在的。圖2.4描述了實際過程的遞歸性質。在后面的討論中,我們將會看到,每一種具體的軟件工程過程模型實際上都代表了一種將本質上無序的活動有序化的企圖。每一種模型都具有能夠幫助實際軟件項目的控制及協(xié)調的特征,但在它們的核心中,這些模型又表現(xiàn)了無序模型的特點。
在軟件工程實踐中,有許多專家治力于過程模型的研究。像瀑布模型、原型模型、快速應用開發(fā)模型、增量模型、螺旋模型、形式化方法模型、RUP模型、敏捷過程模型、構件組裝模型、并發(fā)開發(fā)模型等等都先后得到了有效的應用。圖1.10表示了軟件工程的線性順序模型,有時也稱為“瀑布模型”。?它表示了軟件開發(fā)系統(tǒng)的、順序的方法。雖然瀑布模型支持帶反饋的循環(huán),但大多數(shù)使用者均把它視為是嚴格線性的。從系統(tǒng)級開始,隨后是分析、設計、編碼、測試和維護。圖1.10線性順序模型線性順序模型是最早,也曾經(jīng)是應用最廣泛的軟件工程過程模型,但是這種模型不適應需求經(jīng)常發(fā)生變更的環(huán)境。實際的項目很少能夠嚴格地按照該模型給出的順序進行。需求的變更、設計的變更、編碼的變更幾乎是不可避免的。雖然線性順序模型能夠允許迭代,但卻是間接的迭代。在項目的開發(fā)過程中,變更可能會引起混亂。所以,有人形象地把采用線性模型進行商業(yè)軟件工程稱之為“在沙灘上蓋樓房”??紤]到用戶對于需求的理解有一個漸進漸深的過程,一開始用戶往往難以明確地提出所有的需求,這樣,線性順序模型的第一步輸入就得不到滿足。
同時,線性順序模型也經(jīng)常不能接受項目開始階段自然存在的不確定性。在采用線性順序模型的時候,用戶只有到項目的開發(fā)晚期才能夠得到程序的可運行版本。大的錯誤如果到這時才被發(fā)現(xiàn),那么造成的后果往往是災難性的。同時,因為線性順序模型每一步的工作都必須以前一階段的輸出為輸入,這種特征會導致工作中發(fā)生“阻塞”狀態(tài)。某些項目組成員不得不等待組內其他成員先完成前驅任務才可能展開自己的工作。有時這種等待時間可能會超過實際花在工作上的時間。這種阻塞狀態(tài)在線性順序過程的開始和結束時經(jīng)常會發(fā)生。1.6.2原型模型大型建筑在施工之前,常常按照圖紙制造一個縮小的模型來驗證工程完成后可能的效果;新的工業(yè)設計在充分證明其正確性之前,也往往利用在縮小規(guī)模的前提下制造少量成品進行檢驗的方法來驗證設計正確與否。同樣地,如果在開發(fā)一項軟件工程的時候,用戶不能準確、全面地描述其需求,或者開發(fā)者還不能確定所選用算法的有效性或人機交互界面的形式時,同樣也可以建立一個簡化了的樣品程序并使之運行,引導用戶通過對樣品運行情況的觀察,進一步明確需求或驗證算法的正確性。這種開發(fā)模式就稱之為“原型模型”,如圖1.11所示。圖1.11原型模型圖1.12RAD模型原型模型從需求收集開始,開發(fā)者和用戶在一起定義軟件的總體目標,標識出已知的需求,并規(guī)劃出進一步定義的區(qū)域。然后進行快速設計并進行編碼實現(xiàn),進行原型的建造。這種快速設計和建造通常集中在那些對用戶可見的部分(如輸入方式、輸出界面)。原型建造好之后,運行原型程序,由用戶和開發(fā)者進行評估、驗證。接著進一步精化待開發(fā)軟件的需求,逐步調整原型以使其逐漸滿足用戶的真正需求,同時也使開發(fā)者對將要完成的開發(fā)任務有更深入的理解。這一過程是多次迭代進行的。使用原型模型必須有兩個前提。其一是用戶必須積極參與原型的建造,同時開發(fā)者和用戶必須有共識:建造原型僅僅是為了定義需求,之后就必須被全部拋棄(至少是部分拋棄),實際的軟件必須在充分考慮到軟件質量和可維護性之后才被開發(fā)。從這個意義上說,原型模型又往往被稱為“拋棄原型模型”。其二是必須有快速開發(fā)工具可供使用。1.6.3快速應用開發(fā)模型快速應用開發(fā)(RAD)模型是線性順序模型的一個“高速”變種,強調極端的開發(fā)周期。RAD模型通過使用基于構件的建造方法達到快速開發(fā)的效果。在需求得到很好理解、項目的范圍約束明晰的前提下(通常不容易保證這樣的條件),采用RAD過程能夠使項目組在很短的時間內(如60~90天)創(chuàng)建出功能完善的系統(tǒng)。?RAD過程主要用于信息應用軟件的開發(fā),如圖1.12所示,它包含如下幾個開發(fā)階段:
(1)業(yè)務建模:業(yè)務活動中的信息流被模型化。此階段說明什么信息驅動業(yè)務流程、生成什么信息、誰負責生成該信息、該信息流向何處、誰處理它等。
(2)數(shù)據(jù)建模:業(yè)務建模階段定義的一部分信息流被精化,形成一組支持該業(yè)務所需的數(shù)據(jù)對象。此階段標識出每個數(shù)據(jù)對象的特征屬性,定義這些對象之間的關系。
(3)處理建模:數(shù)據(jù)建模階段定義的數(shù)據(jù)對象變換成為要完成一項業(yè)務功能所需的信息流。此階段創(chuàng)建處理描述以便增加、修改、刪除或獲取某個數(shù)據(jù)對象。
(4)應用生成:RAD過程不是采用傳統(tǒng)的第三代程序設計語言來創(chuàng)建軟件,而主要是復用已有的程序構件或是創(chuàng)建可復用的構件。在所有情況下,均使用自動化工具輔助軟件建造。
(5)測試及反復:RAD過程強調復用,許多構件是已經(jīng)測試過的,減少了測試工作量。但是所有的新創(chuàng)建構件、所有的接口都必須測試。圖1.12RAD模型1.6.4演化軟件過程模型
1.增量模型增量模型融合了線性順序模型的基本成分(重復的應用這些成分)和原型模型的迭代特征,如圖1.13所示。增量模型實際上是一個隨著日程/時間的進展而交錯的線性序列集合。每一個線性序列產(chǎn)生一個軟件的可發(fā)布的“增量”,所有的增量都能夠結合到原型模型中去。圖1.13增量模型當使用增量模型時,第一個增量模型往往是核心部分的產(chǎn)品,它實現(xiàn)了軟件的基本需求,但很多已經(jīng)明晰或者尚不明晰的補充特性還沒有發(fā)布。核心產(chǎn)品交由用戶使用或進行詳細復審。使用或復審評估的結果是制定下一個增量開發(fā)計劃。該計劃包括對核心產(chǎn)品的修改及增加一些新的功能與特性。這個過程在每一個增量發(fā)布后迭代地進行,直到產(chǎn)生最終的完善產(chǎn)品。和原型模型不一樣的是,增量模型雖然也具有“迭代”特征,但是每一個增量都發(fā)布一個可操作的產(chǎn)品,不妨稱之為“產(chǎn)品擴充迭代”。它的早期產(chǎn)品是最終產(chǎn)品的可拆卸版本,每一個版本都能夠提供給用戶實際使用。
2.螺旋模型螺旋模型也屬于演化軟件過程模型。它將原型的迭代特征與線性順序模型中控制的和系統(tǒng)化的方面結合起來,使得能夠快速開發(fā)軟件的增量版本。在螺旋模型中,軟件開發(fā)是一系列的增量發(fā)布。和增量模型不同,它并不要求每一個增量都是可以運行的程序。在早期的迭代中,發(fā)布的增量可以是一個紙上的模型或原型;在以后的迭代中產(chǎn)生更加完善的版本。螺旋模型被劃分為若干個框架活動,如圖1.14所示?;顒右卜Q為任務區(qū)域,一般包括:
(1)用戶通信:建立開發(fā)者和用戶之間有效通信所需要的任務。
(2)計劃:定義資源、進度和其他項目相關信息所需要的任務。
(3)風險分析:評估技術的及管理的風險所需要的任務。
(4)工程:建立應用的一個或多個表示所需要的任務。
(5)建造及發(fā)布:建造、測試、安裝和提供用戶支持所需要的任務。
(6)用戶評估:基于在工程階段產(chǎn)生的或在安裝階段實現(xiàn)的軟件表示的評估,是獲得用戶反饋所必需的任務。圖1.14一個典型的螺旋模型每一個框架活動(任務區(qū)域)均含有一系列的適應待開發(fā)項目特點的工作任務(活動)。在所有的情況下,都需要應用諸如軟件配置管理、軟件品質保證等保護性活動。隨著演化過程的開始,軟件工程項目組按照順時針方向沿螺旋移動。從核心開始,第一圈可能產(chǎn)生軟件規(guī)格說明書,第二圈可能開發(fā)出一個原型,隨后可能是軟件更完善的版本。經(jīng)過計劃區(qū)域的每一圈都會對計劃進行調整,基于從用戶處得到的反饋,調整進度和費用以及版本的內容。項目管理者可以根據(jù)項目的具體情況調整所需要的迭代次數(shù)。和傳統(tǒng)的過程模型不同,螺旋模型能夠適應于計算機軟件產(chǎn)品的整個生命周期,而不是當軟件交付后就結束過程。對于大型系統(tǒng)及軟件的開發(fā)工作來說,螺旋模型是一種很好的模型方法。采用這種模型,隨著過程的發(fā)展演化,開發(fā)者和用戶能夠更好地理解和對待每一個演化級別上的風險。它使開發(fā)者在產(chǎn)品演化的任何階段上都能夠使用原型方法,保持了傳統(tǒng)生命周期模型中的階段化的工作方式,但同時又引入了迭代的框架,更加真實地反映了現(xiàn)實世界。同時也有利于防范技術風險。螺旋模型的應用同樣有賴于用戶的充分理解和積極參與。同時,它需要使用專門的風險評估技術以便識別風險、防范風險。 1.7過程技術前面討論的過程模型必須適合于軟件項目組的使用。為滿足這一要求,先后開發(fā)出了許多過程管理工具以幫助軟件組織分析他們當前的過程,協(xié)調組織工作任務,控制和監(jiān)管進度以及管理技術質量。例如,利用配置管理工具來進行配置管理和缺陷管理;利用自動測試工具進行測試;利用統(tǒng)一建模語言UML來進行對象建模、分析與設計;利用Project制訂和監(jiān)測項目計劃及其進展;利用第四代技術,通過開發(fā)者在較高的層次上說明軟件的某些特征,之后工具就能夠自動地根據(jù)說明生成源代碼等。采用合適的過程技術工具,使得軟件開發(fā)組織能夠建造一個自動模型,該模型包括通用的過程框架、任務集合及保護性活動。該模型一般表示成一個網(wǎng)絡,對其加以分析,就能夠確定典型的工作流程,考察可能導致降低開發(fā)時間和成本的可供選擇的過程結構。一旦創(chuàng)建了一個可接受的過程,就可以使用其他過程工具來分配、監(jiān)管,甚至控制過程模型中所定義的所有軟件工程任務。軟件項目組的每一個成員均能夠使用這些工具產(chǎn)生一個清單,包括要完成的任務、要開發(fā)的工作產(chǎn)品以及要實現(xiàn)的質量控制活動等等。
1.8軟件重用技術“重用”是提升軟件財富價值的有效途徑。一般來說,這里所指的重用可以包括知識重用、方法重用、軟件成分重用三個層次。例如,軟件工程知識的重用使我們能夠高效率地開發(fā)、維護一個又一個的軟件項目;行之有效的軟件工程方法的重用幫助我們有章可循地解決各類工程問題;軟件成分的重用則使我們在需求分析、系統(tǒng)設計和編碼實現(xiàn)的過程中能夠事半功倍。對于軟件工程師來說,軟件成分的重用是我們最為關注的問題。介紹RAD模型時,我們已經(jīng)了解了構件重用的重要作用。沒有構件重用,RAD模型就只能是紙上談兵。再具體一點地說,軟件成分重用又可以分為分析結果重用、設計結果重用和代碼重用三個層次。需求分析在軟件工程中的地位舉足輕重。一個完善的需求分析將指導我們走上成功之路,反之,錯誤的分析必將導致項目的徹底失敗。在大部或局部雷同的項目中重復地使用已經(jīng)被前驅項目證明是正確的部分分析結果,是提高分析工作效率、保證分析成功的一種有效方法。設計重用在開發(fā)類同項目的軟件,尤其是在軟件移植過程中能夠極大地減少工作量,提高工作效率。設計結果重用包括體系結構設計重用和詳細設計重用兩重內涵。代碼重用是最直接的重用。包括基于“宏”的重用、基于函數(shù)庫的重用和基于繼承的重用三種不同的方法。目前,基于函數(shù)庫的重用(例如C語言)和基于繼承(VB、JAVA等)的重用代表著代碼重用的主流。尤其是基于繼承的代碼重用,隨著面向對象方法的成熟,越來越受到重視?;谲浖赜盟枷氲目蚣?Framework)開發(fā)模式近年來備受關注。業(yè)界認為,軟件構件化是21世紀軟件工業(yè)發(fā)展的大趨勢。工業(yè)化的軟件復用已經(jīng)從通用類庫進化到了面向領域的應用框架??蚣艿闹赜靡殉蔀檐浖a(chǎn)中最有效的重用方式之一??蚣苁钦麄€或部分系統(tǒng)的可重用設計,表現(xiàn)為一組抽象構件及構件實例間交互的方法。另一種定義認為,框架是可被應用開發(fā)者定制的應用骨架。前者是從應用方面而后者是從目的方面給出的定義??梢哉f,一個框架是一個可復用的設計構件,它規(guī)定了應用的體系結構,闡明了整個設計、協(xié)作構件之間的依賴關系、責任分配和控制流程,表現(xiàn)為一組抽象類以及其實例之間協(xié)作的方法,它為構件復用提供了上下文(Context)關系。因此,構件庫的大規(guī)模重用也需要框架??蚣艿淖畲蠛锰幘褪侵赜?。面向對象系統(tǒng)獲得的最大的復用方式就是框架,一個大的應用系統(tǒng)往往可能由多層互相協(xié)作的框架組成。由于框架能重用代碼,因此從一已有構件庫中建立應用變得非常容易,因為構件都采用框架統(tǒng)一定義的接口,所以使構件間的通信趨于簡單??蚣苣軌蛑赜迷O計。它提供可重用的抽象算法及高層設計,并能將大系統(tǒng)分解成更小的構件,而且能描述構件間的內部接口。這些標準接口使在已有的構件基礎上通過組裝建立各種各樣的系統(tǒng)成為可能。只要符合接口定義,新的構件就能插入框架中,構件設計者就能重用構件的設計??蚣苓€能重用分析。所有的人員若都按照框架的思想來分析事務,那么就能將它劃分為同樣的構件。采用相似的解決方法,從而使采用同一框架的分析人員之間能進行溝通。采用框架技術進行軟件開發(fā)的主要特點包括:
(1)領域內的軟件結構一致性好。
(2)建立了更加開放的系統(tǒng)。
(3)重用代碼大大增加,軟件生產(chǎn)效率和質量也得到了提高。
(4)軟件設計人員要專注于對領域的了解,使需求分析更充分。
(5)存儲了經(jīng)驗,可以讓那些經(jīng)驗豐富的人員去設計框架和領域構件,而不必限于低層編程。
(6)允許采用快速原型技術。
(7)有利于在一個項目內多人協(xié)同工作。
(8)大粒度的重用使得平均開發(fā)費用降低,開發(fā)速度加快,開發(fā)人員減少,維護費用降低,而參數(shù)化框架使得適應性、靈活性增強。
1.9計算機輔助軟件工程工具
1.按使用功能的CASE工具分類
(1)信息工程工具。這類CASE工具不是關注于特定應用的需求,而是對業(yè)務信息在公司內各個組織實體間的流動進行建模,其主要目標是表示業(yè)務數(shù)據(jù)對象、它們的關系以及這些數(shù)據(jù)對象如何在公司內部的不同業(yè)務區(qū)域間流動。通過對某一組織的戰(zhàn)略性信息需求的建模,信息工程工具提供了一個可從中導出特定信息系統(tǒng)的“元模型”。
(2)項目計劃/管理工具。主要包括:項目計劃工具:這類工具主要關注軟件項目工作量、項目工期、成本估算和項目進度安排,使得項目管理者能夠定義所有項目任務,創(chuàng)建任務網(wǎng)以表示任務間的依賴性和可能的并行度。項目度量工具:這類工具通過捕獲項目特定的度量(如每人月的LOC、每個功能點的缺陷數(shù)等),改善項目管理者控制和協(xié)調軟件過程的能力,從而提高軟件開發(fā)的質量。風險分析工具:這類工具通過提供對風險標識和分析的詳細指南,使得項目管理者能夠建立風險表,并制定一個計劃減輕、監(jiān)控和管理風險。質
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東跑道膠黏劑施工方案
- 道路碎石基層施工方案
- 福田窗臺防水施工方案
- 中天服務:2024年年度審計報告
- 2025北京大興八年級(上)期末生物(教師版)
- 數(shù)控加工工藝與編程技術基礎 教案 模塊二 項目一 任務2 圓弧的加工(1-2)
- 實施甘蔗豐產(chǎn)栽培技術與病蟲害綜合防控的探討分析
- 山東省泰安市泰山區(qū)2024-2025學年上學期七年級(五四制)數(shù)學期末試題(原卷版+解析版)
- 2025年中國垃圾發(fā)電設備行業(yè)市場現(xiàn)狀及投資態(tài)勢分析報告(智研咨詢)
- 食品加工企業(yè)食品安全監(jiān)測與檢測技術
- 2022年東北大學現(xiàn)代控制理論試題及答案
- X射線的物理學基礎-
- 財務英語英漢對照表
- 教學樓畢業(yè)設計資料
- 國網(wǎng)直流電源系統(tǒng)技術監(jiān)督規(guī)定
- 腦電圖學專業(yè)水平考試大綱初級
- 香港雇傭合同協(xié)議書
- 建筑工程材料見證取樣及送檢培訓講義(PPT)
- 單元式幕墻軌道方案
- 電解水制氫項目建議書范文
- 北師大版小學數(shù)學二年級下冊課程綱要
評論
0/150
提交評論