版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
軟件工程
1.1軟件危機(jī)
1.2軟件工程
1.3軟件生命周期
1.4軟件過(guò)程第1章軟件工程學(xué)概述第1章軟件工程學(xué)概述軟件的定義軟件(
Software)是計(jì)算機(jī)系統(tǒng)中與硬件相互依存的另一部分,它是包括程序(Program)
,數(shù)據(jù)(Data)及其相關(guān)文檔(Document)的完整集合。軟件=程序+數(shù)據(jù)+文檔程序=算法+數(shù)據(jù)結(jié)構(gòu)1.1.1軟件危機(jī)的介紹軟件危機(jī)(軟件蕭條、軟件困擾):是指在計(jì)算機(jī)軟件的開(kāi)發(fā)和維護(hù)過(guò)程中所遇到的一系列嚴(yán)重問(wèn)題。實(shí)際上,幾乎所有軟件都不同程度地存在這些問(wèn)題。軟件危機(jī)包含下述兩方面的問(wèn)題:如何開(kāi)發(fā)軟件,滿足對(duì)軟件日益增長(zhǎng)的需求;如何維護(hù)數(shù)量不斷膨脹的已有軟件。軟件危機(jī)的典型表現(xiàn):(1)對(duì)軟件開(kāi)發(fā)成本和進(jìn)度的估計(jì)常常很不準(zhǔn)確;(2)用戶對(duì)“已完成的”軟件系統(tǒng)不滿意的現(xiàn)象經(jīng)常發(fā)生;(3)軟件產(chǎn)品的質(zhì)量往往靠不住;(4)軟件常常是不可維護(hù)的;(5)軟件通常沒(méi)有適當(dāng)?shù)奈臋n資料;(6)軟件成本在計(jì)算機(jī)系統(tǒng)總成本中所占的比例逐年上升;(7)軟件開(kāi)發(fā)生產(chǎn)率提高的速度,遠(yuǎn)遠(yuǎn)跟不上計(jì)算機(jī)應(yīng)用迅速普及深入的趨勢(shì)。1.1.2產(chǎn)生軟件危機(jī)的原因(1)與軟件本身的特點(diǎn)有關(guān)軟件是邏輯部件。軟件不會(huì)被“用壞”,如果發(fā)現(xiàn)了錯(cuò)誤,很可能是開(kāi)發(fā)時(shí)期引入。軟件規(guī)模龐大,而且程序復(fù)雜性將隨著程序規(guī)模的增加而呈指數(shù)上升。(2)與軟件開(kāi)發(fā)與維護(hù)的方法不正確有關(guān)忽視軟件需求分析的重要性。對(duì)用戶要求沒(méi)有完整準(zhǔn)確的認(rèn)識(shí)就匆忙著手編寫(xiě)程序。越早開(kāi)始寫(xiě)程序,完成它所需要用的時(shí)間往往越長(zhǎng)。認(rèn)為軟件開(kāi)發(fā)就是寫(xiě)程序并設(shè)法使之運(yùn)行。程序只是完整的軟件產(chǎn)品的一個(gè)組成部分。一個(gè)軟件產(chǎn)品必須由一個(gè)完整的配置組成,軟件配置主要包括程序、文檔和數(shù)據(jù)等成分。在軟件開(kāi)發(fā)的不同階段進(jìn)行修改需要付出的代價(jià)是很不相同的,見(jiàn)圖1.1。圖1.1引入同一變動(dòng)付出的代價(jià)隨時(shí)間變化的趨勢(shì)輕視軟件維護(hù)。維護(hù)是極端艱巨復(fù)雜的工作,需要花費(fèi)很大代價(jià)。軟件維護(hù)的費(fèi)用占軟件總費(fèi)用的55%~70%。軟件工程學(xué)的一個(gè)重要目標(biāo)就是提高軟件的可維護(hù)性,減少軟件維護(hù)的代價(jià)。1.1.3消除軟件危機(jī)的途徑
對(duì)計(jì)算機(jī)軟件有正確的認(rèn)識(shí)。認(rèn)識(shí)到軟件開(kāi)發(fā)是一種組織良好、管理嚴(yán)密、各類人員協(xié)同配合、共同完成的工程項(xiàng)目。應(yīng)該推廣使用在實(shí)踐中總結(jié)出來(lái)的開(kāi)發(fā)軟件的成功技術(shù)和方法,并繼續(xù)研究探索。應(yīng)該開(kāi)發(fā)和使用更好的軟件工具。總之,為了解決軟件危機(jī),既要有技術(shù)措施(方法和工具),又要有必要的組織管理措施。
1.2.3軟件工程方法學(xué)
軟件工程包括技術(shù)和管理兩方面的內(nèi)容。管理:通過(guò)計(jì)劃、組織和控制等一系列活動(dòng),合理地配置和使用各種資源,以達(dá)到既定目標(biāo)的過(guò)程。技術(shù)(軟件工程方法學(xué)):通常把在軟件生命周期全過(guò)程中使用的一整套技術(shù)方法的集合稱為方法學(xué)(methodology),也稱為范型(paradigm)。軟件工程方法學(xué)3要素:方法:是完成軟件開(kāi)發(fā)的各項(xiàng)任務(wù)的技術(shù)方法,回答“怎樣做”的問(wèn)題;工具:是為運(yùn)用方法而提供的自動(dòng)的或半自動(dòng)的軟件工程支撐環(huán)境;如,CASE(Computer-AidedSoftwareEngineering)工具過(guò)程:需要完成的一系列任務(wù)的框架,它規(guī)定了完成各項(xiàng)任務(wù)的工作步驟。1.3軟件生命周期
三個(gè)時(shí)期八個(gè)階段:軟件生命周期由軟件定義、軟件開(kāi)發(fā)和運(yùn)行維護(hù)(也稱為軟件維護(hù))三個(gè)時(shí)期組成,每個(gè)時(shí)期又進(jìn)一步劃分成若干個(gè)階段。三個(gè)時(shí)期:八個(gè)階段:軟件生命周期軟件定義軟件開(kāi)發(fā)軟件維護(hù)問(wèn)題定義可行性研究需求分析概要設(shè)計(jì)詳細(xì)設(shè)計(jì)編碼和單元測(cè)試綜合測(cè)試運(yùn)行維護(hù)系統(tǒng)設(shè)計(jì)系統(tǒng)實(shí)現(xiàn)1.4軟件過(guò)程軟件過(guò)程:是為了獲得高質(zhì)量軟件所需要完成的一系列任務(wù)的框架,它規(guī)定了完成各項(xiàng)任務(wù)的工作步驟。過(guò)程定義了運(yùn)用方法的順序、應(yīng)該交付的文檔資料、為保證軟件質(zhì)量和協(xié)調(diào)變化所需要采取的管理措施,以及標(biāo)志軟件開(kāi)發(fā)各個(gè)階段任務(wù)完成的里程碑。為獲得高質(zhì)量的軟件產(chǎn)品,軟件過(guò)程必須科學(xué)、有效。傳統(tǒng)的瀑布模型實(shí)際的瀑布模型1.4.1瀑布模型瀑布模型的特點(diǎn):1.階段間具有順序性和依賴性前一階段的工作完成之后,才能開(kāi)始后一階段的工作;前一階段的輸出文檔就是后一階段的輸入文檔。2.推遲實(shí)現(xiàn)的觀點(diǎn)對(duì)于規(guī)模較大的軟件項(xiàng)目來(lái)說(shuō),往往編碼開(kāi)始得越早最終完成開(kāi)發(fā)工作所需要的時(shí)間反而越長(zhǎng)。3.質(zhì)量保證的觀點(diǎn)每個(gè)階段都必須完成規(guī)定的文檔,是“文檔驅(qū)動(dòng)”的模型;每個(gè)階段結(jié)束前都要對(duì)所完成的文檔進(jìn)行評(píng)審,盡早發(fā)現(xiàn)問(wèn)題,改正錯(cuò)誤。瀑布模型的優(yōu)點(diǎn):可強(qiáng)迫開(kāi)發(fā)人員采用規(guī)范的方法;嚴(yán)格地規(guī)定了每個(gè)階段必須提交的文檔;要求每個(gè)階段交出的所有產(chǎn)品都必須經(jīng)過(guò)質(zhì)量保證小組的仔細(xì)驗(yàn)證。瀑布模型的缺點(diǎn):只能通過(guò)文檔了解產(chǎn)品,不經(jīng)過(guò)實(shí)踐的需求是不切實(shí)際的。實(shí)際項(xiàng)目很少按照該模型給出的順序進(jìn)行;用戶常常難以清楚地給出所有需求;用戶必須有耐心,等到系統(tǒng)開(kāi)發(fā)完成瀑布模型適用于:
需求是預(yù)知的;軟件實(shí)現(xiàn)方法是成熟的;項(xiàng)目周期較短??焖僭湍P?.4.2快速原型模型
快速原型:是快速建立起來(lái)的可以在計(jì)算機(jī)上運(yùn)行的程序,它所能完成的功能往往是最終產(chǎn)品能完成的功能的一個(gè)子集。
快速原型模型的特點(diǎn):快速原型模型不帶反饋環(huán),軟件產(chǎn)品的開(kāi)發(fā)基本上是線性順序進(jìn)行的??焖僭偷谋举|(zhì)是“快速”。應(yīng)該盡可能快地建造出原型系統(tǒng),以加速軟件開(kāi)發(fā)過(guò)程,節(jié)約成本。根據(jù)原型的不同作用,有三類原型模型:探索型原型——用于開(kāi)發(fā)的需求分析階段實(shí)驗(yàn)型原型——主要用于設(shè)計(jì)階段演化型原型——用于及早向用戶提交一個(gè)原型系統(tǒng)快速原型模型的運(yùn)用方式:
拋棄策略——探索型和實(shí)驗(yàn)型采用此策略附加策略——演化型快速原型采用此策略1.4.3增量模型
增量模型把軟件產(chǎn)品作為一系列的增量構(gòu)件來(lái)設(shè)計(jì)、編碼、集成和測(cè)試。每個(gè)構(gòu)件由多個(gè)相互作用的模塊構(gòu)成,并且能夠完成特定的功能。
增量模型項(xiàng)目日歷時(shí)間軟件功能性和特征12345第2次增量發(fā)布增量212345第n次增量發(fā)布增量n12345第1次增量發(fā)布增量1┇5部署(發(fā)布,反饋)4構(gòu)造(編碼,測(cè)試)3建模(分析,設(shè)計(jì))2計(jì)劃1交流增量模型的優(yōu)點(diǎn):人員分配靈活,剛開(kāi)始不用投入大量人力資源。當(dāng)配備的人員不能在設(shè)定的期限內(nèi)完成產(chǎn)品時(shí),它提供了一種先推出核心產(chǎn)品的途徑。逐步增加產(chǎn)品功能可以使用戶有較充裕的時(shí)間學(xué)習(xí)和適應(yīng)新產(chǎn)品。增量模型的難點(diǎn):軟件體系結(jié)構(gòu)必須是開(kāi)放的。模型本身是自相矛盾的。整體——獨(dú)立構(gòu)件。不同的構(gòu)件并行地構(gòu)建有可能加快工程進(jìn)度,但是冒無(wú)法集成到一起的風(fēng)險(xiǎn)。增量模型適用于:適用于需求經(jīng)常改變的軟件開(kāi)發(fā)過(guò)程。如果在項(xiàng)目既定的商業(yè)要求期限之前不可能找到足夠的開(kāi)發(fā)人員,在這種情況下,增量模型顯得特別有用。1.4.4螺旋模型
螺旋模型的基本思想:使用原型及其他方法來(lái)盡量降低風(fēng)險(xiǎn)。把它看作在每個(gè)階段之前都增加了風(fēng)險(xiǎn)分析過(guò)程的快速原型模型。
簡(jiǎn)化的螺旋模型完整的螺旋模型螺旋模型的優(yōu)點(diǎn):主要優(yōu)勢(shì)在于它是風(fēng)險(xiǎn)驅(qū)動(dòng)的。對(duì)可選方案和約束條件的強(qiáng)調(diào)有利于已有軟件的重用,也有助于把軟件質(zhì)量作為軟件開(kāi)發(fā)的一個(gè)重要目標(biāo);減少了過(guò)多測(cè)試或測(cè)試不足所帶來(lái)的風(fēng)險(xiǎn);維護(hù)只是模型的另一個(gè)周期,維護(hù)和開(kāi)發(fā)之間沒(méi)有本質(zhì)區(qū)別。螺旋模型的缺點(diǎn):采用螺旋模型需要具有相當(dāng)豐富的風(fēng)險(xiǎn)評(píng)估經(jīng)驗(yàn)和專門(mén)知識(shí),在風(fēng)險(xiǎn)較大的項(xiàng)目開(kāi)發(fā)中,如果未能夠及時(shí)標(biāo)識(shí)風(fēng)險(xiǎn),勢(shì)必造成重大損失。過(guò)多的迭代次數(shù)會(huì)增加開(kāi)發(fā)成本,延遲提交時(shí)間。螺旋模型適用于:特別適用于龐大、復(fù)雜并具有高風(fēng)險(xiǎn)的系統(tǒng)。適用于內(nèi)部開(kāi)發(fā)的大規(guī)模軟件項(xiàng)目。1.4.5噴泉模型
噴泉模型:是典型的面向?qū)ο笊芷谀P汀?/p>
“噴泉”這個(gè)詞體現(xiàn)了面向?qū)ο筌浖_(kāi)發(fā)過(guò)程迭代和無(wú)縫的特性。為避免使用噴泉模型開(kāi)發(fā)軟件時(shí)開(kāi)發(fā)過(guò)程過(guò)分無(wú)序,應(yīng)該把一個(gè)線性過(guò)程(例如,快速原型模型或圖中的中心垂線)作為總目標(biāo)。
噴泉模型的優(yōu)點(diǎn):該模型的各個(gè)階段沒(méi)有明顯的界限,開(kāi)發(fā)人員可以同步進(jìn)行開(kāi)發(fā)。多次反復(fù)地增加或明確目標(biāo)系統(tǒng),而不是本質(zhì)性的改動(dòng),降低錯(cuò)誤的可能性。噴泉模型的缺點(diǎn):由于噴泉模型在各個(gè)開(kāi)發(fā)階段是重疊的,因此在開(kāi)發(fā)過(guò)程中需要大量的開(kāi)發(fā)人員,不利于項(xiàng)目的管理。要求嚴(yán)格管理文檔,使得審核的難度加大,尤其是面對(duì)可能隨時(shí)加入各種信息、需求與資料的情況。噴泉模型適用于:適用于面向?qū)ο蟮能浖_(kāi)發(fā)過(guò)程。第2章可行性研究回答“對(duì)于上一個(gè)階段所確定的問(wèn)題有行得通的解決辦法嗎?”系統(tǒng)分析員需要進(jìn)行一次大大壓縮和簡(jiǎn)化了的系統(tǒng)分析和設(shè)計(jì)過(guò)程。研究問(wèn)題的范圍,探索這個(gè)問(wèn)題是否值得去解,是否有可行的解決辦法。
2.1可行性研究的任務(wù)可行性研究的目的:不是解決問(wèn)題,而是確定問(wèn)題是否值得去解決。可行性研究的實(shí)質(zhì):進(jìn)行一次大大壓縮簡(jiǎn)化了的系統(tǒng)分析和設(shè)計(jì)的過(guò)程,也就是在較高層次上以較抽象的方式進(jìn)行的系統(tǒng)分析和設(shè)計(jì)的過(guò)程。
可行性研究的內(nèi)容:首先進(jìn)一步分析和澄清問(wèn)題定義,導(dǎo)出系統(tǒng)的邏輯模型;然后從系統(tǒng)邏輯模型出發(fā),探索若干種可供選擇的主要解法(即系統(tǒng)實(shí)現(xiàn)方案);對(duì)每種解法都研究它的可行性,至少應(yīng)該從三方面研究每種解法的可行性
。主要方面:技術(shù)可行性,使用現(xiàn)有的技術(shù)能實(shí)現(xiàn)這個(gè)系統(tǒng)嗎?經(jīng)濟(jì)可行性,這個(gè)系統(tǒng)的經(jīng)濟(jì)效益能超過(guò)它的開(kāi)發(fā)成本嗎?操作可行性,系統(tǒng)的操作方式在這個(gè)用戶組織內(nèi)行得通嗎?其他方面:運(yùn)行可行性,系統(tǒng)的運(yùn)行方式是否可行?法律可行性,系統(tǒng)是否侵犯他人、集體或國(guó)家的利益,是否違反法律?2.4數(shù)據(jù)流圖數(shù)據(jù)流圖(DFD):是一種圖形化技術(shù),它描繪信息流和數(shù)據(jù)從輸入移動(dòng)到輸出的過(guò)程中所經(jīng)受的變換。在數(shù)據(jù)流圖中沒(méi)有任何具體的物理部件,它只是描繪數(shù)據(jù)在軟件中流動(dòng)和被處理的邏輯過(guò)程。2.4.1符號(hào)基本符號(hào):數(shù)據(jù)源點(diǎn)/終點(diǎn):通常是人或部門(mén),可重復(fù)表示;處理:一個(gè)處理框可以代表一系列程序、單個(gè)程序或程序的一個(gè)模塊;數(shù)據(jù)存儲(chǔ):可以表示一個(gè)文件、文件的一部分、數(shù)據(jù)庫(kù)的元素或記錄的一部分等,數(shù)據(jù)存儲(chǔ)是處于lm靜止?fàn)顟B(tài)的數(shù)據(jù);數(shù)據(jù)流:描繪所有可能的數(shù)據(jù)流向,而不應(yīng)該描繪出現(xiàn)某個(gè)數(shù)據(jù)流的條件,數(shù)據(jù)流是處于運(yùn)動(dòng)中的數(shù)據(jù)。2.5數(shù)據(jù)字典數(shù)據(jù)字典:是關(guān)于數(shù)據(jù)的信息的集合,也就是對(duì)數(shù)據(jù)流圖中包含的所有元素的定義的集合。數(shù)據(jù)流圖和數(shù)據(jù)字典共同構(gòu)成系統(tǒng)的邏輯模型。2.5.1數(shù)據(jù)字典的內(nèi)容數(shù)據(jù)字典的組成:數(shù)據(jù)流數(shù)據(jù)流分量(即數(shù)據(jù)元素)數(shù)據(jù)存儲(chǔ)處理(用其它工具描述更方便,如IPO圖)在數(shù)據(jù)字典中記錄數(shù)據(jù)元素的下列信息:一般信息定義使用特點(diǎn)控制信息分組信息
2.5.3數(shù)據(jù)字典的用途數(shù)據(jù)字典最重要的用途是作為分析階段的工具;數(shù)據(jù)字典中包含的每個(gè)數(shù)據(jù)元素的控制信息是很有價(jià)值的。很容易估計(jì)改變一個(gè)數(shù)據(jù)將產(chǎn)生的影響;數(shù)據(jù)字典是開(kāi)發(fā)數(shù)據(jù)庫(kù)的第一步,而且是很有價(jià)值的一步。2.5.4數(shù)據(jù)字典的實(shí)現(xiàn)計(jì)算機(jī)實(shí)現(xiàn):目前,數(shù)據(jù)字典幾乎總是作為CASE(計(jì)算機(jī)輔助軟件工程)“結(jié)構(gòu)化分析與設(shè)計(jì)工具”的一部分實(shí)現(xiàn)的。在開(kāi)發(fā)大型軟件系統(tǒng)的過(guò)程中,數(shù)據(jù)字典的規(guī)模和復(fù)雜程度迅速增加,人工維護(hù)數(shù)據(jù)字典幾乎是不可能的。人工實(shí)現(xiàn):采用卡片形式書(shū)寫(xiě)數(shù)據(jù)字典,每張卡片上保存描述一個(gè)數(shù)據(jù)的信息。每張卡片上主要應(yīng)該包含下述這樣一些信息:名字、別名、描述、定義、位置。
3.1需求分析的任務(wù)
3.2與用戶溝通獲取需求的方法
3.3分析建模與規(guī)格說(shuō)明
3.4實(shí)體-聯(lián)系圖
3.5數(shù)據(jù)規(guī)范化
3.6狀態(tài)轉(zhuǎn)換圖
3.7其他圖形工具
3.8驗(yàn)證軟件需求第3章需求分析分析模型的結(jié)構(gòu)需求分析過(guò)程應(yīng)該建立3種模型,分別是:數(shù)據(jù)模型功能模型行為模型
數(shù)據(jù)字典:是分析模型的核心,它描述軟件使用或產(chǎn)生的所有數(shù)據(jù)對(duì)象。實(shí)體-聯(lián)系圖:描繪數(shù)據(jù)對(duì)象及數(shù)據(jù)對(duì)象之間的關(guān)系,是用于建立數(shù)據(jù)模型的圖形。數(shù)據(jù)流圖:描繪當(dāng)數(shù)據(jù)在軟件系統(tǒng)中移動(dòng)時(shí)被變換的邏輯過(guò)程,指明系統(tǒng)具有的變換數(shù)據(jù)的功能,因此,數(shù)據(jù)流圖是建立功能模型的基礎(chǔ)。狀態(tài)轉(zhuǎn)換圖(簡(jiǎn)稱為狀態(tài)圖):指明了作為外部事件結(jié)果的系統(tǒng)行為。為此,狀態(tài)轉(zhuǎn)換圖描繪了系統(tǒng)的各種行為模式(稱為“狀態(tài)”)和在不同狀態(tài)間轉(zhuǎn)換的方式。狀態(tài)轉(zhuǎn)換圖是行為建模的基礎(chǔ)。3.4實(shí)體-聯(lián)系圖概念性數(shù)據(jù)模型是一種面向問(wèn)題的數(shù)據(jù)模型,是按照用戶的觀點(diǎn)對(duì)數(shù)據(jù)建立的模型。它描述了從用戶角度看到的數(shù)據(jù),它反映了用戶的現(xiàn)實(shí)環(huán)境,且與在軟件系統(tǒng)中的實(shí)現(xiàn)方法無(wú)關(guān)。數(shù)據(jù)模型中包含3種相互關(guān)聯(lián)的信息:數(shù)據(jù)對(duì)象數(shù)據(jù)對(duì)象的屬性數(shù)據(jù)對(duì)象彼此間相互連接的關(guān)系
3.4.1數(shù)據(jù)對(duì)象
數(shù)據(jù)對(duì)象:是對(duì)軟件必須理解的復(fù)合信息的抽象。復(fù)合信息是指具有一系列不同性質(zhì)或?qū)傩缘氖挛铮瑑H有單個(gè)值的事物不是數(shù)據(jù)對(duì)象。數(shù)據(jù)對(duì)象可以是外部實(shí)體、事物、行為、事件、角色、單位、地點(diǎn)或結(jié)構(gòu)等。數(shù)據(jù)對(duì)象彼此間是有關(guān)聯(lián)的。3.4.2屬性屬性:定義了數(shù)據(jù)對(duì)象的性質(zhì)。必須把一個(gè)或多個(gè)屬性定義為“標(biāo)識(shí)符”。根據(jù)對(duì)問(wèn)題的理解來(lái)確定特定數(shù)據(jù)對(duì)象的合適的屬性。
3.4.3聯(lián)系聯(lián)系:數(shù)據(jù)對(duì)象彼此之間相互連接的方式稱為聯(lián)系,也稱為關(guān)系。聯(lián)系可分為以下3種類型:一對(duì)一聯(lián)系(1∶1)一對(duì)多聯(lián)系(1∶N)多對(duì)多聯(lián)系(M∶N)聯(lián)系也可能有屬性。3.4.4實(shí)體-聯(lián)系圖的符號(hào)ER圖中包含:實(shí)體(即數(shù)據(jù)對(duì)象),用矩形框表示;關(guān)系,用連接相關(guān)實(shí)體的菱形框表示;屬性,用橢圓形或圓角矩形表示,并用直線把實(shí)體(或關(guān)系)與其屬性連接起來(lái)。例1:某校教學(xué)管理系統(tǒng)的ER圖ER圖的優(yōu)點(diǎn):比較接近人的習(xí)慣思維方式;用簡(jiǎn)單的圖形符號(hào)表達(dá)系統(tǒng)分析員對(duì)問(wèn)題域的理解,用戶也容易理解,可以作為用戶與分析員之間有效的交流工具。數(shù)據(jù)建模工具:以自動(dòng)化的方式創(chuàng)建ER圖、數(shù)據(jù)字典及相關(guān)模型。AllFusionERWin輔助設(shè)計(jì)數(shù)據(jù)庫(kù)、數(shù)據(jù)對(duì)象、結(jié)構(gòu)、關(guān)鍵元素ER/Studio支持實(shí)體-關(guān)系建模OracleDesigner建模、應(yīng)用系統(tǒng)和數(shù)據(jù)庫(kù)設(shè)計(jì)MetaScope圖形化顯示數(shù)據(jù)ModelSphereVisibleAnalyst模型可視化分析例2:習(xí)題3.3,銀行儲(chǔ)蓄系統(tǒng)的ER圖銀行計(jì)算機(jī)儲(chǔ)蓄系統(tǒng)的工作過(guò)程大致如下:儲(chǔ)戶填寫(xiě)的存款單或取款單由業(yè)務(wù)員鍵入系統(tǒng),如果是存款則系統(tǒng)記錄存款人姓名、住址(或電話號(hào)碼)、身份證號(hào)碼、存款類型、存款日期、到期日期、利率及密碼(可選)等信息,并印出存單給儲(chǔ)戶;如果是取款而且存款時(shí)留有密碼,則系統(tǒng)首先核對(duì)儲(chǔ)戶密碼,若密碼正確或存款時(shí)未留密碼,則系統(tǒng)計(jì)算利息并印出利息清單給儲(chǔ)戶。銀行儲(chǔ)蓄系統(tǒng)的ER圖ER圖練習(xí)題:請(qǐng)為某倉(cāng)庫(kù)的管理設(shè)計(jì)一個(gè)ER模型。該倉(cāng)庫(kù)主要管理零件(包括零件編號(hào)、名稱、顏色、重量)的定購(gòu)和供應(yīng)等事項(xiàng)。倉(cāng)庫(kù)向工程項(xiàng)目(包括項(xiàng)目編號(hào)、項(xiàng)目名稱、開(kāi)工日期)供應(yīng)零件,并且根據(jù)需要向供應(yīng)商(包括供應(yīng)商編號(hào)、名稱、地址)定購(gòu)零件。倉(cāng)庫(kù)管理系統(tǒng)的ER圖4.1概述4.2有窮狀態(tài)機(jī)4.3Petri網(wǎng)4.4Z語(yǔ)言第4章形式化說(shuō)明技術(shù)軟件工程使用方法的分類:非形式化,用自然語(yǔ)言描述需求規(guī)格說(shuō)明;半形式化,用數(shù)據(jù)流圖或?qū)嶓w-聯(lián)系圖建立模型;形式化,是描述系統(tǒng)性質(zhì)的基于數(shù)學(xué)的技術(shù),也就是說(shuō),如果一種方法有堅(jiān)實(shí)的數(shù)學(xué)基礎(chǔ),那么它就是形式化的。
4.1概述
4.1.1非形式化方法的缺點(diǎn)矛盾,指一組相互沖突的陳述。二義性,指讀者可以用不同方式理解的陳述。含糊性,幾乎不可避免地會(huì)出現(xiàn)含糊性。不完整性,不完整性可能是在系統(tǒng)規(guī)格說(shuō)明中最常遇到的問(wèn)題之一。抽象層次混亂,指在非常抽象的陳述中混進(jìn)了一些關(guān)于細(xì)節(jié)的低層次陳述。
4.1.2形式化方法的優(yōu)點(diǎn)數(shù)學(xué)能夠簡(jiǎn)潔準(zhǔn)確地描述物理現(xiàn)象、對(duì)象或動(dòng)作的結(jié)果,因此是理想的建模工具。特別適合于表示狀態(tài),也就是表示“做什么”。可以在不同的軟件工程活動(dòng)之間平滑地過(guò)渡。不僅功能規(guī)格說(shuō)明,而且系統(tǒng)設(shè)計(jì)也可以用數(shù)學(xué)表達(dá),當(dāng)然,程序代碼也是一種數(shù)學(xué)符號(hào)。它提供了高層確認(rèn)的手段??梢允褂脭?shù)學(xué)方法證明,設(shè)計(jì)符合規(guī)格說(shuō)明,程序代碼正確地實(shí)現(xiàn)了設(shè)計(jì)結(jié)果。第5章總體設(shè)計(jì)5.1設(shè)計(jì)過(guò)程5.2設(shè)計(jì)原理5.3啟發(fā)規(guī)則5.4描繪軟件結(jié)構(gòu)的圖形工具5.5面向數(shù)據(jù)流的設(shè)計(jì)方法設(shè)計(jì)階段:從工程管理的角度,可以將軟件設(shè)計(jì)分為總體設(shè)計(jì)階段和詳細(xì)設(shè)計(jì)階段。從技術(shù)的角度,傳統(tǒng)的結(jié)構(gòu)化方法將軟件設(shè)計(jì)劃分為體系結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)和過(guò)程設(shè)計(jì)4部分。面向?qū)ο蠓椒▌t將軟件設(shè)計(jì)劃分為體系結(jié)構(gòu)設(shè)計(jì)、類設(shè)計(jì)/數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)和構(gòu)件級(jí)設(shè)計(jì)4部分。模塊獨(dú)立程度的兩個(gè)定性標(biāo)準(zhǔn)度量:耦合衡量不同模塊彼此間互相依賴(連接)的緊密程度。耦合要低,即每個(gè)模塊和其他模塊之間的關(guān)系要簡(jiǎn)單;內(nèi)聚衡量一個(gè)模塊內(nèi)部各個(gè)元素彼此結(jié)合的緊密程度。內(nèi)聚要高,每個(gè)模塊完成一個(gè)相對(duì)獨(dú)立的特定子功能。1.耦合耦合:是對(duì)一個(gè)軟件結(jié)構(gòu)內(nèi)不同模塊之間互連程度的度量。要求:在軟件設(shè)計(jì)中應(yīng)該追求盡可能松散耦合的系統(tǒng)??梢匝芯俊y(cè)試或維護(hù)任何一個(gè)模塊,而不需要對(duì)系統(tǒng)的其他模塊有很多了解;模塊間聯(lián)系簡(jiǎn)單,發(fā)生在一處的錯(cuò)誤傳播到整個(gè)系統(tǒng)的可能性就很??;模塊間的耦合程度強(qiáng)烈影響系統(tǒng)的可理解性、可測(cè)試性、可靠性和可維護(hù)性。耦合程度的度量:(1)非直接耦合/完全獨(dú)立(nodirectcoupling)如果兩個(gè)模塊中的每一個(gè)都能獨(dú)立地工作而不需要另一個(gè)模塊的存在,那么它們完全獨(dú)立。在一個(gè)軟件系統(tǒng)中不可能所有模塊之間都沒(méi)有任何連接。(2)數(shù)據(jù)耦合(datacoupling)如果兩個(gè)模塊彼此間通過(guò)參數(shù)交換信息,而且交換的信息僅僅是數(shù)據(jù),那么這種耦合稱為數(shù)據(jù)耦合。評(píng)價(jià):系統(tǒng)中至少必須存在這種耦合。一般說(shuō)來(lái),一個(gè)系統(tǒng)內(nèi)可以只包含數(shù)據(jù)耦合。數(shù)據(jù)耦合是理想的目標(biāo)。維護(hù)更容易,對(duì)一個(gè)模塊的修改不會(huì)是另一個(gè)模塊產(chǎn)生退化錯(cuò)誤。(3)控制耦合(controlcoupling)如果兩個(gè)模塊彼此間傳遞的信息中有控制信息,這種耦合稱為控制耦合。評(píng)價(jià):控制耦合往往是多余的,把模塊適當(dāng)分解之后通常可以用數(shù)據(jù)耦合代替它。被調(diào)用的模塊需知道調(diào)用模塊的內(nèi)部結(jié)構(gòu)和邏輯,降低了重用的可能性。(4)特征耦合(stampcoupling)當(dāng)把整個(gè)數(shù)據(jù)結(jié)構(gòu)作為參數(shù)傳遞而被調(diào)用的模塊只需要使用其中一部分?jǐn)?shù)據(jù)元素時(shí),就出現(xiàn)了特征耦合。評(píng)價(jià):被調(diào)用的模塊可使用的數(shù)據(jù)多于它確實(shí)需要的數(shù)據(jù),這將導(dǎo)致對(duì)數(shù)據(jù)的訪問(wèn)失去控制,從而給計(jì)算機(jī)犯罪提供了機(jī)會(huì)。無(wú)論何時(shí)把指針作為參數(shù)進(jìn)行傳遞,都應(yīng)該仔細(xì)檢查該耦合。(5)公共環(huán)境耦合(commoncoupling)當(dāng)兩個(gè)或多個(gè)模塊通過(guò)一個(gè)公共數(shù)據(jù)環(huán)境相互作用時(shí),它們之間的耦合稱為公共環(huán)境耦合。公共環(huán)境可以是全程變量、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)、任何存儲(chǔ)介質(zhì)上的文件、物理設(shè)備等等。公共環(huán)境耦合的類型:
一個(gè)模塊往公共環(huán)境送數(shù)據(jù),另一個(gè)模塊從公共環(huán)境取數(shù)據(jù)。數(shù)據(jù)耦合的一種形式,是比較松散的耦合。兩個(gè)模塊都既往公共環(huán)境送數(shù)據(jù)又從里面取數(shù)據(jù),這種耦合比較緊密,介于數(shù)據(jù)耦合和控制耦合之間。評(píng)價(jià):與結(jié)構(gòu)化編程矛盾,生成的代碼完全不可讀。如果在一個(gè)模塊中對(duì)一個(gè)全局變量的聲明進(jìn)行修改,必須修改能夠訪問(wèn)該全局變量的每一個(gè)模塊。公共環(huán)境耦合的模塊難于重用,必須提供一個(gè)全局變量的清單。即使模塊本身不改變,它和產(chǎn)品中其他模塊之間公共環(huán)境耦合的實(shí)例數(shù)也會(huì)變化非常大。潛在危險(xiǎn)很大。模塊暴露出必需要更多的數(shù)據(jù),難以控制數(shù)據(jù)存取,而且會(huì)導(dǎo)致計(jì)算機(jī)犯罪。有些情況下公共環(huán)境耦合更好。(6)內(nèi)容耦合(contentcoupling)最高程度的耦合是內(nèi)容耦合。如果出現(xiàn)下列情況之一,兩個(gè)模塊間就發(fā)生了內(nèi)容耦合:一個(gè)模塊訪問(wèn)另一個(gè)模塊的內(nèi)部數(shù)據(jù);一個(gè)模塊不通過(guò)正常入口轉(zhuǎn)到另一個(gè)模塊的內(nèi)部;兩個(gè)模塊有一部分程序代碼重疊;一個(gè)模塊有多個(gè)入口。耦合是影響軟件復(fù)雜程度的一個(gè)重要因素。應(yīng)該采取下述設(shè)計(jì)原則:
盡量使用數(shù)據(jù)耦合,
少用控制耦合和特征耦合,
限制公共環(huán)境耦合的范圍,
完全不用內(nèi)容耦合。2.內(nèi)聚內(nèi)聚:標(biāo)志一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密程度,它是信息隱藏和局部化概念的自然擴(kuò)展。簡(jiǎn)單地說(shuō),理想內(nèi)聚的模塊只做一件事情。要求:設(shè)計(jì)時(shí)應(yīng)該力求做到高內(nèi)聚,通常中等程度的內(nèi)聚也是可以采用的,而且效果和高內(nèi)聚相差不多;但是,低內(nèi)聚不要使用。內(nèi)聚和耦合是密切相關(guān)的,模塊內(nèi)的高內(nèi)聚往往意味著模塊間的松耦合。實(shí)踐表明內(nèi)聚更重要,應(yīng)該把更多注意力集中到提高模塊的內(nèi)聚程度上。內(nèi)聚程度的度量:(1)偶然內(nèi)聚(coincidentalcohesion)如果一個(gè)模塊完成一組任務(wù),這些任務(wù)彼此間即使有關(guān)系,關(guān)系也是很松散的,就叫做偶然內(nèi)聚。MA=B+CGETCHERIFR=5THENS=1評(píng)價(jià):模塊內(nèi)各元素之間沒(méi)有實(shí)質(zhì)性聯(lián)系,很可能在一種應(yīng)用場(chǎng)合需要修改這個(gè)模塊,在另一種應(yīng)用場(chǎng)合又不允許這種修改,從而陷入困境;可理解性差,可維護(hù)性產(chǎn)生退化;模塊是不可重用的。解決方案:將模塊分成更小的模塊,每個(gè)小模塊執(zhí)行一個(gè)操作。(2)邏輯內(nèi)聚(logicalcohesion)如果一個(gè)模塊完成的任務(wù)在邏輯上屬于相同或相似的一類,則稱為邏輯內(nèi)聚。評(píng)價(jià):接口難以理解,造成整體上不易理解;完成多個(gè)操作的代碼互相糾纏在一起,即使局部功能的修改有時(shí)也會(huì)影響全局,導(dǎo)致嚴(yán)重的維護(hù)問(wèn)題;難以重用。解決方案:模塊分解。(3)時(shí)間內(nèi)聚(temporalcohesion)如果一個(gè)模塊包含的任務(wù)必須在同一段時(shí)間內(nèi)執(zhí)行,就叫時(shí)間內(nèi)聚。執(zhí)行初始化打開(kāi)舊主文件、新主文件、事務(wù)文件和打印文件;初始化銷售地區(qū)表;讀第一條事務(wù)記錄和第一條舊主文件記錄;評(píng)價(jià):時(shí)間關(guān)系在一定程度上反映了程序某些實(shí)質(zhì),所以時(shí)間內(nèi)聚比邏輯內(nèi)聚好一些。模塊內(nèi)操作之間的關(guān)系很弱,與其他模塊的操作卻有很強(qiáng)的關(guān)聯(lián)。時(shí)間內(nèi)聚的模塊不太可能重用。(4)過(guò)程內(nèi)聚(proceduralcohesion)如果一個(gè)模塊內(nèi)的處理元素是相關(guān)的,而且必須以特定次序執(zhí)行,則稱為過(guò)程內(nèi)聚。使用程序流程圖作為工具設(shè)計(jì)軟件時(shí),常常通過(guò)研究流程圖確定模塊的劃分,這樣得到的往往是過(guò)程內(nèi)聚的模塊。評(píng)價(jià):比時(shí)間內(nèi)聚好,至少操作之間是過(guò)程關(guān)聯(lián)的。仍是弱連接,不太可能重用模塊。解決方案:分割為單獨(dú)的模塊,每個(gè)模塊執(zhí)行一個(gè)操作。(5)通信內(nèi)聚(communicationalcohesion)如果模塊中所有元素都使用同一個(gè)輸入數(shù)據(jù)和(或)產(chǎn)生同一個(gè)輸出數(shù)據(jù),則稱為通信內(nèi)聚。即在同一個(gè)數(shù)據(jù)結(jié)構(gòu)上操作。評(píng)價(jià):模塊中各操作緊密相連,比過(guò)程內(nèi)聚更好。不能重用。解決方案:分成多個(gè)模塊,每個(gè)模塊執(zhí)行一個(gè)操作。(6)順序內(nèi)聚(sequentialcohesion)如果一個(gè)模塊內(nèi)的處理元素和同一個(gè)功能密切相關(guān),而且這些處理必須順序執(zhí)行,則稱為順序內(nèi)聚。評(píng)價(jià):根據(jù)數(shù)據(jù)流圖劃分模塊時(shí),通常得到順序內(nèi)聚的模塊,這種模塊彼此間的連接往往比較簡(jiǎn)單。(7)功能內(nèi)聚(functionalcohesion)如果模塊內(nèi)所有處理元素屬于一個(gè)整體,完成一個(gè)單一的功能,則稱為功能內(nèi)聚。功能內(nèi)聚是最高程度的內(nèi)聚。評(píng)價(jià):模塊可重用,應(yīng)盡可能重用;可隔離錯(cuò)誤,維護(hù)更容易;擴(kuò)充產(chǎn)品功能時(shí)更容易。七種內(nèi)聚的優(yōu)劣評(píng)分結(jié)果:高內(nèi)聚:功能內(nèi)聚10分順序內(nèi)聚 9分 中內(nèi)聚:通信內(nèi)聚 7分 過(guò)程內(nèi)聚 5分低內(nèi)聚:時(shí)間內(nèi)聚 3分邏輯內(nèi)聚 1分偶然內(nèi)聚 0分設(shè)計(jì)時(shí)力爭(zhēng)做到高內(nèi)聚,并且能夠辨認(rèn)出低內(nèi)聚的模塊。第6章詳細(xì)設(shè)計(jì)6.1結(jié)構(gòu)程序設(shè)計(jì)6.2人機(jī)界面設(shè)計(jì)6.3過(guò)程設(shè)計(jì)的工具6.4面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法6.5程序復(fù)雜程度的定量度量6.6小結(jié)6.1結(jié)構(gòu)程序設(shè)計(jì)定義:如果一個(gè)程序的代碼塊僅僅通過(guò)順序、選擇和循環(huán)這3種基本控制結(jié)構(gòu)進(jìn)行連接,并且每個(gè)代碼塊只有一個(gè)入口和一個(gè)出口,則稱這個(gè)程序是結(jié)構(gòu)化的。70年代初N.Wirth在Pascal語(yǔ)言中設(shè)置支持“順序結(jié)構(gòu)”、“IF-THEN-ELSE選擇結(jié)構(gòu)”、“DO-WHILE重復(fù)結(jié)構(gòu)”或“DO-UNTIL重復(fù)結(jié)構(gòu)”三種基本控制結(jié)構(gòu)語(yǔ)句。6.13種基本的控制結(jié)構(gòu)6.3過(guò)程設(shè)計(jì)的工具1.圖形工具:利用圖形工具可以把過(guò)程的細(xì)節(jié)用圖形描述出來(lái)。如程序流程圖,N-S圖,PAD。2.表格工具:用一張表來(lái)描述過(guò)程的細(xì)節(jié),在這張表中列出了各種可能的操作和相應(yīng)的條件。如判定表,判定樹(shù)。3.語(yǔ)言工具:用某種高級(jí)語(yǔ)言(叫做偽碼)來(lái)描述過(guò)程的細(xì)節(jié)。如PDL。
缺點(diǎn):本質(zhì)上不具備逐步求精的特點(diǎn),使程序員過(guò)早地考慮程序的控制流程,而不去考慮程序的全局結(jié)構(gòu);轉(zhuǎn)移控制太方便;不易表示數(shù)據(jù)結(jié)構(gòu)。
趨勢(shì):使用越來(lái)越少。
ISO認(rèn)可的規(guī)定符號(hào):優(yōu)點(diǎn):直觀、容易掌握,且歷史“久”,使用廣泛。6.3.1程序流程圖(程序框圖)圖6.3程序流程圖中使用的符號(hào)。(1)順序型AB3種基本控制結(jié)構(gòu)(2)選擇型PBAFT(2)多情況選擇型(case)TA1FP=1TA2FP=2…TAnFP=n(3)先判定型循環(huán)
(do-while)TPSF后判定型循環(huán)
(do-until)FSTP例1、某模塊有兩個(gè)輸入a和b,一個(gè)輸出c,當(dāng)滿足條件(a>0)and(b<2)時(shí),c=a+b,否則c=a-b。畫(huà)出該模塊的程序流程圖。ab(a>0)and(b<2)c=a-bc=a+bFTc6.3.2盒圖(N-S圖)
Nassi和Shneiderman
1973年提出,是一種符合結(jié)構(gòu)化程序設(shè)計(jì)原則的圖形描述工具,用方框圖代替?zhèn)鹘y(tǒng)的流程圖。圖6.4盒圖的基本符號(hào)
3種基本控制結(jié)構(gòu):
(1)順序型ABCABF
PTthen–部分else–部分(2)選擇型(If–then–else)
(2)多分支選擇型(CASE型)A1=1A2An........P=2=n(3)WHILE重復(fù)型UNTIL重復(fù)型
S(循環(huán)體)DO-WHILEPS(循環(huán)體)DO-UNTILP(先測(cè)試循環(huán))(后測(cè)試循環(huán))循環(huán)條件移出標(biāo)記ACBFX6TA:D(調(diào)用結(jié)構(gòu))x4TFDo-Untilx5ighfkx1TFbDo-Untilx6ajx21cDo-Whilex323dek:例:圖4.43盒圖(N-S圖)的特點(diǎn):(1)功能域(即,一個(gè)特定控制結(jié)構(gòu)的作用域)明確,可以從盒圖上一眼就看出來(lái)。(2)不可能任意轉(zhuǎn)移控制。(3)很容易確定局部和全程數(shù)據(jù)的作用域。(4)很容易表現(xiàn)嵌套關(guān)系,也可以表示模塊的層次結(jié)構(gòu)。注、使程序員用結(jié)構(gòu)化的方式思考和解決問(wèn)題。例1、某模塊有兩個(gè)輸入a和b,一個(gè)輸出c,當(dāng)滿足條件(a>0)and(b<2)時(shí),c=a+b,否則c=a-b。畫(huà)出該模塊的N-S圖。c=a+b(a>0)and(b<2)TFbac=a-bc【例2、某模塊有三個(gè)輸入a、b和c,一個(gè)輸出s,當(dāng)a=1時(shí),s=b+2c,當(dāng)a=2時(shí),s=2b-c,當(dāng)a=3時(shí),s=b。畫(huà)出該模塊的N-S圖。】a23s=2b-cs=bcbas=b+2c1s6.3.3PAD圖(問(wèn)題分析圖)1973年由日本日立公司發(fā)明。它用二維樹(shù)形結(jié)構(gòu)的圖來(lái)表示程序的控制流,將這種圖翻譯成程序代碼比較容易。圖6.5PAD圖的基本符號(hào)
3種基本控制結(jié)構(gòu):(1)順序型(2)選擇型
ABCABTFP(2)多分支選擇型(CASE型)
A1A2An...P=1=2=n(3)WHILE重復(fù)型
WHILE
PS(先測(cè)試循環(huán))等價(jià)的PASCAL語(yǔ)言:WHILEPDOSUNTIL重復(fù)型
(后測(cè)試循環(huán))UNTIL
PS等價(jià)的PASCAL語(yǔ)言:REPEATSUNTILPdef格式:def
開(kāi)始
結(jié)束
aj
Untilx5i
Untilx6bx1fx4ghx2de=1=2=3
While
x3c例:開(kāi)始
結(jié)束
aj
Untilx5i
Untilx6bx1kfx4gh例:defkx2de=1=2=3
Whilex3c定義PAD圖的主要優(yōu)點(diǎn):(1)使用表示結(jié)構(gòu)化控制結(jié)構(gòu)的PAD符號(hào)所設(shè)計(jì)出來(lái)的程序必然是結(jié)構(gòu)化程序。(2)PAD圖所描繪的程序結(jié)構(gòu)十分清晰。圖中最左面的豎線是程序的主線,即第一層結(jié)構(gòu)。隨著程序?qū)哟蔚脑黾?,PAD圖逐漸向右延伸,每增加一個(gè)層次,圖形向右擴(kuò)展一條豎線。PAD圖中豎線的總條數(shù)就是程序的層次數(shù)。(3)用PAD圖表現(xiàn)程序邏輯,易讀、易懂、易記。PAD圖是二維樹(shù)形結(jié)構(gòu)的圖形,程序從圖中最左豎線上端的結(jié)點(diǎn)開(kāi)始執(zhí)行,自上而下,從左向右順序執(zhí)行,遍歷所有結(jié)點(diǎn)。(4)容易將PAD圖轉(zhuǎn)換成高級(jí)語(yǔ)言源程序,這種轉(zhuǎn)換可用軟件工具自動(dòng)完成,從而可省去人工編碼的工作,有利于提高軟件可靠性和軟件生產(chǎn)率。(5)即可用于表示程序邏輯,也可用于描繪數(shù)據(jù)結(jié)構(gòu)。(6)PAD圖的符號(hào)支持自頂向下、逐步求精方法的使用。開(kāi)始時(shí)設(shè)計(jì)者可以定義一個(gè)抽象的程序,隨著設(shè)計(jì)工作的深入而使用def符號(hào)逐步增加細(xì)節(jié),直至完成詳細(xì)設(shè)計(jì)。例1、某模塊有兩個(gè)輸入a和b,一個(gè)輸出c,當(dāng)滿足條件(a>0)and(b<2)時(shí),c=a+b,否則c=a-b。畫(huà)出該模塊的PAD。abc=a+bc=a-b(a>0)and(b<2)c【例2、某模塊有三個(gè)輸入a、b和c,一個(gè)輸出s,當(dāng)a=1時(shí),s=b+2c,當(dāng)a=2時(shí),s=2b-c,當(dāng)a=3時(shí),s=b。畫(huà)出該模塊的PAD?!縜bcs=b+2cs=2b-cs=ba=1=3=2s*P141:3畫(huà)出下列偽碼程序的程序流程圖、盒圖和PAD圖。STARTIFPTHENWHILEqDOfENDDOELSEBLOCKgnENDBLOCKENDIFSTOP作業(yè)及解答(第6章)TqfF程序流程圖g
WhileqfpnPAD圖N-S圖6.3.6過(guò)程設(shè)計(jì)語(yǔ)言(PDL)/偽碼
一種用于描述功能模塊的算法設(shè)計(jì)和加工細(xì)節(jié)的語(yǔ)言。結(jié)構(gòu)化語(yǔ)言介于自然語(yǔ)言和形式語(yǔ)言之間的半形式化語(yǔ)言。結(jié)構(gòu)化語(yǔ)言(PDL)結(jié)構(gòu)化語(yǔ)言是一種書(shū)寫(xiě)過(guò)程規(guī)范的方法,它將結(jié)構(gòu)化編程技術(shù)和敘述性英語(yǔ)結(jié)合起來(lái)。結(jié)構(gòu)化語(yǔ)言非常適合用來(lái)描述帶有一系列處理步驟和相對(duì)簡(jiǎn)單的控制邏輯(ifthenelse;whiledo;repeatuntil;caseof等)的過(guò)程。例:PROCEDUREspell_checkISBEGIN
SplitdocumentintosinglewordsLookupwordsindictionaryDisplaywordswhicharenotindictionaryCreateanewdictionaryENDspell_checkExternalstatementsInternalStatements特點(diǎn):①有固定的關(guān)鍵字(一律大寫(xiě))外語(yǔ)法,用于定義控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu);例:上頁(yè)②內(nèi)語(yǔ)法用自然語(yǔ)言描述;③有數(shù)據(jù)說(shuō)明,例如:
TYPEnumberISSTRINGLENGTH(12)TYPEtableISINSTANCEOFsymboltable
抽象類型④模塊定義和調(diào)用的技術(shù),應(yīng)該提供各種接口描述模式定義:
PROCEDURE<子程序名><屬性>
INTERFACE<參數(shù)表>
I\O等
pseudocodelines(偽碼行)
END
調(diào)用:
PERFORM<子程序名>USING<參數(shù)表>PDL優(yōu)點(diǎn):可以作為注釋直接插在源程序中間。(2)可以使用普通的正文編輯程序或文字處理系統(tǒng),很方便地完成PDL的書(shū)寫(xiě)和編輯工作。(3)可以自動(dòng)由PDL生成程序代碼。PDL缺點(diǎn):不如圖形工具形象直觀;描述復(fù)雜的條件組合與動(dòng)作間的對(duì)應(yīng)關(guān)系時(shí),不如判定表清晰簡(jiǎn)單。注、通常以PDL為主,對(duì)存在復(fù)雜判斷問(wèn)題的加工邏輯,可輔之以判定表和判定樹(shù),判定表更嚴(yán)密,判定樹(shù)更易讀。6.5程序復(fù)雜程度的定量度量
軟件復(fù)雜性主要表現(xiàn)在程序的復(fù)雜性。程序的復(fù)雜性主要指模塊內(nèi)程序的復(fù)雜性。它直接關(guān)聯(lián)到軟件開(kāi)發(fā)費(fèi)用的多少、開(kāi)發(fā)周期長(zhǎng)短和軟件內(nèi)部潛伏錯(cuò)誤的多少。同時(shí)它也是軟件可理解性的另一種度量。McCabe方法Halstead方法6.5.1McCabe方法McCabe方法:根據(jù)程序控制流的復(fù)雜程度定量度量程序的復(fù)雜程度。其結(jié)果稱為程序的環(huán)形復(fù)雜度。方法:先畫(huà)出流圖,然后用該圖的環(huán)路數(shù)作為程序復(fù)雜性的度量值。流圖流圖:是“退化了的”程序流程圖,僅僅描繪程序的控制流程,不表現(xiàn)對(duì)數(shù)據(jù)的具體操作以及分支或循環(huán)的具體條件。流圖組成:圓:結(jié)點(diǎn)(一個(gè)圓代表一條或多條語(yǔ)句)。箭頭線:邊。同下圖一樣。圖6.16由PDL翻譯成的流圖*畫(huà)出下列偽碼程序的程序圖,并求出復(fù)雜性度量值V(G)?2.計(jì)算環(huán)形復(fù)雜度的方法(1)環(huán)形復(fù)雜度=流圖中的區(qū)域數(shù)。(2)環(huán)形復(fù)雜度V(G)=E-N+2,其中E是邊數(shù),N是結(jié)點(diǎn)數(shù)。(3)環(huán)形復(fù)雜度V(G)=P+1,其中P是判定結(jié)點(diǎn)數(shù)。圖6.16由PDL翻譯成的流圖R1R2R3R4(2)V(G)=E-N+2
=11-9+2=4(1)封閉區(qū)域個(gè)數(shù)4procedure:sort1:dowhilerecordsremain2:readrecord:
ifrecordfield1=03:thenprocessrecord;storeinbuffer;incremertcounter;4:elseifrecordfield2=05:thenresetcounter;6:elseprocessrecord;storeinfile;7a:endifendif7b:enddo8:end(3)3個(gè)判定,V(G)=3+1=43.環(huán)形復(fù)雜度的用途McCabe研究大量程序后發(fā)現(xiàn),環(huán)形復(fù)雜度高的程序往往是最困難、最容易出問(wèn)題的程序。實(shí)踐表明,模塊規(guī)模以V(G)≤10為宜,V(G)=10是模塊規(guī)模的一個(gè)更科學(xué)更精確的上限。缺點(diǎn):①對(duì)于不同種類的控制流的復(fù)雜度不能區(qū)分。②簡(jiǎn)單IF語(yǔ)句與循環(huán)語(yǔ)句的復(fù)雜性同等看待。③嵌套IF語(yǔ)句與簡(jiǎn)單CASE的復(fù)雜性是一樣的。④模塊間接口當(dāng)成一個(gè)簡(jiǎn)單分支一樣處理。⑤一個(gè)具有1000行的順序程序與一行語(yǔ)句的復(fù)雜性相同。第7章實(shí)現(xiàn)7.1編碼7.2軟件測(cè)試基礎(chǔ)7.3單元測(cè)試7.4集成測(cè)試7.5確認(rèn)測(cè)試7.6白盒測(cè)試技術(shù)7.7黑盒測(cè)試技術(shù)7.8調(diào)試7.9軟件可靠性7.2.3測(cè)試方法黑盒測(cè)試(功能測(cè)試):把程序看作一個(gè)黑盒子;完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過(guò)程;是在程序接口進(jìn)行的測(cè)試。白盒測(cè)試(結(jié)構(gòu)測(cè)試):把程序看成裝在一個(gè)透明的盒子里;測(cè)試者完全知道程序的結(jié)構(gòu)和處理算法;按照程序內(nèi)部的邏輯測(cè)試程序,檢測(cè)程序中的主要執(zhí)行通路是否都能按預(yù)定要求正確工作。黑盒測(cè)試與白盒測(cè)試優(yōu)缺點(diǎn)比較:黑盒測(cè)試白盒測(cè)試優(yōu)點(diǎn)①適用于各階段測(cè)試②從產(chǎn)品功能角度測(cè)試③容易入手生成測(cè)試數(shù)據(jù)①可構(gòu)成測(cè)試數(shù)據(jù)使特定程序部分得到測(cè)試②有一定的充分性度量手段③可獲較多工具支持缺點(diǎn)①某些代碼得不到測(cè)試②如果規(guī)格說(shuō)明有誤,則無(wú)法發(fā)現(xiàn)③不易進(jìn)行充分性測(cè)試①通常不易生成測(cè)試數(shù)據(jù)②無(wú)法對(duì)未實(shí)現(xiàn)規(guī)格說(shuō)明的部分進(jìn)行測(cè)試③工作量大,通常只用于單元測(cè)試,有應(yīng)用局限性質(zhì)一種確認(rèn)技術(shù),回答“我們?cè)跇?gòu)造一個(gè)正確的系統(tǒng)嗎?”一種驗(yàn)證技術(shù),回答“我們?cè)谡_地構(gòu)造一個(gè)系統(tǒng)嗎?”7.2.4測(cè)試步驟1.模塊測(cè)試(單元測(cè)試)保證每個(gè)模塊作為一個(gè)單元能正確運(yùn)行;發(fā)現(xiàn)的往往是編碼和詳細(xì)設(shè)計(jì)的錯(cuò)誤。2.子系統(tǒng)測(cè)試把經(jīng)過(guò)單元測(cè)試的模塊放在一起形成一個(gè)子系統(tǒng)來(lái)測(cè)試;著重測(cè)試模塊的接口。3.系統(tǒng)測(cè)試把經(jīng)過(guò)測(cè)試的子系統(tǒng)裝配成一個(gè)完整的系統(tǒng)來(lái)測(cè)試;發(fā)現(xiàn)的往往是軟件設(shè)計(jì)中的錯(cuò)誤,也可能發(fā)現(xiàn)需求說(shuō)明中的錯(cuò)誤;不論是子系統(tǒng)測(cè)試還是系統(tǒng)測(cè)試,都兼有檢測(cè)和組裝兩重含義,通常稱為集成測(cè)試。4.驗(yàn)收測(cè)試(確認(rèn)測(cè)試)把軟件系統(tǒng)作為單一的實(shí)體進(jìn)行測(cè)試;它是在用戶積極參與下進(jìn)行的,而且可能主要使用實(shí)際數(shù)據(jù)(系統(tǒng)將來(lái)要處理的信息)進(jìn)行測(cè)試;發(fā)現(xiàn)的往往是系統(tǒng)需求說(shuō)明書(shū)中的錯(cuò)誤。5.平行運(yùn)行同時(shí)運(yùn)行新開(kāi)發(fā)出來(lái)的系統(tǒng)和將被它取代的舊系統(tǒng);比較新舊兩個(gè)系統(tǒng)的處理結(jié)果;可以在準(zhǔn)生產(chǎn)環(huán)境中運(yùn)行新系統(tǒng)而又不冒風(fēng)險(xiǎn);用戶能有一段熟悉新系統(tǒng)的時(shí)間;可以驗(yàn)證用戶指南和使用手冊(cè)之類的文檔;能夠以準(zhǔn)生產(chǎn)模式對(duì)新系統(tǒng)進(jìn)行全負(fù)荷測(cè)試,可以用測(cè)試結(jié)果驗(yàn)證性能指標(biāo)。7.3.3計(jì)算機(jī)測(cè)試必須為每個(gè)單元測(cè)試開(kāi)發(fā)驅(qū)動(dòng)程序和(或)存根程序。驅(qū)動(dòng)程序是一個(gè)“主程序”,它接收測(cè)試數(shù)據(jù),傳送給被測(cè)試的模塊,并且印出有關(guān)的結(jié)果。存根程序代替被測(cè)試的模塊所調(diào)用的模塊。它使用被它代替的模塊的接口,可能做最少量的數(shù)據(jù)操作,印出對(duì)入口的檢驗(yàn)或操作結(jié)果,并且把控制歸還給調(diào)用它的模塊。驅(qū)動(dòng)程序和存根程序代表開(kāi)銷,通常并不把它們作為軟件產(chǎn)品的一部分交給用戶。7.4集成測(cè)試集成測(cè)試是測(cè)試和組裝軟件的系統(tǒng)化技術(shù),主要目標(biāo)是發(fā)現(xiàn)與接口有關(guān)的問(wèn)題。由模塊組裝成程序時(shí)有兩種方法:非漸增式測(cè)試方法漸增式測(cè)試方法非漸增式測(cè)試方法:先分別測(cè)試每個(gè)模塊,再把所有模塊按設(shè)計(jì)要求放在一起結(jié)合成所要的程序;非漸增式測(cè)試一下子把所有模塊放在一起,并把龐大的程序作為一個(gè)整體來(lái)測(cè)試,測(cè)試者面對(duì)的情況十分復(fù)雜。在龐大的程序中想要診斷定位一個(gè)錯(cuò)誤是非常困難的,改正錯(cuò)誤更是極端困難,而且一旦改正一個(gè)錯(cuò)誤之后,馬上又會(huì)遇到新的錯(cuò)誤。漸增式測(cè)試方法:把下一個(gè)要測(cè)試的模塊同已經(jīng)測(cè)試好的那些模塊結(jié)合起來(lái)進(jìn)行測(cè)試;測(cè)試完以后再把下一個(gè)應(yīng)該測(cè)試的模塊結(jié)合進(jìn)來(lái)測(cè)試,每次增加一個(gè)模塊;實(shí)際上同時(shí)完成單元測(cè)試和集成測(cè)試;把程序劃分成小段來(lái)構(gòu)造和測(cè)試,在這個(gè)過(guò)程中比較容易定位和改正錯(cuò)誤;漸增方式有兩種集成策略:自頂向下自底向上7.4.1自頂向下集成從主控制模塊開(kāi)始,沿著程序的控制層次向下移動(dòng),逐漸把各個(gè)模塊結(jié)合起來(lái)。在把附屬于主控制模塊的那些模塊組裝到程序結(jié)構(gòu)中去時(shí),或者使用深度優(yōu)先的策略,或者使用寬度優(yōu)先的策略。深度優(yōu)先:先組裝在軟件結(jié)構(gòu)的一條主控制通路上的所有模塊。寬度優(yōu)先:沿軟件結(jié)構(gòu)水平地移動(dòng),把處于同一個(gè)控制層次上的所有模塊組裝起來(lái)。按深度優(yōu)先策略組裝按寬度優(yōu)先策略組裝把模塊結(jié)合進(jìn)軟件結(jié)構(gòu)的過(guò)程由下述4個(gè)步驟完成:第一步,對(duì)主控制模塊進(jìn)行測(cè)試,測(cè)試時(shí)用存根程序代替所有直接附屬于主控制模塊的模塊;第二步,根據(jù)選定的結(jié)合策略(深度優(yōu)先或?qū)挾葍?yōu)先),每次用一個(gè)實(shí)際模塊代換一個(gè)存根程序(新結(jié)合進(jìn)來(lái)的模塊往往又需要新的存根程序);第三步,在結(jié)合進(jìn)一個(gè)模塊的同時(shí)進(jìn)行測(cè)試;第四步,為了保證加入模塊沒(méi)有引進(jìn)新的錯(cuò)誤,可能需要進(jìn)行回歸測(cè)試(即,全部或部分地重復(fù)以前做過(guò)的測(cè)試)。從第二步開(kāi)始不斷地重復(fù)進(jìn)行上述過(guò)程,直到構(gòu)造起完整的軟件結(jié)構(gòu)為止。優(yōu)點(diǎn):能夠在測(cè)試的早期對(duì)主要的控制或關(guān)鍵的抉擇進(jìn)行檢驗(yàn)。如果選擇深度優(yōu)先的結(jié)合方法,可以在早期實(shí)現(xiàn)軟件的一個(gè)完整的功能并且驗(yàn)證這個(gè)功能。缺點(diǎn):存根程序代替了低層次的模塊,在軟件結(jié)構(gòu)中沒(méi)有重要的數(shù)據(jù)自下往上流。用下述步驟可以實(shí)現(xiàn)自底向上的結(jié)合策略:第一步,把低層模塊組合成實(shí)現(xiàn)某個(gè)特定的軟件子功能的族;第二步,寫(xiě)一個(gè)驅(qū)動(dòng)程序(用于測(cè)試的控制程序),協(xié)調(diào)測(cè)試數(shù)據(jù)的輸入和輸出;第三步,對(duì)由模塊組成的子功能族進(jìn)行測(cè)試;第四步,去掉驅(qū)動(dòng)程序,沿軟件結(jié)構(gòu)自下向上移動(dòng),把子功能族組合起來(lái)形成更大的子功能族。上述第二步到第四步實(shí)質(zhì)上構(gòu)成了一個(gè)循環(huán)。7.4.2自底向上集成自底向上結(jié)合自底向上結(jié)合7.4.3不同集成測(cè)試策略的比較不同集成測(cè)試方法的比較:方法優(yōu)點(diǎn)缺點(diǎn)非漸增式?jīng)]有錯(cuò)誤隔離手段主要設(shè)計(jì)錯(cuò)誤發(fā)現(xiàn)遲潛在可重用代碼測(cè)試不充分需要驅(qū)動(dòng)程序和存根程序自頂向下具有錯(cuò)誤隔離手段主要設(shè)計(jì)錯(cuò)誤發(fā)現(xiàn)早不需要驅(qū)動(dòng)程序潛在可重用代碼測(cè)試不充分需要存根程序自底向上具有錯(cuò)誤隔離手段潛在可重用代碼能充分測(cè)試不需要存根程序主要設(shè)計(jì)錯(cuò)誤發(fā)現(xiàn)遲需要驅(qū)動(dòng)程序混合具有錯(cuò)誤隔離手段主要設(shè)計(jì)錯(cuò)誤發(fā)現(xiàn)早潛在可重用代碼能充分測(cè)試混合策略:改進(jìn)的自頂向下測(cè)試方法基本上使用自頂向下的測(cè)試方法,但是在早期使用自底向上的方法測(cè)試軟件中的少數(shù)關(guān)鍵模塊。能在測(cè)試的早期發(fā)現(xiàn)關(guān)鍵模塊中的錯(cuò)誤;測(cè)試關(guān)鍵模塊時(shí)需要驅(qū)動(dòng)程序?;旌戏▽?duì)軟件結(jié)構(gòu)中較上層使用的自頂向下方法與對(duì)軟件結(jié)構(gòu)中較下層使用的自底向上方法相結(jié)合。兼有兩種方法的優(yōu)缺點(diǎn),當(dāng)被測(cè)試的軟件中關(guān)鍵模塊比較多時(shí),這種混合法可能是最好的折衷方法。7.6白盒測(cè)試技術(shù)所謂測(cè)試方案包括具體的測(cè)試目的(例如,預(yù)定要測(cè)試的具體功能),應(yīng)該輸入的測(cè)試數(shù)據(jù)和預(yù)期的結(jié)果。通常又把測(cè)試數(shù)據(jù)和預(yù)期的輸出結(jié)果稱為測(cè)試用例。7.6.1邏輯覆蓋有選擇地執(zhí)行程序中某些最有代表性的通路是對(duì)窮盡測(cè)試的惟一可行的替代辦法。從覆蓋源程序語(yǔ)句的詳盡程度分析,大致有以下一些不同的覆蓋標(biāo)準(zhǔn):語(yǔ)句覆蓋判定覆蓋條件覆蓋判定/條件覆蓋條件組合覆蓋1.語(yǔ)句覆蓋含義:選擇足夠多的測(cè)試數(shù)據(jù),使被測(cè)程序中每個(gè)語(yǔ)句至少執(zhí)行一次。分析:執(zhí)行路徑sacbed測(cè)試用例:A=2,B=0,X=4
覆蓋sacbed語(yǔ)句覆蓋特點(diǎn):語(yǔ)句覆蓋對(duì)程序的邏輯覆蓋很少。語(yǔ)句覆蓋只關(guān)心判定表達(dá)式的值,而沒(méi)有分別測(cè)試判定表達(dá)式中每個(gè)條件取不同值時(shí)的情況。語(yǔ)句覆蓋是很弱的邏輯覆蓋標(biāo)準(zhǔn)。
2.判定覆蓋(分支覆蓋)含義:不僅每個(gè)語(yǔ)句必須至少執(zhí)行一次,而且每個(gè)判定的每種可能的結(jié)果都應(yīng)該至少執(zhí)行一次。所有判定分支:(1)a點(diǎn)判定為T(mén)(2)a點(diǎn)判定為F(3)b點(diǎn)判定為T(mén)(4)b點(diǎn)判定為F測(cè)試用例:Ⅰ.滿足(1)(4)A=3,B=0,X=3
覆蓋sacbdⅡ.滿足(2)(3)A=2,B=1,X=1覆蓋sabed或者Ⅰ.滿足(1)(3)A=2,B=0,X=3
覆蓋sacbed
Ⅱ.滿足(2)(4)A=3,B=1,X=1
覆蓋sabd特點(diǎn):比語(yǔ)句覆蓋強(qiáng),但對(duì)程序邏輯的覆蓋程度仍不高。
3.條件覆蓋含義:不僅每個(gè)語(yǔ)句至少執(zhí)行一次,而且使判定表達(dá)式中的每個(gè)條件都取到各種可能的結(jié)果。所有條件:(1)A>1(2)A≤1(3)B=0(4)B≠0(5)A=2(6)A≠2(7)X>1(8)X≤1測(cè)試用例:Ⅰ.滿足(1)(3)(5)(7)A=2,B=0,X=4
覆蓋sacbed
Ⅱ.滿足(2)(4)(6)(8)A=1,B=1,X=1覆蓋sabd
或者Ⅰ.滿足(1)(3)(5)(8)A=2,B=0,X=1
覆蓋sacbed
Ⅱ.滿足(2)(4)(6)(7)
A=1,B=1,X=2
覆蓋sabed或者……條件覆蓋特點(diǎn):條件覆蓋通常比判定覆蓋強(qiáng),因?yàn)樗姑總€(gè)條件都取到了兩個(gè)不同的結(jié)果,判定覆蓋卻只關(guān)心整個(gè)判定表達(dá)式的值。但也有反例,如第二組測(cè)試用例。判定覆蓋不一定包含條件覆蓋,條件覆蓋也不一定包含判定覆蓋。4.判定/條件覆蓋含義:使得判定表達(dá)式中的每個(gè)條件都取到各種可能的值,每個(gè)判定表達(dá)式也都取到各種可能的結(jié)果。測(cè)試用例:Ⅰ.滿足條件(1)(3)(5)(7)
和判定(1)(3)A=2,B=0,X=4
覆蓋sacbed
Ⅱ.滿足條件(2)(4)(6)(8)和判定(2)(4)A=1,B=1,X=1
覆蓋sabd
特點(diǎn):有時(shí)判定/條件覆蓋也并不比條件覆蓋更強(qiáng)。
5.條件組合覆蓋含義:要求選取足夠多的測(cè)試數(shù)據(jù),使得每個(gè)判定表達(dá)式中條件的各種可能組合都至少出現(xiàn)一次。條件組合:(1)A>1,B=0
(2)A>1,B≠0(3)A≤1,B=0
(4)A≤1,B≠0(5)A=2,X>1
(6)A=2,X≤1(7)A≠2,X>1
(8)A≠2,X≤15.條件組合覆蓋測(cè)試用例:Ⅰ.滿足(1)(5)A=2,B=0,X=4
覆蓋sacbed
Ⅱ.滿足(2)(6)A=2,B=1,X=1
覆蓋sabedⅢ.滿足(3)(7)A=1,B=0,X=2
覆蓋sabed
Ⅳ.滿足(4)(8)A=1,B=1,X=1
覆蓋sabd條件組合覆蓋特點(diǎn):條件組合覆蓋是前述幾種覆蓋標(biāo)準(zhǔn)中最強(qiáng)的。滿足條件組合覆蓋標(biāo)準(zhǔn)的測(cè)試數(shù)據(jù),也一定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋標(biāo)準(zhǔn)。但是,條件組合覆蓋標(biāo)準(zhǔn)的測(cè)試數(shù)據(jù)并不一定能使程序中的每條路徑都執(zhí)行到。(4組數(shù)據(jù)都沒(méi)有測(cè)試到sacbd)
從對(duì)程序路徑的覆蓋程度分析的邏輯覆蓋標(biāo)準(zhǔn):6.點(diǎn)覆蓋含義:選取足夠多的測(cè)試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過(guò)流圖的每個(gè)結(jié)點(diǎn)一次。特點(diǎn):由于流圖的每個(gè)結(jié)點(diǎn)與一條或多條語(yǔ)句相對(duì)應(yīng),因此點(diǎn)覆蓋標(biāo)準(zhǔn)和語(yǔ)句覆蓋標(biāo)準(zhǔn)是相同的。7.邊覆蓋含義:選取足夠多測(cè)試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過(guò)流圖中每條邊一次。特點(diǎn):通常邊覆蓋和判定覆蓋是一致的。8.路徑覆蓋含義:選取足夠多測(cè)試數(shù)據(jù),使程序的每條可能路徑都至少執(zhí)行一次(如果程序圖中有環(huán),則要求每個(gè)環(huán)至少經(jīng)過(guò)一次)。
語(yǔ)句覆蓋判定覆蓋條件覆蓋判定/條件覆蓋條件組合覆蓋路徑覆蓋點(diǎn)覆蓋邊覆蓋7.6.2控制結(jié)構(gòu)測(cè)試1.基本路徑測(cè)試基本路徑測(cè)試是TomMcCabe提出的一種白盒測(cè)試技術(shù)。首先計(jì)算程序的環(huán)形復(fù)雜度;以該復(fù)雜度為指南定義執(zhí)行路徑的基本集合;從該基本集合導(dǎo)出的測(cè)試用例可保證程序中的每條語(yǔ)句至少執(zhí)行一次,而且每個(gè)條件在執(zhí)行時(shí)都將分別取真、假兩種值。
i=1;total.input=total.valid=0;sum=0;DOWHILEvalue[i]<>-999 ANDtotal.input<100incrementtotal.inputby1;IFvalue[i]>=minimumANDvalue[i]<=maximumTHENincrementtotal.validby1;sum=sum+value[i];ENDIFincrementiby1;ENDDOIFtotal.valid>0THENaverage=sum/total.valid;ELSEaverage=-999;ENDIF例:求平均值過(guò)程
(1)根據(jù)過(guò)程設(shè)計(jì)結(jié)果畫(huà)出相應(yīng)的流圖。1234567891011121312345698710121113(2)計(jì)算流圖的環(huán)形復(fù)雜度。
V(G)=6(3)確定線性獨(dú)立路徑的基本集合。所謂獨(dú)立路徑是指至少引入程序的一個(gè)新處理語(yǔ)句集合或一個(gè)新條件的路徑。用流圖術(shù)語(yǔ)描述,獨(dú)立路徑至少包含一條在定義該路徑之前不曾用過(guò)的邊。
路徑1:1-2-10-11-13路徑2:1-2-10-12-13路徑3:1-2-3-10-11(12)-13路徑4:1-2-3-4-5-8-9-2-10-11(12)-13路徑5:1-2-3-4-5-6-8-9-2-10-11(12)-13路徑6:1-2-3-4-5-6-7-8-9-2-10-11(12)-137.7黑盒測(cè)試技術(shù)黑盒測(cè)試著重測(cè)試軟件功能,錯(cuò)誤類型為:功能不正確或遺漏了功能;界面錯(cuò)誤;數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部數(shù)據(jù)庫(kù)訪問(wèn)錯(cuò)誤;性能錯(cuò)誤;初始化和終止錯(cuò)誤。測(cè)試標(biāo)準(zhǔn):測(cè)試用例盡可能少;一個(gè)測(cè)試用例能指出一類錯(cuò)誤。7.7.1等價(jià)劃分等價(jià)劃分是一種黑盒測(cè)試技術(shù),把程序的輸入域劃分成若干個(gè)數(shù)據(jù)類,據(jù)此導(dǎo)出測(cè)試用例。等價(jià)劃分法力圖設(shè)計(jì)出能發(fā)現(xiàn)若干類錯(cuò)誤的測(cè)試用例,從而減少測(cè)試用例的數(shù)目。
每類中的一個(gè)典型值在測(cè)試中的作用與這一類中所有其他值的作用相同。使用等價(jià)劃分法設(shè)計(jì)測(cè)試方案首先需要?jiǎng)澐州斎霐?shù)據(jù)的等價(jià)類。常常還需要分析輸出數(shù)據(jù)的等價(jià)類,以便根據(jù)輸出數(shù)據(jù)的等價(jià)類導(dǎo)出對(duì)應(yīng)的輸入數(shù)據(jù)等價(jià)類。7.7.2邊界值分析經(jīng)驗(yàn)表明,處理邊界情況時(shí)程序最容易發(fā)生錯(cuò)誤。例如,許多程序錯(cuò)誤出現(xiàn)在下標(biāo)、純量、數(shù)據(jù)結(jié)構(gòu)和循環(huán)等等的邊界附近。使用邊界值分析方法設(shè)計(jì)測(cè)試方案首先應(yīng)該確定邊界情況。選取的測(cè)試數(shù)據(jù)應(yīng)該剛好等于、剛剛小于和剛剛大于邊界值。通常設(shè)計(jì)測(cè)試方案時(shí)總是聯(lián)合使用等價(jià)劃分和邊界值分析兩種技術(shù)。7.7.3錯(cuò)誤推測(cè)不同類型不同特點(diǎn)的程序通常又有一些特殊的容易出錯(cuò)的情況。因此必須依靠測(cè)試人員的經(jīng)驗(yàn)和直覺(jué),從各種可能的測(cè)試方案中選出一些最可能引起程序出錯(cuò)的方案。錯(cuò)誤推測(cè)法在很大程度上靠直覺(jué)和經(jīng)驗(yàn)進(jìn)行。它的基本想法是列舉出程序中可能有的錯(cuò)誤和容易發(fā)生錯(cuò)誤的特殊情況,并且根據(jù)它們選擇測(cè)試方案。7.9軟件可靠性
7.9.1基本概念軟件可靠性:程序在給定的時(shí)間間隔內(nèi),按照規(guī)格說(shuō)明書(shū)的規(guī)定成功地運(yùn)行的概率。軟件的可用性:程序在給定的時(shí)間點(diǎn),按照規(guī)格說(shuō)明書(shū)的規(guī)定,成功地運(yùn)行的概率。第8章維護(hù)8.1軟件維護(hù)的定義8.2軟件維護(hù)的特點(diǎn)8.3軟件維護(hù)過(guò)程8.4軟件的可維護(hù)性8.5預(yù)防性維護(hù)8.6軟件再工程過(guò)程
8.1軟件維護(hù)的定義所謂軟件維護(hù)就是在軟件已經(jīng)交付使用之后,為了改正錯(cuò)誤或滿足新的需要而修改軟件的過(guò)程??煞譃?項(xiàng)活動(dòng):
改正性維護(hù)
適應(yīng)性維護(hù)
完善性維護(hù)
預(yù)防性維護(hù)
改正性維護(hù):把診斷和改正錯(cuò)誤的過(guò)程稱為改正性維護(hù)。改正性維護(hù)占17%~21%。
適應(yīng)性維護(hù):為了和變化了的環(huán)境適當(dāng)?shù)嘏浜隙M(jìn)行的修改軟件的活動(dòng),是既必要又經(jīng)常的維護(hù)活動(dòng)。包括外部環(huán)境和數(shù)據(jù)環(huán)境的變化。適應(yīng)性維護(hù)占18%~25%。
完善性維護(hù):為了滿足在用戶提出的增加新功能或修改已有功能的要求和一般性的改進(jìn)要求,需要進(jìn)行完善性維護(hù)。包括功能和性能的要求。完善性維護(hù)占50%~66%。預(yù)防性維護(hù):“把今天的方法學(xué)應(yīng)用于昨天的系統(tǒng)以滿足明天的需要?!?/p>
采用先進(jìn)的軟件工程方法對(duì)需要維護(hù)的軟件或軟件中的某一部分,主動(dòng)地進(jìn)行重新設(shè)計(jì)、編碼和測(cè)試。預(yù)防性維護(hù)占4%左右。
只有預(yù)防性維護(hù)是主動(dòng)的,其他維護(hù)都是被動(dòng)的。各類維護(hù)工作量所占比例維護(hù)工作量在軟件生命周期所占比例9.1.1傳統(tǒng)方法的缺點(diǎn)★結(jié)構(gòu)化分析方法:面向功能 軟件結(jié)構(gòu)嚴(yán)重依賴于功能,而功能是軟件開(kāi)發(fā)中最不穩(wěn)定的因素。★數(shù)據(jù)和操作相分離9.1.2面向?qū)ο箝_(kāi)發(fā)方法OOSD
(Object-OrientedSoftwareDevelopment)是一種把面向?qū)ο蟮乃枷霊?yīng)用于軟件開(kāi)發(fā)過(guò)程,指導(dǎo)開(kāi)發(fā)活動(dòng)的系統(tǒng)方法。
面向?qū)ο?對(duì)象(objects)+類(classes)+繼承(inheritance)+通信(communicationwithmessages)9.1.3面向?qū)ο蠓椒ǖ囊c(diǎn)
認(rèn)為客觀世界是由各種對(duì)象組成的,任何事物都是對(duì)象。
把所有對(duì)象都劃分成各種對(duì)象類(簡(jiǎn)稱為類,class),每個(gè)對(duì)象類都定義了一組數(shù)據(jù)和一組方法。
按照子類(或稱為派生類)與父類(或稱為基類)的關(guān)系,把若干個(gè)對(duì)象類組成一個(gè)層次結(jié)構(gòu)的系統(tǒng)(也稱為類等級(jí))。
對(duì)象彼此之間僅能通過(guò)傳遞消息互相聯(lián)系。9.1.4面向?qū)ο蠓椒ńM成
OOSD由三部分組成:
OOA(Object-OrientedAnalysis)面向?qū)ο蟮姆治?/p>
OOD(Object-OrientedDesign)面向?qū)ο蟮脑O(shè)計(jì)
OOP(Object-OrientedProgram)面向?qū)ο蟮某绦蛟O(shè)計(jì)OOA強(qiáng)調(diào)的是對(duì)一個(gè)系統(tǒng)中的對(duì)象特征和行為的定義。建立系統(tǒng)的三類模型。OOD與OOA密切配合順序?qū)崿F(xiàn)對(duì)現(xiàn)實(shí)世界的進(jìn)一步建模。OOP是面向?qū)ο蟮募夹g(shù)中發(fā)展最快的,使用面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,進(jìn)行編碼。9.2面向?qū)ο蟮母拍顚?duì)象1.類(class)2.實(shí)例(instance)3.消息(message)4.方法(method)5.屬性(attribute)6.封裝(encapsulation)7.繼承(inheritance)8.多態(tài)性(polymorphism)9.重載(overloading)9.3面向?qū)ο蠼?I)
面向?qū)ο蠓椒ㄗ罨镜脑瓌t,是按照人們習(xí)慣的思維方式,用面向?qū)ο笥^點(diǎn)建立問(wèn)題域的模型,開(kāi)發(fā)出盡可能自然地表現(xiàn)求解方法的軟件。
OMT(ObjectModelTechnology)是一種軟件工程方法學(xué),支持整個(gè)面向?qū)ο筌浖芷冢采w了問(wèn)題構(gòu)成、分析、設(shè)計(jì)和實(shí)現(xiàn)等階段。
9.3面向?qū)ο蠼?II)面向?qū)ο箝_(kāi)發(fā)軟件,需要建立3種
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度兼職業(yè)務(wù)員線上線下銷售合作合同2篇
- 二零二五年度農(nóng)業(yè)科技示范園農(nóng)民勞務(wù)合作合同
- 二零二五年度智能交通系統(tǒng)股東股權(quán)交易及技術(shù)支持協(xié)議3篇
- 2025年度大型養(yǎng)殖場(chǎng)租賃征收補(bǔ)償協(xié)議書(shū)3篇
- 2025農(nóng)村兄弟家庭財(cái)產(chǎn)分割與分家協(xié)議書(shū)
- 2025年度年度教育機(jī)構(gòu)兼職教師教學(xué)資源共享與保護(hù)條款3篇
- 二零二五年度智能化農(nóng)機(jī)設(shè)備買(mǎi)賣合作協(xié)議3篇
- 二零二五年度農(nóng)村村委會(huì)村莊農(nóng)業(yè)產(chǎn)業(yè)結(jié)構(gòu)調(diào)整與改造合同
- 2025年石材加工與安裝一體化服務(wù)合同3篇
- 二零二五年度新能源工廠設(shè)備整體轉(zhuǎn)讓協(xié)議3篇
- 野外生存2-1課件
- 謝孟媛中級(jí)文法講義整理版
- 關(guān)于歷史大單元、大概念教學(xué)的討論 課件-高考?xì)v史一輪復(fù)習(xí)
- 旅游者對(duì)鼓浪嶼旅游產(chǎn)品的滿意度調(diào)查問(wèn)卷
- 人教版初二數(shù)學(xué)下冊(cè)《第十七章小結(jié)與復(fù)習(xí)》課件
- 科技水晶質(zhì)感產(chǎn)品推廣PPT模板
- 化工儀表及自動(dòng)化第六版-課后-答案
- 老化箱點(diǎn)檢表A3版本
- 消防設(shè)施驗(yàn)收移交單
- 教師教學(xué)質(zhì)量評(píng)估表(學(xué)生用)
- 2022年自考4月英語(yǔ)真題帶解析
評(píng)論
0/150
提交評(píng)論