7程序設(shè)計(jì)和軟件工程基礎(chǔ)
,,,,,,,西北師范大學(xué)計(jì)算中心,81,第,7,,章,,程序設(shè)計(jì) 和軟件工程基礎(chǔ),7.1,程序設(shè)計(jì)風(fēng)格,,7.2,結(jié)構(gòu)化程序設(shè)計(jì),,7.3,面向?qū)ο蟪绦蛟O(shè)計(jì),,7.4,軟件工程基礎(chǔ),7,程序設(shè)計(jì)和軟件工程基礎(chǔ),隨著計(jì)算機(jī)應(yīng)用范圍的不斷擴(kuò)大和硬件環(huán)境的不斷完善,軟件的規(guī)模也越來越大,復(fù)雜性不斷增加,,如何保證軟件的正確性,驗(yàn)證軟件的正確性成為突出問題。為此在軟件設(shè)計(jì)領(lǐng)域涌現(xiàn)出結(jié)構(gòu)化程序設(shè)計(jì)、面向?qū)ο蟪绦蛟O(shè)計(jì)等技術(shù),同時(shí)將工程化引入到軟件開發(fā)中,像處理工程一樣處理軟件研制的全過程,,本章主要介紹,:,,,◇,結(jié)構(gòu)化程序設(shè)計(jì),,,◇,面向?qū)ο蟪绦蛟O(shè)計(jì),,,◇,軟件工程,7.1,程序設(shè)計(jì)風(fēng)格,____,程序與程序設(shè)計(jì),,◆,程序,是為計(jì)算機(jī)解決某一問題而編寫的指令序列,,從計(jì)算機(jī)角度來說,程序是用某種計(jì)算機(jī)所能理解并執(zhí)行的計(jì)算機(jī)語(yǔ)言描述解決問題的方法步驟,,程序,=,算法,+,數(shù)據(jù)結(jié)構(gòu),,◆,程序設(shè)計(jì),是編寫程序的過程,,◆,程序設(shè)計(jì)語(yǔ)言,是用于描述計(jì)算機(jī)所執(zhí)行操作的語(yǔ)言,,◆,程序設(shè)計(jì),主要經(jīng)歷了四個(gè)階段:,機(jī)器語(yǔ)言程序設(shè)計(jì)階段,,高級(jí)語(yǔ)言程序設(shè)計(jì)階段,,結(jié)構(gòu)化程序設(shè)計(jì)階段,,面向?qū)ο蟪绦蛟O(shè)計(jì)階段,7.1,程序設(shè)計(jì)風(fēng)格,____,語(yǔ)言與程序設(shè)計(jì)語(yǔ)言,◆,,程序設(shè)計(jì)語(yǔ)言的,發(fā)展,:,,,◇,,低級(jí)語(yǔ)言,→,高級(jí)語(yǔ)言,,,◇,,具體算法,→,程序設(shè)計(jì)方法學(xué),,,◇,,順序程序設(shè)計(jì),→,并發(fā)、并行、分布式程序設(shè)計(jì),,,◇,,非結(jié)構(gòu)化程序設(shè)計(jì),→,結(jié)構(gòu)化程序設(shè)計(jì),,,◇,,過程式程序設(shè)計(jì),→,邏輯式、函數(shù)式、對(duì)象式以及可視化程序設(shè)計(jì),,階段,年 限,語(yǔ) 言,程 序 標(biāo) 準(zhǔn),一,1946,年,~,1956,年,機(jī)器語(yǔ)言或匯編語(yǔ)言,功效、時(shí)間短、占用空間小,二,1956,年,~,1968,年,高級(jí)語(yǔ)言,易讀性、易維護(hù)性,三,,1968,年,~,現(xiàn)代高級(jí)語(yǔ)言,結(jié)構(gòu)良好性,易讀、易維護(hù),◆,,程序設(shè)計(jì)語(yǔ)言的,發(fā)展趨勢(shì),:,,,◇,,模塊化,,◇,,簡(jiǎn)明性,,◇,,形式化,,◇,,并行化,,◇,,可視化,7.1,程序設(shè)計(jì)風(fēng)格,____,面向機(jī)器的語(yǔ)言,,◆,,機(jī)器指令,,是計(jì)算機(jī)可以理解并執(zhí)行的操作命令,有完整含義,,,指令格式:,,操作碼+地址碼,,◇,操作碼,是指明該指令要完成的操作,如加、減、傳送、輸入等,,,◇,,操作數(shù),是指參加運(yùn)算的數(shù)或者數(shù)所在的單元地址,,,◆,,機(jī)器語(yǔ)言,,直接用二進(jìn)制代碼表示指令系統(tǒng)的語(yǔ)言。用機(jī)器語(yǔ)言所編寫的程序可以被計(jì)算機(jī)直接識(shí)別和執(zhí)行,,,◆,,匯編語(yǔ)言,,用一些特定的助記符形式來表示所要進(jìn)行的操作和數(shù)據(jù),又被稱為,“,符號(hào)語(yǔ)言,”,。例如:,MOV AX,1,;,MOV BX,1,;,ADD AX,BX,,,匯編語(yǔ)言編寫的程序還需要通過匯編程序,“,翻譯,”,成機(jī)器指令后才能執(zhí)行,,在不同的計(jì)算機(jī)上提供了不同的機(jī)器語(yǔ)言或匯編語(yǔ)言,所編寫的程序一般只能在同類型的計(jì)算機(jī)上運(yùn)行,所以機(jī)器語(yǔ)言和匯編語(yǔ)言被稱為,“,面向機(jī)器的語(yǔ)言,”,,相對(duì)于高級(jí)語(yǔ)言又被成為,“,低級(jí)語(yǔ)言,”,操作碼,地址碼,7.1,程序設(shè)計(jì)風(fēng)格,____,面向過程的語(yǔ)言,,◆,,高級(jí)語(yǔ)言,使用了人類的自然語(yǔ)言,采用了數(shù)學(xué)的公式描述方法;同時(shí)又能脫離對(duì)機(jī)器的要求,能在任何計(jì)算機(jī)上運(yùn)行。如:,,IF B^2-4*a*c>=0 THEN PRINT (-B+SQR(B^2-4*A*C))/(2*A),,,◆,,匯編語(yǔ)言或高級(jí)語(yǔ)言編寫的程序稱為“,源程序,”,源程序不能在計(jì)算機(jī)上直接運(yùn)行,必須將其“翻譯”成擊機(jī)器指令的“,目標(biāo)程序,”,,,◆,,編譯方式,,,◇,,編譯,,整個(gè)翻譯,整體執(zhí)行,,◇,,解釋,,逐條翻譯,逐條執(zhí)行,源程序,結(jié)果,解釋程序,,(解釋執(zhí)行),源程序,目標(biāo)文件,,.,obj,編譯程序,結(jié)果,連接程序,可執(zhí)行文件,,.exe,執(zhí)行,7.1,程序設(shè)計(jì)風(fēng)格,____,程序示例,,以,A=7+8,的計(jì)算為例,比較機(jī)器、匯編和高級(jí)語(yǔ)言不同的表達(dá)方式,,,◇,IBM-PC,機(jī)的,機(jī)器語(yǔ)言程序,:,,,1011 0000,0000,0111,: 把,7,放入累加器,A,中,,,0010 1100 0000 1000,:,8,與累加器,A,中的值相加,結(jié)果仍放入,A,中,,,1111 0100,: 停機(jī),,◇,,IBM-PC,機(jī)的,匯編程序,,,ORG 00H,:,設(shè)置程序起始地址,,,MOV A,7,: 把,7,放入累加器,A,中,,,ADD A,8,:,8,與累加器,A,中的值相加,結(jié)果仍放入,A,中,,,HALT,:,停機(jī),,◇,,高級(jí)語(yǔ)言程序,(,FORTRAN,),,,A=7+8,:,7,與,8,相加的結(jié)果放入變量,A,中,,,WRITE(*,*)A,:,在顯示器上輸出變量,A,的值,,,END,:,結(jié)束程序,7.1,程序設(shè)計(jì)風(fēng)格,____,常用,程序設(shè)計(jì)語(yǔ)言,語(yǔ)言,特 點(diǎn),FORTRAN,第一個(gè)計(jì)算機(jī)高級(jí)語(yǔ)言。面向過程,適合于科學(xué)計(jì)算,ALGOL,算法語(yǔ)言。面向過程,以子程序結(jié)構(gòu)為基礎(chǔ),COBOL,一種用于事務(wù)數(shù)據(jù)處理的通用程序設(shè)計(jì)語(yǔ)言,LISP,一種用于處理“表”的函數(shù)式程序設(shè)計(jì)語(yǔ)言,BASIC,一種交互式程序設(shè)計(jì)語(yǔ)言,簡(jiǎn)單易學(xué)、小巧靈活、使用方便,PASCAL,一種結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,簡(jiǎn)明性和結(jié)構(gòu)化,適于描述算法,PROLOG,一種處理邏輯問題的邏輯程序設(shè)計(jì)語(yǔ)言,C,一種通用程序設(shè)計(jì)語(yǔ)言,中級(jí)語(yǔ)言,主要用于系統(tǒng)程序設(shè)計(jì),Ads,一種通用的模塊化程序設(shè)計(jì)語(yǔ)言,主要特征是強(qiáng)類型化和模塊化,C++,一種以,C,語(yǔ)言為基礎(chǔ)、支持?jǐn)?shù)據(jù)抽象和面向?qū)ο蠹夹g(shù)的通用程序設(shè)計(jì)語(yǔ)言,Java,一種簡(jiǎn)捷的、面向?qū)ο蟮摹⒂糜诰W(wǎng)絡(luò)環(huán)境的、可分布執(zhí)行的程序設(shè)計(jì)語(yǔ)言,7.1,程序設(shè)計(jì)風(fēng)格,____,面向?qū)ο蟮恼Z(yǔ)言,,◆,,面向?qū)ο蟮挠?jì)算機(jī)語(yǔ)言,是一種非過程化語(yǔ)言或陳述性語(yǔ)言。使用時(shí)只要提出問題,計(jì)算機(jī)就能自動(dòng)給出計(jì)算步驟或結(jié)果,,,◆,,Visual Basic,、,Visual FoxPro,、,C++,、,Java,、,Object Pascal,等,,,◆,,面向?qū)ο笥?jì)算機(jī)語(yǔ)言的,優(yōu)點(diǎn),,,◇,,與人類的思維方法一致,,,,◇,,穩(wěn)定性好,,,◇,,可重用性好,,,◇,,可維護(hù)性好,,,◇,,易于開發(fā)大型軟件產(chǎn)品,7.1,程序設(shè)計(jì)風(fēng)格,程序設(shè)計(jì)風(fēng)格,是指編寫程序時(shí)所表現(xiàn)出的特點(diǎn)、習(xí)慣和邏輯思路,,,程序設(shè)計(jì)風(fēng)格會(huì)極大地影響軟件的質(zhì)量和可維護(hù)性,良好的程序設(shè)計(jì)風(fēng)格可以使程序結(jié)構(gòu)清晰合理,使程序代碼便于維護(hù)。因此總體而言應(yīng)該強(qiáng)調(diào)程序簡(jiǎn)單和清晰,并且是可以理解的,,著名的,“,清晰第一,,,效率第二,”,論點(diǎn)已成為當(dāng)今主導(dǎo)的程序設(shè)計(jì)風(fēng)格,,,形成良好的程序設(shè)計(jì)的風(fēng)格,需要注意以下幾個(gè)方面:,,,◇,,程序文檔與使用的符號(hào)名應(yīng)具有一定的實(shí)際含義,以便對(duì)程序功能的理解,,,◇,,數(shù)據(jù)的說明次序要規(guī)范,數(shù)據(jù)總體說明次序固定,可以使數(shù)據(jù)的屬性容易查找,有利于測(cè)試、排錯(cuò)和維護(hù),,,◇,,程序簡(jiǎn)單易懂,語(yǔ)句構(gòu)造簡(jiǎn)單直接,不應(yīng)該為了提高效率而把語(yǔ)句復(fù)雜化,,,◇,,輸入和輸出方式和格式應(yīng)盡可能方便用戶的使用,7.2,,結(jié)構(gòu)化程序設(shè)計(jì),7.2.1,結(jié)構(gòu)化程序設(shè)計(jì)的原則,,7.2.2,結(jié)構(gòu)化程序的基本結(jié)構(gòu)與特點(diǎn),,7.2.3,結(jié)構(gòu)化程序設(shè)計(jì)原則和方法的應(yīng)用,7.2.1,結(jié)構(gòu)化程序設(shè)計(jì)的原則,結(jié)構(gòu)化程序設(shè)計(jì)方法,是一種程序設(shè)計(jì)的技術(shù),采用自頂向下、逐步求精的方法和單入口,/,單出口的控制結(jié)構(gòu),,程序設(shè)計(jì)時(shí),應(yīng)先考慮總體,后考慮細(xì)節(jié);先考慮全局目標(biāo),后考慮局部目標(biāo),將一個(gè)復(fù)雜的,問題解法逐步細(xì)化成若干個(gè)簡(jiǎn)單的問題,采用模塊化組織,再進(jìn)一步分解為具體的處理步驟,每個(gè)處理步驟可以使用單一入口的控制結(jié)構(gòu),,結(jié)構(gòu)化程序設(shè)計(jì)的,主要原則,:,,,◇,,自頂向下,,,◇,逐步求精,,,,◇,,模塊化,,,◇,,限制使用,goto,語(yǔ)句,,,,采用結(jié)構(gòu)化程序設(shè)計(jì)方法編寫程序,可使程序結(jié)構(gòu)良好、易讀、易理解、易維護(hù);提高了編程工作的效率,降低了軟件開發(fā)成本,7.2.2,結(jié)構(gòu)化程序的基本結(jié)構(gòu)與特點(diǎn),,◆,,結(jié)構(gòu)化程序設(shè)計(jì)基本結(jié)構(gòu),,,◇,,順序結(jié)構(gòu),。按照程序語(yǔ)句行的自然順序,一條語(yǔ)句一條語(yǔ)句地執(zhí)行程序。順序結(jié)構(gòu)是一種最基本、最常用的程序設(shè)計(jì)結(jié)構(gòu),,◇,,選擇結(jié)構(gòu),(分支結(jié)構(gòu),),。包括簡(jiǎn)單選擇和多分支選擇結(jié)構(gòu),這種結(jié)構(gòu)可以根據(jù)設(shè)定的條件,判斷應(yīng)該選擇哪一條分支來執(zhí)行相應(yīng)的語(yǔ)句序列,,◇,,循環(huán)結(jié)構(gòu),(重復(fù)結(jié)構(gòu),),。根據(jù)給定條件,判斷是否需要重復(fù)執(zhí)行某一相同的或類似的程序段。循環(huán)結(jié)構(gòu)對(duì)應(yīng)兩類:對(duì)先判斷后執(zhí)行循環(huán)體的稱為當(dāng)型循環(huán)結(jié)構(gòu)。對(duì)先執(zhí)行循環(huán)體后判斷的稱為直到型循環(huán)結(jié)構(gòu),,使用這三種基本控制結(jié)構(gòu)就能表達(dá)出各種其它形式結(jié)構(gòu)的程序設(shè)計(jì)方法,A,B,條件,A,B,T,F,條件,A,F,T,條件,A,T,F,條件,F,A,T,順序結(jié)構(gòu) 對(duì)稱選擇結(jié)構(gòu) 非對(duì)稱選擇結(jié)構(gòu) 當(dāng)型循環(huán)結(jié)構(gòu) 直到型循環(huán)結(jié)構(gòu),7.2.3,結(jié)構(gòu)化程序設(shè)計(jì)原則和方法的應(yīng)用,,◆,,結(jié)構(gòu)化程序設(shè)計(jì)原則,,,基于對(duì)結(jié)構(gòu)化程序設(shè)計(jì)原則、方法以及結(jié)構(gòu)化程序基本構(gòu)成結(jié)構(gòu)的掌握和了解,在結(jié)構(gòu)化程序設(shè)計(jì)的具體實(shí)施中,要注意把握如下要素:,,,◇,,使用程序設(shè)計(jì)語(yǔ)言中的順序、選擇、循環(huán)等有限的控制結(jié)構(gòu)表示程序的控制邏輯,,,◇,,選用的控制結(jié)構(gòu)只準(zhǔn)許有一個(gè)入口和一個(gè)出口,,,,◇,,每個(gè)程序塊只有一個(gè)入口和一個(gè)出口,,,,◇,,復(fù)雜結(jié)構(gòu)應(yīng)該用基本控制結(jié)構(gòu)的嵌套、組合來實(shí)現(xiàn),,,,◇,,嚴(yán)格控制,GOTO,語(yǔ)句的使用,7.3,,面向?qū)ο蟪绦蛟O(shè)計(jì),,7.3.1,面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念,,7.3.2,面向?qū)ο蟮某绦蛟O(shè)計(jì),7.3.1,面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念,,雖然結(jié)構(gòu)化程序設(shè)計(jì)方法曾經(jīng)給計(jì)算機(jī)軟件業(yè)帶來了巨大進(jìn)步。但是,,20,世紀(jì),80,年代末期以來,人們注意到把結(jié)構(gòu)化程序設(shè)計(jì)方法應(yīng)用到大型軟件開發(fā)時(shí)很少取得成功。到,20,世紀(jì),90,年代前半期,面向?qū)ο蟮脑O(shè)計(jì)方法已經(jīng)成為人們開發(fā)軟件時(shí)的首選技術(shù)。今天,面向?qū)ο蠹夹g(shù)是一種非常流行的軟件開發(fā)技術(shù),,所謂面向?qū)ο缶褪侵敢粋€(gè)軟件系統(tǒng)使用對(duì)象、類、繼承、通信等,4,個(gè)概念設(shè)計(jì)和實(shí)現(xiàn)的,一個(gè)面向?qū)ο蟮某绦虻拿恳唤M成部分都是對(duì)象,計(jì)算是通過建立新的對(duì)象與對(duì)象之間的通信來執(zhí)行的。即,,面向?qū)ο?=,對(duì)象,+,類,+,繼承,+,通信,,,下面分別介紹面向?qū)ο蠓椒ㄖ袔讉€(gè)重要的基本概念,這些概念是理解和使用面向?qū)ο蠓椒ǖ年P(guān)鍵和基礎(chǔ),7.3.1,面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念,____,對(duì)象、屬性和方法,,對(duì)象是面向?qū)ο蠓椒ㄖ凶罨镜母拍睢C嫦驅(qū)ο蟪绦蛟O(shè)計(jì)方法中涉及的,對(duì)象是系統(tǒng)中用來描述客觀事物的一個(gè)實(shí)體,,是構(gòu)成系統(tǒng)的基本單位,它由一組表示靜態(tài)特征的屬性和它可執(zhí)行的一組操作組成,,組成對(duì)象的三要素:,,屬性,用于描述對(duì)象的一組特征,,事件,是對(duì)象上所發(fā)生的事情,是預(yù)先定義好的、能夠被對(duì)象識(shí)別的動(dòng)作,,,方法,是對(duì)象要執(zhí)行的操作,,,對(duì)象具有惟一性、分類性、封裝性和模塊獨(dú)立性較好等特點(diǎn),7.3.1,面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念,____,封裝性,操作描述了對(duì)象執(zhí)行的功能,若通過消息傳遞,還可以為其他對(duì)象使用。操作的過程對(duì)外是封閉的,即用戶只能看到這一操作實(shí)施后的結(jié)果。這相當(dāng)于事先已經(jīng)設(shè)計(jì)好的各種過程,只需要調(diào)用就可以了,用戶不必關(guān)心這一過程是如何編寫的,,也就是說,把對(duì)象的屬性和方法結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單位,并盡可能隱蔽對(duì)象的細(xì)節(jié),這個(gè)過程已經(jīng)封裝在對(duì)象中,用戶也看不到。對(duì)象的這一特性,就是,對(duì)象的封裝性,7.3.1,面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念,____,類和實(shí)例,類是具有共同屬性、共同方法的對(duì)象的集合,。所以,類是對(duì)象的抽象,它描述了屬于該對(duì)象類型的所有對(duì)象的性質(zhì),而,一個(gè)對(duì)象則是其對(duì)應(yīng)類的一個(gè)實(shí)例,,實(shí)例是指一個(gè)具體的對(duì)象,,例如:,Integer,是一個(gè)整型類,它描述了所有整數(shù)的性質(zhì)。因此任何整數(shù)都是整數(shù)類的對(duì)象,而一個(gè)具體的整數(shù),“,123,”,是類,Integer,的一個(gè)實(shí)例,,由類的定義可知,,類是關(guān)于對(duì)象性質(zhì)的描述,,它同對(duì)象一樣,包括一組數(shù)據(jù)屬性和數(shù)據(jù)上的合法操作,,例如,顯示一個(gè)半徑,3cm,紅顏色的圓,一個(gè)半徑,4cm,綠顏色的圓和一個(gè)半徑,1cm,黃顏色的圓。這三個(gè)圓的圓心位置、半徑大小,,和顏色均不相同,是三個(gè)不同的對(duì)象。但它們有相,,同的屬性(圓心坐標(biāo)、半徑、顏色)和相同的操作,,(顯示、放大縮小半徑、在屏幕上移動(dòng)位置等等)。,,因此,可以用,“,Circle,類,”,來定義,7.3.1,面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念,____,消息,,面向?qū)ο蟮氖澜缡峭ㄟ^對(duì)象與對(duì)象間彼此的相互合作來推動(dòng)的,對(duì)象間的這種相互合作需要一個(gè)機(jī)制協(xié)助進(jìn)行,這樣的機(jī)制稱為,“,消息,”,,,消息是一個(gè)實(shí)例與另一個(gè)實(shí)例之間傳遞的信息,,它請(qǐng)求對(duì)象執(zhí)行某一處理或回答要求的信息,它統(tǒng)一了數(shù)據(jù)流和控制流,,消息中只包含傳遞者的要求,它告訴接受者需要做哪些處理,但并不指示接受者如何完成這些處理。消息完全由接受者解釋,接受者獨(dú)立決定采用什么方式完成所需的處理,發(fā)送者對(duì)接受者不起任何控制作用,,一個(gè)對(duì)象能夠接受不同形式、不同內(nèi)容的多個(gè)消息;相同形式的消息可以送往不同的對(duì)象,不同的對(duì)象對(duì)于形式相同的消息可以有不同的解釋,能夠做出不同的反映。一個(gè)對(duì)象可以同時(shí)往多個(gè)對(duì)象傳遞信息,兩個(gè)對(duì)象也可以同時(shí)向某個(gè)對(duì)象傳遞消息,傳遞對(duì)象,消息,接口,接受對(duì)象,,操作名、參數(shù),,,7.3.1,面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念,____,消息,通常,一個(gè)消息由接受消息的對(duì)象的名稱、消息標(biāo)識(shí)符,(,也稱為消息名,),、零個(gè)或多個(gè)參數(shù)三部分組成,,例如,,MyCircle,是一個(gè)半徑,4cm,、,圓心位于,(100,200),的,Circle,類的對(duì)象,也就是,Circle,類的一個(gè)實(shí)例,當(dāng)要求它以綠顏色在屏幕上顯示自己時(shí),在,C++,語(yǔ)言中應(yīng)該向它發(fā)下列消息:,,,MyCircle,.Show(Green),,,其中,,MyCircle,是接受消息的對(duì)象的名字,,Show,是消息名,,Green,是消息的參數(shù),發(fā)送對(duì)象,消息,接口,接受對(duì)象,,操作名、參數(shù),,,7.3.1,面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念,____,繼承性,,繼承是面向?qū)ο蟮姆椒ǖ囊粋€(gè)主要特征。,繼承是使用已有的類定義新類的定義技術(shù),。已有的類可當(dāng)作基類來引用,則新類相應(yīng)地可當(dāng)作派生類來引用。廣義地說,繼承是指能夠直接獲得已有的性質(zhì)和特征,而不必重復(fù)定義它們,,面向?qū)ο筌浖夹g(shù)的許多強(qiáng)有力的功能和突出的優(yōu)點(diǎn),都來源于把類組成一個(gè)層次結(jié)構(gòu)的系統(tǒng):一個(gè)類的上層可以有父類,下層可以有子類。這種層次結(jié)構(gòu)系統(tǒng)的一個(gè)重要性質(zhì)是繼承性,一個(gè)類直接繼承其父類的描述(數(shù)據(jù)和操作)或特性,子類自動(dòng)地共享基類中定義的數(shù)據(jù)和方法,,繼承具有傳遞性,如果類,C,繼承,,類,B,,類,B,繼承類,A,,,則類,C,繼承類,A,。,,因此,一個(gè)類實(shí)際上繼承了它上層,,的全部基類的特性,也就是說,屬,,于某類的對(duì)象除了具有該類所定義,,的特性外,還具有該類上層全部基,,類定義的特性,類A,,A,類實(shí)例,a1,A,類操作,,類A,A,的變量,,A,的實(shí)例變量,,,,類,B:A,的子類,,B,的實(shí)例,b1,從,A,的繼承性,,類B,B,類操作,,繼承來的,A,的實(shí)例變量,B,的變量,,B,的實(shí)例變量,7.3.1,面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念,____,多態(tài)性,,對(duì)象的,多態(tài)性,是指在一般類中定義的屬性、方法被特殊類繼承后,可以具備不同的數(shù)據(jù)類型或表現(xiàn)不同的行為,使對(duì)象的同一個(gè)屬性或方法名在一般類及其各個(gè)特殊類中具有不同的語(yǔ)義,7.3.2,面向?qū)ο蟮某绦蛟O(shè)計(jì),____,對(duì)象方法的主要優(yōu)點(diǎn),◇,,面向?qū)ο蠓椒ê图夹g(shù),以對(duì)象為核心,。對(duì)象由數(shù)據(jù)和操作組成的封裝體,對(duì)象之間通過傳遞消息互相聯(lián)系,以模擬現(xiàn)實(shí)世界中不同事物彼此之間的聯(lián)系,使用現(xiàn)實(shí)世界的概念抽象地理解思考問題從而自然地解決問題,,,◇,,面向?qū)ο蠓椒?基于對(duì)象模型,。當(dāng)對(duì)系統(tǒng)的功能需求變化時(shí)并不會(huì)引起軟件結(jié)構(gòu)的整體變化,往往僅需作一些局部性的修改,,◇,,面向?qū)ο蠓椒?可重用性好,。軟件重用是指在不同的軟件開發(fā)過程中重復(fù)使用相同或相似軟件的過程??梢岳每芍赜玫能浖煞謽?gòu)造新的系統(tǒng),,◇,,用面向?qū)ο蠓椒ㄩ_發(fā)軟件時(shí),可以把一個(gè)大型產(chǎn)品看作是一系列本質(zhì)上相互獨(dú)立的小產(chǎn)品來處理,這樣不僅降低了開發(fā)的技術(shù)難度和成本,而且使得對(duì)開發(fā)工作的管理變得容易,軟件整體質(zhì)量也大大提高,,◇,,面向?qū)ο蟮姆椒ㄩ_發(fā)的,軟件可維護(hù)性好,,,軟件穩(wěn)定性比較好,,比較容易修改,容易理解,易于測(cè)試和調(diào)試,7.4,,軟件工程基礎(chǔ),,7.4.1,軟件工程基本概念,,7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,,7.4.3,軟件測(cè)試,,7.4.4,程序調(diào)試,7.4.1,軟件工程基本概念,____,軟件特點(diǎn),,計(jì)算機(jī)軟件,包括程序、數(shù)據(jù)及相關(guān)文檔的完整集合。其特點(diǎn)是:,,◇,,軟件是一種邏輯部件,不是硬件部件,具有很高的抽象性,,◇,,軟件生產(chǎn)沒有明顯的制作過程,一旦研制開發(fā)成功,可以大量拷貝同一內(nèi)容的副本,所以對(duì)軟件的質(zhì)量控制,必須著重在軟件開發(fā)方面下功夫,,◇,,軟件的開發(fā)、運(yùn)行對(duì)計(jì)算機(jī)系統(tǒng)具有依賴性,受計(jì)算機(jī)系統(tǒng)的限制,這導(dǎo)致了軟件移植的問題,,◇,,軟件復(fù)雜性高,成本昂貴,軟件涉及人類社會(huì)的各行各業(yè),開發(fā)常常涉及其他領(lǐng)域的專門知識(shí),開發(fā)需要投入大量、高強(qiáng)度的腦力勞動(dòng),成本高,風(fēng)險(xiǎn)大,,◇,,軟件開發(fā)涉及諸多的社會(huì)因素,許多軟件的開發(fā)和運(yùn)行涉及軟件用戶的機(jī)構(gòu)設(shè)置,體制問題以及管理方式等,甚至涉及到人們的觀念和心理,軟件知識(shí)產(chǎn)權(quán)及法律等問題,7.4.1,軟件工程基本概念,____,軟件危機(jī),,隨著計(jì)算機(jī)技術(shù)的發(fā)展和應(yīng)用領(lǐng)域的擴(kuò)大,軟件規(guī)模越來越大,復(fù)雜程度不斷增加,軟件成本逐年上升,質(zhì)量沒有可靠的保證,軟件已成為計(jì)算機(jī)科學(xué)發(fā)展的,“,瓶頸,”,,所謂,軟件危機(jī),是指在計(jì)算機(jī)軟件的開發(fā)和維護(hù)過程中所遇到的一系列嚴(yán)重問題。實(shí)際上,幾乎所有的軟件都不同程度地存在這個(gè)問題,,具體地說,在軟件開發(fā)和維護(hù)過程中,軟件危機(jī)主要表現(xiàn)在:,,◇,,軟件需求的增長(zhǎng)得不到滿足,,◇,,軟件開發(fā)的進(jìn)度無法控制,,◇,,軟件質(zhì)量難以保證,,◇,軟件不可維護(hù)或維護(hù)程度非常低,,◇,軟件的成本不斷提高,,◇,軟件開發(fā)生產(chǎn)率的提高趕不上硬件的發(fā)展和應(yīng)用需求的增長(zhǎng),,總之,可以將軟件危機(jī)歸結(jié)為成本、質(zhì)量、生產(chǎn)率等問題,7.4.1,軟件工程基本概念,____,軟件工程,,在軟件開發(fā)和維護(hù)過程中,之所以存在這些嚴(yán)重的問題,一方面,與軟件本身的特點(diǎn)有關(guān),,例如,在軟件運(yùn)行前,軟件開發(fā)過程的進(jìn)展難衡量,質(zhì)量難以評(píng)價(jià),因此管理和控制軟件開發(fā)過程相當(dāng)困難;在軟件運(yùn)行過程中,軟件維護(hù)意味著改正或修改原來的設(shè)計(jì);另外,軟件的顯著特點(diǎn)是規(guī)模龐大,復(fù)雜度超線性增長(zhǎng),在開發(fā)大型軟件時(shí),要保證高質(zhì)量,極端復(fù)雜困難,不僅涉及技術(shù)問題(如分析方法、設(shè)計(jì)方法、版本控制),更重要的是必須有嚴(yán)格而科學(xué)的管理。另一方面,與軟件開發(fā)和維護(hù)方法不正確有關(guān),,這是主要原因,,為了消除軟件危機(jī),通過認(rèn)真研究解決軟件危機(jī)的方法,認(rèn)識(shí)到軟件工程是使計(jì)算機(jī)軟件走向工程科學(xué)的途徑,逐步形成了軟件工程的概念,開辟了工程學(xué)的新興領(lǐng)域,——,軟件工程學(xué),,,軟件工程,就是試圖用工程、科學(xué)和數(shù)學(xué)的原理與方法研制、維護(hù)計(jì)算機(jī)軟件的有關(guān)技術(shù)及管理方法,7.4.1,軟件工程基本概念,____,軟件工程,,軟件工程的進(jìn)步是近幾十年軟件產(chǎn)業(yè)迅速發(fā)展的重要原動(dòng)力,,軟件工程的核心思想是把軟件產(chǎn)品看作是一個(gè)工程產(chǎn)品來處理,,把需求計(jì)劃、可行性研究、工程審核、質(zhì)量監(jiān)督等工程化的概念引入到軟件生產(chǎn)當(dāng)中,以期達(dá)到工程項(xiàng)目的三個(gè)基本要素:,進(jìn)度,、,經(jīng)費(fèi),和,質(zhì)量,的目標(biāo)。同時(shí),軟件工程針對(duì)軟件的特點(diǎn)提出了許多有別于一般工業(yè)工程技術(shù)的一些技術(shù)方法。代表性的有結(jié)構(gòu)化方法、面向?qū)ο蠓椒ê蛙浖_發(fā)模型及軟件開發(fā)過程等,,特別地,從經(jīng)濟(jì)學(xué)的意義上來說,考慮到軟件龐大的維護(hù)費(fèi)用遠(yuǎn)比軟件開發(fā)費(fèi)用要高,因而開發(fā)軟件不能只考慮開發(fā)期間的費(fèi)用,而且應(yīng)該考慮軟件生命周期內(nèi)的全部費(fèi)用。因此,軟件生命周期的概念就變得特別重要。在考慮軟件費(fèi)用時(shí),不僅僅要降低開發(fā)成本,更要降低整個(gè)軟件生命周期的總成本,7.4.1,軟件工程基本概念,____,軟件生命周期,,為了有效、科學(xué)地組織和管理軟件生產(chǎn),根據(jù)某一軟件從被提出并著手開始實(shí)現(xiàn),直到軟件完成其使命為止的全過程稱為,軟件生命周期,,通常,軟件生命周期包括問題定義、可行性研究、需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、軟件編碼、軟件測(cè)試及運(yùn)行維護(hù),八個(gè)階段,,為使各時(shí)期的任務(wù)更明確,將,軟件生命周期,劃分為以下三個(gè)時(shí)期:,,,◇,軟件定義期,,,◇,軟件開發(fā)期,,,◇,軟件維護(hù)期,軟件定義期,問題定義,,,,可行性研究,,,,需求分析,,,軟件開發(fā)期,,,概要設(shè)計(jì),,,,詳細(xì)設(shè)計(jì),,,,軟件編碼,,,,軟件測(cè)試,,,軟件,,維護(hù)期,,,運(yùn)行維護(hù),7.4.1,軟件工程基本概念,____,軟件生命周期,,◆,,軟件定義期,問題定義,理解用戶要求,劃清工作范圍,提交書面報(bào)告給用戶及使用部門負(fù)責(zé)人進(jìn)行審查,,,可行性研究,復(fù)查系統(tǒng)的目標(biāo)和規(guī)模,研究當(dāng)前系統(tǒng),導(dǎo)出系統(tǒng)邏輯模型;分析物理系統(tǒng)的可行性,推薦一個(gè)可行方案,提出可行性分析報(bào)告,,,需求分析,從數(shù)據(jù)流程圖出發(fā),對(duì)目標(biāo)系統(tǒng)提出清晰、準(zhǔn)確和具體的要求。確定對(duì)系統(tǒng)的綜合要求;分析系統(tǒng)數(shù)據(jù)要求;推導(dǎo)出系統(tǒng)的詳細(xì)模型系統(tǒng);建立模型系統(tǒng),軟件定義期階段提交的文檔內(nèi)容包括:系統(tǒng)的功能說明;系統(tǒng)對(duì)數(shù)據(jù)的要求;用戶系統(tǒng)描述,7.4.1,軟件工程基本概念,____,軟件生命周期,,◆,,軟件開發(fā)期,概要設(shè)計(jì),進(jìn)行系統(tǒng)的邏輯設(shè)計(jì),劃分出構(gòu)成系統(tǒng)的各物理元素,設(shè)計(jì)出軟件的結(jié)構(gòu)。提出可選擇方案;選擇合理方案;推薦最佳方案;功能分解;設(shè)計(jì)軟件結(jié)構(gòu);制定測(cè)試計(jì)劃;提交文檔,,,詳細(xì)設(shè)計(jì),進(jìn)行系統(tǒng)模塊的設(shè)計(jì),對(duì)系統(tǒng)作出精確的描述,以便在編碼階段可直接將這一描述用程序設(shè)計(jì)語(yǔ)言編制成程序。通常用層次圖加輸入,/,處理,/,輸出圖或過程描述語(yǔ)言來描述,,,軟件編碼,該概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)階段中的結(jié)果翻譯成用某種程序設(shè)計(jì)語(yǔ)言書寫的程序。以文檔形式提交程序、數(shù)據(jù)和詳細(xì)注釋,,,軟件測(cè)試,是保證軟件可靠性的主要手段,是軟件開發(fā)過程中最艱巨、最繁重的工作。測(cè)試的目的是查找程序中的錯(cuò)誤,但決不能證明程序中沒有錯(cuò)誤,7.4.1,軟件工程基本概念,____,軟件生命周期,◆,,軟件維護(hù)期,,,軟件維護(hù)通常有以下四類:,,改正性維護(hù),為糾正使用中出現(xiàn)的錯(cuò)誤而進(jìn)行,,適應(yīng)性維護(hù),為適應(yīng)環(huán)境變化而進(jìn)行,,完善性維護(hù),為改進(jìn)原有軟件而進(jìn)行,,預(yù)防性維護(hù),為將來的可維護(hù)和可靠而進(jìn)行,7.4.1,軟件工程基本概念,____,軟件工程的目標(biāo)與原則,,軟件工程的,目標(biāo),是在給定成本、進(jìn)度的前提下,開發(fā)出具有有效性、可靠性、可理解性、可維護(hù)性、可重用性、可適應(yīng)性、可移植性、可操作性且滿足用戶需求的產(chǎn)品,,基于上述目標(biāo),軟件工程的理論和技術(shù)性研究的內(nèi)容主要包括,軟件開發(fā)技術(shù),和,軟件工程管理,,為了達(dá)到軟件工程目標(biāo),在軟件開發(fā)過程中,,必須遵循軟件工程的基本原則,,這些原則適用于所有的軟件項(xiàng)目。這些基本原則包括抽象、信息隱蔽、模塊化、局部化、一致性、完備性和可驗(yàn)證性,7.4.1,軟件工程基本概念,____,軟件開發(fā)工具與軟件開發(fā)環(huán)境,,現(xiàn)代軟件工程方法之所以得以實(shí)施,其,重要的保證是軟件開發(fā)工具和環(huán)境的保證,,使軟件在開發(fā)效率、工程質(zhì)量等多方面得到改善,,工具和環(huán)境的使用進(jìn)一步提高了軟件的開發(fā)效率、維護(hù)效率和軟件質(zhì)量,,◇,,軟件開發(fā)工具,是為支持軟件人員開發(fā)和維護(hù)活動(dòng)而使用的軟件,軟件開發(fā)工具的發(fā)展從單項(xiàng)工具的開發(fā)逐步向集成工具發(fā)展,為軟件工程方法提供了自動(dòng)的或半自動(dòng)的軟件支撐環(huán)境。同時(shí),軟件開發(fā)方法的有效應(yīng)用也必須得到相應(yīng)工具的支持,,◇,,軟件開發(fā)環(huán)境,或稱軟件工程環(huán)境是全面支持開發(fā)全過程的軟件工具集合。這些軟件工具按照一定的方法或模式組合起來,支持軟件生命周期內(nèi)的各個(gè)階段和各項(xiàng)任務(wù)的完成,7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化分析方法,,結(jié)構(gòu)化分析方法是結(jié)構(gòu)化程序設(shè)計(jì)理論在軟件需求分析階段的運(yùn)用,其目的是幫助弄清用戶對(duì)軟件的需求,,結(jié)構(gòu)化分析就是使用數(shù)據(jù)流圖、數(shù)據(jù)字典、結(jié)構(gòu)化自然語(yǔ)言、判定表和判定樹等工具,來建立一種新的、稱為結(jié)構(gòu)化規(guī)格說明的目標(biāo)文檔。其實(shí)質(zhì)是著眼于數(shù)據(jù)流,自頂向下,逐層分解,建立系統(tǒng)的處理流程,以數(shù)據(jù)流圖和數(shù)據(jù)字典為主要工具,建立系統(tǒng)的邏輯模型,,結(jié)構(gòu)化分析的常用工具,:,,,◇,,數(shù)據(jù)流圖,,,◇,,數(shù)據(jù)字典,,,◇,,判定樹,,,◇,,判定表,7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化分析方法,,◆,,數(shù)據(jù)流圖,,,數(shù)據(jù)流圖是描述數(shù)據(jù)處理過程的工具,是需求理解的邏輯模型的圖形表示,直接支持系統(tǒng)的功能建模,從數(shù)據(jù)傳遞和加工的角度,來刻畫數(shù)據(jù)流從輸入到輸出的移動(dòng)變換過程,,加工,(,轉(zhuǎn)換,),。輸入數(shù)據(jù)經(jīng)加工變換產(chǎn)生輸出,,數(shù)據(jù)流,。沿箭頭方向傳送數(shù)據(jù)的通道,一般在旁邊標(biāo)注數(shù)據(jù)流名,,存儲(chǔ)文件,(,數(shù)據(jù)源,),。表示處理過程中存放各種數(shù)據(jù)的文件,,源,。表示系統(tǒng)和環(huán)境的接口,屬系統(tǒng)之外的實(shí)體,研究生業(yè)務(wù)活動(dòng)數(shù)據(jù)流圖,7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化分析方法,,數(shù)據(jù)流圖是對(duì)實(shí)際(已有的或要設(shè)計(jì)的)信息處理系統(tǒng)的抽象。具體畫數(shù)據(jù)流圖的方法有很多,常用的有以下兩種方法:,,◇,,自頂向下逐步分解,,對(duì)于一個(gè)大型的軟件系統(tǒng)來說,直接畫出一張數(shù)據(jù)流圖是很困難的,但如果自頂向下分成若干層,再對(duì)每一層的數(shù)據(jù)來描述就簡(jiǎn)單了,分層的數(shù)據(jù)流圖一般由頂層、中層和底層組成,頂層圖說明系統(tǒng)的邊界,即系統(tǒng)的輸入和輸出,底層有一些不再分解的加工組成,中間層還可以分為若干層,最后就將這三層的數(shù)據(jù)流圖并為一張的總的數(shù)據(jù)流圖,,◇,,由外向里逐步深化,,用這種方法畫數(shù)據(jù)流圖時(shí),首先畫出系統(tǒng)的輸入和輸出數(shù)據(jù)流 ,然后再考慮系統(tǒng)的內(nèi)部。在畫加工時(shí),同樣畫出它們的輸入和輸出,再考慮這個(gè)加工的內(nèi)部,在數(shù)據(jù)流的組成或發(fā)生變化地方應(yīng)畫上一個(gè),“,加工,”,,以便實(shí)現(xiàn)這一變化,7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化分析方法,,◆,,數(shù)據(jù)字典,,,數(shù)據(jù)字典是結(jié)構(gòu)化分析方法的核心。,數(shù)據(jù)字典,是對(duì)所有與系統(tǒng)相關(guān)的數(shù)據(jù)元素的一個(gè)有組織的列表,以及精確的、嚴(yán)格的定義,使得用戶和系統(tǒng)分析員對(duì)于輸入、輸出、存儲(chǔ)成分和中間計(jì)算結(jié)果有共同的理解。數(shù)據(jù)字典把不同的需求文檔和分析模型緊密地結(jié)合在一起,與各模型的圖形表示配合,能清楚地表達(dá)數(shù)據(jù)處理的要求,,通常數(shù)據(jù)字典包含的信息有:名稱、別名、何處使用,/,如何使用、內(nèi)容描述、補(bǔ)充信息等,,數(shù)據(jù)字典是給數(shù)據(jù)流圖中的每一個(gè)數(shù)據(jù)流名、文件名及加工名建立一個(gè)目錄,在這些條目中給出各名字的定義。而在每一個(gè)目錄下又可建立子目錄,直到每一個(gè)組成部分不能再分為止,7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化分析方法,,在數(shù)據(jù)字典中,通常有四種類型的條目:,,◇,,數(shù)據(jù)流條目,:數(shù)據(jù)流條目給出某個(gè)數(shù)據(jù)流的定義,其形式為列出組成數(shù)據(jù)流的數(shù)據(jù)項(xiàng)。如數(shù)據(jù)流,“,課程目錄,”,(由文件流出)由課程名、學(xué)時(shí)、學(xué)分、教員等數(shù)據(jù)項(xiàng)組成,在數(shù)據(jù)字典中表示為:課程目錄,=,課程名,+,學(xué)時(shí),+,學(xué)分,+,教員,+,課表,而,“,課表,”,又可以列為一個(gè)子條目,表示為:課表,=,星期幾,+,第幾節(jié),+,教室,,◇,,文件條目,:文件條目給出某個(gè)文件的定義,它的形式與數(shù)據(jù)流條目基本相同。例如,上述數(shù)據(jù)流條目實(shí)際上也是,“,課程目錄,”,文件的條目,,◇,,數(shù)據(jù)項(xiàng)條目,:數(shù)據(jù)項(xiàng)條目給出某個(gè)數(shù)據(jù)單項(xiàng)的定義,通常是數(shù)據(jù)項(xiàng)值的類型、允許值范圍等。如學(xué)生,“,年齡,”,這個(gè)數(shù)據(jù)項(xiàng)值是,16,~,30,之間的任意整數(shù),則在數(shù)據(jù)字典中表示成:年齡,=16,~,30,,◇,,加工條目,:加工條目實(shí)際上是對(duì)數(shù)據(jù)流圖中的每個(gè)基本加工給出精細(xì)的描述,所有加工條目的綜合就是整個(gè)系統(tǒng)的說明,每一個(gè)加工條目對(duì)應(yīng)系統(tǒng)的一個(gè)模塊的處理描述,7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化分析方法,,◆,,判定樹,,,使用判定樹進(jìn)行描述時(shí),應(yīng)先從問題定義的文字描述中分清哪些是判定的條件,哪些是判定的結(jié)論,根據(jù)描述材料中的連接詞找出判定條件之間的從屬關(guān)系、并列關(guān)系、選擇關(guān)系,根據(jù)它們構(gòu)造判定樹,,例如,某貨物托運(yùn)管理系統(tǒng)中,對(duì)發(fā)貨情況的處理要依賴檢查發(fā)貨單,檢查發(fā)貨單受貨物托運(yùn)金額、欠款等條件的約束,可以使用類似分段函數(shù)的形式來描述這些約束和處理。對(duì)這種約束條件的描述,如果使用自然語(yǔ)言,表達(dá)易出現(xiàn)不準(zhǔn)確和不清晰。如果使用判定樹來描述,則簡(jiǎn)捷清晰,檢查發(fā)貨單,欠款,>$500,欠款,>60———,不發(fā)出批準(zhǔn)書,,,欠款≤,60———,發(fā)出批準(zhǔn)書、發(fā)貨單,,欠款≤,$500,欠款,>60———,發(fā)出批準(zhǔn)書、發(fā)貨單及賒欠報(bào)告,,,欠款≤,60———,發(fā)出批準(zhǔn)書、發(fā)貨單,7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化分析方法,,◆,,判定表,,,判定表與判定樹相似,當(dāng)數(shù)據(jù)流圖中的加工要依賴于多個(gè)邏輯條件的取值,即完成該加工的一組動(dòng)作是由于某一組條件取值的組合而引發(fā)的,使用判定表描述比較適宜。判定表由四部分組成:,,①,基本條件,列出了各種可能的條件,,②,條件項(xiàng),列出了各種可能的條件組合,,③,基本動(dòng)作項(xiàng),列出了所有的操作,,④,動(dòng)作項(xiàng),列出在對(duì)應(yīng)的條件組合下所選的操作,其中,“,√,”,表示滿足對(duì)應(yīng)條件項(xiàng)時(shí)執(zhí)行的操作,,,1,2,3,4,條件,發(fā)貨單金額,>$500,>$500,≤,$500,≤,$500,,賒欠情況,>,60,天,≤,60,天,>60,天,≤,60,天,操 作,不,發(fā)出批準(zhǔn)書,√,,,,,發(fā)出批準(zhǔn)書,,√,√,√,,發(fā)出發(fā)貨單,,√,√,√,,發(fā)出賒欠報(bào)告,,,√,,① 基本條件,③ 基本動(dòng)作項(xiàng),② 條件項(xiàng),④ 動(dòng)作項(xiàng),7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化設(shè)計(jì)方法,,軟件設(shè)計(jì)是軟件工程的重要階段,是一個(gè)把軟件需求轉(zhuǎn)換為軟件表示的過程。軟件設(shè)計(jì)的,基本目標(biāo),是用比較抽象概括的方式確定目標(biāo)系統(tǒng)如何完成預(yù)定的任務(wù),即軟件設(shè)計(jì)是確定系統(tǒng)的物理模型,,,從技術(shù)觀點(diǎn)來看,,軟件設(shè)計(jì)包括軟件結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)設(shè)計(jì)、接口設(shè)計(jì)、過程設(shè)計(jì)。其中,結(jié)構(gòu)是定義軟件系統(tǒng)各主要部件之間的關(guān)系;數(shù)據(jù)設(shè)計(jì)是將分析時(shí)創(chuàng)建的模塊轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)的定義;接口設(shè)計(jì)是描述軟件內(nèi)部、軟件和協(xié)作系統(tǒng)之間以及軟件與人之間如何通信;過程設(shè)計(jì)則是把系統(tǒng)結(jié)構(gòu)部件轉(zhuǎn)化為軟件的過程性描述,,,從工程管理角度來看,,軟件設(shè)計(jì)分兩步來完成:概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。概要設(shè)計(jì)(又稱結(jié)構(gòu)設(shè)計(jì))將軟件需求轉(zhuǎn)化為軟件體系結(jié)構(gòu)、確定系統(tǒng)級(jí)接口、全局?jǐn)?shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)庫(kù)模式;詳細(xì)設(shè)計(jì)確立每個(gè)模塊的實(shí)現(xiàn)算法和局部數(shù)據(jù)結(jié)構(gòu),用適當(dāng)方法表示算法和數(shù)據(jù)結(jié)構(gòu)的細(xì)節(jié),7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化設(shè)計(jì)方法,,軟件設(shè)計(jì)階段通常分為兩步:,,◇,,系統(tǒng)的總體設(shè)計(jì),(概要設(shè)計(jì)),,以確定軟件系統(tǒng)結(jié)構(gòu),,◇,,系統(tǒng)的詳細(xì)設(shè)計(jì),,即模塊內(nèi)部的具體設(shè)計(jì)。一般過程是先進(jìn)行高層次的結(jié)構(gòu)設(shè)計(jì),后進(jìn)行低層次的過程設(shè)計(jì),穿插進(jìn)行數(shù)據(jù)設(shè)計(jì)和接口設(shè)計(jì),,,與結(jié)構(gòu)化需求分析方法相對(duì)應(yīng)的是結(jié)構(gòu)化設(shè)計(jì)方法,,,結(jié)構(gòu)化設(shè)計(jì),是采用可能的最佳方法設(shè)計(jì)系統(tǒng)的各個(gè)組成部分以及各成分之間的內(nèi)部聯(lián)系的技術(shù),,,結(jié)構(gòu)化設(shè)計(jì)的基本思想,是將軟件設(shè)計(jì)成由相對(duì)獨(dú)立、單一功能的模塊組成的結(jié)構(gòu),7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化設(shè)計(jì)方法,,◆,,概要設(shè)計(jì),設(shè)計(jì)軟件系統(tǒng)結(jié)構(gòu),將需求分析階段的層次結(jié)構(gòu)進(jìn)一步分解、劃分為模塊以及模塊的層次結(jié)構(gòu)。,劃分的具體過程,為:,①,將系統(tǒng)按功能劃分成模塊;,②,確定每個(gè)模塊的功能;,③,確定模塊之間的調(diào)用關(guān)系;,④,確定模塊之間的接口,即模塊之間傳遞的信息;,⑤,評(píng)價(jià)模塊結(jié)構(gòu)的質(zhì)量,數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫(kù)設(shè)計(jì),,(,數(shù)據(jù)設(shè)計(jì),),實(shí)現(xiàn)數(shù)據(jù)對(duì)象的邏輯表示。數(shù)據(jù)設(shè)計(jì)的,具體任務(wù),是:,①,確定輸入、輸出文件的詳細(xì)數(shù)據(jù)結(jié)構(gòu);,②,結(jié)合算法設(shè)計(jì),確定算法所必需的邏輯數(shù)據(jù)結(jié)構(gòu)及其操作;,③,確定對(duì)邏輯數(shù)據(jù)結(jié)構(gòu)操作的程序模塊,限制和確定各個(gè)數(shù)據(jù)設(shè)計(jì)決策的影響范圍;,④,需要和操作系統(tǒng)或調(diào)度程序接口所必需的控制表進(jìn)行數(shù)據(jù)交換時(shí),確定其詳細(xì)的數(shù)據(jù)結(jié)構(gòu)和使用規(guī)則;,⑤,數(shù)據(jù)的防衛(wèi)性、一致性、冗余性設(shè)計(jì),編寫概要設(shè)計(jì)文檔,編寫,①,概要設(shè)計(jì)說明書、,②,數(shù)據(jù)庫(kù)說明書、,③,集成測(cè)試計(jì)劃等,概要設(shè)計(jì)文檔評(píng)審,對(duì),①,設(shè)計(jì)部分是否完整地實(shí)現(xiàn)了需求中規(guī)定的功能、性能等要求,,②,設(shè)計(jì)方案的可行性,,③,關(guān)鍵的處理及內(nèi)部接口定義的正確性,,④,各部分之間的一致性等都要進(jìn)行評(píng)審,7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化設(shè)計(jì)方法,,◆,,詳細(xì)設(shè)計(jì),,,詳細(xì)設(shè)計(jì)是為每一個(gè)模塊確定實(shí)現(xiàn)算法和局部數(shù)據(jù)結(jié)構(gòu),用某種選定的表達(dá)工具表示算法和數(shù)據(jù)結(jié)構(gòu)的細(xì)節(jié)。表達(dá)工具可以由設(shè)計(jì)人員自由選擇,但它應(yīng)該具有描述過程細(xì)節(jié)的能力,而且能夠使程序員在編程時(shí)便于直接翻譯成程序設(shè)計(jì)語(yǔ)言的源程序。常見的設(shè)計(jì)工具有:,,◇,,圖形工具,:程序流程圖,,N-S,圖,,PAD,,,HIPO,,◇,,表格工具,:判定表,,◇,,語(yǔ)言工具,:,PDL,(,偽代碼),,,在過程設(shè)計(jì)階段,要對(duì)每個(gè)模塊規(guī)定的功能以及算法的設(shè)計(jì),給出適當(dāng)?shù)乃惴枋?,即確定模塊內(nèi)部詳細(xì)執(zhí)行過程,包括局部數(shù)據(jù)組織、控制流、每一步具體處理要求和各種實(shí)現(xiàn)細(xì)節(jié)等。其目的是確定應(yīng)該怎樣來具體實(shí)現(xiàn)所要求的系統(tǒng),7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化設(shè)計(jì)方法,,◇,,程序流程圖,,,程序流程圖是一種傳統(tǒng)的、應(yīng)用廣泛的軟件過程設(shè)計(jì)表示工具,通常也稱為程序框圖,程序流程圖表達(dá)直觀、清晰、易于學(xué)習(xí)掌握,且獨(dú)立于任何一種程序設(shè)計(jì)語(yǔ)言。程序流程圖雖然簡(jiǎn)單易學(xué),但若程序員不受任何約束,隨意轉(zhuǎn)移控制,會(huì)破壞結(jié)構(gòu)化設(shè)計(jì)原則,而且程序流程圖不易表示數(shù)據(jù)結(jié)構(gòu),起止框 輸入輸出框 判斷框 處理框 流程線 連接點(diǎn) 注釋框,A,B,條件,A,B,T,F,條件,A,F,T,條件,A,T,F,條件,F,A,T,順序結(jié)構(gòu) 對(duì)稱選擇結(jié)構(gòu) 非對(duì)稱選擇結(jié)構(gòu) 當(dāng)型循環(huán)結(jié)構(gòu) 直到型循環(huán)結(jié)構(gòu),7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化設(shè)計(jì)方法,,【,程序流程圖示例,】,簡(jiǎn)單托運(yùn)貨物運(yùn)費(fèi)計(jì)算的問題。設(shè)貨物重量,x,,,客戶信息,y,輸入,X,Y,0<,X≤15,X>15,公式,1,計(jì)算,公式,2,計(jì)算,I=0,I<3,記賬、輸出,I=I+1,結(jié)束,T,T,T,F,F,F,7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化設(shè)計(jì)方法,,◇,,N-S,圖,,,為避免流程圖在描述程序邏輯時(shí)的隨意性,通常使用,N-S,圖,,,N-S,圖的特征為:每個(gè)構(gòu)件具有明確的功能域;控制轉(zhuǎn)移必須遵守結(jié)構(gòu)化設(shè)計(jì)要求;易于確定局部數(shù)據(jù)和(或)全局?jǐn)?shù)據(jù)的作用域;易于表達(dá)嵌套關(guān)系和模塊的層次結(jié)構(gòu),A,,,T,,F,B,,A,B,當(dāng)P1,,,A,,,A,,,,,,,直到,P2,,P0,,◇,,偽代碼,不用圖形符號(hào),,用介于自然語(yǔ)言和計(jì)算機(jī)語(yǔ)言之間的文字和符號(hào)來描述算法,S1,:,C←A,(,將變量,A,的值賦給變量,C),;,,S2,:,A←B,(,將變量B的值賦給變量,A),;,,S3,:,B←C,(,將變量,C,的值賦給變量,B),。,7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化設(shè)計(jì)方法,,◇,,PAD,圖,,,PAD,圖(問題分析圖)是繼程序流程圖和方框圖之后,提出的一種主要用于描述軟件詳細(xì)設(shè)計(jì)的圖形表示工具,,,PAD,圖結(jié)構(gòu)清晰,結(jié)構(gòu)化程度高;易于閱讀;最左端的縱線是程序主干線,對(duì)應(yīng)程序的第一層結(jié)構(gòu),每增加一層,PAD,圖向右擴(kuò)展一條縱線,故程序是縱線數(shù)等于程序?qū)哟螖?shù);程序執(zhí)行:從,PAD,圖最左主干線上端結(jié)點(diǎn)開始,自上而下,自左而右依次執(zhí)行,程序終止于最左主干線,7.4.2,結(jié)構(gòu)化分析與設(shè)計(jì)方法,____,結(jié)構(gòu)化設(shè)計(jì)方法,,◇,,PDL,,,PDL,(,過程設(shè)計(jì)語(yǔ)言)是一種混合語(yǔ)言,采用英語(yǔ)的詞匯和結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言的語(yǔ)法,類似編程語(yǔ)言,C,,,用,PDL,表示的基本控制結(jié)構(gòu)的常用詞匯如下:,,條件:,IF/THEN/ELSE/ENDIF,,,循環(huán):,DO WHILE/ENDO,、,REPEAT UNTIL/ENDREPEAT,,,分支:,CASE_OF/WHEN/,,SELECT/WHEN/SELECT/ENDCASE,/*,計(jì)算運(yùn)費(fèi) *,/,,count ( );,,{,輸入,x;,輸出,y;,,if (o<x<=15),條件,1 {,公式,1,計(jì)算,;call sub;},,else if (x>15) {,公式,2,計(jì)算,;call sub;},,},,sub ( );,,{ for(i=1,3,i++) do {,記賬;輸出;,},,},7.4.3,軟件測(cè)試,,提高程序的可靠性是每一個(gè)軟件工作者的愿望,也是用戶對(duì)軟件開發(fā)人員的要求。雖然有效的軟件設(shè)計(jì)方法可以提高軟件的可靠性,但是,由于各種各樣的原因,軟件產(chǎn)品中的缺陷總是難免的。為了保證軟件產(chǎn)品的質(zhì)量,提高每一個(gè)程序的可靠性,必須對(duì)軟件進(jìn)行測(cè)試,,測(cè)試具有以下特點(diǎn):,,◇,,測(cè)試的挑剔性,,,◇,,完全測(cè)試的不可能性,,,◇,,測(cè)試的經(jīng)濟(jì)性,7.4.3,軟件測(cè)試,____,軟件測(cè)試的目的、準(zhǔn)則,,◆,,軟件測(cè)試的目的,,,軟件測(cè)試就是使用人工或自動(dòng)手段來運(yùn)行或測(cè)定某個(gè)系統(tǒng)的過程,其目的在于檢驗(yàn)它是否滿足規(guī)定的需求或是弄清預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別,,,◆,,軟件測(cè)試的準(zhǔn)則,,◇,,軟件測(cè)試的目的是發(fā)現(xiàn)錯(cuò)誤,而最嚴(yán)重的錯(cuò)誤不外乎是導(dǎo)致程序無法滿足用戶需求的錯(cuò)誤。因此,所有測(cè)試都應(yīng)追溯到需求,,,◇,,軟件測(cè)試應(yīng)當(dāng)制定明確的測(cè)試計(jì)劃并按照計(jì)劃執(zhí)行,嚴(yán)格執(zhí)行測(cè)試計(jì)劃,排除測(cè)試的隨意性,,,◇,,為了達(dá)到好的測(cè)試效果,應(yīng)該由第三方來構(gòu)造測(cè)試,應(yīng)避免程序員自己檢查程序,,,◇,,即使規(guī)模較小的程序,其路徑排列數(shù)也相當(dāng)大,在實(shí)際測(cè)試過程中不可能窮舉每一種組合,測(cè)試只能證明程序中有錯(cuò)誤,不能證明程序中沒有錯(cuò)誤,7.4.3,軟件測(cè)試,____,軟件測(cè)試的過程,靜態(tài)測(cè)試、動(dòng)態(tài)測(cè)試和自動(dòng)測(cè)試是程序的測(cè)試的三種方式進(jìn)行,也是。測(cè)試的過程,即先進(jìn)行靜態(tài)分析,然后進(jìn)行動(dòng)態(tài)測(cè)試,在某些特殊情況下,又可以借助自動(dòng)測(cè)試工具對(duì)程序進(jìn)行查錯(cuò),靜態(tài)測(cè)試,是指不執(zhí)行程序,而只由人工對(duì)程序文本進(jìn)行檢查,通過閱讀和討論,分析和發(fā)現(xiàn)程序中的錯(cuò)誤。大約,30,~,70%,的邏輯設(shè)計(jì)錯(cuò)誤和編碼錯(cuò)誤可以通過靜態(tài)分析檢查出來,動(dòng)態(tài)測(cè)試,是使用測(cè)試用例在計(jì)算機(jī)上運(yùn)行程序,使程序在運(yùn)行過程中暴露錯(cuò)誤,自動(dòng)測(cè)試,自動(dòng)測(cè)試工具通常有靜態(tài)分析工具、動(dòng)態(tài)分析工具、綜合測(cè)試評(píng)估工具幾種,7.4.3,軟件測(cè)試,____,軟件測(cè)試的層次,,◆,,模塊測(cè)試,(單元測(cè)試),,大型程序是由許多模塊按層次結(jié)構(gòu)組織在一起的。因此,首先要對(duì)組成程序的各個(gè)模塊進(jìn)行測(cè)試,其,目標(biāo),是發(fā)現(xiàn)局部模塊的邏輯與功能上的錯(cuò)誤和缺陷。它主要對(duì)以下幾個(gè)方面進(jìn)行測(cè)試:,,◇,,模塊接口,。主要測(cè)試穿過模塊的數(shù)據(jù)流,,◇,,局部數(shù)據(jù)結(jié)構(gòu),。數(shù)據(jù)結(jié)構(gòu)通常是錯(cuò)誤的藏身之地。這些錯(cuò)誤主要包括數(shù)據(jù)引用錯(cuò)和數(shù)據(jù)說明錯(cuò)。除了對(duì)局部變量進(jìn)行測(cè)試外,有時(shí)還需要測(cè)試全局變量對(duì)模塊的影響,,◇,,重要路徑,。選擇適當(dāng)?shù)臏y(cè)試用例,對(duì)模塊中的重要執(zhí)行路徑進(jìn)行測(cè)試,從而暴露程序中的錯(cuò)誤,,◇,,錯(cuò)誤處理能力,。有意識(shí)地給出不合理的輸入,以檢查程序?qū)﹀e(cuò)誤的處理能力,,◇,,I/O,錯(cuò),。對(duì)含有,I/O,功能的模塊,還應(yīng)測(cè)試,I/O,方面的有關(guān)錯(cuò)誤,如文件屬性是否正確、,OPEN,語(yǔ)句是否正確、格式說明是否正確等,7.4.3,軟件測(cè)試,____,軟件測(cè)試的層次,由于模塊不是一個(gè)獨(dú)立的程序,不能單獨(dú)運(yùn)行,因此,在進(jìn)行模塊測(cè)試時(shí),還應(yīng)為每個(gè)被測(cè)試的模塊另外設(shè)計(jì)兩類模塊:驅(qū)動(dòng)模塊和承接模塊。其中,驅(qū)動(dòng)模塊,的作用是將測(cè)試數(shù)據(jù)傳給被測(cè)試模塊,并顯示被測(cè)試模塊所產(chǎn)生的結(jié)果;,承接模塊,的作用是模擬被測(cè)試模塊的下層模塊,,通常,承接模塊有若干個(gè),,,驅(qū)動(dòng)模塊,,,,,,,,,,,,,,被測(cè)試模塊,,,,,,,,,,,,承接模塊,,,…,承接模塊,,,7.4.3,軟件測(cè)試,____,軟件測(cè)試的層次,,◆,,整體測(cè)試,,,當(dāng)各模塊的獨(dú)立測(cè)試完成之后,還要將各模塊連接起來進(jìn)行整體測(cè)試。整體測(cè)試的目標(biāo)在于暴露模塊測(cè)試時(shí)不能暴露的結(jié)構(gòu)錯(cuò)誤,如一個(gè)模塊是否破壞另外一個(gè)模塊的功能,數(shù)據(jù)通過接口時(shí)是否會(huì)丟失,能否產(chǎn)生主功能,誤差是否有積累等。整體測(cè)試分為漸增式和非漸增式兩種:,,◇,,非漸增式的整體測(cè)試,是將經(jīng)過單獨(dú)測(cè)試的所有模塊連接到一起進(jìn)行測(cè)試,,◇,,漸增式的整體測(cè)試,往往是與模塊測(cè)試同步進(jìn)行的,即在對(duì)模塊逐步裝配的過程中同時(shí)進(jìn)行的。這種測(cè)試方式可以減少模塊測(cè)試時(shí)要設(shè)計(jì)的驅(qū)動(dòng)模塊或承接模塊數(shù),又可以及時(shí)、準(zhǔn)確地發(fā)現(xiàn)結(jié)構(gòu)錯(cuò)誤的位置。漸增式的整體測(cè)試一般又可以分為,“,由頂向下,”,和,“,由底向上,”,兩種,7.4.3,軟件測(cè)試,____,軟件測(cè)試的層次,,◆,,高級(jí)測(cè)試,功能測(cè)試,有效性測(cè)試主要用黑箱法測(cè)試軟件功能是否與用戶要求一致,,,系統(tǒng)測(cè)試,把軟件元素與硬件元素結(jié)合在一起進(jìn)行測(cè)試,,,驗(yàn)收測(cè)試,主要檢查程序的操作與原設(shè)計(jì)要求及用戶要求是否一致,,,安裝測(cè)試,主要檢查軟件在安裝時(shí)產(chǎn)生的問題,以上四種測(cè)試統(tǒng)稱為高級(jí)測(cè)試。進(jìn)行這四種測(cè)試,往往要求測(cè)試人員有比較深入的知識(shí)和豐富的經(jīng)驗(yàn),7.4.3,軟件測(cè)試,____,軟件測(cè)試技術(shù),,對(duì)程序進(jìn)行測(cè)試需要使用一些數(shù)據(jù),通常稱為一個(gè),“,測(cè)試用例,”,。由于完全測(cè)試的不可能性,用有限的測(cè)試用例去發(fā)現(xiàn)更多的錯(cuò)誤就顯得非常重要。設(shè)計(jì)和使用測(cè)試用例有以下幾個(gè)基本原則:,,,◇,,設(shè)計(jì)測(cè)試用例應(yīng)同時(shí)確定程序運(yùn)行的預(yù)期結(jié)果,,,◇,,測(cè)試用例不僅要選用合理的輸入數(shù)據(jù),也要選用不合理的輸入數(shù)據(jù),,,◇,,除了需要檢查程序是否做了應(yīng)該做的事,還要檢查程序是否做了不應(yīng)該做的事,,,◇,,千萬(wàn)不要幻想程序是正確的,,,◇,,保留有用的測(cè)試用例,以便再測(cè)試時(shí)使用,,,◇,,測(cè)試用例要系統(tǒng)地進(jìn)行設(shè)計(jì),不可隨意湊合,,,下面分別介紹用白箱法和黑箱法測(cè)試時(shí)其測(cè)試用例的設(shè)計(jì),7.4.3,軟件測(cè)試,____,軟件測(cè)試技術(shù),,◆,,白箱法,(邏輯覆蓋測(cè)試),,白箱測(cè)試是根據(jù)對(duì)程序內(nèi)部邏輯結(jié)構(gòu)的分析來選取測(cè)試用例。由于測(cè)試用例對(duì)程序邏輯覆蓋的程度決定了測(cè)試完全性的程度,,白箱測(cè)試用例的設(shè)計(jì)準(zhǔn)則有:,,◇,,語(yǔ)句覆蓋,。企圖用足夠多的測(cè)試用例,使程序中的每個(gè)語(yǔ)句都執(zhí)行一遍,以盡可能多地發(fā)現(xiàn)程序中的錯(cuò)誤,,◇,,分支覆蓋,(,判定覆蓋準(zhǔn)則,),。它要求通過足夠多的測(cè)試用例,使程序中的每個(gè)分支至少通過一次,,◇,,條件覆蓋,。通過執(zhí)行足夠多的測(cè)試用例,使每個(gè)判定中的每個(gè)條件都能取到兩種不同的結(jié)果(,“,真,”,與,“,假,”,),,◇,,組合條件覆蓋,。條件覆蓋并不能完全滿足分支覆蓋。例如,上述條件覆蓋所使用的兩個(gè)測(cè)試用例不能使第一個(gè)判定框?yàn)?“,真,”,,也不能使第二個(gè)判定框?yàn)?“,假,”,。于是,人們便提出組合條件覆蓋準(zhǔn)則,要求通過足夠多的測(cè)試用例,使每個(gè)判定中各條件的各種可能組合至少出現(xiàn)一次,7.4.3,軟件測(cè)試,____,軟件測(cè)試技術(shù),,◆,,黑箱法,,,黑箱測(cè)試方法完全不考慮程序的內(nèi)部結(jié)構(gòu)和內(nèi)部特征,而只是根據(jù)程序功能導(dǎo)出測(cè)試用例。常用的黑箱測(cè)試有等價(jià)分類法、邊值分析法、因果圖法和錯(cuò)誤推測(cè)法,,◇,,等價(jià)分類法,。等價(jià)分類法是把所有可能的輸入數(shù)據(jù)(有效的和無效的)劃分成若干等價(jià)類,使每一類中的一個(gè)典型數(shù)據(jù)在測(cè)試中的作用與這類中所有其它數(shù)據(jù)的作用相同。因此,在實(shí)際進(jìn)行測(cè)試時(shí),可以從每個(gè)等價(jià)類中只取一組數(shù)據(jù)作為測(cè)試用例,,等價(jià)分類法分為兩步:一是劃分等價(jià)類(包括有效等價(jià)類和無效等價(jià)類);二是從每個(gè)等價(jià)類中選取測(cè)試用例,,劃分等價(jià)類的基本方法是:根據(jù)程序的功能說明,找出所有的輸入條件,然后為每一個(gè)輸入條件劃分等價(jià)類,7.4.3,軟件測(cè)試,____,軟件測(cè)試技術(shù),◇,,邊值分析法,。邊值分析不是從等價(jià)類中隨便選一個(gè)例子作為代表,而是著眼于使該等價(jià)類的邊界情況成為測(cè)試的主要目標(biāo)來選取測(cè)試用例,并且邊值分析不僅考慮輸入條件,還要考慮輸出條件。采用邊值分析設(shè)計(jì)測(cè)試的原則為:如果輸入條件規(guī)定了值的范圍,則要對(duì)這個(gè)范圍的邊界情況以及稍超出范圍的無效情況進(jìn)行測(cè)試;如果輸入條件規(guī)定了值的個(gè)數(shù),則要分別對(duì)值的最大個(gè)數(shù)、最小個(gè)數(shù)、稍多于最大個(gè)數(shù)及稍少于最小個(gè)數(shù)的情況進(jìn)行測(cè)試,,◇,,因果圖法,。設(shè)計(jì)測(cè)試用例的一種系統(tǒng)方法,有助于測(cè)試人員系統(tǒng)地選擇高效的測(cè)試用例。其基本思想是把輸入條件視為,“,因,”,,輸出條件視為,“,果,”,,把黑箱視為從因到果的邏輯網(wǎng)絡(luò)圖。通過因果圖可以得到一張判定表,然后為判定表的每一列設(shè)計(jì)測(cè)試用例,,◇,,錯(cuò)誤推測(cè)法,(猜錯(cuò)法),無一定之規(guī)可循,在很大程度上是憑經(jīng)驗(yàn)或直覺推測(cè)程序中可能存在的各種錯(cuò)誤,從而有針對(duì)性地編寫測(cè)試用例,7.4.3,軟件調(diào)試,,程序調(diào)試,也稱排錯(cuò),它是一個(gè)與測(cè)試有聯(lián)系又有區(qū)別的概念,調(diào)試與測(cè)試的關(guān)系體現(xiàn)在以下幾個(gè)方面:,,,◇,,測(cè)試的目的是暴露錯(cuò)誤,評(píng)價(jià)程序的可靠性;而調(diào)試的目的是發(fā)現(xiàn)錯(cuò)誤的位置,并改正錯(cuò)誤,,,◇,,測(cè)試是機(jī)械的、強(qiáng)制的、嚴(yán)格的、也是可預(yù)測(cè)的,,,◇,,經(jīng)測(cè)試發(fā)現(xiàn)錯(cuò)誤后,可以立即進(jìn)行調(diào)試并改正錯(cuò)誤;經(jīng)過調(diào)試的程序還需要進(jìn)行回歸測(cè)試,以檢查調(diào)試的效果,同時(shí)也可防止在調(diào)試過程中引進(jìn)新的錯(cuò)誤,,,◇,,調(diào)試用例與測(cè)試用例可以一致,也可以不一致,7.4.3,軟件調(diào)試,,調(diào)試的關(guān)鍵在于推斷程序內(nèi)部的錯(cuò)誤位置及原因。軟件調(diào)試可以分為靜態(tài)調(diào)試和動(dòng)態(tài)調(diào)試。軟件測(cè)試中討論的靜態(tài)分析方法同樣適用靜態(tài)調(diào)試。靜態(tài)調(diào)試主要指通過人的思維來分析源程序代碼和排錯(cuò),是主要的調(diào)試手段,而動(dòng)態(tài)調(diào)試是輔助靜態(tài)調(diào)試的,,主要的調(diào)試方法可以采用:,,◇,,強(qiáng)行排錯(cuò)法,,,作為傳統(tǒng)的調(diào)試方法,其過程可概括為,:,設(shè)置斷點(diǎn)、程序暫停、觀察程序狀態(tài)、繼續(xù)運(yùn)行程序。這是目前使用較多、效率較低的調(diào)試方法。涉及的調(diào)試技術(shù)主要是設(shè)置斷點(diǎn)和監(jiān)視表達(dá)式。例如:通過內(nèi)存全部打印來排錯(cuò)、在程序特定部位設(shè)置打印語(yǔ)句(斷點(diǎn)法)、自動(dòng)調(diào)試工具等。應(yīng)用以上任何一種技術(shù)之前,都應(yīng)當(dāng)對(duì)錯(cuò)誤的征兆進(jìn)行全面徹底的分析,得出對(duì)出錯(cuò)位置及錯(cuò)誤性質(zhì)的推測(cè),再使用一種適當(dāng)?shù)呐佩e(cuò)方法來檢驗(yàn)推測(cè)的正確性,7.4.3,軟件調(diào)試,,◇,,回溯法,,,該方法適合于小規(guī)模程序的排錯(cuò)。即一旦發(fā)現(xiàn)了錯(cuò)誤,先分析錯(cuò)誤征兆,確定最先發(fā)現(xiàn),“,癥狀,”,的位置。然后,從發(fā)現(xiàn),“,癥狀,”,的地方開始,沿程序的控制流程,逆向跟蹤源程序代碼,直到找到錯(cuò)誤根源或確定錯(cuò)誤產(chǎn)生的范圍?;厮莘▽?duì)于小程序很有效,往往能把錯(cuò)誤范圍縮小到程序中的一小段代碼,仔細(xì)分析這段代碼不難確定出錯(cuò)的準(zhǔn)確位置。但隨著源代碼行數(shù)的增加,潛在的回溯路徑數(shù)目很多,回溯會(huì)變得很困難,而且實(shí)現(xiàn)這種回溯的開銷大,7.4.3,軟件調(diào)試,,◇,,原因排除法,,通過演繹、歸納和二分法來實(shí)現(xiàn),,○,,演繹法,一種從一般原理或前提出發(fā),推導(dǎo)出結(jié)論的思考方法。首先測(cè)試人員根據(jù)已有的測(cè)試用例,設(shè)想及枚舉出所有可能出錯(cuò)的原因作為假設(shè),然后再用原始測(cè)試數(shù)據(jù)或新的測(cè)試,從中逐個(gè)排除不可能正確的假設(shè),最后,再用測(cè)試數(shù)據(jù)驗(yàn)證余下的假設(shè)確定出錯(cuò)的原因,,○,,歸納法,一種從特殊推斷出一般的系統(tǒng)化思考方法。從一些線索(錯(cuò)誤征兆或與錯(cuò)誤發(fā)生有關(guān)的數(shù)據(jù))著手,通過分析尋找潛在的原因,從而找出錯(cuò)誤,,○,,二分法,已知每個(gè)變量在程序中若干個(gè)關(guān)鍵點(diǎn)的正確值時(shí),使用賦值語(yǔ)句、輸入語(yǔ)句等定值語(yǔ)句在程序中的某點(diǎn)附近給這些變量賦值,然后運(yùn)行程序并檢查程序的輸出。如果輸出結(jié)果是正確的,則錯(cuò)誤原因在程序的前半部分;反之,錯(cuò)誤原因在程序的后半部分。對(duì)錯(cuò)誤原因所在的部分重復(fù)使用這種方法,直到將出錯(cuò)范圍縮小到容易診斷的程度為止,7.4.3,軟件調(diào)試,上面的每一種方法都可以使用調(diào)試工具來輔助完成。例如,可以使用帶調(diào)試功能的編譯器、動(dòng)態(tài)調(diào)試器、自動(dòng)測(cè)試用例生成器以及交叉引用工具等,,,需要注意的一個(gè)實(shí)際問題是,調(diào)試的結(jié)果是排錯(cuò),為了修改程序中錯(cuò)誤,往往會(huì)采用,“,補(bǔ)丁程序,”,來實(shí)現(xiàn),而這種做法會(huì)引起整個(gè)程序質(zhì)量的下降,但是從目前程序設(shè)計(jì)發(fā)展的狀況看,對(duì)大規(guī)