《軟件系統(tǒng)開(kāi)發(fā)技術(shù)》課件第10章_第1頁(yè)
《軟件系統(tǒng)開(kāi)發(fā)技術(shù)》課件第10章_第2頁(yè)
《軟件系統(tǒng)開(kāi)發(fā)技術(shù)》課件第10章_第3頁(yè)
《軟件系統(tǒng)開(kāi)發(fā)技術(shù)》課件第10章_第4頁(yè)
《軟件系統(tǒng)開(kāi)發(fā)技術(shù)》課件第10章_第5頁(yè)
已閱讀5頁(yè),還剩118頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

10.1計(jì)算機(jī)輔助軟件開(kāi)發(fā)10.2需求分析和規(guī)格說(shuō)明工具10.3概要設(shè)計(jì)工具——AIDES系統(tǒng)10.4詳細(xì)設(shè)計(jì)工具——SDL/PAD系統(tǒng)10.5編程工具——程序綜合器10.6檢驗(yàn)和測(cè)試工具10.7維護(hù)工具10.8面向?qū)ο箝_(kāi)發(fā)和維護(hù)的工具10.9軟件開(kāi)發(fā)環(huán)境計(jì)算機(jī)近二十年來(lái)廣泛應(yīng)用于各行各業(yè),使這些領(lǐng)域的工作得以自動(dòng)化。例如,許多飛機(jī)、汽車(chē)、拖拉機(jī)就是由先進(jìn)的CAD/CAM系統(tǒng)設(shè)計(jì)和制造的。CAD/CAM(CornputerAidedDesign/ComputerAidedMa.nufacturing,即計(jì)算機(jī)輔助設(shè)計(jì)/計(jì)算機(jī)輔造制造)系統(tǒng)是一組集成化的工具,它們支持各種產(chǎn)品的規(guī)格說(shuō)明、設(shè)計(jì)、分析和制造,從而減少或取消了生產(chǎn)過(guò)程中大量勞力密集的活動(dòng),對(duì)提高生產(chǎn)率和改進(jìn)產(chǎn)品質(zhì)量起了重要作用。l0.1計(jì)算機(jī)輔助軟件開(kāi)發(fā)大型軟件系統(tǒng)的開(kāi)發(fā)始終是一類(lèi)勞力密集的活動(dòng),盡管7O年代以來(lái)出現(xiàn)了不少指導(dǎo)軟件開(kāi)發(fā)的方法,且這些方法是有效的,但是實(shí)施這些方法涉及的許多工作是復(fù)雜而耗費(fèi)人工的。例如按照這些方法需要編寫(xiě)大量高質(zhì)量的文檔,而且還需不斷對(duì)它們作修改。維持文檔內(nèi)部的一致性并使各種版本合理地配置就是一個(gè)特別困難的任務(wù),而人的能力畢竟

是有限的,因此由人來(lái)處理大規(guī)模的問(wèn)題顯然難以保證質(zhì)量。在計(jì)算機(jī)產(chǎn)量猛增、軟件需求急劇上升,軟件技術(shù)人員緊缺的形勢(shì)下,人們認(rèn)識(shí)到對(duì)軟件開(kāi)發(fā)必須采用類(lèi)似CAD/CAM的技術(shù),也就是說(shuō)必須為軟件開(kāi)發(fā)提供良好的自動(dòng)化工具。早期的自動(dòng)工具集中用于開(kāi)發(fā)期的后階段,最典型的例子是行文編輯程序、編譯程序、排錯(cuò)程序等。提出軟件生命期模型以后,有一段時(shí)期一直沒(méi)有支持分析和設(shè)計(jì)的工具,70年代末,隨著各種需求分析方法和設(shè)計(jì)方法的提出,對(duì)需求分析工具、設(shè)計(jì)工具以至支持整個(gè)生命期的配套工具和集成化軟件開(kāi)發(fā)環(huán)境的研究逐步形成高潮。目前,對(duì)軟件工具和環(huán)境的研究方興未艾,軟件產(chǎn)業(yè)界和學(xué)術(shù)界都有不少單位在從事這一課題的研究,已有一些工具作為產(chǎn)品在軟件市場(chǎng)上銷(xiāo)售,但它們的功能還比較簡(jiǎn)單;一些大學(xué)、研究所雖也

研究出不少成果,且這些成果的面較廣,功能更高級(jí),但一般還未能用到產(chǎn)業(yè)界。本章將分別介紹生命期各階段可使用的典型工具,特別是支持SA方法和SD方法的工具,由此,對(duì)軟件開(kāi)發(fā)自動(dòng)化的狀況可見(jiàn)一斑。限于篇幅,我們只討論這些工具的功能,

不再介紹它們的內(nèi)部實(shí)現(xiàn)。

SA方法是相當(dāng)實(shí)用的一種需求分析和規(guī)格說(shuō)明方法,由于它簡(jiǎn)單、易學(xué)易用,在國(guó)外軟件產(chǎn)業(yè)界已廣泛使用多年,人們對(duì)它的一般反映是:由于有了簡(jiǎn)明清晰的需求說(shuō)明書(shū),所以方便了人際交流;又由于在開(kāi)發(fā)早期就能從用戶(hù)那里獲得反饋,所以錯(cuò)誤減少了,開(kāi)發(fā)成本也有所下降。雖然SA方法是很有價(jià)值的,但它本身仍有其固有的問(wèn)題:僅用筆和紙

來(lái)繪制和修改需求說(shuō)明書(shū)很費(fèi)人工,而且錯(cuò)誤多,檢查文檔的一致性和完整性很不容易,系統(tǒng)規(guī)模越大、需求說(shuō)明書(shū)越詳細(xì)時(shí),情況則更糟。這就妨礙了生產(chǎn)率和產(chǎn)品質(zhì)量的進(jìn)一步提高。人們意識(shí)到,自動(dòng)工具有可能解決上述困難,本節(jié)將介紹兩個(gè)支持SA方法的工具。l0.2需求分析和規(guī)格說(shuō)明工具10.2.1Tektronix的工具箱

美國(guó)Tektronix公司對(duì)SA方法進(jìn)行了仔細(xì)的分析,他們發(fā)現(xiàn)SA方法的下面3個(gè)方面是可以考慮自動(dòng)實(shí)現(xiàn)的:

(1)圖形和文字編輯程序可以減少修改SA文檔的工作量。數(shù)據(jù)詞典和小說(shuō)明可借助一般的文字編輯程序來(lái)建立和修改,專(zhuān)門(mén)的圖形編輯程序配上圖形終端等設(shè)備則可幫助人

們繪制數(shù)據(jù)流圖。由于數(shù)據(jù)流圖中各個(gè)成分所在的位置對(duì)文檔的可理解有一定的影響,如果圖形編輯程序能自動(dòng)為各個(gè)成分定位,則效果會(huì)更好。

(2)SA文檔中某些類(lèi)型的錯(cuò)誤可以用計(jì)算機(jī)來(lái)檢查,例如上下兩層數(shù)據(jù)流圖對(duì)某個(gè)數(shù)據(jù)流的使用不一致,這種硬性錯(cuò)誤就可用計(jì)算機(jī)來(lái)檢測(cè)。當(dāng)然涉及文檔語(yǔ)義的一些錯(cuò)誤還是要由人來(lái)發(fā)現(xiàn),例如一個(gè)數(shù)據(jù)流的命名是否合適等。

既然SA文檔存放在計(jì)算機(jī)中,那就可由一個(gè)檢查工具來(lái)檢測(cè)文檔中的不一致性,當(dāng)然光是發(fā)現(xiàn)錯(cuò)誤對(duì)維持一致性來(lái)說(shuō)還不是令人滿(mǎn)意的,因?yàn)橐粋€(gè)一致的SA文檔建立起來(lái)后,如果某個(gè)部分被修改了,整個(gè)文檔的一致性又會(huì)遭到破壞,所以如果能監(jiān)視對(duì)文檔的修改要求,并能自動(dòng)導(dǎo)出文檔中受影響部分需作的相應(yīng)修改,則某種類(lèi)型的不一致性就可

避免了。這類(lèi)檢查工具可同編輯程序配合起來(lái)維持文檔的一致性,而不是簡(jiǎn)單地發(fā)現(xiàn)不一致性。

(3)從SA文檔有可能自動(dòng)導(dǎo)出SD方法的初始結(jié)構(gòu)圖。需求說(shuō)明書(shū)寫(xiě)成后,下一步就是設(shè)計(jì)了,接在SA方法后使用的往往是SD方法。從一套數(shù)據(jù)流圖自動(dòng)導(dǎo)出初始結(jié)構(gòu)圖是有可能的,但導(dǎo)出過(guò)程需要一定的人工干預(yù),所以這個(gè)過(guò)程不是全部自動(dòng)化的,研究有效的半自動(dòng)轉(zhuǎn)換工具有一定難度,需要較高的投資。

在進(jìn)行了上述分析后,Tektronix公司先開(kāi)發(fā)了編輯、檢查、格式化和文檔整理等一套自動(dòng)工具,它們是用Modula-2編寫(xiě)的,可在uNIx操作系統(tǒng)上運(yùn)行,并用Tektronix的圖形終端設(shè)備作為交互式圖示手段。這些工具可以個(gè)別使用,也可結(jié)合起來(lái)配套使用,下面分別介紹這四類(lèi)工具及其協(xié)同工作的過(guò)程。

(1)編輯工具使用戶(hù)能交互地修改SA文檔,并負(fù)責(zé)導(dǎo)出維持文檔一致性所需的相應(yīng)修改要求。

編輯工具有2個(gè):數(shù)據(jù)流圖編輯程序和文字編輯程序。前者是個(gè)專(zhuān)用的圖形編輯器,它用于建立和修改數(shù)據(jù)流圖,用戶(hù)可用鼠標(biāo)器來(lái)指定數(shù)據(jù)流圖中每個(gè)成分的位置;后者可

用于對(duì)數(shù)據(jù)詞典和小說(shuō)明作修改。

編輯程序要對(duì)每個(gè)修改命令進(jìn)行分析,以便導(dǎo)出對(duì)整套SA文檔需作的相應(yīng)修改,文檔整理工具將檢驗(yàn)并完成這些相應(yīng)修改要求。

(2)檢查工具用于檢測(cè)SA文檔中的錯(cuò)誤。檢查工具有4個(gè),它們分別對(duì)數(shù)據(jù)流圖、數(shù)據(jù)詞典、小說(shuō)明和全套SA文檔進(jìn)行檢查。它能發(fā)現(xiàn)兩類(lèi)錯(cuò)誤,一類(lèi)是違背SA方法規(guī)則的

硬性錯(cuò)誤,如未定義的數(shù)據(jù)、只寫(xiě)不讀的文件等;另一類(lèi)是軟性錯(cuò)誤,如一張數(shù)據(jù)流圖中畫(huà)有過(guò)多的加工等,這些軟性錯(cuò)誤通常說(shuō)明分析員未能很好地理解問(wèn)題。

(3)格式化工具將數(shù)據(jù)流圖、數(shù)據(jù)詞典、小說(shuō)明等的內(nèi)部表示轉(zhuǎn)換成適合于人們閱讀的形式,通常輸出是顯示在圖形終端上的。

(4)文檔整理工具檢查編輯工具導(dǎo)出的修改要求,并完成這些修改,從而維持全套SA文檔的一致性。例如,從一張數(shù)據(jù)流圖中刪去了一個(gè)加工,就應(yīng)將從屬于這個(gè)加工的所有

數(shù)據(jù)流圖及小說(shuō)明刪去,還應(yīng)從數(shù)據(jù)詞典中刪去僅被這個(gè)加工及其下屬所使用的條目;又如某個(gè)加工的編號(hào)被修改后,其下屬的數(shù)據(jù)流圖及小說(shuō)明的編號(hào)也應(yīng)作相應(yīng)的修改。編輯

工具負(fù)責(zé)導(dǎo)出這些相應(yīng)的修改要求,整理工具再驗(yàn)證這些修改對(duì)維持一致性是否確實(shí)需要,然后完成這些修改。上述工具協(xié)同工作的過(guò)程如下(圖10.1):

(1)用戶(hù)用編輯工具以交互方式對(duì)數(shù)據(jù)流圖進(jìn)行修改,編輯工具負(fù)責(zé)維持?jǐn)?shù)據(jù)流圖的合理性,如每個(gè)數(shù)據(jù)流必須有其源點(diǎn)和終點(diǎn),則只有在操作員指定其源點(diǎn)和終點(diǎn)之后,才能畫(huà)出一個(gè)數(shù)據(jù)流;如果源點(diǎn)或終點(diǎn)中的一個(gè)被刪去了,這個(gè)數(shù)據(jù)流亦自動(dòng)被刪去。所以,某個(gè)修改對(duì)本張數(shù)據(jù)流圖的影響在編輯時(shí)立即完成,但對(duì)其他SA文檔的影響則由編輯工具導(dǎo)出相應(yīng)修改要求提交給整理工具來(lái)完成。

(2)編輯過(guò)程結(jié)束后,整理工具讀取導(dǎo)出的相應(yīng)修改要求,并據(jù)此對(duì)SA文檔的有關(guān)部分作修改。

(3)整理工作完成后,檢查程序開(kāi)始工作,它對(duì)SA文檔作檢查。文檔中被發(fā)現(xiàn)的錯(cuò)誤,有些可以自動(dòng)糾正,有些則必須向操作員報(bào)告,由人決定如何修改,例如父圖和子圖

不平衡,糾正這種錯(cuò)誤有多種可能,所以工具無(wú)法自動(dòng)處理。

Tektronix公司試用這套工具之后,獲得了良好的效果,很明顯的一點(diǎn)變化是:以前,開(kāi)發(fā)工作的瓶頸總是繪制和重畫(huà)數(shù)據(jù)流圖,用了工具后,瓶頸變?yōu)樵u(píng)審文檔所需的時(shí)間

了,可見(jiàn)這套工具對(duì)SA方法的實(shí)施起了積極作用。近年來(lái),由于圖形顯示設(shè)備的圖形處理軟件的迅速發(fā)展,類(lèi)似Tektronix工具箱的系統(tǒng)已開(kāi)始在市場(chǎng)上出現(xiàn)。這些工具還具有多窗口處理能力,可以在不同的窗口同時(shí)顯示和處理上下幾層數(shù)據(jù)流圖及有關(guān)的數(shù)據(jù)詞典和小說(shuō)明,實(shí)施SA方法就更方便了。l0.2.2PSL/PSA系統(tǒng)

使用SA方法除了繪制數(shù)據(jù)流圖之外,還要編寫(xiě)一本數(shù)據(jù)詞典和一組小說(shuō)明,小說(shuō)明亦可像數(shù)據(jù)詞典那樣組織,即按編號(hào)或加工名的順序排列起來(lái)構(gòu)成一本詞典,每個(gè)小說(shuō)明就是詞典中的一個(gè)條目。

對(duì)大型系統(tǒng)來(lái)說(shuō),詞典的容量一般比較寵大,所以人工維護(hù)一本詞典是很花時(shí)間也很單調(diào)乏味的,詞典經(jīng)多次修改后,其一致性、完整性也難以靠人工來(lái)檢查。我們可以用計(jì)

算機(jī)代替人來(lái)完成這項(xiàng)機(jī)械而繁瑣的工作,負(fù)責(zé)這種工作的程序系統(tǒng)稱(chēng)為“詞典管理程序”,或簡(jiǎn)稱(chēng)“詞典”。一個(gè)“詞典管理程序”應(yīng)具有下列基本功能:

(1)規(guī)定一套詞典條目的格式,即為數(shù)據(jù)流、文件、數(shù)據(jù)項(xiàng)、加工等幾種類(lèi)型的條目各規(guī)定一組語(yǔ)法。

(2)接受上述格式的詞典條目作為輸入。

(3)具有編輯的手段:如對(duì)詞典條目進(jìn)行插入、刪除、修改等。

(4)具有一定的一致性、完整性檢查能力,即能發(fā)現(xiàn)并報(bào)告一些錯(cuò)誤,如語(yǔ)法不正確、重復(fù)定義、循環(huán)定義等。

(5)能夠產(chǎn)生各類(lèi)查閱報(bào)告、詞典清單等。

“詞典管理程序”是一種有效的工具,近年來(lái)已研制出多種不同類(lèi)型的詞典管理程序,其功能從簡(jiǎn)到繁各不相同,PSL/PSA就是在詞典管理的思想上開(kāi)發(fā)出來(lái)的一個(gè)有代表性的系統(tǒng)。

PSIJ/PSA是美國(guó)密執(zhí)安大學(xué)ISDOS(1nformationsystemDesignOptimizationSystem)項(xiàng)目組研制的一個(gè)系統(tǒng),研制這個(gè)系統(tǒng)的目的是為分析員提供需求文檔的編寫(xiě)和檢查的工具。

PSIJ(Probl.emStatementLanguage)是一種問(wèn)題說(shuō)明語(yǔ)言,它可以按一定的語(yǔ)法描述用戶(hù)對(duì)系統(tǒng)的功能要求和性能要求。PSA(Probl.emStatementAnalyz—er)是問(wèn)題說(shuō)明分析器,它可以對(duì)用PSI。書(shū)寫(xiě)的文本進(jìn)行分析,產(chǎn)生許多有用的報(bào)告,圖10.2是PSL/PSA系統(tǒng)的示意圖。

PSL/PSA將軟件系統(tǒng)中的每個(gè)成分看作是一個(gè)“對(duì)象”,對(duì)象之間有特定的聯(lián)系,每個(gè)對(duì)象本身又有特定的性質(zhì)。以圖3.2為例,?分類(lèi)”、“報(bào)名”、“帳目”、“學(xué)生”、“報(bào)名單”、“發(fā)票”、……都是對(duì)象,對(duì)象分成加工和數(shù)據(jù)兩大類(lèi),圖3.2中的“分類(lèi)”、“報(bào)名"等屬于加工類(lèi),其余屬于數(shù)據(jù)類(lèi)。圖10.2

PSL是一種形式化的需求描述語(yǔ)言,它從系統(tǒng)的輸入輸出流、系統(tǒng)結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)流程、系統(tǒng)規(guī)模、系統(tǒng)動(dòng)態(tài)、系統(tǒng)性質(zhì)、項(xiàng)目管理等8個(gè)方面描述系統(tǒng)中的每一個(gè)對(duì)象,包括它們的種種性質(zhì)以及它們之間的聯(lián)系。對(duì)每個(gè)對(duì)象的一段PSI。描述就構(gòu)成了一個(gè)詞典條目。

PSIJ描述一個(gè)數(shù)據(jù)對(duì)象的語(yǔ)法如表10.1所示。表10.1中第一行指出了數(shù)據(jù)對(duì)象的名字。第二、三行描述了數(shù)據(jù)的結(jié)構(gòu),即這個(gè)數(shù)據(jù)由哪些數(shù)據(jù)項(xiàng)組成,它本身又是什么數(shù)據(jù)的一部分,第四、五、六行描述了數(shù)據(jù)的流程,即它由哪個(gè)加工產(chǎn)生,被哪個(gè)加

工修改,又被哪個(gè)加工使用……等。

PSL描述一個(gè)加工的語(yǔ)法如表10.2所示。表中第一行指出了加工的名字。第二、三行描述了系統(tǒng)的輸入輸出流,即這個(gè)加工產(chǎn)生什么數(shù)據(jù)輸出到系統(tǒng)外面,這個(gè)加工從系統(tǒng)外接受什么數(shù)據(jù)等。第四行描述了這個(gè)加工的邏輯,加工邏輯可用自然語(yǔ)言或結(jié)構(gòu)化語(yǔ)言描述。第五、六、七行描述數(shù)據(jù)流程,即這個(gè)加工產(chǎn)生什么數(shù)據(jù),修改什么數(shù)據(jù),使用什么數(shù)據(jù)等。第八、九行指出了系統(tǒng)的結(jié)構(gòu),即這個(gè)加工有哪些子加工,它本身是哪個(gè)加工的一部分等。第十行說(shuō)明這個(gè)加工執(zhí)行的頻率,如每天發(fā)生多少次等。最后三行是系統(tǒng)動(dòng)態(tài)方面的描述,如這個(gè)加工被什么事件激發(fā),這個(gè)加工的開(kāi)始將引起什么事件,加工的結(jié)束又會(huì)引起什么事件等等。在用SA方法分析大型的數(shù)據(jù)處理系統(tǒng)時(shí),借助PSL/PSA這個(gè)工具,我們就可以一邊對(duì)用戶(hù)的數(shù)據(jù)處理活動(dòng)作由頂向下逐層分解,一邊將分析過(guò)程中遇到的數(shù)據(jù)流、文件、加工等對(duì)象用PSL描述出來(lái),并將這些描述輸入到PSL/PSA系統(tǒng)。PSA.將對(duì)輸入信息作詞法、語(yǔ)法、一致性和完整性檢查,防止相互矛盾的或錯(cuò)誤的信息進(jìn)入文檔中,然后保存這些描述信息,這就形成了一個(gè)用計(jì)算機(jī)管理的詞典,或稱(chēng)“文檔庫(kù)”。

當(dāng)需要修改對(duì)系統(tǒng)的描述時(shí),PSA可以根據(jù)要求對(duì)文檔庫(kù)中的內(nèi)容作編輯修改,同時(shí)進(jìn)行種種檢查,以維持文檔的一致性。需求分析階段結(jié)束后,PSA可以根據(jù)分析員要求以標(biāo)準(zhǔn)格式輸出全部文檔。由于PSL是一種形式化的語(yǔ)言,有確定的語(yǔ)法,可以被計(jì)算機(jī)處理,所以PSA可以幫助分析員對(duì)用PSL書(shū)寫(xiě)的文檔進(jìn)行查閱分析,產(chǎn)生從不同側(cè)面觀(guān)察系統(tǒng)的各種報(bào)告。其中,有些報(bào)告只是將文檔庫(kù)中的信息原封不動(dòng)地取出制成報(bào)表,有些需對(duì)信息重新排列,有些則涉及復(fù)雜的分析。例如,PSA可以列出名為XXX的對(duì)象的所有屬性,或者列出同XXX有關(guān)的所有對(duì)象,這些功能可以幫助分析員對(duì)文檔作有選擇的閱讀PSA還可以產(chǎn)生描述系統(tǒng)中成分間交叉引用關(guān)系的報(bào)告,數(shù)據(jù)/加工關(guān)系表和數(shù)據(jù)/元素關(guān)系表就是兩個(gè)典型例子。數(shù)據(jù)/加工關(guān)系表用矩陣表示數(shù)據(jù)同加工間的相互關(guān)系(表10.3),表中最左邊列出了數(shù)據(jù)型對(duì)象(另有編號(hào)一數(shù)據(jù)名表指出編號(hào)同數(shù)據(jù)名的對(duì)應(yīng)),最上面一行列出了加工型對(duì)

象(另有編號(hào)一加工名表指出編號(hào)同加工名的對(duì)應(yīng)),表中的字母描述了數(shù)據(jù)I和加工J的關(guān)系:字母R表示數(shù)據(jù)I被加工J接收或使用,字母u表示數(shù)據(jù)I被加工J修改,字母D表示數(shù)據(jù)I由加工J導(dǎo)出或產(chǎn)生……。數(shù)據(jù)/元素關(guān)系表用矩陣描述數(shù)據(jù)對(duì)象所含的元素,也描述了多個(gè)數(shù)據(jù)對(duì)象含有公共元素的情況(表10.4),表中最左邊列出了數(shù)據(jù)元素(即數(shù)據(jù)項(xiàng)),最上面列出了數(shù)據(jù)對(duì)象(另有編號(hào)一元素名表和編號(hào)一數(shù)據(jù)名表指出編號(hào)同元素或數(shù)據(jù)的對(duì)應(yīng)),表中第l行第J列的*號(hào)表示數(shù)據(jù)J中含有元素I。

PSA產(chǎn)生的上述報(bào)表,可以幫助分析員進(jìn)一步理解需求文檔,它們不僅在需求分析階段,而且在整個(gè)生命期間都是很有用的,例如對(duì)系統(tǒng)作維護(hù)修改時(shí),根據(jù)數(shù)據(jù)/加工關(guān)系表就可確定數(shù)據(jù)I修改的影響范圍,以便決定必須重新設(shè)計(jì)哪些加工。由于詞典條目中包含了對(duì)數(shù)據(jù)流程的描述,所以PSA還可根據(jù)詞典的內(nèi)容打印出數(shù)據(jù)流圖,這些圖可能要分別打印在幾張紙上,按打印在紙上的標(biāo)記將幾張紙拼接起來(lái),就可得到一張完整的數(shù)據(jù)流圖。

PSL/PSA系統(tǒng)使人們用統(tǒng)一的方式來(lái)理解和表達(dá)一個(gè)數(shù)據(jù)處理系統(tǒng),并發(fā)揮了計(jì)算機(jī)的特長(zhǎng)來(lái)維護(hù)需求文檔庫(kù),使需求文檔標(biāo)準(zhǔn)、一致、完整,并且能反映系統(tǒng)的最新?tīng)顩r。

PSL/PSA系統(tǒng)的作用是多方面的,無(wú)論從詞典管理、文檔編輯、文檔檢查、文檔理解和維護(hù)等哪一角度來(lái)看,它都是一個(gè)良好的工具。PSL/PSA系統(tǒng)是軟件工具中的一個(gè)杰出代表,目前在IBM、uNIVAc等大型機(jī)上都可配備PSL/PSA系統(tǒng)。

SD方法在l974年提出之后,受到人們的普遍關(guān)注,經(jīng)多年使用后,其效果是明顯的。

SD方法使設(shè)計(jì)文檔標(biāo)準(zhǔn)化,提高了軟件的可理解性和可維護(hù)性,而開(kāi)發(fā)成本卻降低了。但是使用SD方法也有一些問(wèn)題,第一是大型系統(tǒng)的結(jié)構(gòu)圖很復(fù)雜,其典型尺寸約為20英尺(6.096m)長(zhǎng)、l0英尺(3.048m)高,包含了成百上千個(gè)模塊,所以繪制、修改并維持其正確性既化人工又很困難;第二是SD方法的一些設(shè)計(jì)技巧雖然概念上是自然的,但是沒(méi)有嚴(yán)格的定義,所以實(shí)際使用并非容易,對(duì)經(jīng)驗(yàn)不足的人尤其如此,例如塊間聯(lián)系、塊內(nèi)聯(lián)系的類(lèi)型、作用范圍/控制范圍等問(wèn)題備人可以有不同解釋?zhuān)y以客觀(guān)地進(jìn)行評(píng)價(jià)。l0.3概要設(shè)計(jì)工具——AIDES系統(tǒng)這些問(wèn)題帶來(lái)的后果是開(kāi)發(fā)人員將設(shè)計(jì)看成是額外的負(fù)擔(dān),于是往往僅繪制一個(gè)極粗糙的結(jié)構(gòu)圖后就急于去編程,想在編程中再來(lái)完成設(shè)計(jì),這就難以保證產(chǎn)品的質(zhì)量;又由于設(shè)計(jì)員難以了解整個(gè)系統(tǒng)的結(jié)構(gòu),往往只是“改進(jìn)”他自己的子系統(tǒng),這樣使整個(gè)系統(tǒng)的設(shè)計(jì)質(zhì)量遭受損失。所以隨著SD方法的推廣,開(kāi)發(fā)支持SD方法的自動(dòng)工具勢(shì)在必行。美國(guó)Hughes飛機(jī)公司80年代初在VAX11/780機(jī)上開(kāi)發(fā)了AIDES(AutomatedInterac—tiveDesignandEvaluationSystem)系統(tǒng)。AIDES一方面是一個(gè)典型的信息處理系統(tǒng),它具有一些常規(guī)的功能,如交互式編輯、報(bào)告產(chǎn)生、數(shù)據(jù)庫(kù)管理等;另一方面,它又是一個(gè)“計(jì)算機(jī)輔助設(shè)計(jì)”系統(tǒng),因?yàn)樗哂性O(shè)計(jì)文檔編寫(xiě)、結(jié)構(gòu)圖自動(dòng)圖形布局、設(shè)計(jì)標(biāo)準(zhǔn)強(qiáng)制、設(shè)計(jì)配置控制、設(shè)計(jì)復(fù)雜性度量和可測(cè)試性度量等性能。AIDES可以輔助設(shè)計(jì)人員用SD方法以交互方式對(duì)軟件系統(tǒng)作模塊分解,系統(tǒng)的反饋信息基本是圖形的,圖10.3是AIDES的示意圖。

圖10.3

AIDES包括兩個(gè)部分:結(jié)構(gòu)圖圖示系統(tǒng)(SCG。)和設(shè)計(jì)質(zhì)量度量系統(tǒng)(DQM)。

結(jié)構(gòu)圖圖示系統(tǒng)SCG(StructureCha,rtGraphicsSystem)具有下列功能:

1)交互式結(jié)構(gòu)圖編輯:操作員只要發(fā)出一條命令“建立一個(gè)模塊”,系統(tǒng)就會(huì)自動(dòng)問(wèn)模塊的名字和調(diào)用的模塊等,然后在文檔中插入有關(guān)信息并修改屏幕上的圖形;屏幕上還能。同時(shí)顯示模塊的文字信息(功能、輸入和輸出等)。

2)窗口設(shè)置:通過(guò)窗口用戶(hù)可以選擇觀(guān)看整張結(jié)構(gòu)圖的一部分,窗口還可以伸縮,因此可以粗看整張結(jié)構(gòu)圖的形態(tài),也可細(xì)看某個(gè)局部。

3)結(jié)構(gòu)圖自動(dòng)布局:按照某種標(biāo)準(zhǔn)為結(jié)構(gòu)圖中各個(gè)成分自動(dòng)定位,使各模塊盡可能勻稱(chēng)合理地排列,因此結(jié)構(gòu)圖比較美觀(guān)清晰,便于閱讀理解。

4)設(shè)計(jì)文檔整理:全部設(shè)計(jì)文檔(包括結(jié)構(gòu)圖和模塊說(shuō)明)保存在一個(gè)關(guān)系型數(shù)據(jù)庫(kù)中,需要時(shí)可以打印或顯示。

5)查詢(xún)報(bào)告:系統(tǒng)可以回答“有多少個(gè)模塊調(diào)用×××模塊”、“哪些模塊使用×××數(shù)據(jù)”等查詢(xún)。

此外,SCG還有配置控制和將幾個(gè)子樹(shù)裝配成整個(gè)系統(tǒng)等其他功能。

AIDES的另一部分是DQM,它是對(duì)設(shè)計(jì)質(zhì)量作定量分析的工具。在軟件生命期中應(yīng)該對(duì)軟件質(zhì)量盡早進(jìn)行評(píng)價(jià),因?yàn)樵降缴诤笃?,修改系統(tǒng)所需的開(kāi)支越大。概要設(shè)計(jì)完成后,軟件結(jié)構(gòu)方面必有一些錯(cuò)誤或缺陷存在,如果設(shè)計(jì)質(zhì)量不高,后面程序的質(zhì)量也不會(huì)高,因此在運(yùn)用SD方法進(jìn)行模塊分解時(shí),應(yīng)該進(jìn)行質(zhì)量評(píng)價(jià)。

SD方法用塊間聯(lián)系、塊內(nèi)聯(lián)系、扇入、扇出、……等特性對(duì)設(shè)計(jì)質(zhì)量進(jìn)行評(píng)價(jià),然而,SD方法尚無(wú)嚴(yán)密的理論基礎(chǔ),上述特性亦無(wú)嚴(yán)格的定義,所以對(duì)設(shè)計(jì)方案的評(píng)價(jià)還是相當(dāng)困難的,人們希望對(duì)設(shè)計(jì)方案也能像對(duì)程序一樣采用一些定量的評(píng)價(jià)方法。設(shè)計(jì)質(zhì)量度量系統(tǒng)DQM(DesignQualityMetricSystem)是一個(gè)初步的研究性系統(tǒng),其目的是尋找定量描述設(shè)計(jì)質(zhì)量的手段。DQM根據(jù)結(jié)構(gòu)圖的樹(shù)深度、非純度和扇入/扇出等特性,產(chǎn)生描述結(jié)構(gòu)圖復(fù)雜性、塊間聯(lián)系和總扇入/扇出特征的數(shù)字,并立即反饋給設(shè)計(jì)人員。所以,DQM同SCG結(jié)合起來(lái),設(shè)計(jì)人員就不僅能交互式地建立結(jié)構(gòu)圖,而且立即可獲知設(shè)計(jì)方案的質(zhì)量,并再次調(diào)用SCG,對(duì)結(jié)構(gòu)圖中質(zhì)差的部分作修改,這樣SD方法設(shè)計(jì)技巧的運(yùn)用就有了保證。定量分析方法目前尚不成熟,DQM采用的定量評(píng)價(jià)標(biāo)準(zhǔn)是通過(guò)對(duì)軟件作統(tǒng)計(jì)得到的,顯然有片面性,但在大多數(shù)情況下,可望給出令人滿(mǎn)意的結(jié)果,這些結(jié)果對(duì)設(shè)計(jì)及以后的維護(hù),都有一定的參考價(jià)值。

AIDES系統(tǒng)提交使用之后,獲得了良好的效果。據(jù)稱(chēng),文檔編寫(xiě)人工減少了95%,整個(gè)設(shè)計(jì)階段的人工減少了30%,而設(shè)計(jì)質(zhì)量和文檔質(zhì)量卻顯著提高了。詳細(xì)設(shè)計(jì)常用的描述方式包括流程圖、盒圖、問(wèn)題分析圖和程序設(shè)計(jì)語(yǔ)言(PDL)等,本節(jié)介紹一個(gè)支持問(wèn)題分析圖的工具系統(tǒng)。

問(wèn)題分析圖(PAD)用順序、選擇、循環(huán)等三種標(biāo)準(zhǔn)圖式描述一個(gè)模塊內(nèi)部的執(zhí)行過(guò)程廣而且用“走樹(shù)”規(guī)則(TreeWalk)可以機(jī)械地將PAD翻譯成編程語(yǔ)言。顯然,我們可以研制以下2種工具來(lái)支持PAD方法:

·圖形和文字編輯器。10.4詳細(xì)設(shè)計(jì)工具——SDL/PAD系統(tǒng)◆從PAD自動(dòng)產(chǎn)生程序的程序生成器。

日本日立公司80年代初在M系列機(jī)上開(kāi)發(fā)了一個(gè)試驗(yàn)性的系統(tǒng)SDL/PAD(SoftwareDesignLanguage/PAD),該系統(tǒng)接受用SD方法確定的模塊說(shuō)明書(shū),然后輔助設(shè)計(jì)人員以交

互方式進(jìn)行詳細(xì)設(shè)計(jì)(采用PAD或SDL描述法),繼而可以直接產(chǎn)生用編程語(yǔ)言書(shū)寫(xiě)的程序。

SDL/PAD系統(tǒng)的主要功能包括:

(1)交互式地建立和編輯每個(gè)模塊的詳細(xì)設(shè)計(jì)文檔(即模塊內(nèi)部執(zhí)行過(guò)程的描述);詳細(xì)設(shè)計(jì)可用文字(SDL)或圖形(PAD)方式輸入。SDL是一種類(lèi)似于PDI。的語(yǔ)言,系統(tǒng)可以

發(fā)現(xiàn)文檔中的不完整性,如未定義的數(shù)據(jù)、未確定的處理過(guò)程等。

(2)輸出用PAD描述的全套詳細(xì)設(shè)計(jì)文檔。

(3)從PAD自動(dòng)產(chǎn)生用高級(jí)語(yǔ)言(女IJPL/I、PASCAl。、FORTRAN等)編寫(xiě)的源程序。

(4)從源程序產(chǎn)生用PAD書(shū)寫(xiě)的相應(yīng)詳細(xì)設(shè)計(jì)文檔。

(5)統(tǒng)一管理設(shè)計(jì)文檔。在SDL/PAD系統(tǒng)的支持下,詳細(xì)設(shè)計(jì)和編程的難度大大降低了,其工作過(guò)程如下:

(1)設(shè)計(jì)人員交互地輸入詳細(xì)設(shè)計(jì)方案。

(2)系統(tǒng)輸出用PAD表示的圖形化文檔供設(shè)計(jì)人員復(fù)查并及時(shí)糾正錯(cuò)誤。

(3)系統(tǒng)自動(dòng)產(chǎn)生源程序。

(4)編譯程序?qū)⒃闯绦蚍g成機(jī)器代碼。

如果程序中有錯(cuò)誤,可以回到第(2)步再作修改。

SDL/PAD系統(tǒng)還可以用來(lái)對(duì)軟件作維護(hù)。維護(hù)工作中一個(gè)普遍存在的問(wèn)題是維護(hù)人員往往只修改程序而不愿意修改文檔,造成文檔陳舊、與程序不符,所以系統(tǒng)的可維護(hù)性

日趨下降。為了解決這個(gè)問(wèn)題,SDL/PAD有一個(gè)附加的功能,即從源程序(任意源程序,不必是SDL/PAD本身產(chǎn)生的源程序)產(chǎn)生相應(yīng)的PAD,因此設(shè)計(jì)員就可以在PAD這一層而

不是在程序這一層進(jìn)行修改,使維護(hù)的難度大大降低,其工作過(guò)程如下:

(1)系統(tǒng)對(duì)源程序作分析,產(chǎn)生相應(yīng)的PAD。

(2)設(shè)計(jì)人員對(duì)PA_D作交互式地修改。

(3)系統(tǒng)將修改后的PAD翻譯成新的源程序。

由于SDI/PAD實(shí)現(xiàn)了詳細(xì)設(shè)計(jì)文檔同程序間的雙向自動(dòng)轉(zhuǎn)換,所以使詳細(xì)設(shè)計(jì)結(jié)果同程序結(jié)合成一體;軟件開(kāi)發(fā)時(shí),人工只需做到詳細(xì)設(shè)計(jì)這一步;維護(hù)又可在詳細(xì)設(shè)計(jì)這一較高的層次進(jìn)行,所以提高了生產(chǎn)率并改進(jìn)了軟件質(zhì)量(據(jù)日立公司統(tǒng)計(jì),使用SDL/PAD系統(tǒng)可使設(shè)計(jì)人工減少40%,周期縮短30%);SDL/PAD還迫使設(shè)計(jì)人員使用、SP方法,并維持與程序的最新版本相一致的設(shè)計(jì)文檔。

對(duì)詳細(xì)設(shè)計(jì)的另一種描述方式——PDI。,類(lèi)似SDL/PAD的試驗(yàn)性系統(tǒng)也有不少,它們都具有PDL編輯和將PDL。翻譯成編程語(yǔ)言的功能,這里不再介紹。編程階段考慮的問(wèn)題包括:程序的建立和修改、程序的翻譯、程序的連接裝配等。早在60年代,人們已開(kāi)發(fā)了行文編輯程序、編譯程序和格式化程序(能產(chǎn)生用縮排法排列的源程序清單)等工具來(lái)支持編程活動(dòng)。在這些早期工具的支持下,編程工作是這樣進(jìn)行的:

先調(diào)用編輯器建立源程序,再退出編輯器并調(diào)用編譯器產(chǎn)生目標(biāo)程序,程序執(zhí)行時(shí)如發(fā)現(xiàn)錯(cuò)誤又要調(diào)用編輯器再編輯,退出編輯器后再調(diào)用編譯器重新編譯……如此反復(fù)。這種工作方式可用圖10.4說(shuō)明。l0.5編程工具——程序綜合器圖10.4上述編程方式具有明顯的缺點(diǎn):

(1)工作方式復(fù)雜,反復(fù)調(diào)用和退出編輯器、編譯器、連結(jié)程序有諸多不便。

(2)工作效率不高,由編輯器產(chǎn)生的源程序一般含有許多語(yǔ)法錯(cuò)誤,這些錯(cuò)誤要到編譯時(shí)才被發(fā)現(xiàn),再回過(guò)頭來(lái)糾正。

(3)程序員不得不一絲不茍地認(rèn)真對(duì)待標(biāo)點(diǎn)符號(hào)、保留字的拼寫(xiě)、括號(hào)配對(duì)等繁瑣的細(xì)節(jié)。

(4)工作量大,例如一個(gè)幾萬(wàn)行的源程序,其中每個(gè)字符必須由程序員逐個(gè)鍵入,可以想象,打字量是多么大!所以,為了提高生產(chǎn)率,降低編程工作的復(fù)雜性,必須對(duì)圖l0.4的工作方式作改革。

對(duì)傳統(tǒng)的編程方式作分析后,可以看出關(guān)鍵問(wèn)題在于編輯器不懂得程序的結(jié)構(gòu),它將程序看作為普通的字符序列,所以不能發(fā)現(xiàn)其中的語(yǔ)法錯(cuò)誤。解決問(wèn)題的途經(jīng)在于使編輯

器具有編程語(yǔ)言的句法知識(shí)。如果使編輯器具有面向語(yǔ)言的句法結(jié)構(gòu),就可以大大減輕程序員拘泥于語(yǔ)言細(xì)節(jié)的負(fù)擔(dān),這就是語(yǔ)法制導(dǎo)編輯器(Syntax—DirectedEditor)的由來(lái)。美國(guó)Cornell大學(xué)的程序綜合器、Carneige—Mellon大學(xué)的Gandalf系統(tǒng)是這方面研究工作的典型代表,下面介紹Cornen大學(xué)的程序綜合器。

程序綜合器(Programsynthesizer)是建立在uNIx上的一個(gè)交互式編程環(huán)境,它能輔助程序員進(jìn)行程序的建立、編輯、執(zhí)行和排錯(cuò)等多種活動(dòng)。這個(gè)系統(tǒng)的基本思想是將程序理

解為由許多語(yǔ)法對(duì)象組成的一個(gè)層次結(jié)構(gòu),而不是一般的字符序列,這樣,編輯、執(zhí)行和排錯(cuò)均可在該編程語(yǔ)言的句法結(jié)構(gòu)指導(dǎo)下進(jìn)行。在綜合器中,程序是由模板和短語(yǔ)兩類(lèi)成分嵌套構(gòu)成的一個(gè)層次結(jié)構(gòu)。模板是語(yǔ)句的語(yǔ)法輪廓,它包括關(guān)鍵字、匹配括號(hào)和標(biāo)點(diǎn)符號(hào),模板的格式是事先定義的,它體現(xiàn)了編程語(yǔ)言的語(yǔ)法。例如,對(duì)PASCAL語(yǔ)言來(lái)說(shuō),條件句的模板是:

IF(條件)

THEN(語(yǔ)句)

ELSE(語(yǔ)句)

循環(huán)句的模板是:

WHILE(條件)

DO(語(yǔ)句)

在模板的括號(hào)內(nèi),又可插入新的模板或短語(yǔ),所以,模板的作用是為語(yǔ)法單元的插入提供一個(gè)不可改變的框架。短語(yǔ)是用戶(hù)打入的任意字符串,包括賦值語(yǔ)句、表達(dá)式、變量表等。

利用綜合器建立程序時(shí),程序不再以行文方式逐行輸入,而是用由頂向下逐步加細(xì)的方式建立,即在先前已進(jìn)入的模板框架中逐步插入新的模板和短語(yǔ)。程序員用簡(jiǎn)單的命令(如菜單選擇)就可建立模板。由于模板是事先規(guī)定的,而且在特定的上下文中可供選用的模板也是事先按語(yǔ)法規(guī)定的,所以產(chǎn)生的程序不會(huì)有語(yǔ)法錯(cuò)誤;對(duì)于輸入的短語(yǔ),綜合器立即調(diào)用語(yǔ)法分析程序進(jìn)行語(yǔ)法檢查,所以,即使是不完整的程序片斷,其語(yǔ)法卻總是正確的。用綜合器對(duì)程序作修改時(shí),總是刪除或插入整個(gè)模板或短語(yǔ),而在對(duì)個(gè)別短語(yǔ)進(jìn)行修改之后,又要立即進(jìn)行語(yǔ)法檢查,這就保證了在編輯過(guò)程的每一步,程序的語(yǔ)法結(jié)構(gòu)始終是正確的,即修改不會(huì)引起語(yǔ)法錯(cuò)誤。

例如,將條件句

IFK>O

THENX:=A

ELSEX:=B

改為放在循環(huán)句

REPEAT

(語(yǔ)句)

UNTILN=0由于在編輯過(guò)程中,程序一直被維持成一種可解釋的形式(語(yǔ)法樹(shù)),所以編輯結(jié)束后,程序立即就可執(zhí)行,即使是不完整的程序片斷,亦同樣可執(zhí)行。當(dāng)遇到尚未輸入的待

填部分時(shí),程序被暫時(shí)掛起,等所需的語(yǔ)法單元填入后,再恢復(fù)執(zhí)行。程序執(zhí)行時(shí)如因某種原因需要掛起,控制會(huì)回到編輯器,顯示中止執(zhí)行的原因及中止的位置,程序員對(duì)程序

修改后,又可同未被修改的部分連接并繼續(xù)執(zhí)行,如此反復(fù),直到程序最終完成,所以在綜合器的控制下,程序的編輯、執(zhí)行能很方便地交替進(jìn)行。綜合器還有豐富的源程序級(jí)排錯(cuò)功能,如通過(guò)窗口觀(guān)察運(yùn)行中的程序、監(jiān)視變量在運(yùn)行中的變化情況、控制執(zhí)行速率(全速、單步等)、逆向執(zhí)行(REDO/UNDO)……等。上述功能都是以語(yǔ)法結(jié)構(gòu)為單位的。源程序級(jí)的這些排錯(cuò)手段可以幫助程序員分析故障原因,較快地找出其中的錯(cuò)誤。

實(shí)現(xiàn)綜合器的關(guān)鍵是:程序在機(jī)器內(nèi)部不是用行文形式而是用結(jié)構(gòu)樹(shù)來(lái)表示,每個(gè)模板和短語(yǔ)都是結(jié)構(gòu)樹(shù)上的一個(gè)結(jié)點(diǎn),結(jié)點(diǎn)帶有許多屬性,編輯、執(zhí)行、排錯(cuò)等功能均以此

語(yǔ)法樹(shù)為操作對(duì)象來(lái)進(jìn)行。綜合器的使用,為編程帶來(lái)許多便利:

(1)由于不必?fù)?dān)心會(huì)產(chǎn)生瑣碎的語(yǔ)法錯(cuò)誤,程序員不用再拘泥于種種語(yǔ)法細(xì)節(jié)(如分隔符是句號(hào)還是分號(hào)),而可將精力集中于更需智力的地方。

(2)由于模板是事先定義的,所以縮排方式可自動(dòng)保證,這就提高了程序的可讀性。

(3)由于用簡(jiǎn)單的命令(如菜單選擇)就可插入一個(gè)較復(fù)雜的模板,不必再逐個(gè)打入每一字符,因此減少了打字量,即提高了工作效率又避免了打字錯(cuò)誤。當(dāng)然,綜合器最有意義的長(zhǎng)處是:由于不完整的程序亦可以執(zhí)行,所以它有效地支持由頂向下逐步加細(xì)的編程方法。

程序綜合器用統(tǒng)一的用戶(hù)界面集程序的建立、編輯、編譯、運(yùn)行、測(cè)試、排錯(cuò)等工具于一體,以語(yǔ)法樹(shù)作為公共數(shù)據(jù)被各個(gè)工具共同操作,這樣的系統(tǒng)比一般工具箱又前進(jìn)了一步,由于它為程序員創(chuàng)造了一個(gè)良好的工作環(huán)境,所以通常稱(chēng)之為編程環(huán)境。本書(shū)第六章已指出在軟件生命期中,檢驗(yàn)和測(cè)試是很重要但又極耗人工的活動(dòng),完全憑借人工則效率低效果又差,所以其中一部分工作應(yīng)該自動(dòng)化。例如讓自動(dòng)工具對(duì)程序作分析,發(fā)現(xiàn)某種類(lèi)型的錯(cuò)誤,對(duì)可能的錯(cuò)誤(可疑的地方)作提示,為選擇測(cè)試用例提供有用的信息,記錄和統(tǒng)計(jì)測(cè)試結(jié)果等。

70年代末,有關(guān)檢驗(yàn)和測(cè)試工具的研究已取得不少成果,一些試驗(yàn)性的工具系統(tǒng)大量出現(xiàn),例如靜態(tài)分析工具DAVE和FACES、動(dòng)態(tài)分析工具PET、符號(hào)執(zhí)行工具DISSECT以及集成化的測(cè)試系統(tǒng)SADAT等。本節(jié)將介紹其中的一部分。10.6檢驗(yàn)和測(cè)試工具10.6.1靜態(tài)分析工具

檢驗(yàn)的一種手段是靜態(tài)分析,即人工對(duì)程序或需求說(shuō)明書(shū)、設(shè)計(jì)文檔等資料作評(píng)審,6.2介紹了人工評(píng)審的方法,這種方法是有效的,但由于人類(lèi)能力的局限,其效果畢竟是

有限的。如果需求說(shuō)明書(shū)、設(shè)計(jì)文檔等能用形式化或半形式化(格式化)的方式描述,則可以由自動(dòng)工具對(duì)其作一些檢查。此時(shí)被檢查的文檔或程序本身不必運(yùn)行,它們只是作為一份文本供自動(dòng)工具閱讀和檢查,所以稱(chēng)“靜態(tài)分析”。

10.2和10.3介紹的工具系統(tǒng)都具有靜態(tài)分析功能,如PSL/PSA系統(tǒng)能對(duì)用PSI。描述的用戶(hù)需求作一致性和完整性檢查,也可以作數(shù)據(jù)和加工的交叉引用分析:Tektronix的工具箱能對(duì)需求作一致性、完整性分析;AIDES能對(duì)設(shè)計(jì)文檔作某些檢查或進(jìn)行設(shè)計(jì)質(zhì)量的定量分析。

至于對(duì)程序作靜態(tài)分析的工具就更多了,因?yàn)槌绦蚴怯尚问交木幊陶Z(yǔ)言精確地書(shū)寫(xiě)的,所以可用自動(dòng)工具對(duì)它作多種分析,例如:

(1)靜態(tài)錯(cuò)誤分析,這包括對(duì)程序作引用分析、界面分析、類(lèi)型和量綱分析、表達(dá)式分析等,其目的是發(fā)現(xiàn)某種類(lèi)型的錯(cuò)誤。

(2)一般情況分析,這包括對(duì)程序作數(shù)據(jù)流分析、程序結(jié)構(gòu)分析、事件順序分析、符號(hào)交叉引用分析,其目的不是發(fā)現(xiàn)錯(cuò)誤,而是獲得反映程序功能、結(jié)構(gòu)的一般信息。

(3)符號(hào)執(zhí)行,即用符號(hào)作為變量的值,以符號(hào)形式計(jì)算表達(dá)式,以便證明程序的部分正確性,這是一種介于測(cè)試和正確性證明之間的技術(shù)。下面對(duì)靜態(tài)錯(cuò)誤分析的幾種功能作些解釋。

引用分析的注意點(diǎn)是變量被賦值、引用和去值(過(guò)程中的局部變量在過(guò)程結(jié)束時(shí)被去值)的順序。在程序的任一條路徑中一個(gè)變量被賦值、引用和去值的順序應(yīng)該遵從下面兩

條規(guī)則:

(1)引用前必須先賦值,而且在此期間沒(méi)有去值。

(2)賦值后,在再賦值或去值前應(yīng)該被引用。如果對(duì)變量的使用違反了這兩條規(guī)則就稱(chēng)為“引用反?!?,如違背第一條規(guī)則,則說(shuō)明一定有錯(cuò)誤存在;違背第二條規(guī)則雖不一定有錯(cuò)誤,但這樣做是浪費(fèi)時(shí)間的,所以是一個(gè)可疑之處。

觀(guān)察下面一段FORTRAN程序:

SUBROUTINES(A,B)

VOLT=A+B

B=VOLTS

RETURN

END只要順序掃視這個(gè)程序就會(huì)發(fā)現(xiàn)其中有兩處出現(xiàn)“引用反?!保鹤兞縑OLTS沒(méi)賦值就被引用,而變量VOLT則在賦值后,一直沒(méi)被引用。

造成“引用反?!钡脑蛲亲兞棵磳?xiě)錯(cuò),變量名的沖突使用,沒(méi)有為變量賦初值或語(yǔ)句位置錯(cuò)等。

界面分析可以對(duì)設(shè)計(jì)文檔或程序進(jìn)行,其注意點(diǎn)是模塊間界面一致性,例如形式參數(shù)和實(shí)在參數(shù)的個(gè)數(shù)、類(lèi)型、維度是否一致等。下面介紹靜態(tài)分析工具中兩個(gè)典型的代表:FAcEs和DAVE。

FAcES(FORTRANAutomatedCodeEvaluationSystem,即FORTRAN自動(dòng)程序評(píng)價(jià)系統(tǒng))由美國(guó)加州大學(xué)(伯克萊分校)在70年代末開(kāi)發(fā),用于FORTRAN程序的測(cè)試和維護(hù)。

它本身用FORTRlAN編寫(xiě),較易于移植,在IBM、uNIVAc、CDC等大型機(jī)上均可實(shí)現(xiàn)。

FACES的前端部分是二個(gè)語(yǔ)言處理器,它掃視被檢驗(yàn)的FORTRAN程序并產(chǎn)生一些表格存放在數(shù)據(jù)庫(kù)中,其中主要的表格有:

(1)符號(hào)表,它記錄程序中的變量名、語(yǔ)句標(biāo)號(hào)、子程序名等信息。

(2)引用表,它記錄程序中引用上述符號(hào)名的情況,如哪個(gè)賦值句引用某個(gè)變量,哪個(gè)語(yǔ)句調(diào)用某個(gè)子程序等,引用表同符號(hào)表中用鏈表連接。

(3)結(jié)點(diǎn)表,它用有向圖的方式把程序的流程結(jié)構(gòu)記錄下來(lái)。

顯然,這些表格包含了程序的結(jié)構(gòu)、功能等總的信息,F(xiàn)ACES的主體部分以這些信息為基礎(chǔ),完成下列功能:

(1)評(píng)價(jià)程序總的質(zhì)量。①查找可能含有錯(cuò)誤的結(jié)構(gòu),這是指語(yǔ)法上雖然正確,但邏輯上可疑的結(jié)構(gòu),例如向子程序傳送的參數(shù)是常數(shù)就是一個(gè)可疑之處。

②查找多余的即不可能達(dá)到的程序段。

③檢查每個(gè)循環(huán)嵌套、終止的性質(zhì)。

④檢查模塊中局部變量的使用是否出現(xiàn)“引用反?!?。

⑤在模塊間、公共數(shù)據(jù)塊間作界面分析。

⑥檢查程序是否符合編程標(biāo)準(zhǔn)。

(2)回答查詢(xún)。例如列出使用某個(gè)變量名的所有語(yǔ)句,或列出某語(yǔ)句修改后可能影響的所有變量名。

(3)產(chǎn)生各種交叉引用表和程序結(jié)構(gòu)圖。例如產(chǎn)生“變量/語(yǔ)句交叉引用表”、“子程序調(diào)用順序表”、“公共塊/子程序交叉引用表”、……等。

這些功能不僅對(duì)測(cè)試,而且對(duì)程序的評(píng)價(jià)和維護(hù)都是很有用的。

我們可以把FAcES看成是編譯程序的擴(kuò)充。編譯程序可以發(fā)現(xiàn)語(yǔ)法錯(cuò)誤,F(xiàn)ACES則能進(jìn)一步找出一些編譯程序不能發(fā)現(xiàn)的邏輯錯(cuò)誤。

FACES的效果可用下面的事實(shí)說(shuō)明:美國(guó)國(guó)家航天局首次使用FACES時(shí),對(duì)一個(gè)大型FORTRAN程序作分析,在每200個(gè)語(yǔ)句中約發(fā)現(xiàn)了一個(gè)錯(cuò)誤;在對(duì)空中飛船的軟件作分

析時(shí),在6.5%的語(yǔ)句中查出了問(wèn)題。有人用FACES檢查FACES本身的一個(gè)新版本,結(jié)果查出變量名拼寫(xiě)錯(cuò)、公共塊中變量位置錯(cuò)等4個(gè)錯(cuò)誤,這4個(gè)錯(cuò)誤一般不會(huì)影響系統(tǒng)的運(yùn)

行,所以用人工恐難發(fā)現(xiàn),自動(dòng)工具的威力由此可見(jiàn)一斑。另一個(gè)類(lèi)似的系統(tǒng)DAVE由美國(guó)Colorado大學(xué)在1976年開(kāi)發(fā),這是對(duì)FORTRAN程序作分析的工具,它本身用FORTRAN編寫(xiě),在CDC等機(jī)器上實(shí)現(xiàn)。

DAVE對(duì)程序作分析的焦點(diǎn)是查找其中的“引用反?!?,發(fā)現(xiàn)錯(cuò)誤后,DAVE打印有關(guān)信息,以便幫助程序員分析造成錯(cuò)誤的原因。DAVE的作用也可看成是編譯程序的某種擴(kuò)充。DAVE還有其它功能,如符號(hào)執(zhí)行等。

DAVE的使用效果是相當(dāng)好的,有人用DAVE檢查某程序,而該程序已投入實(shí)際使用數(shù)月余,被認(rèn)為是“沒(méi)有錯(cuò)誤”的,但DAVE發(fā)現(xiàn)了其中的一處“引用反常”,錯(cuò)誤原因是變量名拼寫(xiě)錯(cuò)了。10.6.2動(dòng)態(tài)分析工具

動(dòng)態(tài)分析的基本思想是使程序有控制地運(yùn)行,并從多種角度觀(guān)察程序運(yùn)行時(shí)的行為。

我們完全可以用一些自動(dòng)工具來(lái)記錄、監(jiān)視、統(tǒng)計(jì)程序的運(yùn)行情況,最典型的方法是在被測(cè)程序的某些位置插入一些裝置,程序運(yùn)行時(shí),這些裝置就能發(fā)揮監(jiān)視作用,運(yùn)行結(jié)束后,它們就能對(duì)測(cè)試情況作出報(bào)告。下面介紹的覆蓋監(jiān)視工具和動(dòng)態(tài)斷言處理器都采用了這種方法。程序評(píng)價(jià)和測(cè)試系統(tǒng)PET(ProgramEvaluatorandTesterSystem)是動(dòng)態(tài)分析工具的一個(gè)代表,它是美國(guó)McDonaldDouglas公司在70年代末開(kāi)發(fā)的一個(gè)覆蓋監(jiān)視工具,已在IBM、uNIVAc、CDC等大型機(jī)上實(shí)現(xiàn),其功能是支持對(duì)FORTRAN程序采用白盒法測(cè)試,可以監(jiān)視測(cè)試的實(shí)際覆蓋程度。白盒法考慮的是對(duì)程序路徑的覆蓋,而對(duì)一個(gè)邏輯比較復(fù)雜的程序,設(shè)計(jì)一組測(cè)試用例,使其達(dá)到某種覆蓋標(biāo)準(zhǔn)是極為困難的;另外,由于程序中含有錯(cuò)誤,實(shí)際覆蓋程度同預(yù)期覆蓋程度是否相符也是值得懷疑的。

PET能監(jiān)視測(cè)試的實(shí)際覆蓋程度,根據(jù)PET、提供的信息,測(cè)試人員就能適當(dāng)?shù)刈芳右恍y(cè)試用例,使測(cè)試真正達(dá)

到所需的覆蓋標(biāo)準(zhǔn),因而PET能有效地支持白盒法的實(shí)施。

PET的功能包括:

·監(jiān)視測(cè)試的覆蓋情況;

·提供程序執(zhí)行時(shí)的信息,輔助排錯(cuò);

·收集程序執(zhí)行時(shí)的信息,輔助文檔編寫(xiě)。

PET的工作過(guò)程如下:

(1)對(duì)被測(cè)試源程序作預(yù)處理,它自動(dòng)地在程序的

特定位置插入下面3種探測(cè)器:

①在程序的分支和匯合點(diǎn)插入“執(zhí)行計(jì)數(shù)探測(cè)器”。

②在非簡(jiǎn)單賦值句(簡(jiǎn)單賦值句指下標(biāo)運(yùn)算或?qū)⒊?shù)賦給變量的賦值句)后插入“讀變量值探測(cè)器”,它將記錄變量的首次、末次、最大、最小的值。③在循環(huán)句中插入“讀控制變量值探測(cè)器”,它將記

錄循環(huán)控制變量的首次、末次、最大、最小的值。

這些探測(cè)器可能是直接將某個(gè)計(jì)數(shù)器加一的一段源程序;也可能是一個(gè)子程序調(diào)用語(yǔ)句,該子程序負(fù)責(zé)記錄首次、末次等值。

圖l0.5說(shuō)明了對(duì)下面這段FORTRAN程序插入探測(cè)器的情況:

N=l00

5DOl5I—J,N,K

IF(I—K)10,l0,l5

l0C=A(I)*B(I)+C圖10.5l5

B(1)=I

N=50

在圖10.5中,虛線(xiàn)框表示探測(cè)器,其中圓形是執(zhí)行計(jì)數(shù)探測(cè)器,矩形是讀變量值探測(cè)器,菱形是讀控制變量值探測(cè)器。

(2)預(yù)處理后的源程序經(jīng)編譯,并同上述子程序連接后投入運(yùn)行。程序運(yùn)行時(shí),這些探測(cè)器從多個(gè)側(cè)面對(duì)程序的動(dòng)態(tài)行為作深入的觀(guān)察,并收集和統(tǒng)計(jì)有關(guān)信息。

(3)一組測(cè)試結(jié)束后,PET輸出詳細(xì)的或匯總性的報(bào)告,例如:某一語(yǔ)句執(zhí)行的次數(shù),某一轉(zhuǎn)移發(fā)生的次數(shù)及其在總數(shù)中所占的百分比,某賦值句的數(shù)值范圍,循環(huán)控制變量的值范圍,某子程序被調(diào)用的次數(shù),某子程序運(yùn)行的時(shí)間……等。這些信息說(shuō)明了測(cè)試的覆蓋情況,也反映了程序運(yùn)行時(shí)的各種特征,對(duì)人們繼續(xù)追加測(cè)試用例、排錯(cuò)和優(yōu)化都有指導(dǎo)意義。

PET這類(lèi)工具被稱(chēng)為“自度量系統(tǒng)”(Self—Metricsystem),因?yàn)镕OR.TRAN源程序被它裝上探測(cè)器后,就能自行收集、記錄各種運(yùn)行時(shí)的度量指標(biāo)。美國(guó)波音公司研制的動(dòng)態(tài)斷言處理器也是一個(gè)有代表性的工具,它是一個(gè)對(duì)FORTRAN程序作動(dòng)態(tài)分析的試驗(yàn)性系統(tǒng)。

6.1已指出,程序正確性證明是一種很有前途的檢驗(yàn)技術(shù),它可用數(shù)學(xué)方法證明對(duì)所有可能的輸入數(shù)據(jù),某些斷言必定成立,遺憾的是這一技術(shù)目前尚未成熟,還不適用于大型的系統(tǒng)。

既然嚴(yán)格證明程序的正確性尚有困難,退一步說(shuō),是否有可能在程序運(yùn)行時(shí),部分地檢查某些斷言的正確性呢?如果這些斷言不成立,可以肯定程序中有錯(cuò)誤;如果斷言成立,雖不能認(rèn)為程序正確,但也可以增加我們對(duì)這個(gè)程序的信心。動(dòng)態(tài)斷言處理器就是在這種思想啟發(fā)下研制的一類(lèi)系統(tǒng),它們能在程序運(yùn)行時(shí),檢查事先指定的一些斷言是否成立,因此有助于復(fù)雜系統(tǒng)的檢驗(yàn)、排錯(cuò)和維護(hù)。下面介紹波音公司研制的動(dòng)態(tài)斷言處理器,它的工作原理如下:

(1)在使用該系統(tǒng)之前,程序員應(yīng)在源程序中預(yù)先說(shuō)明變量應(yīng)滿(mǎn)足的邏輯條件,稱(chēng)為“斷言”。斷言用FORTRAN中的注釋句按一定格式書(shū)寫(xiě),稱(chēng)“斷言語(yǔ)句”。“斷言”分局部性和全程性?xún)深?lèi)。局部性斷言描述的是在程序某個(gè)位置上,一些變量應(yīng)符合的邏輯條件,例如I<10,A(6)≠0,數(shù)組A的所有元素均大于零等。局部性斷言寫(xiě)在程序的相應(yīng)位置上,上述3個(gè)斷言的斷言語(yǔ)句格式是:

CASSERTLOCAl(I.LT.10)

CASSERTLOCAL(A(6).NE.0)

CASSERTLOCAL(A(*.*).GT.0)程序員在重要的循環(huán)或過(guò)程之入口和出口處,或在一些可能引起異常的關(guān)鍵算法之前,均可指出局部性斷言,如在賦值句A=B/z之前,設(shè)置斷言語(yǔ)句:

CASSERTLOCAL(Z.NE.0)

全程性斷言描述的是在程序運(yùn)行過(guò)程中變量始終應(yīng)滿(mǎn)足的邏輯條件,例如變量I、J、K只能取0至100間的值,變量KK、NN只能取2、4、6、8這4個(gè)值。全程性斷言寫(xiě)在程序的說(shuō)明部分,上述兩個(gè)斷言的斷言語(yǔ)句格式是:

CASSERVALUES(1,J,K)(0:100)

CASSERTVALUES(KK,NN)(2,4,6,8)程序員在每個(gè)變量、數(shù)組的說(shuō)明之后,都可寫(xiě)上反映其全程特性的斷言。

(2)動(dòng)態(tài)斷言處理器對(duì)FORTRAN源程序中的注釋句先作預(yù)處理,為每個(gè)斷言插入一段相應(yīng)的檢驗(yàn)程序。

(3)經(jīng)預(yù)處理的程序運(yùn)行時(shí),這些檢驗(yàn)程序就會(huì)檢查程序的實(shí)際執(zhí)行情況與斷言所規(guī)定的邏輯狀態(tài)是否一致;對(duì)局部性斷言,每當(dāng)程序執(zhí)行到這個(gè)位置時(shí),相應(yīng)的檢驗(yàn)程序就要工作;對(duì)全程性斷言,則在變量被賦值后(即每次修改后)相應(yīng)的檢驗(yàn)程序就進(jìn)行工作。動(dòng)態(tài)斷言處理器將統(tǒng)計(jì)檢驗(yàn)的結(jié)果(即斷言成立或不成立的次數(shù)),在發(fā)現(xiàn)斷言不成立

的情況下,還將收集當(dāng)時(shí)的現(xiàn)場(chǎng)信息,如有關(guān)變量的狀態(tài)等。系統(tǒng)也可按測(cè)試人員的要求,在某個(gè)斷言不成立的次數(shù)已達(dá)指定值時(shí)中止程序的運(yùn)行并隨即輸出統(tǒng)計(jì)報(bào)告。

(4)一組測(cè)試結(jié)束后,系統(tǒng)將統(tǒng)計(jì)結(jié)果、現(xiàn)場(chǎng)情況輸出供測(cè)試人員分析。

動(dòng)態(tài)斷言處理器能夠檢查程序的動(dòng)態(tài)特性是否同程序員的設(shè)想相符,這類(lèi)系統(tǒng)可稱(chēng)為“自驗(yàn)證系統(tǒng)”(Self-ValidatingSystem),因?yàn)楸粶y(cè)程序經(jīng)它預(yù)處理后,能自行驗(yàn)證程序運(yùn)行時(shí)的行為是否正確。當(dāng)然這類(lèi)工具只能作部分驗(yàn)證,同程序正確性證明是完全不同的。用于測(cè)試的自動(dòng)工具還有很多,例如模塊驅(qū)動(dòng)工具、測(cè)試數(shù)據(jù)生成程序、環(huán)境模擬程序,還有輔助排錯(cuò)的工具等,讀者可參閱參考文獻(xiàn)。近年來(lái)又出現(xiàn)了將多種測(cè)試工具融

為一體的集成化測(cè)試系統(tǒng),例如德國(guó)IDT開(kāi)發(fā)的SADAT系統(tǒng),它集成了靜態(tài)分析、動(dòng)態(tài)分析、符號(hào)執(zhí)行和測(cè)試數(shù)據(jù)生成等功能,各種功能用統(tǒng)一的命令語(yǔ)言調(diào)用,各個(gè)工具都使用公共數(shù)據(jù)庫(kù)中的信息,比分散的工具獲得了更好的效果。軟件維護(hù)工具可以分為兩類(lèi):一類(lèi)是屬于維護(hù)技術(shù)方面的,另一類(lèi)是屬于維護(hù)管理方面的。

l0.7.1維護(hù)技術(shù)工具

從7.3.2的介紹可以知道:維護(hù)的主要過(guò)程是理解現(xiàn)有系統(tǒng),修改現(xiàn)有系統(tǒng)和重新確認(rèn)修改后的系統(tǒng)。

在理解現(xiàn)有系統(tǒng)階段可使用的工具有:

·各類(lèi)預(yù)處理程序;10.7維護(hù)工具

·代碼格式美化程序;

·代碼標(biāo)準(zhǔn)化監(jiān)測(cè)程序;

·程序設(shè)計(jì)風(fēng)格轉(zhuǎn)換程序;

·語(yǔ)言加工程序;

·流程圖顯示程序。

例如,在uNIx操作系統(tǒng)下,支持c語(yǔ)言的代碼格式美化程序CB(CBeautifier)、C交叉引用程序CXREF(CCrossReference)以及C流程圖程序CFI。Ow(CFlOWGraph)。在修改現(xiàn)有系統(tǒng)階段可使用的工具有:

·聯(lián)接編輯程序;

·正文編輯程序;

·分析波動(dòng)效應(yīng)的程序;

·重編譯程序;

·版本控制程序。

例如,在UNIX操作系統(tǒng)下的部分重編譯程序make以及源代碼控制程序SCCS(SourceCodeControlSystem)。在重新確認(rèn)修改后的系統(tǒng)階段可使用的工具有:

·各種測(cè)試程序;

·驗(yàn)證程序;

·質(zhì)量保證程序;

·各類(lèi)比較程序;

·維護(hù)數(shù)據(jù)庫(kù)程序。

下面介紹一個(gè)軟件理解的維護(hù)工具。

由于維護(hù)人員有時(shí)并不是系統(tǒng)開(kāi)發(fā)人員,因此,要理解軟件系統(tǒng)必須要有足夠的文檔資料。由于種種原因,可能得不到全部文檔說(shuō)明資料,最多只有系統(tǒng)的源程序。在這種情況下,就需要借助于軟件理解工具。作為一個(gè)大型軟件理解工具,應(yīng)能達(dá)到以下目標(biāo):

·協(xié)助維護(hù)人員對(duì)軟件結(jié)構(gòu)進(jìn)行分解;

·協(xié)助維護(hù)人員跟蹤軟件單元的數(shù)據(jù)流和控制流;

·將軟件按逐步抽象的方法進(jìn)行邏輯上的綜合,并可用邏輯注解語(yǔ)句來(lái)表達(dá);

·將理解后的軟件內(nèi)容、結(jié)構(gòu)予以文檔化和作為資源輸出;

南京大學(xué)計(jì)算機(jī)系曾在IBM/PC上開(kāi)發(fā)了一個(gè)理解PASCAL源程序的理解工具TAUS,工具的主要結(jié)構(gòu)如圖10.6所示。圖中各部分的功能是:圖10.6

(1)元語(yǔ)言分析程序。它是產(chǎn)生目標(biāo)語(yǔ)言(如PASCAL語(yǔ)言)的語(yǔ)法驅(qū)動(dòng)表的生成程序。它接受用元語(yǔ)言書(shū)寫(xiě)的目標(biāo)語(yǔ)言的語(yǔ)法和部分語(yǔ)義描述,經(jīng)過(guò)分析,生成語(yǔ)法驅(qū)動(dòng)表。它提供用戶(hù)一個(gè)能支持多種語(yǔ)言的統(tǒng)一接口。

(2)裝載分析程序。它接受需要理解的目標(biāo)源程序,按照語(yǔ)法驅(qū)動(dòng)表進(jìn)行分析。它自動(dòng)對(duì)程序進(jìn)行靜態(tài)分析,生成一系列內(nèi)部文檔存入文檔庫(kù)。源程序的內(nèi)部表示為:語(yǔ)句一行號(hào)一類(lèi)型號(hào),它記錄了每一行源程序及其位置,同時(shí)也記錄了它的嵌套層次、邏輯注解內(nèi)容和語(yǔ)句類(lèi)型號(hào)(相當(dāng)于PDL控制結(jié)構(gòu)的一個(gè)編號(hào))。

(3)文檔庫(kù)。它用IBM/PC文件系統(tǒng)來(lái)實(shí)現(xiàn),由裝載分析程序送入文檔,并可為命令管理程序訪(fǎng)問(wèn)。

(4)命令管理程序。它包括多窗口管理、命令分析和處理(共72種命令,包括裝載命令、窗口管理命令、分析和理解命令以及輔助命令)。

TAUS的主要功能是:

(1)程序結(jié)構(gòu)的觀(guān)察。它可顯示程序結(jié)構(gòu)樹(shù)、過(guò)程調(diào)用關(guān)系、程序單元的控制流圖、控制流所隱藏的信息和控制流路徑。

(2)源程序觀(guān)察。它能進(jìn)行變量的定義及引用,數(shù)據(jù)結(jié)構(gòu)的顯示,按層次結(jié)構(gòu)顯示源代碼,還可進(jìn)行過(guò)程的數(shù)據(jù)接口顯示和過(guò)程調(diào)用者以及被調(diào)用者的顯示。

(3)源程序和控制流圖的顯示。

(4)控制流和數(shù)據(jù)流的跟蹤和回溯。

(5)程序復(fù)雜性參數(shù)的觀(guān)察。

(6)變量和過(guò)程名的修改。

(7)交互地加入或修改程序的注解。

(8)各種維護(hù)文檔輸出,其中包括格式化的源程序、信息隱藏后的源程序、源程序的框圖二信息隱藏后的源程序框圖、層次結(jié)構(gòu)圖、源程序及目標(biāo)過(guò)程之間的搜索路徑、數(shù)據(jù)接口圖、過(guò)程名字表、變量定義和引用表、復(fù)雜性參數(shù)和注解表等。10.7.2維護(hù)管理工具

維護(hù)管理方面的工具主要用于支持有關(guān)事務(wù)處理、資料分析和統(tǒng)計(jì)工作。目前用于維護(hù)管理方面的自動(dòng)工具還較少,主要有以下幾種:

·問(wèn)題報(bào)告編輯器;

·維護(hù)狀態(tài)報(bào)告編輯器;

·程序改變報(bào)告編輯器;

·文件管理工具;

·數(shù)據(jù)收集和統(tǒng)計(jì)工具;

·維護(hù)日志。與傳統(tǒng)的開(kāi)發(fā)和維護(hù)工作相類(lèi)似,開(kāi)發(fā)和維護(hù)面向?qū)ο蟮能浖瑯右蕾?lài)于工具。開(kāi)發(fā)人員需要對(duì)代碼的快速訪(fǎng)問(wèn),需要有在類(lèi)層次結(jié)構(gòu)中航行(navigation)的能力,也需要有關(guān)于類(lèi)和方法的快速、增量化的編譯。此外,在對(duì)象之間大量的、以消息的形式出現(xiàn)的通信和性能調(diào)整(PerformanceTunning),也是經(jīng)常需要的。

目前,面向?qū)ο筌浖幕鹃_(kāi)發(fā)與維護(hù)工具主要是:瀏覽程序(Browsers)、檢閱程序(Inspectors)、性能剖析程序(Profi1ers)和排錯(cuò)程序(Debuggers)等。這些工具是以功能分類(lèi)的,但實(shí)際上目前商品化的工具通常以上述幾種工具集形式出現(xiàn)。l0.8面向?qū)ο箝_(kāi)發(fā)和維護(hù)的工具10.8.1瀏覽程序

面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言的優(yōu)點(diǎn)之一是具有類(lèi)庫(kù)。類(lèi)的使用與一般程序員所具有的過(guò)去的開(kāi)發(fā)經(jīng)驗(yàn)不同。例如,在閱讀程序的源代碼以及利用程序中的邏輯關(guān)系來(lái)跟蹤控制流

等方面,都不能按以往的經(jīng)驗(yàn)來(lái)進(jìn)行,程序員必須學(xué)會(huì)在系統(tǒng)中的類(lèi)之間“航行”。

瀏覽程序是一種交互式工具,用于在類(lèi)庫(kù)和構(gòu)架中航行。一個(gè)典型的瀏覽程序能夠提供以下信息:

·類(lèi)之間的關(guān)系;

·類(lèi)中的消息和方法;

·類(lèi)中的實(shí)例變量;

·消息的發(fā)送者;

·消息的接收者;

·

方法的實(shí)現(xiàn)代碼。

第一個(gè)瀏覽程序是為Smalltalk—80開(kāi)發(fā)的Objectworks,這種瀏覽程序是早期面向?qū)ο蟪绦蛟O(shè)計(jì)工具的一個(gè)代表。隨著研究和應(yīng)用的不斷發(fā)展,這樣瀏覽程序又有了發(fā)展,ParcPlaceSystems公司的ObjectworksforC++,就是移植和擴(kuò)充這種瀏覽程序的一種范例。

Borland公司的BorlanC++3.0在其集成開(kāi)發(fā)環(huán)境中設(shè)置了一個(gè)基于Windows3.0的瀏覽程序,與ObjectworksforC++中的瀏覽程序不同的是,它把類(lèi)層次結(jié)構(gòu)和類(lèi)中的方法分為兩層來(lái)顯示;另外,它允許用鼠標(biāo)在源代碼中選擇所關(guān)心的標(biāo)識(shí)符(如類(lèi)名、方法名等)來(lái)查看對(duì)應(yīng)的源代碼。但是,由于BorlandC++3.0是一個(gè)基于編譯的系統(tǒng),所以只能在程序的可執(zhí)行代碼上進(jìn)行瀏覽,并且要求編譯時(shí)進(jìn)行編譯開(kāi)關(guān)的選擇,以使得關(guān)于類(lèi)層次結(jié)構(gòu)的信息保持在目標(biāo)代碼中。

還有一些工具提供的是類(lèi)的圖形化視圖。如Eiffel開(kāi)發(fā)環(huán)境中的GOOD(GraphicsforObject—OrientedDisign)。對(duì)于某一類(lèi),GOOD可顯示它所有的父類(lèi)和顧客。10.8.2檢閱程序

過(guò)程化語(yǔ)言中的檢閱程序,是在單步執(zhí)行一個(gè)程序時(shí),用來(lái)查看和修改數(shù)據(jù)值的工具。面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言中的檢閱程序也有類(lèi)似的功能,它主要是用來(lái)查看和修改對(duì)象的實(shí)例變量值。

在BorlandC++3.0的排錯(cuò)程序中,選擇View窗口就可激活它內(nèi)含的一個(gè)檢閱程序。

檢閱程序的另一個(gè)例子是Smalltalk-80嵌在瀏覽程序Objectworks中的檢閱程序。如果程序員要檢閱某一個(gè)類(lèi)中實(shí)例變量的當(dāng)前值,那么這時(shí)在屏幕上,其背景中顯示的就是瀏覽程序查看類(lèi)、消息和和方法的情況;前景即為檢閱程序打開(kāi)的,以類(lèi)命名窗口,其中列出了該類(lèi)的實(shí)例變量。當(dāng)在窗口左部選擇了一個(gè)實(shí)例變量時(shí),窗口的右部就顯示該實(shí)例變量的當(dāng)前值。10.8.3性能剖析程序

性能剖板程序是用來(lái)分析程序性能的一種主要工具,用以指出在一個(gè)程序中哪里的運(yùn)行開(kāi)銷(xiāo)大,這在實(shí)時(shí)應(yīng)用系統(tǒng)的開(kāi)發(fā)中是非常重要的。在這種信息的幫助下,開(kāi)發(fā)者可以確認(rèn)程序中需要改善性能的部分。面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的剖析程序與面向過(guò)程語(yǔ)言的剖析程序只有很小的區(qū)別。對(duì)于一個(gè)過(guò)程化的程序,在典型情況下剖析程序要產(chǎn)生一個(gè)報(bào)

告,指出該程序中每個(gè)過(guò)程被調(diào)用的次數(shù)以及每個(gè)過(guò)程的執(zhí)行時(shí)間占總執(zhí)行時(shí)間的百分比。而對(duì)于一個(gè)面向?qū)ο蟮某绦?,剖析程序所提供的也是?lèi)似的信息,所不同的是用消息

的發(fā)送代替了過(guò)程的調(diào)用。

Smalltalk環(huán)境還有一個(gè)稱(chēng)為Spy的剖析程序,它可以分析一個(gè)代碼塊并給出一個(gè)報(bào)告,指出這個(gè)代碼塊中的消息發(fā)送序列,以及對(duì)每個(gè)消息求值時(shí)間所占的百分比。面向Ac—

tor語(yǔ)言的剖析程序可產(chǎn)生一個(gè)報(bào)告,列出一個(gè)程序在執(zhí)行過(guò)程中每個(gè)方法的執(zhí)行次數(shù)。性能優(yōu)化的重點(diǎn)是那些執(zhí)行次數(shù)較多的方法。

Borlandc++2.0和3.0都提供了剖析程序TurboProfiler,其功能也是類(lèi)似的。l0.8.4排錯(cuò)程序

排錯(cuò)程序是對(duì)運(yùn)行中的程序進(jìn)行有控制地執(zhí)行和檢查的工具,是經(jīng)常使用的一種工具。一種排錯(cuò)程序的功能強(qiáng)弱,很大程度上取決于它以不同的方式進(jìn)行測(cè)試時(shí)查看程序的

能力。面向?qū)ο蟮呐佩e(cuò)程序提供了對(duì)非過(guò)程化的程序單元與關(guān)系的查看支持,如類(lèi)、類(lèi)與子類(lèi)的關(guān)系、消息與方法的聯(lián)系等。在其他方面,面向?qū)ο蟮呐佩e(cuò)程序與傳統(tǒng)的排錯(cuò)程序

沒(méi)有太大的區(qū)別。

Smalltalk/V中的排錯(cuò)程序,是面向?qū)ο笈佩e(cuò)程序中的一種范例。在該排錯(cuò)程序中主要有5種服務(wù):Wa1kback將顯示一組消息發(fā)送信息,最上面是最近發(fā)出的消息,以便及時(shí)回顧程序已經(jīng)完成的工作,如果進(jìn)一步選擇某個(gè)回步,則會(huì)顯示相應(yīng)的信息;BreakPoints將顯示所有設(shè)置了斷點(diǎn)的方法和對(duì)應(yīng)類(lèi)名和方法選擇者,如果進(jìn)一步選擇了某個(gè)斷點(diǎn),則顯示對(duì)應(yīng)方法的源代碼(在一個(gè)方法中設(shè)置斷點(diǎn),為的是在進(jìn)入這個(gè)方法時(shí)停止執(zhí)行);Hop執(zhí)行正在運(yùn)行程序的下一個(gè)表達(dá)式;Skip執(zhí)行被選方法中的下一個(gè)表達(dá)式,或者執(zhí)行到下

一個(gè)斷點(diǎn),這取決于誰(shuí)先出現(xiàn);Jump則是執(zhí)行到下一個(gè)斷點(diǎn)。對(duì)于混合式面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,排錯(cuò)程序必須具有對(duì)其中的過(guò)程化結(jié)構(gòu)和面向?qū)ο蠼Y(jié)構(gòu)都能進(jìn)行排錯(cuò)的功能。例如,Borlandc++2.0和3.0的排錯(cuò)程序TurboDebugger,

就是在原來(lái)過(guò)程化語(yǔ)言(如Turboc,TurboPascal等)排錯(cuò)程序的基礎(chǔ)上,增加了支持C++面向?qū)ο蠼Y(jié)構(gòu)和支持Windows3.0的特性后產(chǎn)生的。與傳統(tǒng)的軟件開(kāi)發(fā)相類(lèi)似,工具在面向?qū)ο蟪绦蛟O(shè)計(jì)中也扮演著一種重要的角色。但是,關(guān)于面向?qū)ο蠓治龊驮O(shè)計(jì)的研究還處于初級(jí)階段,還沒(méi)有像結(jié)構(gòu)化分析和設(shè)計(jì)那樣形

成被廣泛接受的方法論,因而,相應(yīng)的工具主要支持的是程序設(shè)計(jì),這是發(fā)展過(guò)程中不可避免的問(wèn)題。隨著研究和應(yīng)用的不斷深入,面向?qū)ο蟮姆治龊驮O(shè)計(jì)將會(huì)形成若干種被廣泛

接受的方法論,相應(yīng)的工具也會(huì)不斷涌現(xiàn)。大型軟件系統(tǒng)的復(fù)雜性往往不是來(lái)自其算法,而是來(lái)自其規(guī)模。由于人類(lèi)本身的弱點(diǎn),同處理小問(wèn)題不同,人工處理大規(guī)模的問(wèn)題往往會(huì)束手無(wú)措,或犯許多錯(cuò)誤?;谟?jì)算機(jī)的處理大量數(shù)據(jù)的特長(zhǎng),“軟件開(kāi)發(fā)需要一套良好的自動(dòng)工具”這一觀(guān)點(diǎn),已被軟件界普遍接受,因?yàn)橛?jì)算機(jī)處理大問(wèn)題和小問(wèn)題的方式基本是一樣的。

從早期的編輯程序、連接程序、編譯程序、排錯(cuò)程序開(kāi)始,直至前幾節(jié)介紹的各種系統(tǒng),我們已熟悉了不少自動(dòng)工具,此外還有其他工具,如數(shù)據(jù)庫(kù)設(shè)計(jì)工具等,這些工具的

使用大大提高了軟件生產(chǎn)率并改進(jìn)了軟件的質(zhì)量。10.9軟件開(kāi)發(fā)環(huán)境然而,事物總是不斷向前發(fā)展的,軟件工程這門(mén)年青而又有前途的學(xué)科更是如此,上述自動(dòng)工具經(jīng)一個(gè)時(shí)期的使用后,人們發(fā)現(xiàn)了下列不足之處:

(1)每個(gè)工具只支持生命期中的個(gè)別工作,例如PSL/PSA只支持需求描述,AIDES只支持設(shè)計(jì),PDL工具只支持詳細(xì)設(shè)計(jì)等,它們不能支持整個(gè)生命期的活動(dòng)。

(2)各種工具不統(tǒng)一,它們分別建立在不同的機(jī)器、不同的操作系統(tǒng)上,用不同的語(yǔ)言編寫(xiě),使用的方式也各不相同,所以不能兼容,難以集成為一體。認(rèn)識(shí)到分散工具的不足之后,人們很自然地希望研制能支持整個(gè)生命期的、配套成龍的綜合性工具系統(tǒng),這就出現(xiàn)了“軟件開(kāi)發(fā)環(huán)境”的概念,這方面的研究工作在80年代初

達(dá)到高潮。

軟件開(kāi)發(fā)環(huán)境(SoftwareDevelopme

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論