版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1.1軟件工程學(xué)的背景和目的1.2軟件和軟件生命期模型1.3軟件質(zhì)量的評(píng)價(jià)1.4軟件開(kāi)發(fā)方法和軟件自動(dòng)工具習(xí)題一計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生在修完編程(Programming)等課程之后,對(duì)編寫(xiě)小型程序,例如字符編輯程序或報(bào)表打印程序等,一定是很有把握了。但是,如果需要研制一個(gè)大型的軟件系統(tǒng),例如飛機(jī)訂票系統(tǒng)或?qū)W校管理系統(tǒng)(包括教務(wù)、財(cái)務(wù)、人事、物資等各系科的全面管理),相信會(huì)遇到許多困難,因此還必須學(xué)習(xí)“軟件工程學(xué)”。
“軟件工程”(SoftwareEngineering)是從“編程”演變過(guò)來(lái)的,后者一般考慮小型程序的編寫(xiě),前者則考慮大型軟件系統(tǒng)的研制?!败浖こ虒W(xué)”出現(xiàn)至今只有二十余年,是一門(mén)新的學(xué)科。本節(jié)先討論軟件工程學(xué)產(chǎn)生的背景及這門(mén)學(xué)科的目的。1.1軟件工程學(xué)的背景和目的
60年代以來(lái),在一些技術(shù)領(lǐng)先的國(guó)家中,計(jì)算機(jī)的應(yīng)用領(lǐng)域越來(lái)越廣,它幾乎涉及到社會(huì)生活的各個(gè)方面,如工廠管理、銀行事務(wù)、病人監(jiān)護(hù)、學(xué)校檔案、圖書(shū)館流通、旅館預(yù)訂……,這些系統(tǒng)的軟件規(guī)模都相當(dāng)大,邏輯很復(fù)雜,而且功能上需要不斷更改和擴(kuò)充。
至于軍事方面的導(dǎo)彈防御系統(tǒng)、宇航方面的飛行控制系統(tǒng),其軟件就更為龐大和復(fù)雜了。
由于軟件是非實(shí)物性、不可見(jiàn)的,開(kāi)發(fā)軟件本質(zhì)上又是一個(gè)“思考”的過(guò)程,很難進(jìn)行管理,開(kāi)發(fā)人員可以按各自的愛(ài)好和習(xí)慣進(jìn)行工作,沒(méi)有統(tǒng)一的標(biāo)準(zhǔn)可以遵循,只能以手工藝的方式進(jìn)行。管理人員事前很難估計(jì)項(xiàng)目所需的經(jīng)費(fèi)和時(shí)間,技術(shù)人員在項(xiàng)目完成之前也難以預(yù)料系統(tǒng)是否能成功。人們?cè)陂_(kāi)發(fā)上述大型軟件系統(tǒng)時(shí)遇到了許多困難,有的系統(tǒng)最終徹底失敗了;有的系統(tǒng)雖然完成了,但比原定計(jì)劃遲了好幾年,而且經(jīng)費(fèi)上大大超過(guò)了預(yù)算;有的系統(tǒng)未能完滿地符合用戶(hù)當(dāng)初的期望;有的系統(tǒng)則無(wú)法進(jìn)行修改維護(hù)。更糟的是,失敗的系統(tǒng)往往無(wú)可挽回,除非再?gòu)念^做起,但由于時(shí)間和經(jīng)費(fèi)的限制,這又是不可能的。
IBM公司的OS/360系統(tǒng)和美國(guó)空軍某后勤系統(tǒng)在開(kāi)發(fā)過(guò)程中遭受的挫折是眾所周知的。以O(shè)S/360為例:它由4000個(gè)模塊組成,共約100萬(wàn)條指令,人工為5000人年(一個(gè)人工作一年其工作量相當(dāng)于一個(gè)人年),經(jīng)費(fèi)達(dá)數(shù)億美元,但結(jié)果卻是令人沮喪的,人們?cè)诔绦蛑邪l(fā)現(xiàn)的錯(cuò)誤達(dá)2000個(gè)以上。OS/360系統(tǒng)的負(fù)責(zé)人Brooks曾生動(dòng)地描述了開(kāi)發(fā)過(guò)程中的困難和混亂:……像巨獸在泥潭中作垂死掙扎,掙扎得越猛,泥漿就沾得越多,最后沒(méi)有一個(gè)野獸能逃脫淹沒(méi)在泥潭中的命運(yùn)……程序設(shè)計(jì)就像是這樣一個(gè)泥潭……一批批程序員在泥潭中掙扎……沒(méi)人料到問(wèn)題竟會(huì)這樣棘手……”
。
人們發(fā)現(xiàn),研制軟件系統(tǒng)需要投入大量的人力和物力,但系統(tǒng)的質(zhì)量卻難以保證,也就是說(shuō),開(kāi)發(fā)軟件所需的高成本同產(chǎn)品的低質(zhì)量之間有著尖銳的矛盾,這種現(xiàn)象就是所謂
的“軟件危機(jī)”(Softwarecrisis)。與此同時(shí),由于新的電子元器件的出現(xiàn),計(jì)算機(jī)硬件的功能和質(zhì)量在不斷地提高,而價(jià)格卻在大幅度地下降,因此同硬件投資相比,軟件投資比例上升極快,圖11是Boeh-m在l976年對(duì)美國(guó)計(jì)算機(jī)總投資的統(tǒng)計(jì)和預(yù)測(cè),從圖中可以看出,在50年代,軟件投資約占20%,至70年代已超過(guò)60%,當(dāng)時(shí)預(yù)測(cè)到1985年軟件投資將高達(dá)85%。
硬件價(jià)格的大幅度下降意味著計(jì)算機(jī)可以廣泛使用,因此對(duì)軟件的需求量將會(huì)迅速上升,但是軟件危機(jī)的事實(shí)告
訴人們:軟件技術(shù)沒(méi)有跟上硬件技術(shù)的高速發(fā)展,人們意識(shí)到計(jì)算機(jī)要推廣使用,其關(guān)鍵在于軟件開(kāi)發(fā)技術(shù)的革新。圖1.1
Parnas認(rèn)真分析了開(kāi)發(fā)大型軟件和編制小型程序之間的差別,他發(fā)現(xiàn),從所需人力來(lái)看,小型程序從確定要求、編制、使用、直至修改往往是由同一個(gè)人完成的,因此只要他本人心里明白程序的構(gòu)思就夠了,而大型系統(tǒng)則必須由許多人(包括用戶(hù)、項(xiàng)目負(fù)責(zé)人、分析員、高初級(jí)程序員、資料員、操作員等)組成一支開(kāi)發(fā)隊(duì)伍來(lái)協(xié)同完成,所以人與人之間必須準(zhǔn)確地進(jìn)行協(xié)商討論;另外,從產(chǎn)品使用情況來(lái)看,小型程序往往是“一次性”的,意即如果需要作較大的修改,人們通常寧可丟棄舊的程序而重新編寫(xiě),但大型系統(tǒng)的開(kāi)發(fā)耗費(fèi)了大量的人力與物力,所以人們一般不會(huì)輕易將其拋棄,而總是在舊程序的基礎(chǔ)上一改再改,希望延長(zhǎng)它的使用期,因而是“多個(gè)版本”的。所以,Parnas將大型軟件開(kāi)發(fā)的特點(diǎn)總結(jié)為:由“多個(gè)人”來(lái)開(kāi)發(fā)具有“多個(gè)版本”的程序。
大型軟件系統(tǒng)的開(kāi)發(fā)提出了許多新的問(wèn)題,諸如:如何將一個(gè)系統(tǒng)分解成若干個(gè)部分,以便各人分工開(kāi)發(fā);如何精確地說(shuō)明每個(gè)部分的規(guī)格要求;怎樣才能使軟件產(chǎn)品易于修改維護(hù);……。
顯然,傳統(tǒng)的“編程”沒(méi)有考慮這些問(wèn)題。
量變帶來(lái)了質(zhì)變,系統(tǒng)規(guī)模的增大使問(wèn)題的性質(zhì)發(fā)生了變化,人們認(rèn)識(shí)到:正像不能用造獨(dú)木船的手工藝方式來(lái)研制航空母艦一樣,沿用50年代個(gè)人編寫(xiě)小型程序的那種手工藝方式來(lái)開(kāi)發(fā)大型軟件系統(tǒng)也是不行的,必須尋找新的技術(shù)來(lái)指導(dǎo)軟件的大規(guī)模生產(chǎn)??紤]到機(jī)械、建筑等領(lǐng)域都經(jīng)歷過(guò)從手工藝方式演變成嚴(yán)密完整的工程科學(xué)的過(guò)程,一些有識(shí)之士認(rèn)為大型軟件系統(tǒng)的開(kāi)發(fā)也應(yīng)該向“工程化”方向發(fā)展,逐步發(fā)展成一門(mén)嚴(yán)格的工程科學(xué)。
1968年在北大西洋公約組織的學(xué)術(shù)會(huì)議上有人第一次提出了“軟件工程”這個(gè)詞,還提出了一些軟件工程化的技術(shù)并進(jìn)行了討論。
60年代末至70年代初,“軟件工程學(xué)”還處于學(xué)術(shù)研究階段,但已對(duì)軟件開(kāi)發(fā)的實(shí)踐產(chǎn)生了巨大的影響。l971年IBM公司運(yùn)用一些軟件工程技術(shù)成功地研制了紐約時(shí)報(bào)情報(bào)庫(kù)系統(tǒng)和空間實(shí)驗(yàn)室的飛行模擬系統(tǒng)。這也是兩個(gè)著名的例子,盡管兩個(gè)系統(tǒng)都很龐大,用戶(hù)要求又有很多變化,并又減少了人力和削減了經(jīng)費(fèi),但由于適當(dāng)?shù)夭捎昧斯こ袒募?/p>
術(shù),還是按時(shí)、高質(zhì)量地完成了,軟件生產(chǎn)率比以前提高了一倍。
這些事實(shí)說(shuō)明用“工程化”的思想作指導(dǎo),可以大大減少軟件開(kāi)發(fā)成本并提高軟件質(zhì)量,“工程化”為人們開(kāi)辟了新的道路,“軟件工程學(xué)”這門(mén)富有潛力的學(xué)科就此蓬勃地發(fā)展起來(lái)了。
在我國(guó),計(jì)算機(jī)領(lǐng)域近年來(lái)迅猛發(fā)展,前面討論的種種問(wèn)題和矛盾也就在國(guó)內(nèi)暴露出來(lái)了。國(guó)內(nèi)的軟件工作者也意識(shí)到要進(jìn)一步發(fā)展我國(guó)的計(jì)算機(jī)事業(yè),軟件工程學(xué)是個(gè)關(guān)
鍵。目前國(guó)內(nèi)、國(guó)外都有許多人在從事這一領(lǐng)域的研究,軟件工程學(xué)已成為計(jì)算機(jī)學(xué)科中的一個(gè)重要分支。作為一門(mén)學(xué)科,軟件工程學(xué)研究的是:如何應(yīng)用一些科學(xué)理論和工程上的技術(shù)來(lái)指導(dǎo)大型①軟件系統(tǒng)的開(kāi)發(fā),使其發(fā)展成一門(mén)嚴(yán)格的工程科學(xué);軟件工程學(xué)的最終目的是以較
低的成本研制具有較高質(zhì)量的軟件。所以,研究軟件工程學(xué)無(wú)疑將促進(jìn)計(jì)算機(jī)推廣應(yīng)用的步伐,直接或間接地產(chǎn)生巨大的社會(huì)效益和經(jīng)濟(jì)效益。表1.1
軟件工程學(xué)包括的面很廣,有基礎(chǔ)理論研究,也有應(yīng)用研究以及實(shí)際開(kāi)發(fā);除了技術(shù)問(wèn)題之外,它還涉及與開(kāi)發(fā)軟件有關(guān)的所有活動(dòng),例如管理學(xué)、心理學(xué)、經(jīng)濟(jì)學(xué)法律、道德等方面。本書(shū)只討論軟件工程中的技術(shù)問(wèn)題,重點(diǎn)是軟件產(chǎn)業(yè)界近年來(lái)較流行的實(shí)用技術(shù)。
計(jì)算機(jī)領(lǐng)域從50年代到90年代有了突飛猛進(jìn)的發(fā)展,人們對(duì)許多問(wèn)題的看法也發(fā)生了根本的變化。所以,在學(xué)習(xí)具體的軟件開(kāi)發(fā)技術(shù)之前,我們有必要對(duì)軟件的一些基本概念,如什么是軟件、軟件開(kāi)發(fā)過(guò)程包括哪些活動(dòng)、如何評(píng)價(jià)軟件產(chǎn)品的質(zhì)量等,重新進(jìn)行討論。讀者將會(huì)看到目前的看法同傳統(tǒng)的觀點(diǎn)已有了相當(dāng)大的差別。
軟件和軟件生命期模型是軟件工程學(xué)中兩個(gè)重要的概念。過(guò)去,人們一般認(rèn)為所謂“軟件”就是指“程序”,所謂“開(kāi)發(fā)軟件”也僅僅就是“編程序”而已。但是,對(duì)于大型軟件系統(tǒng)而言,這樣的理解是不合適的。1.2軟件和軟件生命期模型眾所周知,凡是工業(yè)產(chǎn)品都有其生命周期,即要經(jīng)過(guò)分析要求、設(shè)計(jì)、制造、測(cè)試、運(yùn)行(此時(shí)需要不斷地維護(hù))等幾個(gè)階段。軟件也是一種產(chǎn)品,同樣存在生命周期。那什么是軟件生命期呢?一個(gè)軟件從被提出開(kāi)始研制至軟件最終被廢棄不再使用為止的全過(guò)程,稱(chēng)為軟件生命期。
軟件生命期的劃分應(yīng)該適應(yīng)軟件生產(chǎn)工程化的需要,而不是千篇一律的。圖1.2是一種典型的軟件生命期模型(softwareLifecycleModel)示意圖,由于其形狀似多級(jí)瀑布,常稱(chēng)為“瀑布模型”。這種模型把軟件生命期劃分為可行性研究與計(jì)劃、需求分析、設(shè)計(jì)、編程、測(cè)試、運(yùn)行與維護(hù)等六個(gè)階段,每個(gè)階段都有明確的任務(wù),并需產(chǎn)生一定規(guī)格的文檔資料交付給下一階段,下一階段在上階段交付的文檔的基礎(chǔ)上繼續(xù)開(kāi)展工作。
圖1.2在圖1.2生命期模型中,第一個(gè)階段有時(shí)又稱(chēng)為計(jì)劃期,中間四個(gè)階段總稱(chēng)為開(kāi)發(fā)期,
最后一個(gè)階段稱(chēng)為運(yùn)行期。表1.2概括地列出了每個(gè)階段的基本任務(wù)、工作結(jié)果(即提交的文檔)以及參加人員。
1.可行性研究與計(jì)劃階段
當(dāng)準(zhǔn)備接受一個(gè)軟件開(kāi)發(fā)任務(wù)時(shí),首先要確定是否值得去開(kāi)發(fā),如果不值得去開(kāi)發(fā),那么花費(fèi)在這項(xiàng)開(kāi)發(fā)工程上的任何時(shí)間、資源、人力和經(jīng)費(fèi)都是無(wú)謂的浪費(fèi)??尚行匝芯?/p>
與計(jì)劃階段的基本任務(wù)是搞清問(wèn)題的性質(zhì),確定系統(tǒng)的目標(biāo)和規(guī)模,從技術(shù)、經(jīng)濟(jì)和社會(huì)因素等方面分析論證本軟件項(xiàng)目的可行性,并最終產(chǎn)生一份可行性分析報(bào)告??尚行匝芯?/p>
的結(jié)果是使用部門(mén)負(fù)責(zé)人做出是否繼續(xù)進(jìn)行這項(xiàng)工程的決定的重要依據(jù)。
2.需求分析和規(guī)格說(shuō)明階段(簡(jiǎn)稱(chēng)需求分析階段)
在設(shè)計(jì)軟件系統(tǒng)之前,首先必須確定用戶(hù)究竟要求軟件系統(tǒng)做什么,所以分析階段的基本任務(wù)是理解用戶(hù)的需求,并將用戶(hù)的需求用書(shū)面形式表達(dá)出來(lái)。這一階段產(chǎn)生的文檔
是需求規(guī)格說(shuō)明書(shū)(簡(jiǎn)稱(chēng)需求說(shuō)明書(shū)),它明確地描述了用戶(hù)的要求。需求說(shuō)明書(shū)是以后備階段工作的基礎(chǔ)。用戶(hù)和軟件人員雙方都應(yīng)有代表參加這一階段的工作,需求說(shuō)明書(shū)就是
雙方充分討論交流后達(dá)成的協(xié)議。
3.設(shè)計(jì)階段
在設(shè)計(jì)階段,要在需求說(shuō)明書(shū)的基礎(chǔ)上建立軟件系統(tǒng)的“結(jié)構(gòu)",包括數(shù)據(jù)結(jié)構(gòu)和模塊結(jié)構(gòu)。設(shè)計(jì)階段一般又可分為兩步:概要設(shè)計(jì)(或稱(chēng)為總體設(shè)計(jì))和詳細(xì)設(shè)計(jì),前者主要考慮模塊的分解,后者考慮每個(gè)模塊內(nèi)部的細(xì)節(jié)。本階段產(chǎn)生的文檔包括模塊說(shuō)明書(shū)、數(shù)據(jù)庫(kù)或文件結(jié)構(gòu)說(shuō)明等。由于軟件產(chǎn)品的質(zhì)量在很大程度上取決于設(shè)計(jì)方案的質(zhì)量,所以設(shè)計(jì)工作要由經(jīng)驗(yàn)較豐富的高級(jí)軟件人員來(lái)完成。
4.編程階段
在編程階段,按模塊說(shuō)明書(shū)的要求為每個(gè)模塊編寫(xiě)程序。相對(duì)地說(shuō),這個(gè)階段是最簡(jiǎn)單的,初級(jí)程序員可以參加編程階段的工作。
5.測(cè)試階段
由于前面三個(gè)階段都可能產(chǎn)生各種各樣的錯(cuò)誤,所以測(cè)試階段的任務(wù)就是發(fā)現(xiàn)并排除這些錯(cuò)誤。靜態(tài)檢驗(yàn)工作實(shí)際上在上述每個(gè)階段的最后就必須進(jìn)行,而測(cè)試階段則進(jìn)行最后的動(dòng)態(tài)檢驗(yàn)。測(cè)試通常又可分為模塊測(cè)試、集成測(cè)試和系統(tǒng)測(cè)試等幾步。測(cè)試應(yīng)該由另一個(gè)獨(dú)立的部門(mén)(如不參加系統(tǒng)的設(shè)計(jì)或編程的人員)來(lái)完成。經(jīng)過(guò)測(cè)試就得到了軟件系統(tǒng)
的第一個(gè)版本。
zelkowity對(duì)一些軟件項(xiàng)目中各階段的工作量進(jìn)行了統(tǒng)計(jì),圖1.3是他給出的結(jié)果。
圖1.3(a)說(shuō)明在整個(gè)生命期中,開(kāi)發(fā)期和運(yùn)行期所占的工作量,可以看出維護(hù)工作量要占一半以上。圖1.3(b)說(shuō)明在開(kāi)發(fā)期中各階段所占的工作量,可以看出,測(cè)試工作量約占其中的一半。
圖1.3告訴我們,編程工作在整個(gè)生命期中只占很小的比例,所以“開(kāi)發(fā)軟件僅僅是編程”的想法顯然是錯(cuò)誤的。
圖1.3圖1.2的瀑布模型將軟件生命期組織成六個(gè)階段,這是比較有代表性的模式。也有人提出其他一些模式,表1.3列出了Freeman、Metzger、Boehm等人的模式,可以看出,各種模式基本上是類(lèi)似的。由于軟件規(guī)模大、邏輯復(fù)雜,且生命期又長(zhǎng),而人的記憶力是有限的,所以有關(guān)軟件系統(tǒng)的所有資料,必須以書(shū)面文檔的形式記錄下來(lái),這樣開(kāi)發(fā)人員就能以文檔為基礎(chǔ)協(xié)同工作,各階段之間也可通過(guò)文檔實(shí)現(xiàn)過(guò)渡。顯然,文檔健全與否直接影響著最終產(chǎn)品的質(zhì)量。
為了強(qiáng)調(diào)軟件產(chǎn)品除程序之外還必須包括各種文檔資料,Boehm為軟件給出了新的定義:“軟件是程序以及開(kāi)發(fā)、使用和維護(hù)程序所需的所有文檔”,因此,需求說(shuō)明書(shū)、模塊說(shuō)明書(shū)、數(shù)據(jù)庫(kù)和文件說(shuō)明、程序、測(cè)試計(jì)劃、測(cè)試用例、使用手冊(cè)、維護(hù)手冊(cè)……各階段交付文檔的全體就是“軟件”。由此可見(jiàn),作為一名稱(chēng)職的軟件開(kāi)發(fā)人員,光會(huì)編程是不夠的,他還必須掌握分析、設(shè)計(jì)、測(cè)試等方法和工具,學(xué)會(huì)編寫(xiě)上述各種文檔。培養(yǎng)學(xué)生掌握這些技術(shù)就是本書(shū)的目的。
與傳統(tǒng)的手工藝開(kāi)發(fā)方式相比,上述生命期模型有兩個(gè)明顯的長(zhǎng)處,第一,由于強(qiáng)調(diào)要將每個(gè)階段的工作結(jié)果用書(shū)面形式描述出來(lái),這就使原來(lái)“不可見(jiàn)”的軟件變成了“可見(jiàn)”的文檔資料;第二,開(kāi)發(fā)過(guò)程分階段按步驟進(jìn)行,以交付某種特定規(guī)格的文檔作為標(biāo)志某個(gè)階段完成的里程碑,這就使原來(lái)“難以管理的思考過(guò)程”變?yōu)椤翱梢怨芾淼纳a(chǎn)過(guò)程”了。顯然,這兩點(diǎn)長(zhǎng)處為提高軟件生產(chǎn)率和改進(jìn)軟件質(zhì)量創(chuàng)造了極為有利的條件。
必須指出的是,實(shí)際軟件系統(tǒng)的開(kāi)發(fā)不可能是理想化地按瀑布模型進(jìn)行,由于人們理解問(wèn)題總有一個(gè)反復(fù)的過(guò)程,所以從后階段回復(fù)到前階段是不可避免的。例如在設(shè)計(jì)階段發(fā)現(xiàn)需求說(shuō)明書(shū)有不完整或不正確之處,就必須進(jìn)行“再分析”,測(cè)試階段發(fā)現(xiàn)模塊界面有錯(cuò)誤,就必須進(jìn)行“再設(shè)計(jì)”,在運(yùn)行階段為了擴(kuò)充系統(tǒng)的功能又要進(jìn)行“再分析”、“再設(shè)計(jì)”、“再編程”等。另外,階段之間也沒(méi)有明確的界線,如分析階段需要考慮系統(tǒng)的可行性,就一定會(huì)涉及一些設(shè)計(jì)方面的問(wèn)題;又由于采用了模塊化的技術(shù),某些模塊的編程有可能與另一些模塊的測(cè)試并行進(jìn)行。軟件工程學(xué)的最終目標(biāo)是獲得高質(zhì)量的軟件,所以如何評(píng)價(jià)軟件質(zhì)量是一個(gè)重要的問(wèn)題。以前,對(duì)小型程序,人們一般比較強(qiáng)調(diào)程序的正確性和效率,近年來(lái)隨著軟件規(guī)模的
增大和復(fù)雜性的上升,對(duì)問(wèn)題的看法已發(fā)生了變化。目前,軟件質(zhì)量的定義還是非常模糊的,人們對(duì)此尚未形成一致的看法,但一般說(shuō)來(lái)傾向于從可維護(hù)性、可靠性、可理解性和
效率等方面對(duì)軟件作較全面的評(píng)價(jià),下面分別討論之。1.3軟件質(zhì)量的評(píng)價(jià)
1.可維護(hù)性(Maintainability)
軟件在運(yùn)行階段尚需不斷“修正”,因?yàn)檐浖m經(jīng)測(cè)試但不可避免地總還隱含著各種錯(cuò)誤,這些錯(cuò)誤在運(yùn)行階段會(huì)逐步暴露出來(lái),因而就要進(jìn)行排錯(cuò)。例如1BM公司的0s/360系統(tǒng),據(jù)說(shuō)每個(gè)版本中約有成千個(gè)錯(cuò)誤;又如某軍事系統(tǒng)在運(yùn)行初期,平均每月發(fā)現(xiàn)900個(gè)錯(cuò)誤,糾正一個(gè)錯(cuò)誤平均需修改l7條指令。軟件在運(yùn)行階段尚需不斷“完善”,因?yàn)橄到y(tǒng)經(jīng)過(guò)一個(gè)時(shí)期的使用后,用戶(hù)必然會(huì)逐步提出一些更改或擴(kuò)充要求,軟件就需要相應(yīng)地不斷作修改。
軟件在運(yùn)行階段往往還需作“適應(yīng)性”修改,因?yàn)榻陙?lái)計(jì)算機(jī)業(yè)發(fā)展迅速,一般在3至5年內(nèi),硬件或系統(tǒng)軟件就會(huì)出現(xiàn)更新?lián)Q代的新產(chǎn)品,于是應(yīng)用軟件系統(tǒng)也就需要作相應(yīng)的調(diào)整或移植。
在運(yùn)行期中,對(duì)軟件所作的上述修正性、完善性和適應(yīng)性修改,總稱(chēng)為“維護(hù)”,它涉及再分析、再設(shè)計(jì)、再編程、再測(cè)試等活動(dòng)??紤]到大型軟件系統(tǒng)的運(yùn)行期可達(dá)10年以上,所以維護(hù)的工作量是極大的。另外,維護(hù)工作也是相當(dāng)困難的,由于軟件邏輯上的復(fù)雜性,修改往往會(huì)帶來(lái)新的錯(cuò)誤。據(jù)統(tǒng)計(jì),軟件錯(cuò)誤中有19%是由于修改造成的;有人還統(tǒng)計(jì)出,如果一個(gè)修改涉及5
至l0個(gè)語(yǔ)句,修改成功的可能性是50%,如果一個(gè)修改涉及40至50個(gè)語(yǔ)句,則修改成功的可能性下降至20%,因此軟件維護(hù)是很困難,很冒風(fēng)險(xiǎn)的。圖1.4說(shuō)明了在計(jì)算機(jī)軟硬件的總投資中,軟件維護(hù)所占的比例??梢钥闯?,維護(hù)費(fèi)用近年正在迅速上升,按這樣的趨勢(shì)發(fā)展下去,現(xiàn)有的人力物力將全部被束縛在維護(hù)原有
系統(tǒng)上,就可能再也沒(méi)有力量去開(kāi)發(fā)新的系統(tǒng)了。因此軟件維護(hù)引起了人們的普遍關(guān)注,人們已意漢到,一個(gè)軟件系統(tǒng)即使其他方面都相當(dāng)理想,但是如果不容易維護(hù),它將不會(huì)有什么實(shí)際使用價(jià)值,所以,“可維護(hù)性”應(yīng)該作為評(píng)價(jià)軟件質(zhì)量的重要準(zhǔn)則。圖1.4
“可維護(hù)性”通常包括了“可讀性”(Read—ability)、“可修改性”(Modifiability)、“可測(cè)試性”(Testability)等含義。為了使軟件具有較好的可維護(hù)性,早在開(kāi)發(fā)期的各個(gè)階段就應(yīng)采取一系列技術(shù)措施。這樣做雖然開(kāi)發(fā)期的工作量也許會(huì)大些,但考慮到維護(hù)工作在整個(gè)生命期中所占的比例,總的看來(lái)還是值得的。反之,如果開(kāi)發(fā)時(shí)目光短淺,不考慮長(zhǎng)遠(yuǎn)利益,就可能在維護(hù)時(shí)遭受重大挫折,到時(shí)就無(wú)法挽救了。
本書(shū)第七章還要進(jìn)一步討論軟件維護(hù)問(wèn)題。
2.可靠性(Reliability)
可靠性通常包括正確性(Correctness)和健壯性(Robustness)這兩個(gè)相互補(bǔ)充的方面。
正確性是指軟件系統(tǒng)本身沒(méi)有錯(cuò)誤,所以在預(yù)期的環(huán)境條件下能夠正確地完成期望的功能。毋庸置疑,正確性對(duì)系統(tǒng)正常發(fā)揮作用是完全必要的。
對(duì)于一個(gè)小型程序,我們可以希望它是完全正確的,但對(duì)長(zhǎng)達(dá)幾萬(wàn)行甚至幾十萬(wàn)行的大型軟件,我們一般不能奢望它是“完全”正確的,而且這一點(diǎn)也是無(wú)法證實(shí)的。此外,一個(gè)大型系統(tǒng)運(yùn)行時(shí),完全可能遇到一些意外,例如:某部分硬件出現(xiàn)故障,軟件中某個(gè)隱含的錯(cuò)誤暴露出來(lái),或者操作員無(wú)意地輸入了一個(gè)離奇古怪的數(shù)字或符號(hào)。有的系統(tǒng)雖然是正確的,但是它非?!按嗳酢?,一旦發(fā)生上述異常情況,就可能遭到意想不到的破壞。
1972年6月的《計(jì)算機(jī)世界》刊有一則報(bào)導(dǎo):“操作員手指的一滑使稅收損失30萬(wàn)美元”,據(jù)載,1972年6月美國(guó)woonsocket市在用計(jì)算機(jī)計(jì)算稅率時(shí),由于操作員的右手小拇指無(wú)意滑到鍵P上,使汽車(chē)價(jià)格950美元誤為7000950美元,從而導(dǎo)致了巨大的財(cái)政損失。這就產(chǎn)生了一個(gè)新的概念——“健壯性”,其含義是指:當(dāng)系統(tǒng)萬(wàn)一遇到意外時(shí)(具體是什么意外,事先是很難預(yù)料的)能按某種預(yù)定的方式作出適當(dāng)?shù)奶幚恚缒芰⒓匆庾R(shí)到異常情況的出現(xiàn),保護(hù)起重要的信息,隔離故障區(qū)防止事故蔓延,并能及時(shí)通知管理人員請(qǐng)求人工干預(yù),事后從故障狀態(tài)恢復(fù)到正常狀態(tài)亦比較容易,所以健壯的系統(tǒng)應(yīng)該能避免
出現(xiàn)災(zāi)難性的后果。正確性與健壯性是相互補(bǔ)充的,前面計(jì)算稅收的系統(tǒng)可能是正確的,但它不是健壯的;而健壯的程序并不一定是絕對(duì)正確的,例如一個(gè)計(jì)算工資的程序,它可能錯(cuò)誤地計(jì)算
了某種罕見(jiàn)的病假折扣值,但它對(duì)輸入數(shù)據(jù)以及系統(tǒng)內(nèi)部的數(shù)據(jù)狀態(tài)都進(jìn)行仔細(xì)的查核,因而在絕大多數(shù)情況下能夠可靠地工作。
總的說(shuō)來(lái),可靠的軟件系統(tǒng)在正常情況下能夠正確地工作,而且在意外情況下,亦能適當(dāng)?shù)刈鞒鎏幚?,因而不?huì)造成嚴(yán)重的損失。當(dāng)代計(jì)算機(jī)使用的范圍很廣,有些軟件系統(tǒng)的故障可能造成生命財(cái)產(chǎn)的巨大損失,如核反應(yīng)堆泄漏,飛船失事爆炸等,所以,“可靠性"無(wú)疑是絕對(duì)重要的。人們寧可在開(kāi)發(fā)時(shí)多花些代價(jià),提高系統(tǒng)的可靠性,與發(fā)生事故后造成的損失相比,這些代價(jià)還是值得的。
3.可理解性(Understandability)
在相當(dāng)長(zhǎng)一段時(shí)間中,人們一直認(rèn)為程序只是提供給計(jì)算機(jī)的,而不是給人閱讀的,所以只要它邏輯正確,計(jì)算機(jī)能按其邏輯正確執(zhí)行就足夠了,至于它是否易于被人理解則是無(wú)關(guān)緊要的。
但是隨著軟件規(guī)模的增大,人們逐步看到,在整個(gè)軟件生命期中,為進(jìn)行測(cè)試、排錯(cuò)或修改,開(kāi)發(fā)人員經(jīng)常需要閱讀本人或他人編寫(xiě)的程序和各種文檔。如果軟件易于理解,
無(wú)疑將提高開(kāi)發(fā)和維護(hù)的工作效率,而且出現(xiàn)錯(cuò)誤的可能性也會(huì)大大下降。所以,可理解性應(yīng)該是評(píng)價(jià)軟件質(zhì)量的一個(gè)重要方面。可理解性通常是指簡(jiǎn)單性和清晰性,對(duì)于同一用戶(hù)要求,解決的方案可以有多個(gè),其中最簡(jiǎn)單、最清晰的方案往往被認(rèn)為是最好的方案。
4.效率(Efficiency)
效率是指系統(tǒng)能否有效地使用計(jì)算機(jī)資源,如時(shí)間和空間等。這一點(diǎn)以前一直是非常強(qiáng)調(diào)的,這是過(guò)去硬件價(jià)格昂貴造成的結(jié)果。由于以下一些原因,目前人們對(duì)效率的看法
已有了變化:
首先,硬件價(jià)格近年來(lái)大幅度下降,所以效率已不像以前那樣舉足輕重了。第二,人們已認(rèn)識(shí)到,程序員的工作效率比程序的效率遠(yuǎn)為重要,程序員工作效率的提高不僅能減少開(kāi)支,而且出錯(cuò)率也會(huì)降低。從匯編語(yǔ)言發(fā)展到高級(jí)語(yǔ)言以至超高級(jí)語(yǔ)言
就是一個(gè)很好的說(shuō)明。
第三,追求效率同追求可維護(hù)性、可靠性等往往是相互抵觸的,例如片面地強(qiáng)調(diào)節(jié)省時(shí)間和空間,設(shè)計(jì)出來(lái)的系統(tǒng)可能結(jié)構(gòu)復(fù)雜,難以理解和修改;又如高度可靠的程序中一
般需要含有冗余,如為一種帳目保存幾個(gè)副本等,這就要以一定的時(shí)間和空間作代價(jià)。所以,效率雖然是衡量軟件質(zhì)量的一個(gè)重要方面,但在硬件價(jià)格下降、人工費(fèi)用上升的情況下,人們有時(shí)也寧可犧牲效率來(lái)?yè)Q取其他方面的得益。
除了這里討論的可維護(hù)性、可靠性、可理解性和效率之外,軟件系統(tǒng)的許多其他性質(zhì)也反映了軟件的質(zhì)量。圖1.5是Boehm提出的軟件質(zhì)量圖,下面只解釋圖中最右邊各因素
的含義,不再作詳細(xì)討論。圖1.5
1)設(shè)備獨(dú)立性(DeViceindepenl=!ence):不依賴(lài)于特定的硬件設(shè)備而能工作的程度。
2)自包含性(self—eontaine(】ness):不依賴(lài)于其他程序僅靠自身能實(shí)現(xiàn)功能的程度。
3)精確性(AccLtracy):能產(chǎn)生具有必要精確度之正確輸出的程度。
4)完整性(Cornpleteness):所有部分是否齊全。每個(gè)部分是否充分。
5)健壯性/合理性(RobLlstness/Integrjty):即使前提條件不符合規(guī)格也能繼續(xù)合理運(yùn)行的程度。
6)一致性(Cotlsistency):程序和文檔中所用的記號(hào)、術(shù)語(yǔ)和表示方式的一致的程度。
7)計(jì)測(cè)性(ACCOuntabillity):能夠在多大程度上觀察、統(tǒng)計(jì)程序的工作狀況。
8)設(shè)備效率(Device—efficiency):使有關(guān)設(shè)備的功能發(fā)揮到什么程度。
9)可訪問(wèn)性(Accessibility):能夠在多大程度上選擇和使用程序的功能和設(shè)備。
10)通訊性(Communicativeness):輸入輸出的形式,內(nèi)容是否統(tǒng)一,使用是否方便。
11)自我描述性(Self—descriptiyeness):程序中以一目了然的形式記述它的目的、條件和輸入輸出。
12)結(jié)構(gòu)性(StructureneSS):是否結(jié)構(gòu)化,修改是否只涉及局部。
13)簡(jiǎn)潔性(Conciseness):以緊湊的方式表達(dá)必要的信息,并且沒(méi)有多余的東西。
14)明了性(Legibility):程序是否便于閱讀,注解是否充分、妥當(dāng)。
15)可擴(kuò)充性(Augmentability):擴(kuò)充是否方便。綜上所述,一個(gè)大型軟件系統(tǒng)的質(zhì)量應(yīng)該從可維護(hù)性、可靠性、可理解性、效率等多個(gè)方面全面地進(jìn)行評(píng)價(jià)。這些目標(biāo)是既有聯(lián)系又有矛盾的,例如可理解性是可維護(hù)性的必要前提,可維護(hù)性、可靠性同效率往往有抵觸,效率中時(shí)間和空間兩個(gè)因素又常常是沖突的……。對(duì)于不同的軟件系統(tǒng),各個(gè)目標(biāo)的重要程度是不同的,每個(gè)目標(biāo)要求達(dá)到什么程度又受經(jīng)費(fèi)、時(shí)間等因素的限制,例如游戲程序同空中交通控制系統(tǒng)的質(zhì)量要求顯然是不同的。所以在開(kāi)發(fā)具體軟件系統(tǒng)的過(guò)程中,開(kāi)發(fā)人員應(yīng)該充分考慮各種不同的方案,在各種矛盾的目標(biāo)之間作權(quán)衡,并在一定的限制條件下(經(jīng)費(fèi)、時(shí)間、可用的軟硬件資源等)使可維護(hù)性、可靠性、可理解性和效率等性質(zhì)最大限度地得到滿足。必須強(qiáng)調(diào)的是:為了保證軟件質(zhì)量,在軟件開(kāi)發(fā)過(guò)程的各個(gè)階段,尤其是早在分析階段和設(shè)計(jì)階段,就應(yīng)該采取多種有效的技術(shù)和一系列質(zhì)量保證措施,精益求精、一絲不茍,絕對(duì)不能急于求成,也不能存有僥幸心理,開(kāi)發(fā)過(guò)程中任一環(huán)節(jié)的疏忽,到后期都可能造成無(wú)法彌補(bǔ)的缺陷,甚至是終生遺憾。所以,“先苦后甜"、“先憂后樂(lè)"可以作為軟件工作者的座右銘。軟件工程學(xué)的最終目標(biāo)是以較少的投資獲得質(zhì)量較高的軟件產(chǎn)品,也就是說(shuō)要“高產(chǎn)優(yōu)質(zhì)”。同其他工程學(xué)科一樣,達(dá)到這個(gè)最終目標(biāo)的兩個(gè)主要途徑是“紀(jì)律化”和“自動(dòng)化”。
研究軟件方法的目的是使開(kāi)發(fā)過(guò)程“紀(jì)律化”,就是尋找一些規(guī)范的“求解過(guò)程”,使開(kāi)發(fā)工作能夠有計(jì)劃、有步驟地進(jìn)行。研究軟件工具的目的是使開(kāi)發(fā)過(guò)程“自動(dòng)”,就是使開(kāi)發(fā)過(guò)程中的某些工作用計(jì)算機(jī)來(lái)完成或用計(jì)算機(jī)來(lái)輔助。方法和工具之間有著密切的聯(lián)系。1.4軟件開(kāi)發(fā)方法和軟件自動(dòng)工具下面分別討論軟件開(kāi)發(fā)方法和軟件自動(dòng)工具這兩個(gè)概念。
1.軟件開(kāi)發(fā)方法(softwareDevelopmentMethods)
幾十年以來(lái),程序設(shè)計(jì)一直是一種個(gè)體的、手工藝方式的勞動(dòng),對(duì)于一個(gè)提出的問(wèn)題,程序員可以任意地“發(fā)明”出一個(gè)解答,而沒(méi)有任何規(guī)章制度需要遵循。但是當(dāng)軟件進(jìn)入大規(guī)模生產(chǎn)時(shí)期,軟件就不再是個(gè)人的成果而是集體的勞動(dòng)成果了,所以軟件產(chǎn)業(yè)面臨的第一個(gè)問(wèn)題就是“紀(jì)律化”。一項(xiàng)軟件產(chǎn)品的誕生涉及到許多人,包括用戶(hù)和軟件人員兩方面。每一方又有許多人,每人對(duì)問(wèn)題的理解可能不同,每人對(duì)問(wèn)題的處理方式也可能不同;軟件產(chǎn)品的開(kāi)發(fā)周
期又較長(zhǎng),即使是同一個(gè)人,在不同的時(shí)期,對(duì)問(wèn)題的理解和處理還有可能不一樣;而且隨著計(jì)算技術(shù)的發(fā)展,處理問(wèn)題的選擇余地又更大了。軟件開(kāi)發(fā)過(guò)程中,缺乏強(qiáng)有力的內(nèi)
部紀(jì)律,各個(gè)可以任意地自行其事,這是造成軟件危機(jī)的主要原因。為了使軟件研制走上工程化的軌道,我們必須尋找一些標(biāo)準(zhǔn)的規(guī)程,以便為開(kāi)發(fā)人員給出指導(dǎo)和約束,使他們遵照一定的方式來(lái)理解和處理問(wèn)題,這是使開(kāi)發(fā)獲得成功的關(guān)鍵。
軟件方法就是指導(dǎo)研制軟件的某種標(biāo)準(zhǔn)規(guī)程,它告訴人們:“什么時(shí)候做什么以及怎么做"。由于軟件研制過(guò)程畢竟是相當(dāng)復(fù)雜的,它涉及的因素很多,所以各種軟件方法又有不同程度的靈活性、試探性。軟件方法不可能像自動(dòng)售貨機(jī)的使用規(guī)程那樣用簡(jiǎn)單的幾句話敘述清楚,也不應(yīng)該像機(jī)器的操作規(guī)程那樣機(jī)械地使用。一般說(shuō)來(lái),一個(gè)軟件方法往往規(guī)定了:明確的工作步驟、具體的描述方式以及確定的評(píng)價(jià)標(biāo)準(zhǔn),下面分別說(shuō)明這三個(gè)方面。
1)明確的工作步驟:研制一個(gè)軟件系統(tǒng)要考慮并解決許多問(wèn)題,如果同時(shí)處理這些問(wèn)題,我們將會(huì)束手無(wú)策,或者造成混亂。正確的方式是將這些問(wèn)題分成先后次序,每一步
集中精力解決一個(gè)問(wèn)題。像為加工機(jī)械產(chǎn)品規(guī)定一道道工序那樣,軟件方法也提出了處理問(wèn)題的基本步驟,這包括每一步的目的是什么,每一步應(yīng)產(chǎn)生什么工作結(jié)果,每一步需具
備的條件以及要注意的問(wèn)題等。
2)具體的描述方式:工程化生產(chǎn)必須強(qiáng)調(diào)文檔化,即每人必須將每一步的工作結(jié)果以一定的書(shū)面形式記錄下來(lái),以保證開(kāi)發(fā)人員之間有效地進(jìn)行交流,也有利于維護(hù)工作的順
利進(jìn)行。軟件方法規(guī)定了描述軟件產(chǎn)品的格式,這包括每一步應(yīng)產(chǎn)生什么文檔,文檔中記錄哪些內(nèi)容,采用哪些圖形、符號(hào)等。
3)確定的評(píng)價(jià)標(biāo)準(zhǔn):對(duì)于同一個(gè)問(wèn)題,其解決方案往往不是唯一的,選取哪一個(gè)方案較好呢?有些軟件方法提出了比較確定的評(píng)價(jià)標(biāo)準(zhǔn),因而可以指導(dǎo)人們對(duì)各個(gè)具體方案進(jìn)
行評(píng)價(jià),并從中選取一個(gè)較好的方案。在軟件方法的指導(dǎo)和約束之下,面對(duì)錯(cuò)綜復(fù)雜的問(wèn)題,開(kāi)發(fā)人員就可按統(tǒng)一的步驟、統(tǒng)一的描述方式,紀(jì)律化地開(kāi)展工作。毫無(wú)疑問(wèn),這是“高產(chǎn)優(yōu)質(zhì)”的有力保證。
近年來(lái),人們陸續(xù)研究總結(jié)出多種軟件方法。70年代初,出現(xiàn)了編寫(xiě)程序的一些方法,主要是“結(jié)構(gòu)化程序設(shè)計(jì)”;70年代中期人們認(rèn)識(shí)到編程僅僅是軟件開(kāi)發(fā)的一個(gè)環(huán)節(jié),合理地建立軟件結(jié)構(gòu)比編寫(xiě)程序更為重要,所以研究重點(diǎn)前移到設(shè)計(jì)階段,出現(xiàn)了用于設(shè)計(jì)階段的“結(jié)構(gòu)化設(shè)計(jì)”。和Jackson方法等;70年代后期,人們又意識(shí)到在設(shè)計(jì)階段之前必須先對(duì)用戶(hù)的要求進(jìn)行分析,所以研究重點(diǎn)又前移到分析階段,出現(xiàn)了用于分析階段的“結(jié)構(gòu)化分析”、sADT、sREM等方法。80年代,又出現(xiàn)了面向?qū)ο蟮能浖_(kāi)發(fā)方法。目前,用什么方法來(lái)分析和說(shuō)明用戶(hù)的要求,用什么方法對(duì)軟件進(jìn)行測(cè)試和維護(hù),仍是軟件工作者感興趣的問(wèn)題。各種軟件方法的適用范圍是各不相同的,有的方法適用于實(shí)時(shí)控制系統(tǒng),如sREM;有的方法適用于數(shù)據(jù)處理系統(tǒng),如結(jié)構(gòu)化分析和Jackson方法。各種軟件方法的風(fēng)格也是很不相同的,有的方法僅僅是一組指導(dǎo)性的原則,如Parnas的方法;有的方法則有較具體的處理規(guī)則,如Jackson方法;有的方法建立在嚴(yán)密的數(shù)學(xué)基礎(chǔ)之上;有的方法則是實(shí)際經(jīng)驗(yàn)的總結(jié)。現(xiàn)有的軟件方法相當(dāng)多,在一本書(shū)中不可能全面地介紹,本書(shū)將以70年代以來(lái)在國(guó)外軟件界相當(dāng)流行的“結(jié)構(gòu)化方法”(包括結(jié)構(gòu)化分析、結(jié)構(gòu)化設(shè)計(jì)、結(jié)構(gòu)化程序設(shè)計(jì)等)為主,配合一些其他方法作較系統(tǒng)的介紹。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)參考:近代日本對(duì)中國(guó)茶業(yè)的侵奪研究
- 課題申報(bào)參考:教育高質(zhì)量發(fā)展視域下大學(xué)體育一流本科課程建設(shè)實(shí)證研究
- 2025年園林景觀綠化地使用權(quán)轉(zhuǎn)讓合同4篇
- 2025年度新能源汽車(chē)充電站車(chē)位租賃合作協(xié)議書(shū)4篇
- 2025版委托擔(dān)保合同范本:知識(shí)產(chǎn)權(quán)質(zhì)押貸款擔(dān)保合同3篇
- 2025年度家具行業(yè)綠色供應(yīng)鏈管理合同4篇
- 二零二五版橋梁建設(shè)施工合作協(xié)議2篇
- 2025年度個(gè)人沿街店房租賃合同(含合同解除條件與爭(zhēng)議解決)4篇
- 二零二五年度國(guó)際交流項(xiàng)目教師選拔與聘用協(xié)議
- 2025年度星級(jí)酒店廚房設(shè)備采購(gòu)與定期檢修合同4篇
- 數(shù)學(xué)-山東省2025年1月濟(jì)南市高三期末學(xué)習(xí)質(zhì)量檢測(cè)濟(jì)南期末試題和答案
- 中儲(chǔ)糧黑龍江分公司社招2025年學(xué)習(xí)資料
- 湖南省長(zhǎng)沙市2024-2025學(xué)年高一數(shù)學(xué)上學(xué)期期末考試試卷
- 船舶行業(yè)維修保養(yǎng)合同
- 2024年林地使用權(quán)轉(zhuǎn)讓協(xié)議書(shū)
- 物流有限公司安全生產(chǎn)專(zhuān)項(xiàng)整治三年行動(dòng)實(shí)施方案全國(guó)安全生產(chǎn)專(zhuān)項(xiàng)整治三年行動(dòng)計(jì)劃
- 2025屆江蘇省13市高三最后一卷生物試卷含解析
- 當(dāng)前中國(guó)個(gè)人極端暴力犯罪個(gè)案研究
- 中國(guó)象棋比賽規(guī)則
- 7天減肥餐食譜給你最能瘦的一周減肥食譜
- GB/T 31525-2015圖形標(biāo)志電動(dòng)汽車(chē)充換電設(shè)施標(biāo)志
評(píng)論
0/150
提交評(píng)論