《新編計(jì)算機(jī)文化基礎(chǔ)》12 軟件工程基礎(chǔ)_第1頁
《新編計(jì)算機(jī)文化基礎(chǔ)》12 軟件工程基礎(chǔ)_第2頁
《新編計(jì)算機(jī)文化基礎(chǔ)》12 軟件工程基礎(chǔ)_第3頁
《新編計(jì)算機(jī)文化基礎(chǔ)》12 軟件工程基礎(chǔ)_第4頁
《新編計(jì)算機(jī)文化基礎(chǔ)》12 軟件工程基礎(chǔ)_第5頁
已閱讀5頁,還剩138頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第12章軟件工程基礎(chǔ)1243352.1軟件工程的基本概念12.2結(jié)構(gòu)化分析方法12.3結(jié)構(gòu)化設(shè)計(jì)方法

12.4軟件測(cè)試12.5程序調(diào)試

下一頁返回第12章軟件工程基礎(chǔ)612.6軟件維護(hù)上一頁返回12.1軟件工程的基本概念12.1.1軟件的概念與特點(diǎn)軟件是由計(jì)算機(jī)程序演變而形成的一個(gè)概念,它是程序和程序設(shè)計(jì)發(fā)展到規(guī)模化和商品化后所逐漸形成的概念。軟件是程序、數(shù)據(jù)與相關(guān)文檔的完整集合。其中,程序是按既定算法,用某種計(jì)算機(jī)語言規(guī)定的指令或語句編寫的指令或語句的集合。數(shù)據(jù)是使程序能正常操縱信息的數(shù)據(jù)結(jié)構(gòu)。文檔是與程序開發(fā)、維護(hù)和使用有關(guān)的圖文材料。相對(duì)于計(jì)算機(jī)硬件而言,軟件是邏輯產(chǎn)品而不是物理產(chǎn)品,是計(jì)算機(jī)的無形部分。與硬件相比,軟件的特點(diǎn)包括:(1)軟件是一種邏輯實(shí)體,具有抽象性。(2)軟件的生產(chǎn)與硬件不同,它沒有冥想的制造過程。(3)軟件的使用和運(yùn)行過程中,不存在磨損和老化的問題。下一頁返回12.1軟件工程的基本概念(4)軟件的開發(fā)和運(yùn)行與計(jì)算機(jī)系統(tǒng)之間具有相關(guān)性,對(duì)計(jì)算機(jī)系統(tǒng)有著不同程度的依賴。(5)軟件的開發(fā)基本上還處于針對(duì)需求定做的手工開發(fā)階段。(6)軟件的復(fù)雜性高,成本相當(dāng)昂貴。(7)軟件開發(fā)工作涉及社會(huì)因素。軟件按照功能可以分為系統(tǒng)軟件、支撐軟件和應(yīng)用軟件。系統(tǒng)軟件用于管理計(jì)算機(jī)自身的資源,協(xié)調(diào)計(jì)算機(jī)軟硬件工作的軟件。例如,操作系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)、設(shè)備驅(qū)動(dòng)程序等。支撐軟件是協(xié)助用戶開發(fā)軟件的工具軟件,分為開發(fā)工具和開發(fā)管理工具,例如,文件編輯程序、設(shè)計(jì)分析程序、測(cè)試覆蓋檢驗(yàn)程序等。應(yīng)用軟件是為特定應(yīng)用領(lǐng)域而開發(fā)的,具有特定服務(wù)的軟件。上一頁下一頁返回12.1軟件工程的基本概念12.1.2軟件危機(jī)二十世紀(jì)50年代到60年代,人們把軟件當(dāng)成是按照自己意圖創(chuàng)造的“藝術(shù)品”,以追求通篇使用程序技巧為榮,所編寫出的程序很難讓別人看懂。當(dāng)時(shí)的軟件開發(fā)基本上依賴于開發(fā)人員的個(gè)人技能,沒有可遵循的原理、原則和方法,也缺乏有效的工程化的管理、協(xié)調(diào)手段。由于人類智力在處理大型、復(fù)雜問題方面的局限性,人們對(duì)大型軟件項(xiàng)目的開發(fā)往往力不從心。軟件開發(fā)的成本失控,提交時(shí)間延遲,軟件質(zhì)量難以保證,維護(hù)困難,可移植性差,類似軟件之間很少能夠重用。許多重要的大型軟件項(xiàng)目在消耗了大量人力物力之后,由于距預(yù)定目標(biāo)甚遠(yuǎn)而不得不宣告失敗。這便產(chǎn)生了所謂的“軟件危機(jī)”,并進(jìn)一步達(dá)到了難以容忍的程度。具體來說軟件危機(jī)表現(xiàn)在以下幾個(gè)方面:上一頁下一頁返回12.1軟件工程的基本概念(1)軟件開發(fā)的成本及進(jìn)度無法控制。(2)開發(fā)過程缺乏規(guī)范的原則和方法論的指導(dǎo),缺乏適當(dāng)?shù)奈臋n資料,使得在軟件常常是不可維護(hù)的。(3)軟件開發(fā)過程缺乏質(zhì)量保證技術(shù)(審查、復(fù)審和測(cè)試等),造成軟件產(chǎn)品的質(zhì)量沒有保證。(4)軟件需求沒有充分分析,往往對(duì)需求一知半解便開始編程,造成開發(fā)后期矛盾的集中暴露。(5)軟件產(chǎn)品“供不應(yīng)求”,軟件開發(fā)生產(chǎn)率提高的速度遠(yuǎn)遠(yuǎn)跟不上計(jì)算機(jī)應(yīng)用迅速普及并深入的趨勢(shì)。上一頁下一頁返回12.1軟件工程的基本概念要解決這些問題,既要有技術(shù)措施(方法和工具),又要有必要的組織管理措施。只有端正了對(duì)軟件的認(rèn)識(shí),真正抓住了它的特點(diǎn)和發(fā)展趨勢(shì),才能逃出危機(jī),走上軟件發(fā)展的正確道路。軟件工程正是按工程化的原則和方法組織軟件開發(fā)工作,從管理和技術(shù)兩方面研究如何運(yùn)用工程學(xué)的基本原理和方法來更好地開發(fā)和維護(hù)計(jì)算機(jī)軟件的一門新興學(xué)科。上一頁下一頁返回12.1軟件工程的基本概念12.1.3軟件工程的定義“軟件工程”一詞是1968年北大西洋公約組織(NATO)在聯(lián)邦德國召開的一次會(huì)議上首次提出的。它的中心思想是把軟件當(dāng)作一種工業(yè)產(chǎn)品,而不是某種個(gè)體或小作坊的神秘技巧,要求“采用工程化的原理與方法對(duì)軟件進(jìn)行計(jì)劃、開發(fā)和維護(hù)”。這樣做的目的,不僅是為了實(shí)現(xiàn)按預(yù)期的速度和經(jīng)費(fèi)完成軟件生產(chǎn)計(jì)劃,也是為了提高軟件的生產(chǎn)率與可靠性。上一頁下一頁返回12.1軟件工程的基本概念軟件工程是采用工程化的方法開發(fā)和維護(hù)軟件的工程學(xué)科。把經(jīng)過時(shí)間考驗(yàn)而證明正確的管理技術(shù)和當(dāng)前能夠得到的最好的技術(shù)和方法結(jié)合起來,以便經(jīng)濟(jì)地開發(fā)出高質(zhì)量的軟件并有效地維護(hù)它。軟件工程包括3個(gè)要素,分別是方法、工具和過程。(1)軟件工程的方法為軟件開發(fā)提供了“如何做”的技術(shù)。它包括了多方面的任務(wù),如項(xiàng)目計(jì)劃與估算、軟件系統(tǒng)需求分析、數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)總體結(jié)構(gòu)的設(shè)計(jì)、算法過程的設(shè)計(jì)、編碼、測(cè)試以及維護(hù)等。(2)軟件工具為軟件工程方法提供了自動(dòng)的或半自動(dòng)的軟件支撐環(huán)境。目前,已經(jīng)推出了許多軟件工具,這些軟件工具集成起來,建立起稱之為計(jì)算機(jī)輔助軟件工程(CASE)的軟件開發(fā)支撐系統(tǒng)。上一頁下一頁返回12.1軟件工程的基本概念CASE將各種軟件工具、開發(fā)機(jī)器和一個(gè)存放開發(fā)過程信息的工程數(shù)據(jù)庫組合起來形成一個(gè)軟件工程環(huán)境。(3)軟件工程的過程則是將軟件工程的方法和工具綜合起來以達(dá)到合理、及時(shí)地進(jìn)行計(jì)算機(jī)軟件開發(fā)的目的。過程定義了方法使用的順序、要求交付的文檔資料、為保證質(zhì)量和協(xié)調(diào)變化所需要的管理,及軟件開發(fā)各個(gè)階段完成的里程碑。雖然每一個(gè)從事軟件開發(fā)的機(jī)構(gòu)都有自己的軟件工程過程,就算是同一個(gè)軟件開發(fā)機(jī)構(gòu),對(duì)不同的軟件項(xiàng)目也可能有不同的軟件工程,但是無論存在怎樣的差別,軟件工程都具有以下四個(gè)基本過程活動(dòng):(1)軟件規(guī)格說明:規(guī)定軟件的功能及其運(yùn)行的限制;上一頁下一頁返回12.1軟件工程的基本概念(2)軟件開發(fā):產(chǎn)生滿足規(guī)格說明的軟件;(3)軟件確認(rèn):確認(rèn)軟件能夠完成客戶提出的要求;(4)軟件演進(jìn):為滿足客戶的變更要求,軟件必須在使用的過程中演進(jìn)。自從提出“軟件工程”這一術(shù)語以來,研究軟件工程的專家學(xué)者們陸續(xù)提出了100多條關(guān)于軟件工程的準(zhǔn)則或信條。美國著名的軟件工程專家Boehm綜合這些專家的意見,并總結(jié)了TRW公司多年的開發(fā)軟件的經(jīng)驗(yàn),于1983年提出了軟件工程的七條基本原理。上一頁下一頁返回12.1軟件工程的基本概念(1)用分階段的生命周期計(jì)劃嚴(yán)格管理。這一條是吸取前人的教訓(xùn)而提出來的。統(tǒng)計(jì)表明,50%以上的失敗項(xiàng)目是由于計(jì)劃不周而造成的。在軟件開發(fā)與維護(hù)的漫長(zhǎng)生命周期中,需要完成許多性質(zhì)各異的工作。這條原理意味著,應(yīng)該把軟件生命周期分成若干階段,并相應(yīng)制定出切實(shí)可行的計(jì)劃,然后嚴(yán)格按照計(jì)劃對(duì)軟件的開發(fā)和維護(hù)進(jìn)行管理。Boehm認(rèn)為,在整個(gè)軟件生命周期中應(yīng)指定并嚴(yán)格執(zhí)行6類計(jì)劃:項(xiàng)目概要計(jì)劃、里程碑計(jì)劃、項(xiàng)目控制計(jì)劃、產(chǎn)品控制計(jì)劃、驗(yàn)證計(jì)劃、運(yùn)行維護(hù)計(jì)劃。上一頁下一頁返回12.1軟件工程的基本概念(2)堅(jiān)持進(jìn)行階段評(píng)審。統(tǒng)計(jì)結(jié)果顯示:大部分錯(cuò)誤是在編碼之前造成的,大約占63%。錯(cuò)誤發(fā)現(xiàn)的越晚,改正它要付出的代價(jià)就越大,要差2到3個(gè)數(shù)量級(jí)。因此,軟件的質(zhì)量保證工作不能等到編碼結(jié)束之后再進(jìn)行,應(yīng)堅(jiān)持進(jìn)行嚴(yán)格的階段評(píng)審,以便盡早發(fā)現(xiàn)錯(cuò)誤。(3)實(shí)行嚴(yán)格的產(chǎn)品控制。開發(fā)人員最痛恨的事情之一就是改動(dòng)需求。但是實(shí)踐告訴我們,需求的改動(dòng)往往是不可避免的。這就要求我們要采用科學(xué)的產(chǎn)品控制技術(shù)來順應(yīng)這種要求。也就是要采用變動(dòng)控制,又叫基準(zhǔn)配置管理。當(dāng)需求變動(dòng)時(shí),其他各個(gè)階段的文檔或代碼隨之相應(yīng)變動(dòng),以保證軟件的一致性。上一頁下一頁返回12.1軟件工程的基本概念(4)采納現(xiàn)代程序設(shè)計(jì)技術(shù)。從六、七十年代的結(jié)構(gòu)化軟件開發(fā)技術(shù),到近的面向?qū)ο蠹夹g(shù),從第一、第二代語言,到第四代語言,人們已經(jīng)充分認(rèn)識(shí)到:采用先進(jìn)的技術(shù)既可以提高軟件開發(fā)的效率,又可以減少軟件維護(hù)的成本。(5)結(jié)果應(yīng)能清楚地審查。軟件是一種看不見、摸不著的邏輯產(chǎn)品。軟件開發(fā)小組的工作進(jìn)展情況可見性差,難于評(píng)價(jià)和管理。為更好地進(jìn)行管理,應(yīng)根據(jù)軟件開發(fā)的總目標(biāo)及完成期限,盡量明確地規(guī)定開發(fā)小組的責(zé)任和產(chǎn)品標(biāo)準(zhǔn),從而使所得到的標(biāo)準(zhǔn)能清楚地審查。上一頁下一頁返回12.1軟件工程的基本概念(6)開發(fā)小組的人員應(yīng)少而精。開發(fā)人員的素質(zhì)和數(shù)量是影響軟件質(zhì)量和開發(fā)效率的重要因素,應(yīng)該少而精。這一條基于兩點(diǎn)原因:高素質(zhì)開發(fā)人員的效率比低素質(zhì)開發(fā)人員的效率要高幾倍到幾十倍,開發(fā)工作中犯的錯(cuò)誤也要少得多;當(dāng)開發(fā)小組為N人時(shí),可能的通訊信道為N(N-1)/2,可見隨著人數(shù)N的增大,通信開銷將急劇增大。(7)承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性。遵從上述六條基本原理,就能夠較好地實(shí)現(xiàn)軟件的工程化生產(chǎn)。但是,它們只是對(duì)現(xiàn)有的經(jīng)驗(yàn)的總結(jié)和歸納,并不能保證趕上技術(shù)不斷前進(jìn)發(fā)展的步伐。因此,Boehm提出應(yīng)把承認(rèn)不斷改進(jìn)軟件工程實(shí)踐的必要性作為軟件工程的第七條原理。上一頁下一頁返回12.1軟件工程的基本概念根據(jù)這條原理,不僅要積極采納新的軟件開發(fā)技術(shù),還要注意不斷總結(jié)經(jīng)驗(yàn),收集進(jìn)度和消耗等數(shù)據(jù),進(jìn)行出錯(cuò)類型和問題報(bào)告統(tǒng)計(jì)。這些數(shù)據(jù)既可以用來評(píng)估新的軟件技術(shù)的效果,也可以用來指明必須著重注意的問題和應(yīng)該優(yōu)先進(jìn)行研究的工具和技術(shù)。上一頁下一頁返回12.1軟件工程的基本概念12.1.4軟件生命周期軟件工程采用的生命周期方法學(xué)就是從時(shí)間角度對(duì)軟件開發(fā)和維護(hù)的復(fù)雜問題進(jìn)行分解,把軟件生存的漫長(zhǎng)周期依次劃分為上述階段,每個(gè)階段有相對(duì)獨(dú)立的任務(wù),然后逐步完成各個(gè)階段的任務(wù)。這里所說的“軟件生存的漫長(zhǎng)周期”是指從提出軟件產(chǎn)品開始,直到該軟件產(chǎn)品被淘汰的全過程。研究軟件生命周期是為了更科學(xué)地、有效地組織和管理軟件的生產(chǎn)、維護(hù),從而使軟件產(chǎn)品更可靠,更經(jīng)濟(jì)。上一頁下一頁返回12.1軟件工程的基本概念軟件生命周期是指軟件定義、開發(fā)、使用、維護(hù)到報(bào)廢為止的整個(gè)過程,可分為3個(gè)時(shí)期:計(jì)劃期、開發(fā)期和運(yùn)行期。計(jì)劃期又分為問題定義和可行性研究?jī)蓚€(gè)階段;開發(fā)期分為4個(gè)階段:需求分析階段、設(shè)計(jì)階段(總體設(shè)計(jì)、詳細(xì)設(shè)計(jì))、編碼階段和測(cè)試階段;運(yùn)行期即維護(hù)階段,軟件生命周期的模型示意圖如圖12-1所示。1.問題定義階段問題定義階段的任務(wù)是要確定軟件系統(tǒng)所要解決的任務(wù)。分析人員在與用戶和部門負(fù)責(zé)人交流之后,應(yīng)提出關(guān)于問題性質(zhì)、工程目標(biāo)和規(guī)模的書面報(bào)告,即軟件系統(tǒng)目標(biāo)與范圍的說明。上一頁下一頁返回12.1軟件工程的基本概念為了成功地完成問題定義階段的任務(wù),需要硬件人員和軟件人員的共同參與,這一階段是軟件生存周期中較短的階段。2.可行性研究階段(1)可行性研究的任務(wù)??尚行匝芯康哪康脑谟谟米钚〉拇鷥r(jià)確定在問題定義階段確定的系統(tǒng)目標(biāo)和規(guī)模是否現(xiàn)實(shí),所確定的問題是否可以解決,系統(tǒng)方案在經(jīng)濟(jì)上、技術(shù)上和操作上是否可以接受。可行性研究著重考慮以下幾個(gè)方面:①經(jīng)濟(jì)可行性。估計(jì)開發(fā)費(fèi)用以及新系統(tǒng)可能帶來的收益,將兩者進(jìn)行權(quán)衡,看結(jié)果是否可以接受。上一頁下一頁返回12.1軟件工程的基本概念②技術(shù)可行性。對(duì)要求的功能、性能以及限制條件進(jìn)行分析,看是否能夠做成一個(gè)可接受的系統(tǒng)。所考慮的因素通常還應(yīng)包括開發(fā)的風(fēng)險(xiǎn),是否能夠得到需要的軟件和硬件資源,以及一個(gè)熟練的有能力的開發(fā)隊(duì)伍,另外與系統(tǒng)開發(fā)有關(guān)的技術(shù)是否足以支持系統(tǒng)的研制。技術(shù)可行性的估計(jì),需要有經(jīng)驗(yàn)的人員去完成。③操作可行性。判斷系統(tǒng)的操作方式在該用戶組織內(nèi)是否可行。(2)推薦方案。根據(jù)可行性研究結(jié)果要做出的決定是:是否繼續(xù)按預(yù)定目標(biāo)進(jìn)行開發(fā)。可行性分析人員必須清楚地表明他對(duì)這個(gè)關(guān)鍵性決定的建議。如果認(rèn)為值得繼續(xù)進(jìn)行這項(xiàng)開發(fā)工程,則應(yīng)提供一種最好的解決方案,并說明理由。上一頁下一頁返回12.1軟件工程的基本概念(3)軟件開發(fā)計(jì)劃。分析人員應(yīng)該為推薦的系統(tǒng)草擬一份軟件開發(fā)計(jì)劃。軟件開發(fā)計(jì)劃是根據(jù)用戶提出的功能性要求,開發(fā)時(shí)間和費(fèi)用的限制而制定的,它要說明該項(xiàng)目需要的硬件資源和軟件資源,需要的開發(fā)人員的層次和數(shù)量,項(xiàng)目開發(fā)費(fèi)用的估算,開發(fā)進(jìn)度的安排等。軟件開發(fā)計(jì)劃的閱讀者可以包括軟件主管部門、用戶和技術(shù)人員。所確定的成本與進(jìn)度可供主管部門復(fù)審。軟件開發(fā)計(jì)劃同時(shí)也給出了整個(gè)軟件生存周期的基本預(yù)算和進(jìn)度安排。3.需求分析階段上一頁下一頁返回12.1軟件工程的基本概念需求分析就是對(duì)待開發(fā)軟件提出的需求進(jìn)行分析并給出詳細(xì)的定義。這一階段的基本任務(wù)是:用戶和分析人員雙方共同來理解系統(tǒng)的需求,并將共同理解形成一份文件,即軟件需求說明書。該階段是面向用戶問題的,它主要是對(duì)用戶的業(yè)務(wù)活動(dòng)進(jìn)行分析,明確在用戶的業(yè)務(wù)環(huán)境中軟件系統(tǒng)應(yīng)該“做什么”。需求分析階段是用戶與軟件人員雙方討論協(xié)商的階段,由用戶提出問題,軟件開發(fā)人員給出問題的解答。用戶的業(yè)務(wù)活動(dòng)和業(yè)務(wù)環(huán)境對(duì)軟件開發(fā)人員來說是不熟悉的,要想在短期內(nèi)搞清楚是不太可能的;用戶只熟悉本身的業(yè)務(wù)活動(dòng)和業(yè)務(wù)環(huán)境,不熟悉計(jì)算機(jī)技術(shù)。因而,用戶必須對(duì)軟件功能和性能提出初步要求,并澄清一些模糊概念;上一頁下一頁返回12.1軟件工程的基本概念軟件分析人員則要認(rèn)真了解用戶的要求,細(xì)致地進(jìn)行調(diào)查分析,把用戶“做什么”的要求最終轉(zhuǎn)換成一個(gè)完全的、精細(xì)的軟件邏輯模型并寫出軟件的需求說明書,準(zhǔn)確地表達(dá)用戶的要求。需求說明書主要有三個(gè)作用:作為用戶和軟件開發(fā)人員之間的合同;作為開發(fā)人員進(jìn)行設(shè)計(jì)和編程的根據(jù);作為軟件開發(fā)完成后驗(yàn)收的依據(jù)。編寫需求說明書時(shí),應(yīng)該完整、一致、精確、無二義性,同時(shí)又要簡(jiǎn)明、易懂、易修改。它越精確,以后出現(xiàn)錯(cuò)誤、混淆、反復(fù)的可能性就越小。如“系統(tǒng)查詢等待時(shí)間很短”等詞語,是含糊不清的描述,驗(yàn)收時(shí)無法檢查,而“查詢等待時(shí)間不超過5秒”就是精確的描述,驗(yàn)收時(shí)就可檢查是否達(dá)到這個(gè)要求。上一頁下一頁返回12.1軟件工程的基本概念需求分析的最后一步是需求分析評(píng)審,它可以作為需求分析階段工作的復(fù)查手段,對(duì)功能的正確性、完整性和清晰性,以及其他需求給予評(píng)價(jià),評(píng)審的主要內(nèi)容包括看系統(tǒng)定義的目標(biāo)是否與用戶的要求一致,開發(fā)的技術(shù)風(fēng)險(xiǎn)是什么,是否詳細(xì)制定了檢驗(yàn)標(biāo)準(zhǔn),有沒有遺漏、重復(fù)或不一致的地方,軟件開發(fā)計(jì)劃中的估算是否受到了影響等。4.軟件設(shè)計(jì)階段在軟件需求分析階段已經(jīng)弄清楚了軟件的各種需求,解決了軟件“做什么”的問題,并使用軟件需求說明書對(duì)需求進(jìn)行了詳細(xì)充分的闡述,接下來就是要解決“怎么做”的問題了。上一頁下一頁返回12.1軟件工程的基本概念通常,可以將設(shè)計(jì)定義為“應(yīng)用各種技術(shù)和原理,對(duì)設(shè)備、過程或系統(tǒng)做出足夠詳細(xì)的定義,使之能夠在物理上得以實(shí)現(xiàn)”。而軟件設(shè)計(jì)則是根據(jù)需求說明書提供的軟件需求、功能需求及性能需求,采用某種設(shè)計(jì)方法進(jìn)行數(shù)據(jù)設(shè)計(jì)、系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和過程設(shè)計(jì)。數(shù)據(jù)設(shè)計(jì)側(cè)重于數(shù)據(jù)結(jié)構(gòu)的定義。系統(tǒng)結(jié)構(gòu)設(shè)計(jì)定義軟件各主要成分之間的關(guān)系。過程設(shè)計(jì)則是把結(jié)構(gòu)成分轉(zhuǎn)換成軟件的過程性描述。從工程管理的角度來看,軟件設(shè)計(jì)可以分為總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩個(gè)步驟,如圖12-2所示上一頁下一頁返回12.1軟件工程的基本概念(1)總體設(shè)計(jì)??傮w設(shè)計(jì)是為軟件系統(tǒng)定義一個(gè)邏輯上一致的結(jié)構(gòu):進(jìn)行模塊劃分,建立模塊層次結(jié)構(gòu)及模塊間的調(diào)用關(guān)系,設(shè)計(jì)全局?jǐn)?shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫,設(shè)計(jì)系統(tǒng)接口及人機(jī)界面等。總體設(shè)計(jì)的方法有許多種。在早期有模塊化方法,功能分解方法,這都屬于常用的方法,在20世紀(jì)60年代后期提出了面向數(shù)據(jù)流的設(shè)計(jì)方法,面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法,近年來又提出面向?qū)ο蟮脑O(shè)計(jì)方法等。(2)詳細(xì)設(shè)計(jì)。詳細(xì)設(shè)計(jì)是根據(jù)每個(gè)模塊的功能描述,選擇某種過程的表達(dá)形式來描述每個(gè)模塊的算法,以及這些算法的邏輯控制流程,并設(shè)計(jì)出這些模塊所需的局部數(shù)據(jù)結(jié)構(gòu)。上一頁下一頁返回12.1軟件工程的基本概念詳細(xì)設(shè)計(jì)的方法主要有結(jié)構(gòu)程序設(shè)計(jì)方法。詳細(xì)設(shè)計(jì)的表示工具有圖形工具和語言工具,圖形工具有程序流程圖、PAD(ProblemAnalysisDiagram)圖、NS圖,語言工具有偽碼和PDL(ProgramDesignLanguage)等(3)文檔。設(shè)計(jì)階段結(jié)束要交付的文檔是設(shè)計(jì)說明書。設(shè)計(jì)說明書前面部分在總體設(shè)計(jì)后完成,后面部分是詳細(xì)設(shè)計(jì)后寫出。設(shè)計(jì)說明書有兩個(gè)作用:對(duì)于編程和測(cè)試,它提供了一個(gè)指南;軟件交付使用后,為維護(hù)人員提供幫助。設(shè)計(jì)說明書的框架和內(nèi)容如下:①概述。描述設(shè)計(jì)工作總的范圍,包括系統(tǒng)目標(biāo)、功能、接口等。上一頁下一頁返回12.1軟件工程的基本概念②系統(tǒng)結(jié)構(gòu)。用軟件結(jié)構(gòu)圖說明本系統(tǒng)的模塊劃分,扼要說明每個(gè)模塊的功能,分層次地給出各模塊之間的控制關(guān)系。③數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫設(shè)計(jì)。對(duì)整個(gè)系統(tǒng)使用的數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫進(jìn)行設(shè)計(jì),包括概念結(jié)構(gòu)設(shè)計(jì)、邏輯結(jié)構(gòu)設(shè)計(jì)、物理設(shè)計(jì)。用相應(yīng)的圖形和表格把設(shè)計(jì)結(jié)果描述出來。④接口設(shè)計(jì)。要進(jìn)行人機(jī)界面設(shè)計(jì),說明向用戶提供的命令以及系統(tǒng)的返回信息;要進(jìn)行外部接口設(shè)計(jì),說明本系統(tǒng)與外界的所有接口安排,包括軟件與硬件之間的接口,本系統(tǒng)與支持軟件之間的接口關(guān)系。⑤模塊設(shè)計(jì)。這是詳細(xì)設(shè)計(jì)的結(jié)果,根據(jù)模塊的功能,用詳細(xì)設(shè)計(jì)表示工具描述每個(gè)模塊的流程,描述每個(gè)模塊用到的數(shù)據(jù)結(jié)構(gòu)。上一頁下一頁返回12.1軟件工程的基本概念(4)復(fù)審。軟件設(shè)計(jì)的最終目標(biāo)就是要取得最佳方案?!白罴选笔侵杆泻蜻x方案中,就節(jié)省開發(fā)費(fèi)用,降低資源消耗,縮短開發(fā)時(shí)間的條件,選擇能夠贏得較高的生產(chǎn)率、較高的可靠性和可維護(hù)性的方案。在整個(gè)設(shè)計(jì)的過程中,各個(gè)時(shí)期的設(shè)計(jì)結(jié)果需要經(jīng)過一系列的設(shè)計(jì)質(zhì)量的復(fù)審,以便及時(shí)發(fā)現(xiàn)和及時(shí)解決在軟件設(shè)計(jì)中出現(xiàn)的問題,防止把問題帶到開打的后續(xù)階段,造成后患。在復(fù)審以后,必須針對(duì)評(píng)審中發(fā)現(xiàn)的問題,對(duì)設(shè)計(jì)的結(jié)果進(jìn)行必要的修改。復(fù)審方法有兩種:一種是非正式的遍查,由一個(gè)通曉全部設(shè)計(jì)的高級(jí)技術(shù)人員實(shí)施,復(fù)查者與設(shè)計(jì)者一起開會(huì)來復(fù)查所有技術(shù)文檔;另一種是正式的結(jié)構(gòu)化審查,要組織一個(gè)審查小組,事先查看設(shè)計(jì)文檔,由設(shè)計(jì)者介紹情況,然后進(jìn)行評(píng)價(jià),使用正式的審查表,正式的錯(cuò)誤報(bào)告。上一頁下一頁返回12.1軟件工程的基本概念5.編碼階段軟件開發(fā)的最終目標(biāo),是產(chǎn)生能在計(jì)算機(jī)上執(zhí)行的程序。分析階段和設(shè)計(jì)階段產(chǎn)生的文檔,都不能在計(jì)算機(jī)上執(zhí)行,只有到了編程階段,才產(chǎn)生可執(zhí)行的代碼,把軟件的需求真正付諸實(shí)踐。所以編程階段也稱為實(shí)現(xiàn)階段。編程的任務(wù)是為每個(gè)模塊編寫程序,也就是將模塊的邏輯描述轉(zhuǎn)換成某種程序設(shè)計(jì)語言編寫的程序。編程階段應(yīng)交付的文檔就是程序。對(duì)于程序編碼需要注意以下幾個(gè)原則:(1)采用結(jié)構(gòu)換程序設(shè)計(jì)的原則,就是使用語言中的順序、選擇、重復(fù)等有限的基本控制結(jié)構(gòu)表示程序邏輯,嚴(yán)格限制goto語句的使用。上一頁下一頁返回12.1軟件工程的基本概念(2)程序設(shè)計(jì)采用自頂向下,逐步求精的思想,把一個(gè)模塊的功能逐步分解,細(xì)化為一系列具體的步驟,進(jìn)而翻譯成一系列用某種程序設(shè)計(jì)語言寫成的程序。(3)注意數(shù)據(jù)結(jié)構(gòu)的合理化,即數(shù)據(jù)結(jié)構(gòu)訪問的規(guī)范化和標(biāo)準(zhǔn)化問題。(4)使用規(guī)范的程序設(shè)計(jì)風(fēng)格,提高程序的條理性和可閱讀性,以方便軟件開發(fā)及維護(hù)。(5)設(shè)計(jì)高效率的程序。程序效率是指程序的執(zhí)行速度及程序占用的存儲(chǔ)空間。源程序的效率與詳細(xì)設(shè)計(jì)階段確定的算法的效率直接有關(guān),因而要提高算法的效率,應(yīng)選擇可生成較短目標(biāo)代碼且存儲(chǔ)壓縮性能優(yōu)良的編譯器。上一頁下一頁返回12.1軟件工程的基本概念6.測(cè)試階段軟件測(cè)試是在軟件投入運(yùn)行前,對(duì)軟件需求分析、設(shè)計(jì)規(guī)格說明和編碼的最終復(fù)審,是軟件質(zhì)量保證的關(guān)鍵步驟??梢赃@么定義軟件測(cè)試:它是根據(jù)軟件開發(fā)各階段的規(guī)格說明書和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計(jì)一批測(cè)試用例(即輸入數(shù)據(jù)及其預(yù)期的輸出結(jié)果),并利用這些測(cè)試用例去運(yùn)行程序,以發(fā)現(xiàn)程序錯(cuò)誤的過程。軟件測(cè)試分為以下幾個(gè)階段:測(cè)試階段分為以下幾個(gè)步驟:(1)模塊測(cè)試。又稱單元測(cè)試,檢查每個(gè)模塊是否有錯(cuò)誤,主要發(fā)現(xiàn)編程和詳細(xì)設(shè)計(jì)階段的錯(cuò)誤;(2)組裝測(cè)試。又稱綜合測(cè)試,檢查模塊之間的接口的正確性,主要用于發(fā)現(xiàn)總體設(shè)計(jì)階段的錯(cuò)誤;上一頁下一頁返回12.1軟件工程的基本概念(3)確認(rèn)測(cè)試。檢查程序系統(tǒng)是否滿足用戶的功能性能要求,主要用于發(fā)現(xiàn)需求分析階段的錯(cuò)誤。7.維護(hù)階段軟件交付使用以后便進(jìn)入正常運(yùn)行階段,也是軟件生存周期中的最后一個(gè)段,即維護(hù)階段。目前還沒有一種能夠確認(rèn)軟件中不存在錯(cuò)誤的技術(shù),在這個(gè)階段不可避免會(huì)出現(xiàn)錯(cuò)誤,加上用戶需求的不斷改變,對(duì)軟件要不斷改進(jìn),這些工作只有通過對(duì)軟件的維護(hù)來解決。之所以需要進(jìn)行軟件維護(hù),主要是原因有:運(yùn)行中發(fā)現(xiàn)了軟件中的錯(cuò)誤需要修正;為了適應(yīng)變化了的軟件工作環(huán)境,需要做適當(dāng)?shù)淖兏粸榱嗽鰪?qiáng)軟件的功能需做變更。上一頁下一頁返回12.1軟件工程的基本概念12.1.5軟件工具與軟件開發(fā)環(huán)境軟件工具是一種軟件,為提高軟件生產(chǎn)率和改進(jìn)軟件的質(zhì)量,輔助和支持其他軟件開發(fā)、維護(hù)、模擬、移植或管理而研制的程序系統(tǒng)。軟件開發(fā)環(huán)境是一組相關(guān)的軟件工具的集合,將它們組織在一起,為特定的領(lǐng)域所使用,以支持整個(gè)軟件生命周期的計(jì)算機(jī)輔助開發(fā)程序系統(tǒng)。上一頁返回12.2結(jié)構(gòu)化分析方法12.2.1結(jié)構(gòu)化分析概述結(jié)構(gòu)化分析(StructuredAnalysis,SA)是面向數(shù)據(jù)流進(jìn)行需求分析的方法。20世紀(jì)70年代末由YourdonE.,ConstantineL.,DeMarcoT.等人提出發(fā)展,至今仍得到廣泛地應(yīng)用。SA是一種建模活動(dòng),該方法使用簡(jiǎn)單易讀符號(hào),根據(jù)軟件內(nèi)部數(shù)據(jù)傳遞和變換的關(guān)系,以數(shù)據(jù)流圖和數(shù)據(jù)字典為主要工具,自頂向下逐步分解,建立系統(tǒng)的邏輯模型。下一頁返回12.2結(jié)構(gòu)化分析方法結(jié)構(gòu)化分析方法適合于數(shù)據(jù)處理類型軟件的需求分析。當(dāng)面對(duì)一個(gè)復(fù)雜的問題時(shí),分析人員不可能一開始就考慮到問題的所有方面和全部細(xì)節(jié),采用的策略往往是分解,把一個(gè)復(fù)雜的問題劃分成若干小問題,然后分別解決,將問題的復(fù)雜性降低到人們可以掌握的程度。此外,在解決復(fù)雜問題時(shí),還可以先暫時(shí)忽略細(xì)節(jié),只考慮問題的本質(zhì),然后細(xì)化到最詳細(xì)的內(nèi)容,這就是“抽象”。結(jié)構(gòu)化分析方法的基本思想正是運(yùn)用了“分解”和“抽象”這兩個(gè)基本手段,采用“自頂向下,逐步分解”的分析思路。根據(jù)DeMarco的論述,結(jié)構(gòu)化分析方法使用以下幾個(gè)工具:上一頁下一頁返回12.2結(jié)構(gòu)化分析方法(1)數(shù)據(jù)流圖(DataFlowDiagram,DFD)。一種最常用的結(jié)構(gòu)化分析工具,描述系統(tǒng)由哪幾部分組成,各部分之間有什么聯(lián)系等。(2)數(shù)據(jù)字典(DataDictionary,DD)。定義了數(shù)據(jù)流圖中每一個(gè)圖形元素,使得用戶和系統(tǒng)分析員對(duì)于輸入、輸出、存儲(chǔ)成分和中間結(jié)果有共同的理解。(3)判定樹(DeterminationTree)。從問題定義的文字描述中分清哪些是判定的條件,哪些是判定的結(jié)論,根據(jù)描述材料中的連接詞找出判定條件之間的從屬關(guān)系、并列關(guān)系、選擇關(guān)系,根據(jù)它們構(gòu)造判定樹。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法(4)判定表(DeterminationTable)。與判定樹類似,當(dāng)數(shù)據(jù)流圖中的加工要依賴多個(gè)邏輯條件的取值時(shí),即完成該加工的一組動(dòng)作是由于某一組條件取值的組合而引發(fā)的,使用判定表描述比較合適。使用SA方法進(jìn)行軟件需求分析時(shí),可按如下步驟進(jìn)行:(1)建立當(dāng)前系統(tǒng)的物理模型。即理解當(dāng)前的現(xiàn)實(shí)環(huán)境,獲得當(dāng)前系統(tǒng)的物理模型。當(dāng)前系統(tǒng)的物理模型就是現(xiàn)實(shí)環(huán)境的真實(shí)寫照,在理解了當(dāng)前系統(tǒng)是怎樣做的情況下,用數(shù)據(jù)流圖等形式將現(xiàn)實(shí)環(huán)境表達(dá)出來。(2)建立當(dāng)前系統(tǒng)的邏輯模型。通過對(duì)物理模型的分析,找到本質(zhì)性的因素,抽象出當(dāng)前系統(tǒng)的功能和性能,建立當(dāng)前系統(tǒng)的邏輯模型。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法(3)建立目標(biāo)系統(tǒng)的邏輯模型。首先要清楚所建立的目標(biāo)系統(tǒng)的功能,進(jìn)一步分析與當(dāng)前系統(tǒng)邏輯模型的差別,將當(dāng)前系統(tǒng)的數(shù)據(jù)流圖分成兩部分,一部分是與目標(biāo)系統(tǒng)相同的部分,另一部分是與目標(biāo)系統(tǒng)不同的即變化的部分。將變化的部分重新分析和設(shè)計(jì),建立一個(gè)目標(biāo)系統(tǒng)的邏輯模型。(4)為目標(biāo)系統(tǒng)的邏輯模型作補(bǔ)充。為了對(duì)一個(gè)軟件系統(tǒng)做出完整的說明,需對(duì)已得到的結(jié)果作一些補(bǔ)充。如說明目標(biāo)系統(tǒng)的人機(jī)邊界,即確定系統(tǒng)的范圍。還要說明系統(tǒng)邏輯模型中未詳細(xì)考慮的一些細(xì)節(jié)問題,如出錯(cuò)處理,系統(tǒng)如何啟動(dòng)和結(jié)束,系統(tǒng)輸入輸出格式,系統(tǒng)性能方面的其他要求(如響應(yīng)時(shí)間、存儲(chǔ)容量)等。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法12.2.2數(shù)據(jù)流圖數(shù)據(jù)流圖(DataFlowDiagram,DFD)也稱為BubbleChart或DataFlowGraph,它用來描繪系統(tǒng)的邏輯模型,從數(shù)據(jù)傳遞和加工的角度,以圖形的方式描繪數(shù)據(jù)在系統(tǒng)中流動(dòng)和處理的過程,反映系統(tǒng)必須完成的邏輯功能。由于數(shù)據(jù)流圖是系統(tǒng)邏輯的圖形表示,即使不是專業(yè)的計(jì)算機(jī)技術(shù)人員也容易理解,所以是極好的交流信息的工具。此外,數(shù)據(jù)流圖只考慮系統(tǒng)必須完成的邏輯功能,完全不考慮如何具體實(shí)現(xiàn),所以它也是很好的軟件設(shè)計(jì)的出發(fā)點(diǎn)。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法1.?dāng)?shù)據(jù)流圖的基本圖形符號(hào)首先,請(qǐng)看如圖12-3所示的學(xué)生管理系統(tǒng)的數(shù)據(jù)流圖。學(xué)生通過提交登記表,經(jīng)過建檔處理,生成學(xué)生信息保存到學(xué)生檔案文件中;學(xué)生科可以通過修改處理來修改學(xué)生的信息,也可以提出統(tǒng)計(jì)要求經(jīng)過統(tǒng)計(jì)處理生成報(bào)表;各系處可以提出查詢條件給查詢處理,而得到所需的學(xué)生信息。從圖12-3中,我們可以看出數(shù)據(jù)流圖的基本圖形符號(hào)有4種,如圖12-4所示上一頁下一頁返回12.2結(jié)構(gòu)化分析方法(1)數(shù)據(jù)流。數(shù)據(jù)流是沿箭頭方向傳送數(shù)據(jù)的通道,是一組確定的數(shù)據(jù)在系統(tǒng)內(nèi)傳播的路徑。數(shù)據(jù)流的流向由箭頭方向指出,可從加工流向加工,也可以從加工流向數(shù)據(jù)存儲(chǔ)或從數(shù)據(jù)存儲(chǔ)流向加工,還可以從源點(diǎn)流向加工或從加工流向終點(diǎn)。如圖12-3所示,從源點(diǎn)“學(xué)生”到加工“建檔”之間就有數(shù)據(jù)流“登記表”。在數(shù)據(jù)流圖中,除了與數(shù)據(jù)存儲(chǔ)之間的數(shù)據(jù)流不用命名之外,數(shù)據(jù)流應(yīng)該對(duì)應(yīng)一個(gè)唯一的名字。多個(gè)數(shù)據(jù)流可以指向同一個(gè)加工,也可以從一個(gè)加工散發(fā)出許多數(shù)據(jù)流。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法

(2)加工。加工又稱為數(shù)據(jù)處理,對(duì)數(shù)據(jù)流進(jìn)行某些操作或變換,它把輸入的數(shù)據(jù)變成輸出的數(shù)據(jù)流。每個(gè)加工要有名字,通常是動(dòng)詞短語,簡(jiǎn)明地描述完成什么加工。在分層的數(shù)據(jù)流圖中,加工還應(yīng)編號(hào)。(3)數(shù)據(jù)存儲(chǔ)。數(shù)據(jù)存儲(chǔ)又稱文件,是存儲(chǔ)數(shù)據(jù)的工具,它是數(shù)據(jù)流在加工過程中產(chǎn)生的臨時(shí)文件或加工過程中需要查找的信息,它可以使數(shù)據(jù)庫文件或任何形式的數(shù)據(jù)組織。指向文件的數(shù)據(jù)流可以看成是寫入文件或查詢文件,從文件中引出的數(shù)據(jù)流可以理解為從文件讀取數(shù)據(jù)或得到查詢結(jié)果。數(shù)據(jù)流反映了系統(tǒng)中流動(dòng)的數(shù)據(jù),表現(xiàn)出動(dòng)態(tài)數(shù)據(jù)的特征;數(shù)據(jù)存儲(chǔ)反映了系統(tǒng)中靜態(tài)的數(shù)據(jù),表現(xiàn)出靜態(tài)數(shù)據(jù)的特征上一頁下一頁返回12.2結(jié)構(gòu)化分析方法

(4)數(shù)據(jù)源點(diǎn)和終點(diǎn)。數(shù)據(jù)源點(diǎn)和終點(diǎn)是系統(tǒng)外部環(huán)境中的實(shí)體(包括人員、組織或其他軟件),統(tǒng)稱為外部實(shí)體,表示系統(tǒng)中數(shù)據(jù)的來源或歸宿。它在數(shù)據(jù)流圖中僅僅是一個(gè)符號(hào),并不需要以軟件的形式進(jìn)行設(shè)計(jì)和實(shí)現(xiàn)。在圖12-3中,學(xué)生是一個(gè)數(shù)據(jù)源點(diǎn)、學(xué)生科和各系處既是數(shù)據(jù)源點(diǎn),也是數(shù)據(jù)終點(diǎn)。2.?dāng)?shù)據(jù)流與加工之間的關(guān)系在數(shù)據(jù)流圖中,如果有兩個(gè)以上數(shù)據(jù)流指向一個(gè)加工,或者是從一個(gè)加工中引出兩個(gè)以上的數(shù)據(jù)流,這些數(shù)據(jù)流之間往往存在一定關(guān)系。使用如圖12-5所示的符號(hào)來表示。其中“”表示相鄰的一對(duì)數(shù)據(jù)流同時(shí)出現(xiàn);“”表示相鄰的兩個(gè)數(shù)據(jù)流只取其一。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法3.分層的數(shù)據(jù)流圖對(duì)于復(fù)雜的實(shí)際問題,采用一個(gè)數(shù)據(jù)流圖是不夠的,需要按照實(shí)際問題的層次結(jié)構(gòu)進(jìn)行逐步分解,并以分層的數(shù)據(jù)流圖反映這種結(jié)構(gòu)關(guān)系。在多層數(shù)據(jù)流圖中,先把整個(gè)數(shù)據(jù)處理看成是一個(gè)加工,稱為頂層流圖,然后將其進(jìn)行細(xì)化,得到若干中間層流圖,最后得到無法在劃分的底層流圖。層次上處于上面的稱為父圖,由父圖推導(dǎo)出來的圖稱為子圖。頂層流圖僅包含一個(gè)加工,它代表被開發(fā)系統(tǒng),它的輸入流是該系統(tǒng)的輸入數(shù)據(jù),輸出流是系統(tǒng)的輸出數(shù)據(jù)。頂層流圖的作用在于表明被開發(fā)系統(tǒng)的范圍,以及它和周圍環(huán)境的數(shù)據(jù)交換條件。底層流圖是指其加工不須再做分解的數(shù)據(jù)流圖,其加工稱為“原子加工”。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法中間層流圖則表示對(duì)其上層父圖的細(xì)化,它的每一加工可以繼續(xù)細(xì)化,形成子圖。中間層次的多少視系統(tǒng)的復(fù)雜程度而定。4.?dāng)?shù)據(jù)流圖的畫法畫數(shù)據(jù)流圖的基本步驟概括地說,就是自外向內(nèi),自頂向下,逐層細(xì)化,求善求精。需要先對(duì)給定的問題進(jìn)行分析,確定系統(tǒng)的邊界或范圍;然后考慮系統(tǒng)內(nèi)部,鮮花加工的輸入和輸出,再畫加工的內(nèi)部,具體步驟如下。(1)識(shí)別系統(tǒng)的輸入和輸出,畫出基本系統(tǒng)模型基本系統(tǒng)模型也成為頂層圖,它只包含一個(gè)加工,用以表示被開發(fā)的系統(tǒng)。在系統(tǒng)分析初期,系統(tǒng)的功能需求等還不很明確,為了防止遺漏,不妨先將范圍定得大一些。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法系統(tǒng)邊界確定后,越過邊界的數(shù)據(jù)流就是系統(tǒng)的輸入或輸出,將輸入與輸出用加工符號(hào)連接起來,并加上輸入數(shù)據(jù)來源和輸出數(shù)據(jù)去向就形成了頂層圖。頂層圖的作用在于標(biāo)明被開發(fā)系統(tǒng)的范圍及其周圍環(huán)境的數(shù)據(jù)交換關(guān)系。(2)把頂層圖細(xì)化為系統(tǒng)的功能級(jí)數(shù)據(jù)模型不再分解的加工稱為基本加工。一般將層號(hào)從0開始編號(hào),采用自頂向下的原則,描繪系統(tǒng)的主要功能。畫0層數(shù)據(jù)流圖時(shí),分解頂層的系統(tǒng)為若干子系統(tǒng)(加工),決定每個(gè)子系統(tǒng)間的數(shù)據(jù)接口和活動(dòng)關(guān)系。(3)對(duì)功能級(jí)數(shù)據(jù)流圖中描繪的主要功能進(jìn)一步細(xì)化上一頁下一頁返回12.2結(jié)構(gòu)化分析方法同樣運(yùn)用“由外向里”方式對(duì)每個(gè)加工進(jìn)行分析,如果在該加工內(nèi)部還有數(shù)據(jù)流,則可將該加工分成若干個(gè)子加工,并用一些數(shù)據(jù)流把子加工連接起來,即可畫出二級(jí)細(xì)化圖。二級(jí)細(xì)化圖可在一級(jí)細(xì)化圖的基礎(chǔ)上畫出,也可單獨(dú)畫出該加工的二級(jí)細(xì)化圖,二級(jí)細(xì)化圖也稱為該加工的子圖。(4)在畫出了每個(gè)層次的子圖后,應(yīng)當(dāng)進(jìn)行檢查和修改,主要應(yīng)當(dāng)注意以下幾個(gè)方面。①數(shù)據(jù)流圖上所有圖形符號(hào)只限于前述的四種基本圖形元素,缺一不可。②命名。圖上每一個(gè)元素都必須有名字,使用能夠反映功能特點(diǎn)的名字來命名。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法③畫數(shù)據(jù)流而不是控制流。數(shù)據(jù)流反映系統(tǒng)“做什么”,不反映“如何做”,因此箭頭上的數(shù)據(jù)流名稱只能是名詞或名詞短語,整個(gè)圖中不反映加工的執(zhí)行順序。④每個(gè)加工至少有一個(gè)輸入數(shù)據(jù)流和一個(gè)輸出數(shù)據(jù)流,反映出此加工數(shù)據(jù)的來源與加工的結(jié)果。⑤編號(hào)。如果一張數(shù)據(jù)流圖中的某個(gè)加工分解成另一個(gè)數(shù)據(jù)流圖時(shí),則上層圖為父圖,直接下層圖為子圖。子圖及其所有的加工都應(yīng)編號(hào),如圖12-6所示。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法⑥父圖與子圖的平衡。子圖的輸入/輸出數(shù)據(jù)流與父圖相應(yīng)加工的輸入/輸出數(shù)據(jù)流必須一致,即父圖與子圖的平衡。⑦局部數(shù)據(jù)存儲(chǔ)。當(dāng)某層數(shù)據(jù)流圖中的數(shù)據(jù)存儲(chǔ)不是父圖中相應(yīng)加工的外部接口,而只是本圖中某些加工之間的數(shù)據(jù)接口時(shí),稱這些數(shù)據(jù)存儲(chǔ)為局部數(shù)據(jù)存儲(chǔ)。⑧提高數(shù)據(jù)流圖的易懂性。注意合理分解,要把一個(gè)加工分解成幾個(gè)功能相對(duì)獨(dú)立的子加工,這樣可以減少加工之間的輸入、輸出數(shù)據(jù)流的數(shù)據(jù),增加數(shù)據(jù)流圖的可理解性。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法12.2.3數(shù)據(jù)字典數(shù)據(jù)字典的任務(wù)是對(duì)于數(shù)據(jù)流圖中出現(xiàn)的所有被命名的圖形元素在數(shù)據(jù)字典中作為一個(gè)詞條加以定義,使得每一個(gè)圖形元素的名字都有一個(gè)確切的解釋。數(shù)據(jù)字典是關(guān)于數(shù)據(jù)信息的集合,也就是對(duì)數(shù)據(jù)流圖中包含的所有元素定義的集合,是數(shù)據(jù)流圖的補(bǔ)充工具。數(shù)據(jù)流圖與數(shù)據(jù)字典共同構(gòu)成系統(tǒng)的邏輯模型,是需求規(guī)格說明書的主要組成部分。在數(shù)據(jù)字典的定義中,可以使用下面的符號(hào),其中A、B、C都是數(shù)據(jù)元素。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法A=B+CA由B和C構(gòu)成A=[B|C]A由B或C構(gòu)成A=(B)B在A中可以出現(xiàn),也可以不出現(xiàn)A={B}A有0個(gè)或多個(gè)重復(fù)的B構(gòu)成數(shù)據(jù)字典中的所有定義應(yīng)是嚴(yán)密的、精確的,不可有半點(diǎn)模糊,不能有二義性。在數(shù)據(jù)字典中,通常有四類條目,即數(shù)據(jù)流、數(shù)據(jù)元素、數(shù)據(jù)存儲(chǔ)、加工邏輯和源點(diǎn)及終點(diǎn)。(1)數(shù)據(jù)流。數(shù)據(jù)流條目給出了DFD中數(shù)據(jù)流的定義,通常列出該數(shù)據(jù)流的各組成數(shù)據(jù)項(xiàng)。數(shù)據(jù)流條目包含的主要內(nèi)容有數(shù)據(jù)流名、數(shù)據(jù)流別名、說明、數(shù)據(jù)流來源、數(shù)據(jù)流趨向、數(shù)據(jù)流組成、數(shù)據(jù)流流通量等。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法(2)數(shù)據(jù)元素。數(shù)據(jù)元素是不可再分割的數(shù)據(jù)單元,它直接反映事物的某一特征。對(duì)于這些數(shù)據(jù)元素必須在數(shù)據(jù)字典中進(jìn)行描述。數(shù)據(jù)元素條目主要包括數(shù)據(jù)元素名、類型、長(zhǎng)度、取值范圍和相關(guān)的數(shù)據(jù)元素及數(shù)據(jù)結(jié)構(gòu)。(3)數(shù)據(jù)存儲(chǔ)。數(shù)據(jù)存儲(chǔ)是數(shù)據(jù)結(jié)構(gòu)保存的地方。數(shù)據(jù)存儲(chǔ)條目主要包含數(shù)據(jù)存儲(chǔ)名、簡(jiǎn)要描述、輸入數(shù)據(jù)、輸出數(shù)據(jù)、組成、存儲(chǔ)方式和存儲(chǔ)頻率等。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法(4)加工邏輯。加工邏輯條目用來說明數(shù)據(jù)流圖中基本加工的處理邏輯,由于上層的加工時(shí)由下層的基本加工組合而來的,只要有了基本加工的說明,就可以理解其他的加工了。加工邏輯條目主要包括加工名、加工編號(hào)、簡(jiǎn)要描述、輸入數(shù)據(jù)流、輸出數(shù)據(jù)流、加工邏輯等。(5)源點(diǎn)及終點(diǎn)。對(duì)于一個(gè)數(shù)據(jù)處理系統(tǒng)來說,源點(diǎn)和終點(diǎn)應(yīng)當(dāng)少一些比較好。如果過多就缺乏獨(dú)立性,人機(jī)界面太復(fù)雜,這是要考慮減少一些,以提高系統(tǒng)的獨(dú)立性。源點(diǎn)及終點(diǎn)條目一般包括外部實(shí)體名、簡(jiǎn)要描述、有關(guān)數(shù)據(jù)流、數(shù)目等。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法12.2.4軟件需求規(guī)格說明書軟件需求規(guī)格說明書作為產(chǎn)品需求的最終成果,必須具有綜合性,包括所有的需求。軟件需求規(guī)格說明書主要有三個(gè)作用:作為用戶和軟件開發(fā)人員之間的合同;作為開發(fā)人員進(jìn)行設(shè)計(jì)和編程的根據(jù);作為軟件開發(fā)完成后驗(yàn)收的依據(jù)。編寫軟件需求規(guī)格說明書時(shí),應(yīng)該完整、一致、精確、無二義性,同時(shí)又要簡(jiǎn)明、易懂、易修改。它越精確,以后出現(xiàn)錯(cuò)誤、混淆、反復(fù)的可能性就越小。如“系統(tǒng)查詢等待時(shí)間很短”等詞語,是含糊不清的描述,驗(yàn)收時(shí)無法檢查,而“查詢等待時(shí)間不超過5秒”就是精確的描述,驗(yàn)收時(shí)就可檢查是否達(dá)到這個(gè)要求。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法軟件需求規(guī)格說明書最終要得到用戶的認(rèn)可,所以用戶要能看得懂,并且還發(fā)現(xiàn)和指出其中的錯(cuò)誤。由于用戶往往不是一個(gè)人,而是企業(yè)中各個(gè)部門的若干人,他們可能提出相互沖突的要求,這就需要協(xié)調(diào)和解決這些沖突,在需求說明書中用戶要求的應(yīng)該是一致的、無二義性的。軟件需求說明書的內(nèi)容和推薦書寫參考格式如下。(1)引言。包括以下部分:①編寫目的:說明編寫需求規(guī)格說明書的目的,指明讀者。②項(xiàng)目背景:包括項(xiàng)目的委托單位、開發(fā)單位和主管單位;該系統(tǒng)軟件與其他系統(tǒng)的關(guān)系。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法③定義:列出文檔中所用到的各種術(shù)語及縮寫的含義。④參考資料:列出項(xiàng)目的各種核準(zhǔn)批文、項(xiàng)目開發(fā)計(jì)劃,文檔所引用的資料、標(biāo)準(zhǔn)和規(guī)范;列出資料的作者、標(biāo)題、編號(hào)、發(fā)表日期、出版單位或資料來源等。(2)任務(wù)概述:主要包括目標(biāo)、運(yùn)行環(huán)境、條件和限制等。(3)數(shù)據(jù)描述:主要包括靜態(tài)數(shù)據(jù)、動(dòng)態(tài)數(shù)據(jù)、數(shù)據(jù)庫描述、數(shù)據(jù)流圖、數(shù)據(jù)字典、系統(tǒng)接口說明和內(nèi)部接口等。上一頁下一頁返回12.2結(jié)構(gòu)化分析方法(4)功能需求:主要包括功能劃分和功能描述。(5)性能需求:主要包括數(shù)據(jù)精確度、時(shí)間特性(如響應(yīng)時(shí)間、更新處理時(shí)間、數(shù)據(jù)轉(zhuǎn)換與傳輸時(shí)間、運(yùn)行時(shí)間等)、適應(yīng)性等。(6)運(yùn)行需求:主要包括用戶界面(如屏幕格式、報(bào)表格式、菜單格式、輸入輸出時(shí)間等)、硬件接口、軟件接口和故障處理。(7)其他需求:如可使用性、安全保密、可維護(hù)性和可移植性等。上一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法12.3.1軟件設(shè)計(jì)概述1.軟件設(shè)計(jì)的基礎(chǔ)軟件設(shè)計(jì)的基本目標(biāo)是用比較抽象概括的方式確定目標(biāo)系統(tǒng)如何完成預(yù)定的任務(wù),也就是說,軟件設(shè)計(jì)是確定系統(tǒng)的物理模型。軟件設(shè)計(jì)是開發(fā)階段最重要的步驟。從工程管理的角度來看可分為兩步:(1)總體設(shè)計(jì):將軟件需求轉(zhuǎn)化為軟件體系結(jié)構(gòu)、確定系統(tǒng)及接口、全局?jǐn)?shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)庫模式。(2)詳細(xì)設(shè)計(jì):確立每個(gè)模塊的實(shí)現(xiàn)算法和局部數(shù)據(jù)結(jié)構(gòu),用適當(dāng)方法表示算法和數(shù)據(jù)結(jié)構(gòu)的細(xì)節(jié)。下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法從技術(shù)觀點(diǎn)來看,軟件設(shè)計(jì)包括軟件結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)、過程設(shè)計(jì)等4個(gè)步驟。(1)結(jié)構(gòu)設(shè)計(jì):定義軟件系統(tǒng)各主要部件之間的關(guān)系。(2)數(shù)據(jù)設(shè)計(jì):將分析時(shí)創(chuàng)建的模型轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)的定義。(3)接口設(shè)計(jì):描述軟件內(nèi)部、軟件和協(xié)作系統(tǒng)之間以及軟件與人之間如何通信。(4)過程設(shè)計(jì):把系統(tǒng)結(jié)構(gòu)部件轉(zhuǎn)換成軟件的過程描述。2.軟件設(shè)計(jì)的基本原理和原則軟件設(shè)計(jì)過程中應(yīng)該遵循的基本原理和原則如下:上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法(1)模塊化。模塊化就是把軟件劃分成獨(dú)立命名且可獨(dú)立訪問的模塊,每個(gè)模塊完成一個(gè)子功能,把這些模塊集成起來構(gòu)成一個(gè)整體,可以完成指定的功能滿足用戶的需求。模塊化是為了把復(fù)雜的問題自頂向下逐層分解成許多容易解決的問題,原來的問題也就容易解決了。模塊化是程序結(jié)構(gòu)清晰,容易閱讀、理解、測(cè)試和調(diào)試。模塊的劃分需要合理,避免劃分地過多或過少。(2)抽象。抽象是人類在認(rèn)識(shí)復(fù)雜現(xiàn)象的過程中使用的最強(qiáng)有力的思維工具。抽象就是抽出事物的本質(zhì)特征,將相似的方面集中和概括起來,而暫時(shí)不考慮它們的細(xì)節(jié),暫時(shí)忽略它們之間的差異。在軟件設(shè)計(jì)時(shí),可以有不同層次的抽象。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法在最高的抽象層次上,可以使用問題所處環(huán)境的語言概括地描述問題的解法。而在較低的抽象層次上,則采用過程化的方法,使用能夠直接實(shí)現(xiàn)的方式來描述算法。(3)信息隱藏。應(yīng)用模塊化原理時(shí),自然會(huì)產(chǎn)生的一個(gè)問題是“為了得到最好的一組模塊,應(yīng)該怎樣分解軟件呢?”。信息隱藏原理指出:設(shè)計(jì)和確定模塊時(shí),應(yīng)使得一個(gè)模塊內(nèi)包含的信息(過程和數(shù)據(jù))對(duì)于不需要這些信息的模塊來說,是不能訪問的。通過抽象,可以確定組成軟件的過程或信息實(shí)體,而通過信息隱藏,則可定義或?qū)嵤?duì)模塊的過程細(xì)節(jié)和局部數(shù)據(jù)的存取限制。(4)模塊獨(dú)立性。模塊獨(dú)立性是指每個(gè)模塊完成一個(gè)相對(duì)獨(dú)立的特定子功能,并且和其他模塊之間的關(guān)系很簡(jiǎn)單。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法模塊獨(dú)立性的高低是設(shè)計(jì)好壞的關(guān)鍵,而設(shè)計(jì)又是決定軟件質(zhì)量的關(guān)鍵環(huán)節(jié)。模塊的獨(dú)立程度額可以有兩個(gè)定性標(biāo)準(zhǔn)衡量,即內(nèi)聚性和耦合性。內(nèi)聚性指對(duì)模塊功能強(qiáng)度的度量。若一個(gè)模塊內(nèi)各元素(語句之間、程序段之間)聯(lián)系越緊密,則它的內(nèi)聚性就越高。圖12-7給出了內(nèi)聚的分類及它們之間內(nèi)聚程度的排列順序。內(nèi)聚性指對(duì)模塊功能強(qiáng)度的度量。若一個(gè)模塊內(nèi)各元素(語句之間、程序段之間)聯(lián)系越緊密,則它的內(nèi)聚性就越高。圖12-7給出了內(nèi)聚的分類及它們之間內(nèi)聚程度的排列順序。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法耦合性指對(duì)軟件系統(tǒng)結(jié)構(gòu)中的各模塊間相互聯(lián)系緊密程度的一種度量。模塊之間聯(lián)系越緊密,其耦合性就越強(qiáng),模塊的獨(dú)立性則越差。圖12-8給出了耦合的分類以及它們之間耦合性強(qiáng)弱的順序。一般來說,要求模塊之間的耦合盡可能弱,即模塊盡可能獨(dú)立,且要求模塊的內(nèi)聚程度盡可能高。內(nèi)聚性和耦合性是一個(gè)問題的兩個(gè)方面,耦合性程度弱的模塊,其內(nèi)聚程度一定高。因而,劃分模塊的時(shí)候,盡量做到高內(nèi)聚低耦合,提高模塊的獨(dú)立性。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法12.3.2總體設(shè)計(jì)1.總體設(shè)計(jì)基本任務(wù)總體設(shè)計(jì)也稱概要設(shè)計(jì),它指把需求分析階段所得到的系統(tǒng)功能的層次結(jié)構(gòu)組合起來成為一個(gè)系統(tǒng)。具體來說,總體設(shè)計(jì)階段的基本任務(wù)如下。(1)設(shè)計(jì)軟件系統(tǒng)結(jié)構(gòu)。通常把總體設(shè)計(jì)分成兩個(gè)主要的階段,即系統(tǒng)設(shè)計(jì)和結(jié)構(gòu)設(shè)計(jì)。其中系統(tǒng)設(shè)計(jì)用于確定系統(tǒng)的具體實(shí)現(xiàn)方案;結(jié)構(gòu)設(shè)計(jì)用于確定軟件結(jié)構(gòu),也就是確定系統(tǒng)中每個(gè)程序是由哪些模塊組成的,以及這些模塊之間的關(guān)系,其設(shè)計(jì)過程如圖12-9所示。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法(2)數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫設(shè)計(jì)。數(shù)據(jù)設(shè)計(jì)師實(shí)現(xiàn)需求定義和規(guī)格說明中提出的數(shù)據(jù)對(duì)象的邏輯表示。(3)編寫總體設(shè)計(jì)文檔??傮w設(shè)計(jì)階段的文檔有總體設(shè)計(jì)說明書、數(shù)據(jù)庫設(shè)計(jì)說明書和集成測(cè)試計(jì)劃等。(4)總體設(shè)計(jì)評(píng)審。在文檔編寫完成后,要對(duì)設(shè)計(jì)部分是否完整地實(shí)現(xiàn)了需求中規(guī)定的功能、性能等要求,設(shè)計(jì)方案的可行性,關(guān)鍵的處理以及內(nèi)外部接口定義正確性、有效性,各部分之間的一致性等進(jìn)行評(píng)審,以免在以后的設(shè)計(jì)中出現(xiàn)大的問題而返工。2.總體設(shè)計(jì)的圖形工具—結(jié)構(gòu)圖上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法在結(jié)構(gòu)化設(shè)計(jì)方法中,常用結(jié)構(gòu)圖(StructureChart,SC),也稱為程序結(jié)構(gòu)圖,它是由Yordon提出的進(jìn)行軟件結(jié)構(gòu)設(shè)計(jì)的圖形工具。其基本圖形符號(hào)及含義,見表12-1。根據(jù)結(jié)構(gòu)化設(shè)計(jì)思想,結(jié)構(gòu)圖構(gòu)成的基本形式有三種,即順序結(jié)構(gòu)、選擇結(jié)和循環(huán)結(jié)構(gòu),如圖12-10所示。圖12-10(a)是最基本的調(diào)用形式,順序結(jié)構(gòu)。此外還有一些附加的符號(hào),可以表示模塊的選擇調(diào)用或循環(huán)調(diào)用。圖12-10(b)表示當(dāng)模塊M中某個(gè)判定為真時(shí)調(diào)用模塊A,為假時(shí)調(diào)用模塊B。圖12-10(c)表示模塊M循環(huán)調(diào)用模塊A。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法結(jié)構(gòu)圖有4種模塊類型,即傳入模塊、傳出模塊、變換模塊以及協(xié)調(diào)模塊。如圖12-11所示。傳入模塊:從下級(jí)模塊取得數(shù)據(jù),經(jīng)處理再將其傳送給上級(jí)模塊。傳出模塊:從上級(jí)模塊取得數(shù)據(jù),經(jīng)處理再將其傳送給下屬模塊。變換模塊:從上級(jí)模塊取得數(shù)據(jù),進(jìn)行特定的處理,轉(zhuǎn)換成其他形式,再傳送給上級(jí)模塊。協(xié)調(diào)模塊:對(duì)所有下屬模塊進(jìn)行協(xié)調(diào)和管理。3.總體設(shè)計(jì)的方法上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法總體設(shè)計(jì)采用結(jié)構(gòu)化設(shè)計(jì)方法(SD),它是從整個(gè)程序結(jié)構(gòu)出發(fā),突出程序模塊的一種設(shè)計(jì)方法。它對(duì)確定結(jié)構(gòu)采用了面向貫穿系統(tǒng)的數(shù)據(jù)流的方法,因此也稱為“面向數(shù)據(jù)流的設(shè)計(jì)”。該方法由美國IBM公司L.Constantine和E.Yordon等人于1974年提出,與結(jié)構(gòu)化分析(SA)銜接,構(gòu)成完整的結(jié)構(gòu)化分析與設(shè)計(jì)技術(shù),是目前使用最廣泛的軟件設(shè)計(jì)方法之一。(1)數(shù)據(jù)流圖的類型。面向數(shù)據(jù)流的設(shè)計(jì)方法把數(shù)據(jù)流圖映射成軟件結(jié)構(gòu),要把數(shù)據(jù)流圖(DFD)映射為軟件結(jié)構(gòu),首先必須研究DFD的類型。對(duì)于各種軟件系統(tǒng),不論DFD如何龐大和復(fù)雜,一般都可分為變換型和事務(wù)型。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法①變換型數(shù)據(jù)流圖。變換型數(shù)據(jù)流圖由輸入流、變換流和輸出流組成。在輸入流中,信息由外部數(shù)據(jù)轉(zhuǎn)換為內(nèi)部形式進(jìn)入系統(tǒng);在變換流中,對(duì)內(nèi)部形式的信息進(jìn)行一系列加工處理,得到內(nèi)部形式的結(jié)果;在輸出流中,信息由內(nèi)部形式的結(jié)果轉(zhuǎn)換為外部形式的數(shù)據(jù)流出系統(tǒng),如圖12-12所示。②事務(wù)型數(shù)據(jù)流圖。事務(wù)型數(shù)據(jù)流是一個(gè)數(shù)據(jù)流經(jīng)過某個(gè)加工后,有若干平行數(shù)據(jù)流流出,此輸入數(shù)據(jù)流稱為事務(wù)流,此加工稱為事務(wù)中心,若干平行數(shù)據(jù)流稱為事務(wù)路徑。當(dāng)事務(wù)流中的事務(wù)送到事務(wù)中心后,事務(wù)中心分析每一事物,確定其類型,根據(jù)事物類型選擇一個(gè)事物路徑繼續(xù)進(jìn)行處理,如圖12-13所示。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法(2)面向數(shù)據(jù)流的結(jié)構(gòu)化設(shè)計(jì)過程①首先研究、分析和審查數(shù)據(jù)流圖。從軟件的需求規(guī)格說明書中弄清數(shù)據(jù)流加工的過程。②然后根據(jù)數(shù)據(jù)流圖決定問題的類型。數(shù)據(jù)處理問題典型的類型有兩種:變換型和事務(wù)型。針對(duì)兩種不同的類型分別進(jìn)行分析處理。③由數(shù)據(jù)流圖推導(dǎo)出系統(tǒng)的初始結(jié)構(gòu)圖。④利用一些試探性原則來改進(jìn)系統(tǒng)的初始結(jié)構(gòu)圖,知道得到符合要求的結(jié)構(gòu)圖為止。⑤修改和補(bǔ)充數(shù)據(jù)字典。⑥制定測(cè)試計(jì)劃。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法(3)結(jié)構(gòu)化設(shè)計(jì)的準(zhǔn)則。大量實(shí)踐表明,以下的設(shè)計(jì)準(zhǔn)則可以借鑒為設(shè)計(jì)的指導(dǎo)和對(duì)軟件結(jié)構(gòu)圖進(jìn)行優(yōu)化的條件。①提高模塊獨(dú)立性。模塊獨(dú)立性是結(jié)構(gòu)設(shè)計(jì)好壞的最重要指標(biāo)。設(shè)計(jì)出軟件的初步結(jié)構(gòu)以后,應(yīng)該分析這個(gè)結(jié)構(gòu),通過模塊分解或合并,力求降低耦合提高內(nèi)聚。②模塊規(guī)模應(yīng)該適中。過大的模塊往往是由于分解不充分;模塊過小,則開銷大于有效操作,而且模塊數(shù)目過多將使系統(tǒng)接口復(fù)雜。③深度、寬度、扇出和扇入都應(yīng)適當(dāng)。深度表示軟件結(jié)構(gòu)中控制的層數(shù),寬度值最大模塊的層的控制跨度,扇入指調(diào)用一個(gè)給定模塊的模塊個(gè)數(shù),扇出指由一個(gè)模塊直接調(diào)用的其他模塊數(shù)。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法④模塊的作用域應(yīng)該在控制域之內(nèi)。在一個(gè)設(shè)計(jì)得很好的系統(tǒng)中,所有受判斷影響的模塊應(yīng)該都從屬于做出判定的那個(gè)模塊,最好局限于做出判斷的那個(gè)模塊本身及它的直屬下級(jí)模塊。⑤降低模塊之間接口的復(fù)雜程度。應(yīng)當(dāng)仔細(xì)設(shè)計(jì)模塊接口,使得信息傳遞簡(jiǎn)單并且與模塊的功能相適應(yīng)。⑥設(shè)計(jì)單入口單出口的模塊,不要使模塊之間出現(xiàn)內(nèi)容耦合。⑦模塊功能應(yīng)該可以預(yù)測(cè)。如果一個(gè)模塊可以當(dāng)作一個(gè)黑盒,即只要輸入數(shù)據(jù)同時(shí)就產(chǎn)生同樣的輸出,這個(gè)模塊的功能就是可以預(yù)測(cè)的。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法12.3.3詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)的根本任務(wù)是確定每個(gè)模塊的內(nèi)部特征,即確定每個(gè)模塊內(nèi)部的執(zhí)行過程。也就是說,經(jīng)過這個(gè)階段的工作,應(yīng)該得出對(duì)系統(tǒng)目標(biāo)的精確描述,從而在編程階段可以把這個(gè)描述直接翻譯成某種高級(jí)程序設(shè)計(jì)語言書寫的程序。在總體設(shè)計(jì)中,不但建立了軟件結(jié)構(gòu),還為每個(gè)模塊確定了它應(yīng)完成的功能,定義了模塊與其他模塊的外部接口,設(shè)計(jì)了關(guān)鍵性的算法。詳細(xì)設(shè)計(jì)以總體設(shè)計(jì)的設(shè)計(jì)說明書為依據(jù),針對(duì)每個(gè)模塊進(jìn)行設(shè)計(jì),確定每個(gè)模塊的內(nèi)部特征,即每個(gè)模塊內(nèi)部的執(zhí)行過程。通過這樣的設(shè)計(jì)過程,就為編程制定了一個(gè)周密的計(jì)劃,然后就可以直接過渡到編程階段。詳細(xì)設(shè)計(jì)階段的產(chǎn)品就是詳細(xì)設(shè)計(jì)說明書,它是編程階段的依據(jù)。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法理論研究和大量實(shí)踐表明,采用自頂向下、逐步求精的策略和單入口、單出口的控制結(jié)構(gòu)設(shè)計(jì)程序是完全可行的,而且有一系列重要優(yōu)點(diǎn)。因此,結(jié)構(gòu)化程序設(shè)計(jì)是實(shí)現(xiàn)上述目的的基本保證,是進(jìn)行詳細(xì)設(shè)計(jì)的邏輯結(jié)構(gòu)。結(jié)構(gòu)化程序設(shè)計(jì)(StructuredProgramming,SP)的概念最早由E.W.Dijkstra提出。1966年,Bohm和Jacopin證明了只用“順序”“選擇”“循環(huán)”三種基本控制結(jié)構(gòu)就能實(shí)現(xiàn)任何單入口、單出口的程序。1.結(jié)構(gòu)化程序設(shè)計(jì)方法的基本要點(diǎn)上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法(1)采用自頂向下、逐步求精的程序設(shè)計(jì)方法。在需求分析、總體設(shè)計(jì)中,都采用了自頂向下、逐步求精的方法。求精過程只適用順序、選擇、循環(huán)三種控制結(jié)構(gòu),其他的控制結(jié)構(gòu)均可由這三種結(jié)構(gòu)組合而得到,它們的流程圖如圖12-14所示。2.詳細(xì)設(shè)計(jì)的常用工具(1)程序流程圖(PFD)。程序流程圖又稱為程序框圖,是使用得最廣泛然而也是使用最混亂的一種描述程序邏輯結(jié)構(gòu)的工具。使用結(jié)構(gòu)化流程圖具有結(jié)構(gòu)清晰,易于理解和修改的優(yōu)點(diǎn),也存在只能描述執(zhí)行過程而不能描述有關(guān)的數(shù)據(jù)的缺點(diǎn)。對(duì)于流程圖的介紹,在本書的前一章已有詳細(xì)的介紹。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法(2)盒圖(NS)。盒圖(NS圖)是一種強(qiáng)制使用結(jié)構(gòu)化構(gòu)造的圖示工具,也稱為方框圖。圖12-15給出了盒圖的基本圖符。盒圖具有如下特點(diǎn):①功能域明確;②不可能任意轉(zhuǎn)移控制;③易于確定局部和全局?jǐn)?shù)據(jù)的作用域;④易于表示嵌套關(guān)系及模塊的層次關(guān)系。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法(3)問題分析圖(PAD)。問題分析圖是一種改進(jìn)的圖形描述方式,可以用來取代程序流程圖,比程序流程圖更直觀,結(jié)構(gòu)更清晰。最大的優(yōu)點(diǎn)是能夠反映和描述自頂向下、逐步求精的歷史和過程。PAD是日本日立公司于1979年提出的一種算法描述工具,它是一種由左向右展開的二維樹型結(jié)構(gòu)。PAD圖的控制流程為自上而下,從左到右地執(zhí)行。PAD提供了5種基本控制結(jié)構(gòu)的圖示,并允許遞歸使用,如圖12-16所示。圖12-15(a)中為順序結(jié)構(gòu),表示執(zhí)行A,再執(zhí)行B;圖12-15(b)中P是判定條件,P取真時(shí)執(zhí)行上面的A框,取假時(shí)執(zhí)行下面的B框;圖12-15(c)表示CASE型選擇。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法當(dāng)條件P=1時(shí),執(zhí)行A1,當(dāng)P=2時(shí),執(zhí)行A2,當(dāng)P=3時(shí),執(zhí)行A3;圖12-15(d)表示DOWHILE型循環(huán),s表示循環(huán)體;圖12-15(e)表示DOUNTIL循環(huán),s表示循環(huán)體。(4)過程設(shè)計(jì)語言(PDL)。PDL也可稱為偽碼或結(jié)構(gòu)化語言,它用于描述模塊內(nèi)部的具體算法,以便開發(fā)人員之間比較精確地進(jìn)行交流。語法是開放式的,其外層語法是確定的,而內(nèi)層語法則不確定。外層語法描述控制結(jié)構(gòu),它用類似于一般編程語言控制結(jié)構(gòu)的關(guān)鍵暗自表示,所以是確定的。內(nèi)層語法描述具體操作,考慮到不同軟件系統(tǒng)的實(shí)際操作種類繁多,內(nèi)層語法因而不確定,它可以按系統(tǒng)的具體情況和不同的設(shè)計(jì)層次靈活選用,實(shí)際上任意英語語句都可以用來描述所需的具體操作。上一頁下一頁返回12.3結(jié)構(gòu)化設(shè)計(jì)方法用它來描述詳細(xì)設(shè)計(jì),工作量比畫圖小,又容易轉(zhuǎn)化成真正的代碼。PDL可以作為注釋直接插在源程序中,可以使用普通的文本編輯工具或文字處理工具產(chǎn)生和管理,可以使用自動(dòng)處理程序?qū)崿F(xiàn)自動(dòng)由PDL生成程序代碼。PDL不足之處在于不如圖形工具形象直觀,描述復(fù)雜的條件組合與動(dòng)作之間對(duì)應(yīng)關(guān)系時(shí),不如判定表、判定樹清晰簡(jiǎn)單。上一頁返回12.4軟件測(cè)試12.4.1軟件測(cè)試概述軟件測(cè)試就是在軟件投入運(yùn)行之前,盡可能多地發(fā)現(xiàn)軟件中的錯(cuò)誤。軟件測(cè)試時(shí)保證軟件質(zhì)量、可靠性的關(guān)鍵步驟。它是對(duì)軟件規(guī)格說明、設(shè)計(jì)和編碼的最后復(fù)審。通常,軟件測(cè)試的工作量往往占軟件開發(fā)總工作量的40%以上。軟件測(cè)試在軟件生存期中橫跨兩個(gè)階段:通常在編寫每一個(gè)模塊之后就對(duì)它做必要的測(cè)試(稱為單元測(cè)試)。編碼與單元測(cè)試屬于軟件生存期的同一個(gè)階段。在結(jié)束這個(gè)階段之后,對(duì)軟件系統(tǒng)還要進(jìn)行各種綜合測(cè)試,這是軟件生命期中一個(gè)獨(dú)立的階段,稱為測(cè)試階段。下一頁返回12.4軟件測(cè)試1.軟件測(cè)試的目的Grenford.J.Myers給出了軟件測(cè)試的目的。(1)軟件測(cè)試時(shí)為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過程。(2)好的測(cè)試用例(testcase)能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤。(3)一次成功的測(cè)試是能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤。因此,測(cè)試階段的基本任務(wù)應(yīng)該是根據(jù)軟件開發(fā)階段的各種文檔資料和程序的內(nèi)部結(jié)構(gòu),精心設(shè)計(jì)一組測(cè)試用例(程序運(yùn)行時(shí)需要數(shù)據(jù),為測(cè)試設(shè)計(jì)的數(shù)據(jù)稱為測(cè)試用例),利用這些用例執(zhí)行程序,找出軟件中潛在的各種錯(cuò)誤和缺陷。上一頁下一頁返回12.4軟件測(cè)試由于軟件測(cè)試的目的是為了暴露軟件中的錯(cuò)誤,從心理學(xué)的角度來看,由程序的編寫者進(jìn)行測(cè)試是不恰當(dāng)?shù)?。一次,在綜合測(cè)試階段通常由其他人員組織來完成測(cè)試工作。此外,即使經(jīng)過了最嚴(yán)格的測(cè)試,可能仍然還有沒發(fā)現(xiàn)的錯(cuò)誤藏在程序中,測(cè)試只能找出程序中的錯(cuò)誤,不能證明程序中沒有錯(cuò)誤。2.軟件測(cè)試的原則根據(jù)軟件測(cè)試的目的,為了能設(shè)計(jì)出有效地測(cè)試方案,以及好的測(cè)試用例,軟件測(cè)試人員必須深入理解并正確運(yùn)用一下軟件測(cè)試的基本原則。上一頁下一頁返回12.4軟件測(cè)試(1)所有測(cè)試都應(yīng)該追溯到用戶需求;(2)在測(cè)試之前制定測(cè)試計(jì)劃,并嚴(yán)格執(zhí)行;(3)充分注意測(cè)試中的群集現(xiàn)象;(4)避免由程序的編寫者測(cè)試自己的程序;(5)妥善保存測(cè)試計(jì)劃、測(cè)試用例、出錯(cuò)統(tǒng)計(jì)和最終分析報(bào)告,為維護(hù)提供方便。上一頁下一頁返回12.4軟件測(cè)試12.4.2測(cè)試的主要方法軟件測(cè)試方法有很多種,一般可分為兩大類:動(dòng)態(tài)測(cè)試方法和靜態(tài)測(cè)試方法。其中動(dòng)態(tài)測(cè)試方法又根據(jù)測(cè)試用例的設(shè)計(jì)方法不同,分為黑盒測(cè)試和白盒測(cè)試兩類;靜態(tài)測(cè)試包括代碼檢查、靜態(tài)結(jié)構(gòu)分析和代碼質(zhì)量度量等。1.靜態(tài)測(cè)試靜態(tài)測(cè)試是指被測(cè)試程序不能在機(jī)器上運(yùn)行,也就是不執(zhí)行程序,而只是對(duì)程序文本進(jìn)行檢查,通過閱讀和討論,分析和發(fā)現(xiàn)程序中的錯(cuò)誤。2.動(dòng)態(tài)檢查上一頁下一頁返回12.4軟件測(cè)試動(dòng)態(tài)檢查的關(guān)鍵是使用設(shè)計(jì)高效、合理的測(cè)試用例。測(cè)試用例就是為測(cè)試設(shè)計(jì)的數(shù)據(jù),由測(cè)試輸入數(shù)據(jù)和預(yù)期的輸出結(jié)果兩部分組成。測(cè)試用例的設(shè)計(jì)方法般分為兩類:黑盒測(cè)試和白盒測(cè)試。(1)黑盒測(cè)試。黑盒測(cè)試把被測(cè)試對(duì)象看成一個(gè)黑盒子,測(cè)試人員完全不考程序的內(nèi)部結(jié)構(gòu)和處理過程,只在軟件的接口處進(jìn)行測(cè)試,依據(jù)需求規(guī)格說明書,檢查程序是否滿足功能要求。因此,黑盒測(cè)試又稱為功能測(cè)試或數(shù)據(jù)驅(qū)動(dòng)測(cè)試。通過黑盒測(cè)試主要發(fā)現(xiàn)以下錯(cuò)誤:是否有不正確或遺漏了的功能;在接口上,能否正確地接受輸入數(shù)據(jù),能否產(chǎn)生正確地輸出信息;訪問外部信息是否有錯(cuò);性能上是否滿足要求等。上一頁下一頁返回12.4軟件測(cè)試用黑盒測(cè)試發(fā)現(xiàn)程序中的錯(cuò)誤,必須在所有可能的輸入條件和輸出條件中確定測(cè)試數(shù)據(jù),來檢查程序是否都能產(chǎn)生正確的輸出。(2)白盒測(cè)試。白盒測(cè)試又稱為結(jié)構(gòu)測(cè)試或邏輯驅(qū)動(dòng)測(cè)試,是對(duì)軟件的過程性細(xì)節(jié)做細(xì)致的檢查。該方法把測(cè)試對(duì)象看作一個(gè)打開的盒子,測(cè)試人員必須了解程序的內(nèi)部結(jié)構(gòu)和處理過程,以檢查處理過程的細(xì)節(jié)為基礎(chǔ),對(duì)程序中盡可能多的邏輯路徑進(jìn)行測(cè)試,檢查內(nèi)部控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)是否有錯(cuò),實(shí)際的運(yùn)行狀態(tài)與預(yù)期的狀態(tài)是否一致。上一頁下一頁返回12.4軟件測(cè)試白盒測(cè)試主要應(yīng)對(duì)程序模塊進(jìn)行如下檢查:對(duì)程序模塊的所有獨(dú)立的執(zhí)行路徑至少測(cè)試一次;對(duì)所有的邏輯判斷,取“真”和取“假”的兩種情況至少測(cè)試一次;在循環(huán)的邊界和運(yùn)行線內(nèi)執(zhí)行循環(huán)體;測(cè)試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性等。在測(cè)試階段是無法進(jìn)行窮舉測(cè)試的,為了節(jié)省時(shí)間和資源,提高測(cè)試效率,想要通過有限的測(cè)試來發(fā)現(xiàn)盡可能多的錯(cuò)誤,還需要精心設(shè)計(jì)測(cè)試用例。上一頁下一頁返回12.4軟件測(cè)試12.4.3測(cè)試用例設(shè)計(jì)1.白盒測(cè)試的測(cè)試用例設(shè)計(jì)白盒測(cè)試允許測(cè)試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息來設(shè)計(jì)或選擇測(cè)試用例,對(duì)程序所有的邏輯路徑進(jìn)行測(cè)試。白盒測(cè)試是在程序內(nèi)部進(jìn)行,主要用于完成軟件內(nèi)部操作的驗(yàn)證。白盒測(cè)試的主要技術(shù)有邏輯覆蓋測(cè)試、基本路徑測(cè)試等。(1)邏輯覆蓋測(cè)試。邏輯覆蓋測(cè)試泛指一系列以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的測(cè)試用例設(shè)計(jì)技術(shù)。程序中的邏輯表示主要有判斷、分支、條件等三種表示方式。上一頁下一頁返回12.4軟件測(cè)試①語句覆蓋。語句覆蓋是指選擇足夠多的測(cè)試用例,使被測(cè)試程序中的每語句至少執(zhí)行一次。例如在圖12-17所示的流程圖中,有一個(gè)判斷語句,從而形成了兩個(gè)語句分支,為了使每個(gè)語句都執(zhí)行一次,可以設(shè)計(jì)一下測(cè)試用例:測(cè)試用例1:輸入(i,j)=(5,5),則輸出(i

,j,x)=(5,5,5)測(cè)試用例2:輸入(i

,j)=(5,10),則輸出(i

,j,x)=(5,10,10)語句覆蓋是邏輯覆蓋中基本的覆蓋,尤其對(duì)單元測(cè)試來說。但是語句覆蓋往往沒有關(guān)注判斷中的條件有可能隱含的錯(cuò)誤。上一頁下一頁返回12.4軟件測(cè)試②路徑覆蓋。路徑覆蓋是指執(zhí)行足夠的測(cè)試用例,使程序中所有可能的路徑至少執(zhí)行一次。例如在圖12-18所示的流程圖中,存在4條路徑:ace,abd,abe,acd。要對(duì)這四條路徑進(jìn)行測(cè)試,可以設(shè)計(jì)下面的用例。測(cè)試用例1:[(A=4,B=1,X=3),(輸出略)],則可測(cè)試路徑ace測(cè)試用例2:[(A=1,B=1,X=1),(輸出略)],則可測(cè)試路徑abd測(cè)試用例3:[(A=3,B=2,X=1),(輸出略)],則可測(cè)試路徑abe上一頁下一頁返回12.4軟件測(cè)試測(cè)試用例4:[(A=2,B=1,X=1),(輸出略)],則可測(cè)試路徑acd③判定覆蓋。判定覆蓋是指使測(cè)試用例每個(gè)判斷的每個(gè)取值分支(Y或N)至少經(jīng)歷一次。根據(jù)判斷覆蓋的要求,如圖1218所示的程序,如果其中包含條件i≥j的判斷為真值和為假值的程序執(zhí)行路徑至少經(jīng)歷一次,仍然可以用語句覆蓋中的測(cè)試用例3和測(cè)試用例4。程序每個(gè)判斷中若存在多個(gè)聯(lián)立條件,僅保證判斷的真假值往往會(huì)導(dǎo)致某些單個(gè)條件的錯(cuò)誤不能被發(fā)現(xiàn)。例如,某判斷“x<1或狔>5”,其中只要一個(gè)條件取值為真,無論另外一個(gè)條件是否錯(cuò)誤,判斷的結(jié)果都為真。這說明,僅有判斷覆蓋還無法保證能查出判斷條件的錯(cuò)誤,需要更強(qiáng)的邏輯覆蓋。上一頁下一頁返回12.4軟件測(cè)試④條件覆蓋。條件覆蓋是指設(shè)計(jì)用例保證程序中每個(gè)判斷的每個(gè)條件的可取值至少執(zhí)行一次。例如圖12-19所示的程序,可以設(shè)計(jì)以下測(cè)試用例來進(jìn)行條件覆蓋測(cè)試。測(cè)試用例1:輸入(i,j)=(5,4),則輸出(i,j,x)=(5,4,5)測(cè)試用例2:輸入(i,j)=(6,9),則輸出(i,j,x)=(6,9,9)按照條件測(cè)試的測(cè)試要求,圖12-18所示程序判斷框中的條件i≥j和條件j<5,通過上面的測(cè)試用例,就能保證該條件取真值和假值的情況至少執(zhí)行一次。上一頁下一頁返回12.4軟件測(cè)試條件覆蓋深入到判斷中的每個(gè)條件,但是可能忽略全面的判斷覆蓋的要求。有必要考慮判斷—條件覆蓋。⑤判斷—條件覆蓋。判斷—條件覆蓋是指設(shè)計(jì)足夠的測(cè)試用例,使判斷中每個(gè)條件所有可能取值至少執(zhí)行一次,同時(shí)每個(gè)判斷的所有可能取值分支至少執(zhí)行一次。對(duì)圖12-20所示的程序設(shè)計(jì)以下測(cè)試用例進(jìn)行判斷—條件覆蓋。測(cè)試用例1:輸入(i,j,x)=(4,3,1),則輸出(i,j,x)=(4,3,1)上一頁下一頁返回12.4軟件測(cè)試測(cè)試用例2:輸入(i,j,x)=(9,5,0),則輸出(i,j,x)=(9,5,9)測(cè)試用例3:輸入(i,j,x)=(3,9,0),則輸出(i,j,x)=(3,9,9)按照判斷—條件覆蓋的要求,該程序的兩個(gè)判斷框的每個(gè)取值分支至少經(jīng)歷次,同時(shí)兩個(gè)判斷框中的3個(gè)條件的所有可能取值至少執(zhí)行了一次。(2)基本路徑測(cè)試?;韭窂綔y(cè)試的思想和步驟是:根據(jù)軟件過程性描述中的控制流程確定程序的環(huán)路復(fù)雜性度量,用此度量定義基本路徑集合,并由此導(dǎo)出一組測(cè)試用例對(duì)每一條獨(dú)立執(zhí)行路徑進(jìn)行測(cè)試。如圖-21所示的程序,確定環(huán)路復(fù)雜度的方法是:環(huán)路復(fù)雜度=程序流程圖中的判斷框個(gè)數(shù)+1上一頁下一頁返回12.4軟件測(cè)試環(huán)路復(fù)雜度的值即為要設(shè)計(jì)測(cè)試用例的基本路徑數(shù),該程序的環(huán)路復(fù)雜度為3,所以設(shè)計(jì)3個(gè)測(cè)試用例,覆蓋的基本路徑是abf、acef、acdf。測(cè)試用例1:[(A=1,B=0),(輸出略)],則可測(cè)試路徑abf測(cè)試用例2:[(A=3,B=1),(輸出略)],則可測(cè)試路徑acef測(cè)試用例3:[(A=3,B=3),(輸出略)],則可測(cè)試路徑acdf2.黑盒測(cè)試的測(cè)試用例設(shè)計(jì)上一頁下一頁返回12.4軟件測(cè)試黑盒測(cè)試方法又稱功能測(cè)試或數(shù)據(jù)驅(qū)動(dòng)測(cè)試,著重測(cè)試軟件功能。白盒測(cè)試在測(cè)試過程的早期階段進(jìn)行,而黑盒測(cè)試主要用于軟件的確認(rèn)測(cè)試。黑盒測(cè)試完全不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和處理過程,黑盒測(cè)試時(shí)在軟件接口處進(jìn)行,檢查和驗(yàn)證程序的功能是否符合需求規(guī)格說明書的功能說明。常用的黑盒測(cè)試方法和技術(shù)有:等價(jià)類劃分法、邊界值分析法、錯(cuò)誤推測(cè)法和因果圖等。(1)等價(jià)類劃分法。等價(jià)類劃分法是一種常用的黑盒測(cè)試法,這種方法是先把程序的所有可能的輸入劃分成若干個(gè)等價(jià)類,然后根據(jù)各等價(jià)類取相應(yīng)的測(cè)試用例。上一頁下一頁返回12.4軟件測(cè)試每個(gè)等價(jià)類中各個(gè)輸入數(shù)據(jù)度發(fā)現(xiàn)程序中錯(cuò)誤的幾率幾乎是相同的。因此,從每個(gè)等價(jià)類中只取一組數(shù)據(jù)作為測(cè)試數(shù)據(jù),這樣選取的測(cè)試數(shù)據(jù)最有代表性,最可能發(fā)現(xiàn)程序中的錯(cuò)誤,并且大大減少了需要的測(cè)試數(shù)據(jù)的數(shù)量。(2)邊界值分析法。邊界值分析法是對(duì)各種輸入、輸出范圍的邊界情況設(shè)計(jì)測(cè)試用例的方法。大量的實(shí)踐表明,程序在處理邊界值時(shí)容易出錯(cuò),因此設(shè)計(jì)一些測(cè)試用例,程序運(yùn)行在邊界情況附近,這樣揭露程序中錯(cuò)誤的可能性更大。選取的測(cè)試數(shù)據(jù)應(yīng)該剛好等于、小于和大于邊界值。上一頁下一頁返回12.4軟件測(cè)試也就是說,按照邊界值分析法,應(yīng)該選取剛好等于、稍小于和稍大于等價(jià)類邊界值的數(shù)據(jù)作為測(cè)試數(shù)據(jù),而不是選取每個(gè)等價(jià)類內(nèi)的典型值或任意值作為測(cè)試數(shù)據(jù)。通常設(shè)計(jì)測(cè)試方案時(shí)總是把等價(jià)劃分和邊界值分析法結(jié)合使用。(3)錯(cuò)誤推測(cè)法①錯(cuò)誤推測(cè)法概念。錯(cuò)誤推測(cè)法是一種憑直覺和經(jīng)驗(yàn)推測(cè)某些可能存在的錯(cuò)誤,從而針對(duì)這些可能存在的錯(cuò)誤設(shè)計(jì)測(cè)試用例的方法。這種方法沒有機(jī)械的執(zhí)行過程,主要依靠直覺和經(jīng)驗(yàn)。錯(cuò)誤推測(cè)法針對(duì)性強(qiáng),可以直接切入可能的錯(cuò)誤,直接定位,是一種非常實(shí)用、有效的方法,但是需要非常豐富的經(jīng)驗(yàn)。上一頁下一頁返回12.4軟件測(cè)試②錯(cuò)誤測(cè)試法實(shí)施步驟。首先對(duì)被測(cè)試軟件列出所有可能出現(xiàn)的錯(cuò)誤和易錯(cuò)情況表,然后基于該表設(shè)計(jì)測(cè)試用例。例如,輸入數(shù)據(jù)位0或輸出數(shù)據(jù)為0往往容易發(fā)生錯(cuò)誤;如果輸入或輸出的數(shù)據(jù)允許變化,則輸入或輸出的數(shù)據(jù)為0和1的情況是容易出錯(cuò)的情況。測(cè)試者可以設(shè)計(jì)輸入值為0或1的測(cè)試情況,以及使輸出強(qiáng)迫為0或1的測(cè)試情況。上一頁下一頁返回12.4軟件測(cè)試12.4.4軟件測(cè)試策略軟件開發(fā)經(jīng)歷了分析、設(shè)計(jì)和編程等階段,每個(gè)階段都可能產(chǎn)生各種各樣的錯(cuò)誤。為了發(fā)現(xiàn)各階段的錯(cuò)誤,測(cè)試過程應(yīng)該與開發(fā)過程類似,分步進(jìn)行,后一個(gè)步驟在邏輯上是前一個(gè)步驟的繼續(xù)。圖12-22給出了開發(fā)過程和測(cè)試過程的對(duì)應(yīng)關(guān)系。一個(gè)軟件系統(tǒng)的測(cè)試需要從個(gè)體到局部再到整個(gè)系統(tǒng)。軟件測(cè)試的步驟分為單元測(cè)試(模塊測(cè)試)、組裝測(cè)試(集成測(cè)試)、確認(rèn)測(cè)試和系統(tǒng)測(cè)試。軟件開發(fā)的過程是自頂向下的,測(cè)試則整好相反,采用自底向上、逐步集成的方法上一頁下一頁返回12.4軟件測(cè)試1.單元測(cè)試針對(duì)每個(gè)模塊進(jìn)行的測(cè)試可以從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計(jì)測(cè)試用例,多個(gè)??梢云叫小⑼瑫r(shí)地測(cè)試。單元測(cè)試主要用于發(fā)現(xiàn)詳細(xì)設(shè)計(jì)和編程時(shí)的錯(cuò)誤,需要依據(jù)詳細(xì)設(shè)計(jì)說明書和源程序清單,了解該模塊的I/O條件和模塊的邏輯結(jié)構(gòu),主要采用白盒測(cè)試,輔之以黑盒測(cè)試。由于被測(cè)試的模塊往往不是獨(dú)立的程序,它處于整個(gè)軟件結(jié)構(gòu)的某一層位置上,被其他模塊調(diào)用或調(diào)用其他模塊,其本身不能進(jìn)行單獨(dú)運(yùn)行,因此在單元測(cè)試時(shí),需要為被測(cè)模塊設(shè)計(jì)驅(qū)動(dòng)(Driver)模塊和樁(Sub)模塊。上一頁下一頁返回12.4軟件測(cè)試驅(qū)動(dòng)模塊的作用是用來模擬被測(cè)模塊的上級(jí)調(diào)用模塊,功能要比真正的上級(jí)模塊簡(jiǎn)單得多,它只完成接收測(cè)試數(shù)據(jù),以上級(jí)模塊調(diào)用被測(cè)模塊的格式驅(qū)動(dòng)被測(cè)模塊,接收被測(cè)模塊的測(cè)試結(jié)果并輸出。樁模塊用來代替被測(cè)模塊所調(diào)用的模塊,它的作用是返回被測(cè)模塊所需的信息。在模塊測(cè)試期間,主要評(píng)價(jià)模塊的下述5個(gè)特性。(1)模塊接口:在其他測(cè)試開始之前,需要首先測(cè)試模塊接口,檢查數(shù)據(jù)能否正確地通過模塊。如果數(shù)據(jù)不能正確地通過模塊,其他測(cè)試就無法進(jìn)行。(2)局部數(shù)據(jù)結(jié)構(gòu):說明不正確或不一致;初始化或默認(rèn)值錯(cuò)誤;變量名未定義或拼寫錯(cuò)誤;數(shù)據(jù)類型不相容;上溢、下溢或地址錯(cuò)誤等。上一頁下一頁返回12.4軟件測(cè)試(3)重要的執(zhí)行路徑:重要模塊要進(jìn)行基本路徑測(cè)試,仔細(xì)地選擇測(cè)試路徑是單元測(cè)試的一項(xiàng)基本任務(wù)。(4)錯(cuò)誤處理:主要測(cè)試程序?qū)﹀e(cuò)誤處理的能力,應(yīng)檢查是否存在以下問題:不能正確處理外部輸入錯(cuò)誤或內(nèi)部處理引起的錯(cuò)誤;對(duì)發(fā)生的錯(cuò)誤不能正確描述,內(nèi)容難以理解;在錯(cuò)誤處理之前,系統(tǒng)已進(jìn)行干預(yù)等。(5)邊界條件:程序最容易出錯(cuò)的地方就在邊界上,如輸入/輸出數(shù)據(jù)的等價(jià)類邊界、選擇條件和循環(huán)條件的邊界、復(fù)雜數(shù)據(jù)結(jié)構(gòu)的邊界等都應(yīng)進(jìn)行測(cè)試。2.集成測(cè)試上一頁下一頁返回12.4軟件測(cè)試集成測(cè)試是在單元測(cè)試的基礎(chǔ)上,根據(jù)模塊結(jié)構(gòu)圖將各模塊連接起來,必須精心計(jì)劃,應(yīng)提交集成測(cè)試計(jì)劃、集成測(cè)試規(guī)格說明書和集成測(cè)試分析報(bào)告。主要目標(biāo)是發(fā)現(xiàn)與接口有關(guān)的問題。集成測(cè)試可以發(fā)現(xiàn)總體設(shè)計(jì)時(shí)犯下的錯(cuò)誤。集成測(cè)試的方法有兩種,即非漸增式測(cè)試和漸增式測(cè)試。(1)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論