![軟件工程-2及軟件工程課設(shè)六子棋_第1頁](http://file4.renrendoc.com/view11/M00/2C/15/wKhkGWX65zuANzceAAKhlMhZuus867.jpg)
![軟件工程-2及軟件工程課設(shè)六子棋_第2頁](http://file4.renrendoc.com/view11/M00/2C/15/wKhkGWX65zuANzceAAKhlMhZuus8672.jpg)
![軟件工程-2及軟件工程課設(shè)六子棋_第3頁](http://file4.renrendoc.com/view11/M00/2C/15/wKhkGWX65zuANzceAAKhlMhZuus8673.jpg)
![軟件工程-2及軟件工程課設(shè)六子棋_第4頁](http://file4.renrendoc.com/view11/M00/2C/15/wKhkGWX65zuANzceAAKhlMhZuus8674.jpg)
![軟件工程-2及軟件工程課設(shè)六子棋_第5頁](http://file4.renrendoc.com/view11/M00/2C/15/wKhkGWX65zuANzceAAKhlMhZuus8675.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
程序編碼習(xí)題【4-1】從下列關(guān)于模塊化程序設(shè)計的敘述中選出5條正確的敘述。①程序設(shè)計比較方便,但比較難以維護(hù)。②便于由多個人分工編制大型程序。③軟件的功能便于擴(kuò)充。④程序易于理解,也便于排錯。⑤在主存儲器能夠容納得下的前提下,應(yīng)使模塊盡可能大,以便減少模塊的個數(shù)。⑥模塊之間的接口叫做數(shù)據(jù)文件。⑦只要模塊之間的接口關(guān)系不變,各模塊內(nèi)部實現(xiàn)細(xì)節(jié)的修改將不會影響別的模塊。⑧模塊間的單向調(diào)用關(guān)系叫做模塊的層次結(jié)構(gòu)。⑨模塊越小,模塊化的優(yōu)點越明顯。一般來說,模塊的大小都在10行以下?!?-2】結(jié)構(gòu)化程序設(shè)計有時被錯誤地稱為“無GOTO語句”的程序設(shè)計。請說明為什么會出現(xiàn)這樣的說法,并討論環(huán)繞著這個問題的一些爭論?!?-3】從下面關(guān)于程序編制的敘述中,選出三條正確的敘述。①在編制程序之前,首先必須仔細(xì)閱讀給定的程序說明書。然后,必須如實地依照說明書編寫程序。說明書中常會有含糊不清或難以理解的地方。程序員在作業(yè)時應(yīng)該對這些地方作出適當(dāng)?shù)慕忉尅"谠谥志幹瞥绦驎r,重要的是采用既能使程序正確地按設(shè)計說明書進(jìn)行處理,又易于出錯的編寫方法。③在編制程序時,首先應(yīng)該對程序的結(jié)構(gòu)充分考慮,不要急于開始編碼,而要象寫軟件文檔那樣,很好地琢磨程序具有什么樣的功能,這些功能如何安排等等。④考慮到以后的程序變更,為程序編寫完整的說明書是一項很重要的工作。只要有了完整的程序說明書,即使程序的編寫形式難以讓他人看懂也沒有什么關(guān)系。⑤編制程序時不可缺少的條件是,程序的輸入和輸出數(shù)據(jù)的格式都應(yīng)確定。其他各項規(guī)定都是附帶的,無足輕重。⑥作為一個好的程序,不僅處理速度要快,而且易讀易修改等等也都是重要的條件。為了能得到這樣的程序,不僅要熟悉程序設(shè)計語言的語法,還要注意采用適當(dāng)?shù)囊?guī)程和單純的表現(xiàn)方法,注意使整個程序的結(jié)構(gòu)簡潔?!?-7】下面給出一個求實函數(shù)方程F(x)在自變量區(qū)間[a,b]中的全部實根的算法。首先閱讀此程序,然后 畫出消去全部goto語句的結(jié)構(gòu)化程序流程圖。 在算法中,a與b是區(qū)間[a,b]的兩端點值;eps1與eps2是用戶要求的求解精度。如果區(qū)間中點的函數(shù)值的絕對值小于eps1或新的小區(qū)間的長度小于eps2,就認(rèn)為這個中點為根。 floatBinRoot(floata,floatb,floateps1,floateps2){ floatlow=a,high=b,mid,fmid;floatflow=Func(low),fhigh:=Func(high); labelL1,L2,L3;//標(biāo)號說明,給定某些程序地址 if(flow*fhigh>0.0){BinRoot=0;gotoL3;}//無實根L1: mid=(low+high)/2;fmid=Func(mid); if(abs(fmid)<=eps1){L2: BinRoot=mid;gotoL3; } elseif(high-mid<=eps2)gotoL2; elseif(flow*fmid>0.0){low=mid;flow=fmid;gotoL1;} else{high=mid;gotoL1};L3:}習(xí)題解答【4-1】正確的敘述有②、③、④、⑦、⑧。如果程序結(jié)構(gòu)的模塊化滿足評價的標(biāo)準(zhǔn)(高內(nèi)聚,低耦合),這樣的結(jié)構(gòu)是容易編碼,容易測試,容易理解,容易修改,容易維護(hù)的。程序的功能也容易擴(kuò)充。特別適合于大型程序編制時,多人分工合作,協(xié)同完成任務(wù)的情形。因為是采用自頂向下,逐層分解來劃分模塊結(jié)構(gòu)的,所以模塊之間的調(diào)用關(guān)系是分層次的模塊結(jié)構(gòu),就叫做模塊的層次結(jié)構(gòu)。模塊之間的信息傳遞叫做模塊的接口,模塊之間傳遞信息可以通過參數(shù)表、全局變量或全局?jǐn)?shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)文件、專門的通信模塊,不是專指數(shù)據(jù)文件。劃分模塊時,模塊大小要適中。模塊太大,控制路徑數(shù)目多、涉及的范圍廣、變量的數(shù)目多、總體復(fù)雜性高,可理解性、可修改性、可靠性就會變差。模塊太小,模塊個數(shù)增大,調(diào)用的系統(tǒng)開銷就會增大。所以要有一個權(quán)衡?!炯妬y如麻的程序流程4-2】早在1963年,針對當(dāng)時流行的ALGOL語言,PeterNaur指出,在程序中大量地,沒有節(jié)制地使用GOTO語句,會使程序結(jié)構(gòu)變得非?;靵y。但是很多人還不太注意這一問題。以致許多人寫出來的程序仍然是紛亂如麻的。紛亂如麻的程序流程1965年,E.W.Dijkstra在一次會議上提出,應(yīng)當(dāng)把GOTO語句從高級語言中取消。并指出,程序的質(zhì)量與程序中包含的GOTO語句的數(shù)量成反比。在這種思想的影響下,當(dāng)時新開發(fā)的幾種高級程序設(shè)計語言,例如LISP、ISWIM、BLISS等,都把GOTO語句取消了。1966年,Bohm與Jacopini證明了任何單入口單出口的沒有“死循環(huán)”的程序都能由三種最基本的控制結(jié)構(gòu)構(gòu)造出來。這三種基本控制結(jié)構(gòu)就是“順序結(jié)構(gòu)”、“選擇IF-THEN-ELSE結(jié)構(gòu)”、“重復(fù)DO-WHILE或DO-UNTIL結(jié)構(gòu)”。1968年,Dijkstra在寫給<ACM>(美國計算機協(xié)會通訊)雜志編輯部的信中再次建議從一切高級語言中取消GOTO語句,只使用三種基本控制結(jié)構(gòu)編寫程序。他的建議引起了激烈的爭論。爭論集中在如何看待GOTO語句的問題上。贊成取消GOTO語句的一方認(rèn)為,GOTO語句對程序清晰性有很大破壞作用,凡是使用GOTO語句多的程序,其控制流時而GOTO向前,時而GOTO向后,常使程序變得很難理解,從而增加查錯和維護(hù)的困難,降低程序的可維護(hù)性。但以D.E.Knuth為代表的另一方認(rèn)為,GOTO語句雖然存在著破壞程序清晰性的問題,但不應(yīng)完全禁止。因為GOTO語句概念簡單,使用方便,在某些情況下,保留GOTO語句反能使寫出的程序更加簡潔,并且GOTO語句可直接得到硬件指令的支持。經(jīng)過爭論,人們認(rèn)識到,不是簡單地去掉GOTO語句的問題,而是要創(chuàng)立一種新的程序設(shè)計思想、方法和風(fēng)格,以顯著提高軟件生產(chǎn)率和軟件質(zhì)量,降低軟件維護(hù)的成本。70年代初N.Wirth在設(shè)計Pascal語言時對GOTO語句的處理可被當(dāng)做對GOTO語句爭論的結(jié)論。在Pascal語言中設(shè)置了支持上述三種基本控制結(jié)構(gòu)的語句;另一方面,GOTO語句仍然保留在該語言中。不過,N.Wirth解釋說,通常使用所提供的幾種基本控制結(jié)構(gòu)已經(jīng)足夠,習(xí)慣于這樣做的人不會感到GOTO語句的必要。也就是說,在一般情況下,可以完全不使用GOTO語句。如果在特殊情況下,由于特定的要求,偶然使用GOTO語句能解決問題,那也未嘗不可,只是不應(yīng)大量使用罷了。事實上,大量采用GOTO語句實現(xiàn)控制路徑,會使程序路徑變得復(fù)雜而且混亂,從而使程序變得不易閱讀,給程序的測試和維護(hù)造成困難,還會增加出錯的機會,降低程序的可靠性。因此要控制GOTO語句的使用。但有時完全不用GOTO語句進(jìn)行程序編碼,比用GOTO語句編出的程序可讀性差。例如,在查找結(jié)束時,文件訪問結(jié)束時,出現(xiàn)錯誤情況要從循環(huán)中轉(zhuǎn)出時,使用布爾變量和條件結(jié)構(gòu)來實現(xiàn)就不如用GOTO語句來得簡潔易懂?!?-3】①、④、⑥。編制程序的過程實際上是根據(jù)設(shè)計的結(jié)果,用某種機器能夠識別的程序設(shè)計語言,將設(shè)計翻譯成機器代碼的過程。因此,必須如實地按照設(shè)計說明書編寫程序。至于設(shè)計說明書中含糊不清的地方,應(yīng)當(dāng)在編程時與分析人員或設(shè)計人員協(xié)商,對這些地方做出適當(dāng)?shù)慕忉?。另外,考慮到將來的程序修改,必須為程序編寫完整的說明書,同時程序必須編寫得容易讓別人看得懂,這樣程序才容易修改,修改時不容易出錯,而且容易驗證修改后得結(jié)果。還有,編寫程序的人不須重新考慮程序要完成什么功能,這些已經(jīng)在軟件分析與設(shè)計過程中充分考慮過了?!?-7】結(jié)構(gòu)化的程序流程圖:low=alow=a;high=b;flow=Func(low);fhigh=Func(high);mid=(low+highmid=(low+high)/2;fmid=Func(mid);end=1;flow*fhigh>0.0?Tretval=0;T|fmid|epsT|fmid|eps1?Fend==1?返回retval;結(jié)束Fend==1?返回retval;結(jié)束Fhigh-mideps2high-mideps2?FTend=0;retval=end=0;retval=mid;TTFflow*fmid>0.0?FTFflow*fmid>0.0?Fhigh=mid;low=mid;flow=high=mid;low=mid;flow=fmid;軟件測試復(fù)習(xí)要求1.了解軟件測試的目的和原則。2.了解軟件錯誤的分類。3.了解軟件測試的過程和策略。4.了解軟件測試用例設(shè)計的方法,掌握邏輯覆蓋、基本路徑測試、因果圖等測試用例設(shè)計方法。5.了解程序靜態(tài)測試的方法。習(xí)題【5-1】從供選擇的答案中選出應(yīng)填入下列()中的字句。軟件測試的目的是(A)。為了提高測試的效率,應(yīng)該(B)。使用白盒測試方法時,確定測試數(shù)據(jù)應(yīng)根據(jù)(C)和指定的覆蓋標(biāo)準(zhǔn)。與設(shè)計測試數(shù)據(jù)無關(guān)的文檔是(D)。軟件的集成測試工作最好由(E)承擔(dān),以提高集成測試的效果。供選擇的答案:A. ①評價軟件的質(zhì)量 ②發(fā)現(xiàn)軟件的錯誤③找出軟件中的所有錯誤 ④證明軟件是正確的B. ①隨機地選取測試數(shù)據(jù) ②取一切可能的輸入數(shù)據(jù)作為測試數(shù)據(jù)③在完成編碼以后制定軟件的測試計劃④選擇發(fā)現(xiàn)錯誤的可能性大的數(shù)據(jù)作為測試數(shù)據(jù)C. ①程序的內(nèi)部邏輯 ②程序的復(fù)雜程度③使用說明書 ④程序的功能D. ①該軟件的設(shè)計人員 ②程序的復(fù)雜程度③源程序 ④項目開發(fā)計劃E. ①該軟件的設(shè)計人員 ②該軟件開發(fā)組的負(fù)責(zé)人③該軟件的編程人員 ④不屬于該軟件開發(fā)組的軟件設(shè)計人員【5-2】請從供選擇的答案中選出應(yīng)填入下列()中的字句。程序的三種基本控制結(jié)構(gòu)是(A)。它們的共同點是(B)。結(jié)構(gòu)化程序設(shè)計的一種基本方法是(C)。軟件測試的目的是(D)。軟件調(diào)試的目的是(E)。供選擇的答案:A. ①過程,子程序,分程序 ②順序,條件,循環(huán)③遞歸,堆棧,隊列 ④調(diào)用,返回,轉(zhuǎn)移B. ①不能嵌套使用 ②只能用來寫簡單的程序③已經(jīng)用硬件實現(xiàn) ④只有一個入口和一個出口C. ①篩選法 ②遞歸法 ③歸納法 ④逐步求精法D. ①證明程序中沒有錯誤 ②發(fā)現(xiàn)程序中的錯誤③測量程序的動態(tài)特性 ④檢查程序中的語法錯誤E. ①找出錯誤所在并改正之 ②排除存在錯誤的可能性③對錯誤性質(zhì)進(jìn)行分類 ④統(tǒng)計出錯的次數(shù)【5-3】從下列關(guān)于軟件測試的敘述中,選出5條正確的敘述。(1)用黑盒法測試時,測試用例是根據(jù)程序內(nèi)部邏輯設(shè)計的。(2)盡量用公共過程或子程序去代替重復(fù)的代碼段。(3)測試是為了驗證該軟件已正確地實現(xiàn)了用戶的要求。(4)對于連鎖型分支結(jié)構(gòu),若有n個判定語句,則有2n條路徑。(5)盡量采用復(fù)合的條件測試,以避免嵌套的分支結(jié)構(gòu)。(6)GOTO語句概念簡單,使用方便,在某些情況下,保留GOTO語句反能使寫出的程序更加簡潔。(7)發(fā)現(xiàn)錯誤多的程序模塊,殘留在模塊中的錯誤也多。(8)黑盒測試方法中最有效的是因果圖法。(9)在做程序的單元測試時,樁(存根)模塊比驅(qū)動模塊容易編寫。(10)程序效率的提高主要應(yīng)通過選擇高效的算法來實現(xiàn)?!?-4】從供選擇的答案中選出同下列關(guān)于軟件測試的各條敘述關(guān)系最密切的字句。(1)對可靠性要求很高的軟件,例如操作系統(tǒng),由第三者對源代碼進(jìn)行逐行檢查。(2)已有的軟件被改版時,由于受到變更的影響,改版前正常的功能可能發(fā)生異常,性能也可能下降。因此,對變更的軟件進(jìn)行測試是必要的。(3)在意識到被測試模塊的內(nèi)部結(jié)構(gòu)或算法的情況下進(jìn)行測試。(4)為了確認(rèn)用戶的需求,先做出系統(tǒng)的主要部分,提交給用戶試用。(5)在測試具有層次結(jié)構(gòu)的大型軟件時,有一種方法是從上層模塊開始,由上到下進(jìn)行測試。此時,有必要用一些模塊替代尚未測試過的下層模塊。供選擇的答案:AE: ①仿真器 ②代碼審查③模擬器 ④樁 ⑤驅(qū)動器⑥域測試 ⑦黑盒測試 ⑧原型 ⑨白盒測試 ⑩退化測試【5-5】對小的程序進(jìn)行窮舉測試是可能的,用窮舉測試能否保證程序是百分之百正確呢?【5-6】在任何情況下單元測試都是可能的嗎?都是需要的嗎?【5-7】從供選擇的答案中選出應(yīng)填入下面有關(guān)軟件測試的敘述的()內(nèi)的正確答案。軟件測試方法可分為黑盒測試法和白盒測試法兩種。黑盒測試法是通過分析程序的(A)來設(shè)計測試用例的方法。除了測試程序外,它還適用于對(B)階段的軟件文檔進(jìn)行測試。白盒測試法是根據(jù)程序的(C)來設(shè)計測試用例的方法。除了測試程序外,它也適用于對(D)階段的軟件文檔進(jìn)行測試。白盒法測試程序時常按照給定的覆蓋條件選取測試用例。(E)覆蓋比(F)覆蓋嚴(yán)格,它使得每一個判定的每一條分支至少經(jīng)歷一次。(G)覆蓋既是判定覆蓋,又是條件覆蓋,但它并不保證使各種條件都能取到所有可能的值。(H)覆蓋比其他條件都要嚴(yán)格,但它不能保證覆蓋程序中的每一條路徑。單元測試一般以(I)為主,測試的依據(jù)是(J)。供選擇的答案:A,C:①應(yīng)用范圍 ②內(nèi)部邏輯 ③功能 ④輸入數(shù)據(jù)B,D:①編碼 ②軟件詳細(xì)設(shè)計 ③軟件總體設(shè)計④需求分析E,F,G,H:①語句 ②判定 ③條件 ④判定/條件⑤多重條件 ⑥路徑I:①白盒法 ②黑盒法J:①模塊功能規(guī)格說明 ②系統(tǒng)模塊結(jié)構(gòu)圖 ③系統(tǒng)需求規(guī)格說明【5-8】從供選擇的答案中選出應(yīng)該填入下列關(guān)于軟件測試的敘述的()內(nèi)的正確答案。軟件測試中常用的靜態(tài)分析方法是(A)和(B)。(B)用于檢查模塊或子程序間的調(diào)用是否正確。分析方法(白盒方法)中常用的方法是(C)方法。非分析方法(黑盒方法)中常用的方法是(D)方法和(E)方法。(E)方法根據(jù)輸出對輸入的依賴關(guān)系設(shè)計測試用例。供選擇的答案:AB: ①引用分析 ②算法分析 ③可靠性分析 ④效率分析 ⑤接口分析 ⑥操作分析C~E: ①路徑測試②等價類 ③因果圖 ④歸納測試⑤綜合測試⑥追蹤 ⑦深度優(yōu)先 ⑧調(diào)試⑨相對圖習(xí)題解答【5-1】A.②B.④C.①D.④E.④軟件測試的目的是軟件中的錯誤。因為不可能把所有可能的輸入數(shù)據(jù)都拿來測試(時間花費不起),為了提高測試的效率,應(yīng)該選擇發(fā)現(xiàn)錯誤的可能性大的數(shù)據(jù)作為測試數(shù)據(jù)。使用白盒測試方法時,確定測試數(shù)據(jù)應(yīng)根據(jù)程序的內(nèi)部邏輯和指定的覆蓋標(biāo)準(zhǔn),可以不考慮程序的功能。與設(shè)計測試數(shù)據(jù)無關(guān)的文檔是項目開發(fā)計劃。軟件的集成測試工作最好由不屬于該軟件開發(fā)組的軟件設(shè)計人員承擔(dān),以提高集成測試的效果?!?-2】A.②B.④C.④D.②E.① 1966年,Bohm與Jacopini提出任何單入口單出口的沒有“死循環(huán)”的程序都能由三種最基本的控制結(jié)構(gòu)構(gòu)造出來。這三種基本控制結(jié)構(gòu)就是“順序結(jié)構(gòu)”、“選擇IF-THEN-ELSE結(jié)構(gòu)”、“重復(fù)DO-WHILE或DO-UNTIL結(jié)構(gòu)”。它們的共同點是只有一個入口和一個出口。E.W.Dijkstra提出了程序要實現(xiàn)結(jié)構(gòu)化的主張,并將這一類程序設(shè)計稱為結(jié)構(gòu)化程序設(shè)計。這種方法的一個重要原則就是采用自頂向下、逐步求精的方法編寫程序。N.Wirth曾做過如下說明:“我們對付一個復(fù)雜問題的最重要的方法就是抽象。因此,對于一個復(fù)雜的問題,不要急于馬上用計算機指令、數(shù)字和邏輯符號來表示它,而應(yīng)當(dāng)先用較自然的抽象的語句來表示,從而得到抽象的程序。抽象程序?qū)Τ橄蟮臄?shù)據(jù)類型進(jìn)行某些特定的運算,并用一些合適的記號(可以是自然語言)來表示。下一步對抽象程序再做分解,進(jìn)入下一個抽象的層次。這樣的細(xì)化過程一直進(jìn)行下去,直到程序能被計算機接受為止。此時的程序已經(jīng)是用某種高級語言或機器指令書寫的了。”軟件調(diào)試則是在進(jìn)行了成功的測試之后才開始的工作。它與軟件測試不同,軟件測試的目的是盡可能多地發(fā)現(xiàn)軟件中的錯誤,但進(jìn)一步診斷和改正程序中潛在的錯誤,則是調(diào)試的任務(wù)。調(diào)試活動由兩部分組成:①確定程序中可疑錯誤的確切性質(zhì)和位置。②對程序(設(shè)計,編碼)進(jìn)行修改,排除這個錯誤?!?-3】正確的敘述有(4)、(5)、(6)、(7)、(10)。黑盒測試主要是根據(jù)程序的有關(guān)功能規(guī)格說明和覆蓋準(zhǔn)則來設(shè)計測試用例,進(jìn)行測試的,不是根據(jù)程序的內(nèi)部邏輯來設(shè)計測試用例,這是白盒測試做的事情。在所有黑盒測試方法中,最有效的不是因果圖法,而是邊界值分析方法。測試的目的是盡可能多地發(fā)現(xiàn)軟件中的錯誤,其附帶的收獲才是驗證該軟件已正確地實現(xiàn)了用戶的要求。測試的一條重要原則是:發(fā)現(xiàn)錯誤多的程序模塊,殘留在模塊中的錯誤也多。軟件可靠性模型(Shooman)就是依據(jù)這個原則建立它的公式的。對于連鎖型分支結(jié)構(gòu),若有n個判定語句,則有2n條路徑。因此,隨著n的增大,路徑數(shù)增長非??臁卧獪y試時,因為樁模塊要模擬子模塊的功能,這不是一件容易的事情,而驅(qū)動模塊只是控制被測模塊的執(zhí)行,所以樁模塊的編寫比驅(qū)動模塊的編寫要難得多。在程序設(shè)計風(fēng)格方面,如果重復(fù)的代碼段沒有明顯的功能,不可以抽取出來形成獨立的公共過程或子程序,只有在這些代碼段表現(xiàn)出獨立的功能時,才可把它們抽取出來形成獨立的公共過程或子程序。另外,程序效率的提高主要應(yīng)通過選擇高效的算法或使用高效的語言編譯器來實現(xiàn)。GOTO語句概念簡單,使用方便,在某些情況下,保留GOTO語句反能使寫出的程序更加簡潔,這句話是正確的?!?-4】(1)②(2)⑩(3)⑨(4)⑧(5)④(1)對可靠性要求很高的軟件,由第三者對源代碼進(jìn)行逐行檢查,這是代碼審查。(2)軟件變更時可能發(fā)生退化現(xiàn)象:原來正常的功能可能發(fā)生異常,性能也可能下降。因此,對變更的軟件要進(jìn)行退化測試。(3)基于被測試模塊的內(nèi)部結(jié)構(gòu)或算法設(shè)計測試用例進(jìn)行測試,這是白盒測試。(4)為了確認(rèn)用戶的需求,先做出系統(tǒng)的原型,提交給用戶試用。(5)自頂向下對具有層次結(jié)構(gòu)的大型軟件進(jìn)行集成測試時,需要設(shè)計一些虛擬模塊來替代尚未測試過的下層模塊,這些模塊叫做樁模塊?!?-5】對小程序進(jìn)行窮舉測試,不見得能保證程序百分之百正確。所謂窮舉測試是拿所有可能的輸入數(shù)據(jù)來作為測試用例(黑盒測試),或覆蓋程序中所有可能的路徑(白盒測試)。對于小程序來說,實際上并不能真正作到窮舉測試。例如前面講過,一個小程序P只有兩個輸入X和Y及輸出Z,在字長為32位的計算機上運行。如果X、Y只取整數(shù),考慮把所有的X、Y值都做為測試數(shù)據(jù),按黑盒方法進(jìn)行窮舉測試,這樣做可能采用的測試數(shù)據(jù)組(Xi,Yi),基數(shù)(radix)i的最大可能數(shù)目為:232×232=264。如果程序P測試一組X、Y數(shù)據(jù)需要1毫秒,而且假定一天工作24小時,一年工作365天,要完成264組測試,需要5億年。
【5-6】單元測試又稱模塊測試,是針對軟件設(shè)計的最小單位─程序模塊,進(jìn)行正確性檢驗的測試工作。其目的在于發(fā)現(xiàn)各模塊內(nèi)部可能存在的各種差錯。單元測試需要從程序的內(nèi)部結(jié)構(gòu)出發(fā)設(shè)計測試用例。多個模塊可以平行地獨立進(jìn)行單元測試。單元測試是在編碼階段完成的,每編寫出一個程序模塊,就開始做這個模塊的單元測試,所以只要采用模塊化方法開發(fā)軟件,單元測試都是必需的。它可由編寫程序的人來完成。因為它需要根據(jù)程序的內(nèi)部結(jié)構(gòu)設(shè)計測試用例,對于那些不了解程序內(nèi)部細(xì)節(jié)的人,這種測試無法進(jìn)行。【5-7】A.③B.④C.②D.②E.②F.①G.④H.⑤I.①J.①軟件測試方法可分為黑盒測試法和白盒測試法兩種。黑盒測試法是基于程序的功能來設(shè)計測試用例的方法。除了測試程序外,它還適用于對需求分析階段的軟件文檔進(jìn)行測試。白盒測試法是根據(jù)程序的內(nèi)部邏輯來設(shè)計測試用例的方法。除了測試程序外,它也適用于對軟件詳細(xì)設(shè)計階段的軟件文檔進(jìn)行測試。白盒法測試程序時常按照給定的覆蓋條件選取測試用例。判定覆蓋比語句覆蓋嚴(yán)格,它使得每一個判定的每一條分支至少經(jīng)歷一次。判定/條件覆蓋既是判定覆蓋,又是條件覆蓋,但它并不保證使各種條件都能取到所有可能的值。多重條件覆蓋,也叫組合條件覆蓋,比其他條件都要嚴(yán)格,但它不能保證覆蓋程序中的每一條路徑。單元測試一般以白盒法為主,測試的依據(jù)是系統(tǒng)的模塊功能規(guī)格說明?!?-8】A.①B.⑤C.①D.②E.③軟件測試中常用的靜態(tài)分析方法是引用分析和接口分析。接口分析用于檢查模塊或子程序間的調(diào)用是否正確。分析方法(白盒方法)中常用的方法是路徑測試方法。非分析方法(黑盒方法)中常用的方法是等價類(劃分)方法和因果圖方法。因果圖方法根據(jù)輸出對輸入的依賴關(guān)系設(shè)計測試用例。面向?qū)ο蠹夹g(shù)復(fù)習(xí)要求1.了解面向?qū)ο蟮母拍?.了解用面向?qū)ο蠓椒?gòu)造軟件的開發(fā)過程3.了解面向?qū)ο蠓治龇椒?.了解面向?qū)ο笤O(shè)計方法習(xí)題【6-1】什么叫面向?qū)ο螅棵嫦驅(qū)ο蠓椒ǖ奶攸c是什么?為什么要用面向?qū)ο蠓椒ㄩ_發(fā)軟件?【6-2】什么是“對象”?識別對象時將潛在對象分成7類,試給出這7類對象的名稱,并舉例說明?!?-3】什么是“類”?“類”與傳統(tǒng)的數(shù)據(jù)類型有什么關(guān)系?有什么區(qū)別?【6-6】面向?qū)ο箝_發(fā)方法與面向數(shù)據(jù)流的結(jié)構(gòu)化開發(fā)方法有什么不同?使用面向?qū)ο箝_發(fā)方法的優(yōu)點在什么地方?【6-12】在類的設(shè)計中需要遵循的方針是什么?三個主要的設(shè)計準(zhǔn)則:抽象、信息隱蔽和模塊化如何才能作到?習(xí)題解答【6-1】關(guān)于“面向?qū)ο蟆?,有許多不同的看法。Coad和Yourdon給出了一個定義:“面向?qū)ο?對象+類+繼承+消息通信”。如果一個軟件系統(tǒng)是使用這樣4個概念設(shè)計和實現(xiàn)的,則認(rèn)為這個軟件系統(tǒng)是面向?qū)ο蟮?。面向?qū)ο蠓椒ǖ奶攸c是:方法的唯一性,即方法是對軟件開發(fā)過程所有階段進(jìn)行綜合考慮而得到的。從生存期的一個階段到下一個階段的高度連續(xù)性,即生存期后一階段的成果只是在前一階段成果的補充和修改。把面向?qū)ο蠓治?OOA)、面向?qū)ο笤O(shè)計(OOD)和面向?qū)ο蟪绦蛟O(shè)計(OOP)集成到生存期的相應(yīng)階段。使用面向?qū)ο蠓椒ㄩ_發(fā)軟件的好處是:開發(fā)方法的唯一性,開發(fā)階段的高度連續(xù)性,表示方式的一致性;問題空間實體的自然表示,減輕了設(shè)計者的負(fù)擔(dān),在設(shè)計系統(tǒng)之初不必考慮一個很完整的解決方案。建立穩(wěn)定的系統(tǒng)結(jié)構(gòu),可促進(jìn)復(fù)用性,易于維護(hù),易于修改,可合理利用共同性,減少復(fù)雜性?!?-2】對象的定義:對象是面向?qū)ο箝_發(fā)模式的基本成分,是現(xiàn)實世界中個體或事物的抽象表示。每個對象可由一組屬性和它可以執(zhí)行的一組操作來定義??赡艿臐撛趯ο笥?類:外部實體:它們產(chǎn)生或接受為目標(biāo)系統(tǒng)所使用的信息。如各種物理設(shè)備、使用人員、其它相關(guān)的子系統(tǒng)。事物:問題的信息域所涉及的概念實體。如各種報告、顯示、文字、信號、規(guī)格說明等。事件:系統(tǒng)運行時發(fā)生的并需要系統(tǒng)記憶的事件。如狀態(tài)轉(zhuǎn)換、物理運動等。角色:與系統(tǒng)有交互的各種人員所扮演的角色。如經(jīng)理、工程師、銷售人員等。場所或位置:建立系統(tǒng)整體環(huán)境或問題上下文的場所、位置。如基于計算機的系統(tǒng)的安裝場所等。組織機構(gòu):與應(yīng)用有關(guān)的組織機構(gòu)。如組織,部門等。結(jié)構(gòu):定義由一組成分對象組成的聚合對象,或在極端情況下,定義對象的相關(guān)類。如傳感器、四輪驅(qū)動車、計算機等?!?-3】把具有相同特征和行為的對象歸在一起就形成了類。類成為某些對象的模板,抽象地描述了屬于該類的全部對象的屬性和操作。屬于某個類的對象叫做該類的實例。對象的狀態(tài)則包含在它的實例變量,即實例的屬性中。類定義了各個實例所共有的結(jié)構(gòu),類的每一個實例都可以使用類中定義的操作。實例的當(dāng)前狀態(tài)是由實例所執(zhí)行的操作定義的。類,就它是一個數(shù)據(jù)值的聚合的意義上來看,與Pascal中的記錄或C中的結(jié)構(gòu)類似,但又有差別。類擴(kuò)展了通常的記錄語義,可提供各種級別的可訪問性。也就是說,記錄的某些成份可能是不可訪問的,而這些成份對于本記錄型來說具有可訪問性。類不同于記錄,因為它們包括了操作的定義,這些操作與類中聲明的數(shù)據(jù)值有相同的地位?!?-6】結(jié)構(gòu)化開發(fā)方法是使用最廣泛、歷史最長的過程化開發(fā)方法。結(jié)構(gòu)化開發(fā)方法產(chǎn)生過程的抽象,這些抽象把軟件視為處理流,定義構(gòu)成一系列步驟的算法,每一步驟都是帶有預(yù)定義輸入和特定輸出的一個過程,把這些步驟串聯(lián)在一起可產(chǎn)生合理的穩(wěn)定的貫通于整個程序的控制流。這將最終導(dǎo)致一個很簡單的具有靜態(tài)結(jié)構(gòu)的體系結(jié)構(gòu)。在結(jié)構(gòu)化開發(fā)方法中,數(shù)據(jù)結(jié)構(gòu)是應(yīng)算法步驟的要求而開發(fā)的。數(shù)據(jù)結(jié)構(gòu)貫穿于過程,提供過程需要傳送給它的操作的信息。系統(tǒng)的狀態(tài)是一組全局變量,這組全局變量保持了狀態(tài)的值,把它們從一個過程傳送到另一個過程。結(jié)構(gòu)化開發(fā)方法是一種成熟的應(yīng)用開發(fā)過程。對這種方法已經(jīng)存在許多支持。然而,在大型系統(tǒng)的開發(fā)上和在面向用戶系統(tǒng)的構(gòu)造上存在一些問題。改進(jìn)大型系統(tǒng)開發(fā)的技術(shù)主要集中在開發(fā)數(shù)據(jù)抽象。日益增多的考慮是使用抽象數(shù)據(jù)類型,把過程化系統(tǒng)開發(fā)過程包括到數(shù)據(jù)驅(qū)動的方法中。隨著大型系統(tǒng)的開發(fā),接踵而來的問題就是要把過程抽象與數(shù)據(jù)抽象方法組合起來,這種需要導(dǎo)致了面向?qū)ο箝_發(fā)方法的誕生。面向?qū)ο箝_發(fā)方法是我們分解問題所使用方法演化的結(jié)果。在結(jié)構(gòu)化開發(fā)方法中過程抽象是優(yōu)先的,而面向?qū)ο箝_發(fā)方法中優(yōu)先的是實體,即問題論域的對象。在面向?qū)ο箝_發(fā)方法中,把標(biāo)識和模型化問題論域中的主要實體做為系統(tǒng)開發(fā)的起點,主要考慮對象的行為而不是必須執(zhí)行的一系列動作。面向?qū)ο笙到y(tǒng)中的對象是數(shù)據(jù)抽象與過程抽象的一個混合體。表示這些實體的數(shù)據(jù)抽象是面向?qū)ο笤O(shè)計過程的主要產(chǎn)品,系統(tǒng)的狀態(tài)保存在各個數(shù)據(jù)抽象的核心所定義的數(shù)據(jù)存儲中。控制流被分成塊,并被包括在各個在數(shù)據(jù)抽象上的各個操作里面。不像在結(jié)構(gòu)化開發(fā)方法里那樣,把數(shù)據(jù)從一個過程傳送到另一個過程,而是控制流從一個數(shù)據(jù)抽象被傳送到另一個數(shù)據(jù)抽象。完成的系統(tǒng)體系結(jié)構(gòu)更復(fù)雜但也更靈活。在塊中分離的控制流允許把復(fù)雜的動作視為局部的相互影響。【6-12】在設(shè)計類時需要遵循的方針是:信息隱蔽:通過信息隱蔽可保護(hù)類的存儲表示不被其它類的實例直接存取。消息限制:該類實例的用戶應(yīng)當(dāng)只能使用界面提供的操作。 狹窄界面:只有對其它類的實例是必要的操作才放到界面上。強內(nèi)聚:模塊內(nèi)部各個部分之間應(yīng)有較強的關(guān)系,它們不能分別標(biāo)識。弱耦合:一個單獨模塊應(yīng)盡量不依賴于其它模塊。顯式信息傳遞:兩個類之間的交互應(yīng)當(dāng)僅涉及顯式信息傳遞。派生類當(dāng)做派生類型:每個派生類應(yīng)該當(dāng)做基類的特殊化來開發(fā),而基類所具有的公共界面成為派生類的共有界面的一個子集。抽象類:某些語言提供了一個類,用它做為繼承結(jié)構(gòu)的開始點,所有用戶定義的類都直接或間接以這個類為基類。為了在類的設(shè)計中做到抽象、信息隱蔽和模塊化:以類作為系統(tǒng)的基本模塊單元,通過一般化―特殊化關(guān)系和整體―部分關(guān)系,搭建整個系統(tǒng)的類層次結(jié)構(gòu),實現(xiàn)數(shù)據(jù)抽象和過程抽象;將數(shù)據(jù)和相關(guān)的操作封裝在類內(nèi)部,建立共有、私有和子類型等存取級別,將數(shù)據(jù)表示定義成為類的私有成員,實現(xiàn)信息隱蔽。通過建立類屬性(類模板),將某些有可復(fù)用要求的類設(shè)計成在數(shù)據(jù)類型上通用的可復(fù)用的軟件構(gòu)件,這樣有助于實現(xiàn)模塊化。軟件維護(hù)在軟件交付使用后修改軟件的過程稱為軟件維護(hù)。軟件維護(hù)一般不包括重大的體系結(jié)構(gòu)的改變,變更的實現(xiàn)方法一般是修改已有的系統(tǒng)構(gòu)件以及在必要的地方添加新構(gòu)件到系統(tǒng)中。軟件維護(hù)的分類?改正性維護(hù):修改軟件缺陷。?適應(yīng)性維護(hù):適應(yīng)變更的操作環(huán)境(硬件、操作系統(tǒng)平臺、其他支持軟件)。?增強性維護(hù):系統(tǒng)需求改變(機構(gòu)因素、業(yè)務(wù)改變)軟件再工程是試圖增加當(dāng)前系統(tǒng)(或稱遺留系統(tǒng))的總體質(zhì)量、提高可維護(hù)性的工程。軟件再工程過程中的活動主要包括以下幾個方面:?文檔重構(gòu)(redocument)?結(jié)構(gòu)重組(restructuring)?逆向工程(reverseengineering)?再工程(reengineering)【7-6】改錯性維護(hù)與“排錯”是否是一回事?為什么?【7-7】從下列敘述中選出5條與提高軟件的可移植性有關(guān)的敘述。①把程序中與計算機硬件特性有關(guān)的部分集成在一起。②選擇時間效率和空間效率高的算法。③使用結(jié)構(gòu)化的程序設(shè)計方法。④盡量用高級語言編寫程序中對效率要求不高的部分。⑤盡可能減少注釋。⑥采用表格控制方式。⑦文檔資料詳盡、正確。⑧在有虛擬存儲器的計算機系統(tǒng)上開發(fā)軟件。⑨減少程序中對文件的讀寫次數(shù)。⑩充分利用宿主計算機的硬件特性?!?-6】改錯性維護(hù)與“排錯(調(diào)試)”不是一個概念。調(diào)試是作為測試的后繼工作而出現(xiàn)的,是當(dāng)測試發(fā)現(xiàn)軟件中的錯誤后,進(jìn)一步診斷和改正程序中潛在的錯誤的活動。而改正性維護(hù)是指在軟件交付使用后,由于開發(fā)時測試的不徹底、不完全,必然會有一部分隱藏的錯誤被帶到運行階段來,這些隱藏下來的錯誤在某些特定的使用環(huán)境下就會暴露出來。為了識別和糾正軟件錯誤、改正軟件性能上的缺陷、排除實施中的誤使用所進(jìn)行的診斷和改正錯誤的過程。調(diào)試在程序編碼階段、測試階段、運行和維護(hù)階段都可以發(fā)揮作用,它實際上是一種工具或手段。在軟件交付運行之后,用戶實際充當(dāng)了測試員的角色,一旦發(fā)現(xiàn)軟件運行中的錯誤或缺陷,就會將問題報告通報軟件銷售商,申請軟件維護(hù)。其后軟件維護(hù)人員可以利用調(diào)試手段來診斷和改正軟件中存在的錯誤。這時可能涉及的范圍不只包括程序,還有文檔和數(shù)據(jù),不僅可能修改程序代碼,而且可能需要修改設(shè)計。甚至需求。所以改正性維護(hù)是在更大范圍中做工作?!?-7】正確的敘述有①、③、④、⑥、⑦。 為了提高軟件的可移植性,應(yīng)當(dāng)盡可能用高級語言編寫源程序代碼。對于與硬件或操作系統(tǒng)有關(guān)的部分,或?qū)π室蠛芨叩牟糠?,?yīng)當(dāng)為它們建立專門的模塊,將用匯編語言寫的程序封裝在這些模塊中,與程序中其它部分以事先約定的標(biāo)準(zhǔn)方式接口。這樣,一旦硬件環(huán)境或操作系統(tǒng)環(huán)境發(fā)生變化,只需修改個別模塊即可。 采用表格控制方式,將所有的外部設(shè)備接口或與其它系統(tǒng)的接口,包括信息傳遞、驅(qū)動程序入口等都用表格控制,即使將來硬件、相關(guān)軟件發(fā)生的變化,只需修改表格中的登記項,原來的程序一律可以不改。 為了將來修改方便,不致于引入新的錯誤,相關(guān)文檔一定要齊全、正確,程序中必須有必要的注釋,并使用如結(jié)構(gòu)化程序設(shè)計方法這樣的良好的程序設(shè)計方法來編寫程序。至于算法選擇,與效率有關(guān),與可移植性無關(guān)。其它敘述,如⑧、⑨、⑩,都不利于可移植性。編號:軟件工程課程設(shè)計說明書題目:六子棋游戲軟件開發(fā)學(xué)院:計算機科學(xué)與工程學(xué)院專業(yè):信息安全學(xué)生姓名:學(xué)號:指導(dǎo)教師:20年10月8日摘要六子棋是流傳于中國民間的一類版圖游戲。是一種雙人對弈搏殺的一種游戲,交戰(zhàn)雙方棋子數(shù)均為六顆,故稱六子棋。六子棋不同于五子棋,沒有過多的棋子無論是從感觀上還是公平性上都要優(yōu)先于五子棋,六子棋的規(guī)則簡單易懂,不像國際棋規(guī)則中的繁復(fù)規(guī)則,適用于各個年齡段的人玩。規(guī)則簡單明了,游戲?qū)Νh(huán)境的要求不高,孩子們大都是在光滑的地面或石板上畫上方格,以石子或木棍、草節(jié)等為棋子,并有簡單的比賽,可以鍛煉腦力。隨著經(jīng)濟(jì)的發(fā)展和人們的生活水平的提高,每個人的業(yè)余休閑時間越發(fā)增多。人們也已經(jīng)開始厭煩這燈紅酒綠的生活,所以有許多的青年人多一起老一輩們所玩的游戲越發(fā)的感興趣,其中六子棋就是再度興起的一種小型的游戲,各種網(wǎng)站關(guān)于六子棋的網(wǎng)頁版游戲頻繁出現(xiàn),令人耳目一新啊,例如3366小游戲,手機版的六子棋游戲也開始漸漸走入各種類型的手機中,為人民增添了生活的樂趣豐富了大家的娛樂時間。讓很多人
重溫70、80后玩家兒時的感動,讓小孩子感受到父母兒時的樂趣。根據(jù)社會上人們對游戲的熱切程度,把以前的游戲通過科學(xué)技術(shù)轉(zhuǎn)換成現(xiàn)代的小游戲軟件。設(shè)計該軟件采用了JAVA技術(shù)并且借鑒了很多小的游戲網(wǎng)站的六子棋游戲,制作了一個簡單方便的游戲。具體實現(xiàn)了這個游戲更加方便了喜歡六子棋的人群,不需要反反復(fù)復(fù)的花棋盤找棋子。不僅僅豐富了人們的生活,增加了娛樂項目,有為人民帶去便利,讓大眾的生活充滿歡樂。目錄TOC\o"1-3"\h\u23193第1章緒論 頁第1章緒論1.1課題背景和意義1.1.1課題背景六子棋是流傳于中國民間的一類版圖游戲。是一種雙人對弈搏殺的一種游戲,交戰(zhàn)雙方棋子數(shù)均為六顆,故稱六子棋。六子棋的棋盤為3乘以3的方格。棋子可信手拿來,只要互相區(qū)分即可。據(jù)傳,六子沖游戲源自中國古代戰(zhàn)爭的士兵陣型訓(xùn)練,后逐漸演變?yōu)橐环N棋類游戲。六子沖規(guī)則簡單,上手容易,但變化無窮,是一種讓人玩起來就欲罷不能的智力對抗游戲。六子沖游戲在上世紀(jì)主要流行于中國四川一帶。在中國山區(qū)農(nóng)村流傳甚廣,由于規(guī)則簡單,工具可信手拈來,是我國鄉(xiāng)間常見的棋類游戲。在商洛鎮(zhèn)安,涪城等地農(nóng)村流行。重慶潼南鄉(xiāng)村地區(qū)也盛行。在江西省寧都縣農(nóng)村,一直流傳有“六子棋”這一棋類游戲。由于筆者是從自己的祖母那里學(xué)會該棋類,而筆者的祖母應(yīng)當(dāng)也是從他人那里學(xué)會的該棋類。有近百年或以上歷史。棋盤。棋盤是4*4。棋子擺放比較自由。假設(shè)以一條平行于底線的橫線將棋盤對半而分,對戰(zhàn)雙方可以將自己所持的6子任意的擺放在己方半邊3個方格的8個頂點的任意6個頂點上。吃子。設(shè)對戰(zhàn)雙方各持黑子與白子。以黑子吃掉白子為例,若黑子的行棋應(yīng)當(dāng)在棋盤上形成某條棋盤線上兩個黑子緊靠著頂著一個緊挨著某個黑子的白子,且同一條棋盤線上只有那兩個黑子和一個白子,那么白子將被吃掉。若由于白子的行走造成的雙黑字頂一個白子,則不構(gòu)成黑子吃白子的條件。反之,白子吃黑字亦然。勝負(fù)。在某一方最后只剩一個棋子時,比賽結(jié)束,以剩下棋子較多的一方為勝。若最終,步入僵局,雙方都無法再吃對方棋子時,則以剩下棋子較多的一方為勝,若雙方棋子數(shù)量一樣,那么視為平局。舊時,農(nóng)閑時,或是在人們在地里勞動停下來休息時,大家在地上畫方格為棋盤,拾碎石、折樹枝作為棋子,以對弈。1.1.2意義六子棋不同于五子棋,沒有過多的棋子無論是從感觀上還是公平性上都要優(yōu)先于五子棋,六子棋的規(guī)則簡單易懂,不像國際棋規(guī)則中的繁復(fù)規(guī)則,適用于各個年齡段的人玩。規(guī)則簡單明了,游戲?qū)Νh(huán)境的要求不高,孩子們大都是在光滑的地面或石板上畫上方格,以石子或木棍、草節(jié)等為棋子,并有簡單的比賽,可以鍛煉腦力。1.2國內(nèi)發(fā)展現(xiàn)狀隨著經(jīng)濟(jì)的發(fā)展和人們的生活水平的提高,每個人的業(yè)余休閑時間越發(fā)增多。人們也已經(jīng)開始厭煩這燈紅酒綠的生活,所以有許多的青年人多一起老一輩們所玩的游戲越發(fā)的感興趣,其中六子棋就是再度興起的一種小型的游戲,各種網(wǎng)站關(guān)于六子棋的網(wǎng)頁版游戲頻繁出現(xiàn),令人耳目一新啊,例如3366小游戲,手機版的六子棋游戲也開始漸漸走入各種類型的手機中,為人民增添了生活的樂趣豐富了大家的娛樂時間。讓很多人
重溫70、80后玩家兒時的感動,讓小孩子感受到父母兒時的樂趣。1.3論文的主要工作雖然六子棋并不算是一個小型軟件,但是要做到工作也是相當(dāng)?shù)亩喟?。在該論文中要對軟件進(jìn)行可行性分析和需求分析,同時還要進(jìn)行系統(tǒng)設(shè)計和系統(tǒng)的功能說明,要對系統(tǒng)的實現(xiàn)進(jìn)行具體的演示和打包安裝,最后還要對該軟件進(jìn)行測試和結(jié)果分析,總結(jié)該系統(tǒng)的功能和不足之處和未來的工作發(fā)展。1.4論文章節(jié)的安排第一章也就是本章對整個論文進(jìn)行了大體的歸納,闡明了課題的背景和意義。我們在第二章中主要對整個軟件進(jìn)行可行性分析:技術(shù)可行性分析,經(jīng)濟(jì)可行性分析,政策可行性分析。同時還要進(jìn)行需求分析:功能說明。第三章要介紹系統(tǒng)設(shè)計:概念結(jié)構(gòu)設(shè)計,各個功能的實現(xiàn)。第四章是對系統(tǒng)的實現(xiàn):算法,UI,關(guān)鍵代碼,打包安裝。第五章是整體的測試功能和結(jié)果分析,最后一章是結(jié)束語也就是課設(shè)的總結(jié)。第2章可行性分析和需求分析2.1可行性分析2.1.1技術(shù)可行性分析該軟件采用JAVA語言開發(fā),使用的開發(fā)工具的Eclipse,Eclipse是一個開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運的是,Eclipse附帶了一個標(biāo)準(zhǔn)的插件集,包括Java開發(fā)工具(JavaDevelopmentKit,JDK)。Eclipse是著名的跨平臺的自由集成開發(fā)環(huán)境(IDE)。最初主要用來Java語言開發(fā),通過安裝不同的插件Eclipse可以支持不同的計算機語言,比如C++和Python等開發(fā)工具。Eclipse的本身只是一個框架平臺,但是眾多插件的支持使得Eclipse擁有其他功能相對固定的IDE軟件很難具有的靈活性。許多軟件開發(fā)商以Eclipse為框架開發(fā)自己的IDE。與傳統(tǒng)程序不同,Sun公司在推出Java之際就將其作為一種開放的技術(shù)。全球數(shù)以萬計的Java開發(fā)公司被要求所設(shè)計的Java軟件必須相互\t"/subview/29/_blank"兼容?!癑ava語言靠群體的力量而非公司的力量”是Sun公司的口號之一,并獲得了廣大軟件開發(fā)商的認(rèn)同。這與\t"/subview/29/_blank"微軟公司所倡導(dǎo)的注重精英和封閉式的模式完全不同。Sun公司對Java編程語言的解釋是:Java編程語言是個簡單、面向?qū)ο?、\t"/subview/29/_blank"分布式、解釋性、健壯、安全與系統(tǒng)無關(guān)、可移植、高性能、多線程和靜態(tài)的語言。Java平臺是基于Java語言的平臺。這樣的平臺非常流行。因此微軟公司推出了與之競爭的\t"/subview/29/_blank".NET平臺以及模仿Java的\t"/subview/29/_blank"C#語言。Java是功能完善的通用程序設(shè)計語言,可以用來開發(fā)可靠的、要求嚴(yán)格的應(yīng)用程序。2.1.2經(jīng)濟(jì)可行性系統(tǒng)的經(jīng)濟(jì)方面的可行性應(yīng)該從項目開發(fā)的投入金額、收益、收益投資比、投資回收周期和敏感性分析來考慮。該軟件的開發(fā)工具使用的是Eclipse它是一個開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺。所有在開發(fā)軟件方面根本不需要經(jīng)濟(jì)的支撐,所有項目的開發(fā)投入金額為0,本系統(tǒng)是一個娛樂性軟件,會免費為大眾提供使用。2.1.3政策的可行性六子棋屬于一種適應(yīng)于大眾的小型娛樂性游戲,不但操作簡單成本低廉同時不涉及到國家的經(jīng)濟(jì)問題和政治問題。不傳播任何的不良思想只是簡單的供給大眾娛樂消遣的小游戲。2.2用戶分類及功能說明該軟件屬于一個免費行軟件,可供任何一個人免費使用。該軟件實現(xiàn)了該游戲本應(yīng)該有的游戲方法同時也人性化的添加了初始界面的設(shè)定,讓整個軟件看起來更加的美觀。其功能有游戲功能其中包括人人對抗,重新開始和認(rèn)輸功能。游戲簡介功能,讓用戶了解該游戲并且能夠快速的掌握游戲技巧和攻略。2.3系統(tǒng)層次方框圖圖2.1系統(tǒng)層次方框圖第3章系統(tǒng)實現(xiàn)3.1模塊實現(xiàn)3.1.1主界面UI設(shè)計:主界面采用的是類似于手機游戲界面設(shè)計的,完美的融合了古代棋類游戲的那種古典的,優(yōu)美的畫風(fēng)。在搭配上古典音樂真有種和古代一起把酒言歡之感。背景圖畫采用水墨畫的形式更增添了韻味。如圖4.1所示:圖3.1UI(主界面)算法和代碼:因為模塊一主要是所涉及的界面的設(shè)計所以涉及的算法幾乎是沒有,那接下來我們就講講代碼部分,主要的代碼只有2個部分一個是音樂部分的代碼,另一個是背景圖片載入的代碼。代碼1:publicvoidPlay(Stringfileurl){ try{AudioInputStreamais=AudioSystem.getAudioInputStream(newFile(fileurl));AudioFormataif=ais.getFormat();System.out.println(aif);finalSourceDataLinesdl;DataLine.Infoinfo=newDataLine.Info(SourceDataLine.class,aif);sdl=(SourceDataLine)AudioSystem.getLine(info);sdl.open(aif);sdl.start();FloatControlfc=(FloatControl)sdl.getControl(FloatControl.Type.MASTER_GAIN);doublevalue=2;floatdB=(float)(Math.log(value==0.0?0.0001:value)/Math.log(10.0)*20.0);fc.setValue(dB);intnByte=0;intwriteByte=0;finalintSIZE=1024*64;byte[]buffer=newbyte[SIZE];while(nByte!=-1){nByte=ais.read(buffer,0,SIZE);sdl.write(buffer,0,nByte);}sdl.stop();}catch(Exceptione){e.printStackTrace();}代碼2:privatevoidsetBackgroundImage(){ ImageIconbackground=newImageIcon(getClass().getResource("c.png")); JLabellabel=newJLabel(background);//背景圖片顯示在一個標(biāo)簽里 //把標(biāo)簽的大小位置設(shè)置為圖片剛好填充 label.setBounds(0,0,background.getIconWidth(), background.getIconHeight()); //把內(nèi)容窗格轉(zhuǎn)化為JPanel,否則不能用方法setOpaque()來使內(nèi)容透明 JPanelimagePanel=(JPanel)this.getContentPane(); imagePanel.setOpaque(false); this.getLayeredPane().setLayout(null); this.getLayeredPane().add(label,newInteger(Integer.MIN_VALUE)); }游戲規(guī)則:為了讓用戶更加的了解六子棋小游戲,在主界面添加了游戲規(guī)則的按鈕。用戶只需要點擊按鍵就可以查看游戲規(guī)則和了解游戲的由來。圖3.1游戲規(guī)則界面代碼:importjavax.swing.*;importjava.awt.BorderLayout;importjava.awt.event.*;importjavax.swing.*;importjava.awt.*;importjava.io.*;publicclassReadextendsJFrame{ protectedStringmessage; JPanelPanel5=newJPanel(); JLabeljt=newJLabel(); JLabeljt1=newJLabel(); JTextAreatextarea; Strings; publicRead(){ this.setBackgroundImage(); textarea=newJTextArea(); add(textarea); textarea.setOpaque(false); this.setSize(700,600); read(); } privatevoidread(){ BufferedReaderbr=null; try{ br=newBufferedReader(newFileReader("game.txt")); Stringstr; while((str=br.readLine())!=null){ textarea.append(str+"\r\n"); } }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); }finally{ try{ if(br!=null) br.close(); }catch(IOExceptione){ e.printStackTrace(); } } } publicstaticvoidmain(String[]args){ Readr=newRead(); r.show();}}3.1.2游戲界面UI設(shè)計:模塊二即游戲部分,游戲界面因為背景圖畫里面的棋子是黑白的,所以為了區(qū)分此處的棋子我采用了顯眼的黃色和綠色棋子,藍(lán)色線行棋盤。界面上還會顯示黃綠雙方走棋的步數(shù)和所剩的棋子數(shù)。這樣更加有利于走棋。如圖4.2所示:圖4.2UI(游戲界面)算法設(shè)計:EQ\o\ac(○,1)棋盤和棋子:棋盤是整個游戲最基礎(chǔ)的部分同時也是最重要的部分,本系統(tǒng)中采用的是JAVA語言中原有的Graphics類,用于繪圖方面特別簡單易行。用Graphics2D的drawline()的方法畫出棋盤,然后再用raphics2D的fillOval()方法繪制棋子,用setColor()的方法置棋子的顏色。最后在使用paint()函數(shù)(自己編寫)繪制整個游戲界面EQ\o\ac(○,2)走棋和吃棋:走棋是比較重要的環(huán)節(jié)。首先,要判斷你要走的地方是否有棋子。其次,要判斷你要走的地方是否和原來的位置在同一條線上,是否相鄰。本系統(tǒng)采用用數(shù)組position代表棋盤上點的狀態(tài)其中不可以下棋的地方設(shè)置為0可以走棋的地方設(shè)置為1有棋子且顏色為綠色的2有棋子且顏色為橘黃色的3。State用1表示放置棋子(默認(rèn))用2表示吃棋子(點擊對方的棋子)用3表示走棋的第一步,即點擊自己的棋子用4表示走棋的第二步,即點擊相鄰的下棋空白點。吃棋在走棋的基礎(chǔ)上只采用了一個zouqitow()的函數(shù),設(shè)置了一個BOOL型的變量GREEN來控制是哪一方走棋。行棋一方若將兩顆棋子移至一起,且一頭挨著對方的一顆棋時,則可吃對方該子。具體見代碼。EQ\o\ac(○,3)輸棋和認(rèn)輸:輸棋就是當(dāng)任何一方的所剩棋子數(shù)為0時,則該方輸棋。認(rèn)輸這個功能沒有什么比較重要的代碼,就是如果任何一方選擇認(rèn)輸就把他的棋子數(shù)置為輸棋的狀態(tài),并且提示該方輸棋。代碼詳情:因為本系統(tǒng)的代碼比較多,所以只展示模塊二的重要的代碼部分:代碼一(paint()函數(shù)):publicvoidpaint(Graphicsg){ super.paintComponents(g);//清屏重繪 Graphics2Dg2d=(Graphics2D)g; g2d.setColor(Color.BLUE); drawchessboard(g2d,a,b,c); drawpieces(g2d); g2d.setColor(Color.BLACK); g2d.setFont(font); g2d.drawString(s,500,150); g2d.drawString(s1+greennum,550,300); g2d.drawString(s2+orangenum,550,350); g2d.drawString(s4+greeneat,550,400); g2d.drawString(s5+orangeeat,550,450); g2d.drawString("黑方時間:"+m,30,470); g2d.drawString("state="+state,80,500); g2d.drawString(GREEN+""+(greennum+orangenum),200,500); g2d.drawString(s0,80,550); if(s3!=null){ g2d.drawString(s3,500,50); } }代碼二:(走棋吃棋)publicvoidzouqione(intx,inty){ if(GREEN==true) { if(position[x][y]==2)//判斷點擊的是不是綠方棋子 { xx=x; yy=y; s="請綠方點擊要放置的位置"; state=4;//正進(jìn)入第二步 }else{ s="綠方走棋:請點擊自己的棋子"; } } else{ if(position[x][y]==3)//判斷點擊的是不是黃方棋子 { xx=x; yy=y; s="請黃方點擊要放置的位置"; state=4;//正點擊新的位置 } else{ s="請黃方走棋:點擊自己的棋子"; } } }publicvoidzouqitwo(intx,inty){ if(position[x][y]==1||position[x][y]==4) { if(isnext(xx,yy,x,y)){ position[xx][yy]=1; if(GREEN)//如果綠方走 {position[x][y]=2;//把點擊的位置變成綠點 greennum=greennum+1; } if(!GREEN)//如果是黃方走 { position[x][y]=3;//把點擊的位置變成黃點 orangenum=orangenum+1; } if(position[4][y]!=1&&position[4][y]==position[6][y]&&position[0][y]==1&&position[2][y]!=position[4][y]&&position[2][y]!=1) { if(position[2][y]!=position[x][y])//防自殺 position[2][y]=1; GREEN=false; orangeeat--; } else if(position[2][y]!=1&&position[2][y]==position[4][y]&&position[0][y]!=position[2][y]&&position[6][y]==1&&position[0][y]!=1) { if(position[0][y]!=position[x][y])//防自殺 position[0][y]=1; GREEN=false; orangeeat--; } else if(position[2][y]!=1&&position[2][y]==position[4][y]&&position[6][y]!=position[2][y]&&position[0][y]==1&&position[6][y]!=1) { if(position[6][y]!=position[x][y])//防自殺 position[6][y]=1; GREEN=false; orangeeat--; } else if(position[0][y]!=1&&position[0][y]==position[2][y]&&position[4][y]!=position[0][y]&&position[6][y]==1&&position[4][y]!=1) { if(position[4][y]!=position[x][y])//防自殺 position[4][y]=1; GREEN=false; orangeeat--; elseif(position[x][4]!=1&&position[x][4]==position[x][6]&&position[x][0]==1&&position[x][2]!=position[x][4]&&position[x][2]!=1) { if(position[x][2]!=position[x][y])//防自殺 position[x][2]=1; GREEN=false; orangeeat--; } elseif(position[x][2]!=1&&position[x][2]==position[x][4]&&position[x][0]!=position[x][2]&&position[x][6]==1&&position[x][0]!=1) { if(position[x][0]!=position[x][y])//防自殺 position[x][0]=1; GREEN=false; orangeeat--; } elseif(position[x][2]!=1&&position[x][2]==position[x][4]&&position[x][6]!=position[x][2]&&position[x][0]==1&&position[x][6]!=1) { if(position[x][6]!=position[x][y])//防自殺 position[x][6]=1; GREEN=false; orangeeat--; } elseif(position[x][0]!=1&&position[x][0]==position[x][2]&&position[x][4]!=position[x][0]&&position[x][6]==1&&position[x][4]!=1) { if(position[x][4]!=position[x][y])//防自殺 position[x][4]=1; GREEN=false; orangeeat--; } else{ s=GREEN?"請綠方點擊相鄰的下棋處!":"請黃方點擊相鄰的下棋處!"; } GREEN=GREEN?false:true;s=GREEN?"綠方走棋:請綠方點擊自己的棋子!":"黃方走棋:請綠方點擊自己的棋子!"; state=3; } else{ s=GREEN?"請綠方點擊相鄰的空位!":"請黃方點擊相鄰的空位"; } } else{ s=GREEN?"請綠方點擊可以放置的空位!":"請黃方點擊可以放置的空位";}}publicvoidmouseClicked(MouseEvente){Pointp=e.getPoint();if(p.x>a-c/4&&p.x<a+6*c+c/4&&p.y>b-c/4 &&p.y<b+6*c+c/4){ x=(p.x-a+c/4)*2/c; y=(p.y-b+c/4)*2/c; }if(p.x>a-c/4&&p.x<a+6*c+c/4&&p.y>b-c/4 &&p.y<b+6*c+c/4){ x=(p.x-a+c/4)*2/c; y=(p.y-b+c/4)*2/c; if(state==3) zouqione(x,y); if(state==4) zouqitwo(x,y); if(orangeeat<1){ s3="黃方輸了!"; s="比賽結(jié)束"; this.removeMouseListener(this); } if(greeneat<1){ s3="綠方輸了!"; s="比賽結(jié)束"; this.removeMouseListener(this); } repaint(); }else{ } }3.2打包與安裝下載并且安裝fatJar插件。然后右擊工程選擇buildfatjaar。選定MAINCLASS,將工程需要的JAR包的路徑填入CLASSPATH中,然后按提示操作,將工程需要的JAr包放在與FATJAR打包的目錄下,找到eclipse安裝目錄下的plugins目錄plugins子目錄下的org.eclipse.swt.win32.win32.x86_3.2.2.v3236,將其解壓,將swt-win32-3236.dll放在J
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工方案對工程建設(shè)的經(jīng)濟(jì)效益分析
- 跨學(xué)科視角下的情感教育實踐研究
- 音色感知在小學(xué)音樂欣賞中的重要性及其教學(xué)方法
- 藝術(shù)設(shè)計與宗教文化的互動商業(yè)空間的創(chuàng)新之路
- DB3715T 71-2025楊樹退化林修復(fù)技術(shù)規(guī)程
- 二手設(shè)備轉(zhuǎn)讓合同模板
- 2025年雜志宣傳合作協(xié)議(合同)
- 個人房屋買賣合同模板大全
- 二手房銷售合同模板大全
- 個人信用借款擔(dān)保合同范本
- 河北省邯鄲市永年區(qū)2024-2025學(xué)年九年級上學(xué)期期末考試化學(xué)試卷(含答案)
- 2025年閥門和龍頭項目發(fā)展計劃
- 消防員證考試題庫2000題中級
- 農(nóng)產(chǎn)品質(zhì)量安全檢測技術(shù)
- 【蟬媽媽】2024年抖音電商酒水行業(yè)趨勢洞察報告
- 海洋垃圾處理行業(yè)可行性分析報告
- 公共部門績效管理案例分析
- 無人機培訓(xùn)計劃表
- 2025初級會計理論考試100題及解析
- 2024屆高考英語詞匯3500左右
- 2024年-2025年海船船員考試-船舶人員管理考試題及答案
評論
0/150
提交評論