柚子快報(bào)邀請(qǐng)碼778899分享:java OO第三單元總結(jié)
柚子快報(bào)邀請(qǐng)碼778899分享:java OO第三單元總結(jié)
文章目錄
OO第三單元總結(jié)測(cè)試過(guò)程黑箱測(cè)試和白箱測(cè)試單元測(cè)試功能測(cè)試集成測(cè)試壓力測(cè)試回歸測(cè)試數(shù)據(jù)構(gòu)造的策略
架構(gòu)設(shè)計(jì)、圖模型構(gòu)建和維護(hù)策略架構(gòu)設(shè)計(jì)圖模型構(gòu)建維護(hù)策略
性能問(wèn)題及規(guī)格與實(shí)現(xiàn)分離性能問(wèn)題規(guī)格與實(shí)現(xiàn)分離
Junit測(cè)試學(xué)習(xí)體會(huì)
OO第三單元總結(jié)
測(cè)試過(guò)程
黑箱測(cè)試和白箱測(cè)試
黑箱測(cè)試:是根據(jù)功能需求來(lái)測(cè)試程序是否按照預(yù)期工作,是要從用戶(hù)的角度分析.盡量發(fā)現(xiàn)代碼所表現(xiàn)的外部行為的錯(cuò)誤.黑盒測(cè)試應(yīng)該是由測(cè)試團(tuán)隊(duì)來(lái)完成的.根據(jù)某個(gè)給定的輸入,應(yīng)該能夠理解并詳細(xì)說(shuō)明程序的預(yù)期輸出
黑盒測(cè)試流程: 功能需求–>產(chǎn)生測(cè)試用例–>被測(cè)程序–>輸出實(shí)際結(jié)果–>與預(yù)期結(jié)果比較–>分析功能是否實(shí)現(xiàn)
白箱測(cè)試:是測(cè)試人員要了解程序結(jié)構(gòu)和處理過(guò)程,按照程序內(nèi)部邏輯測(cè)試程序,檢查程序中的每條通路是否按照預(yù)定要求正確工作.它主要的針對(duì)被測(cè)程序的源代碼,測(cè)試著可以完全不考慮程序的功能
白箱測(cè)試流程: 源程序–>分析程序內(nèi)部邏輯結(jié)構(gòu)–>流程圖–>制定測(cè)試用例–>被測(cè)程序–>執(zhí)行路徑–>覆蓋情況分析
單元測(cè)試
單元測(cè)試:對(duì)軟件中的最小可測(cè)單元在與其他程序其他部分相隔離的情況進(jìn)行檢查和驗(yàn)證的工作,這里的最小可測(cè)單元指的是類(lèi)或者函數(shù)
功能測(cè)試
功能測(cè)試:對(duì)產(chǎn)品各個(gè)頁(yè)面進(jìn)行功能驗(yàn)證的過(guò)程,根據(jù)功能測(cè)試用例執(zhí)行軟件功能測(cè)試,逐一檢查產(chǎn)品的各項(xiàng)功能是否正常,能否達(dá)到客戶(hù)的要求
集成測(cè)試
集成測(cè)試:在單元測(cè)試的基礎(chǔ)上,將所有模塊按照設(shè)計(jì)要求組裝成子系統(tǒng)或系統(tǒng)進(jìn)行的測(cè)試活動(dòng)。
壓力測(cè)試
壓力測(cè)試:模擬實(shí)際應(yīng)用的軟硬件環(huán)境及用戶(hù)使用過(guò)程的系統(tǒng)負(fù)荷,長(zhǎng)時(shí)間或超大負(fù)荷地運(yùn)行測(cè)試軟件,來(lái)測(cè)試被測(cè)系統(tǒng)的性能、可靠性、穩(wěn)定性等
回歸測(cè)試
回歸測(cè)試:對(duì)軟件進(jìn)行修正后進(jìn)行的有選擇的重新測(cè)試過(guò)程.一般要重復(fù)已用的測(cè)試用例.目的是檢驗(yàn)軟件在更改后所引起的錯(cuò)誤,驗(yàn)證軟件在修改后未引起不希望的有害效果
數(shù)據(jù)構(gòu)造的策略
對(duì)于數(shù)據(jù)構(gòu)造,我一直感覺(jué)比較玄乎(應(yīng)該是理解不到位)。由于測(cè)試時(shí)src提供的是別人的代碼,所以要檢測(cè)出bug應(yīng)當(dāng)是自己所構(gòu)造的圖包含某些特定的子圖,所以我的數(shù)據(jù)構(gòu)造都是先確立一個(gè)大的圖,然后再通過(guò)評(píng)測(cè)的結(jié)果進(jìn)行刪改??傮w上沒(méi)有什么具體的思路。
架構(gòu)設(shè)計(jì)、圖模型構(gòu)建和維護(hù)策略
架構(gòu)設(shè)計(jì)
同JML保持一致
圖模型構(gòu)建
本單元的作業(yè)引導(dǎo)我們自己去構(gòu)建一個(gè)社交網(wǎng)絡(luò),與離散數(shù)學(xué)中圖的概念和知識(shí)相吻合。在本單元作業(yè)中,每一個(gè)人可以看作是圖中的一個(gè)點(diǎn),而兩個(gè)人之間的關(guān)系用邊來(lái)表示。整個(gè)社交網(wǎng)絡(luò)是一個(gè)無(wú)向圖,我們可以在這個(gè)模型基礎(chǔ)上對(duì)每個(gè)方法進(jìn)行具象。
維護(hù)策略
維護(hù)是本單元作業(yè)的特色之一,因?yàn)榛旧喜痪S護(hù)就TLE社交網(wǎng)絡(luò)的規(guī)??赡鼙容^大,如果不進(jìn)行維護(hù)的話,當(dāng)輸入中查詢(xún)類(lèi)的指令過(guò)于密集,就會(huì)進(jìn)行多次的顯式遍歷以返回所需的查詢(xún)量,從而導(dǎo)致CTLE
HW-9:對(duì)blocksum和triplesum進(jìn)行維護(hù),即將這兩個(gè)數(shù)據(jù)量作為MyNetwork的屬性量,在調(diào)用查詢(xún)方法時(shí)直接返回屬性量的值,而將這些屬性量的更新放置在其他方法中,可以節(jié)約查詢(xún)的時(shí)間。例如對(duì)于blocksum的維護(hù),即對(duì)連通分支的查詢(xún),應(yīng)該在AP,AR和MR方法中進(jìn)行維護(hù)。由此可見(jiàn),如果要進(jìn)行某個(gè)屬性量的維護(hù),應(yīng)該在可能改變這個(gè)屬性量的方法中進(jìn)行維護(hù),從而保證屬性量的結(jié)果正確性。 HW-10:本次作業(yè)維護(hù)的數(shù)據(jù)量更多,對(duì)MyPerson中的bestid和bestvalue進(jìn)行維護(hù);對(duì)MyTag中的valuesum以及agesum和agepow進(jìn)行維護(hù)。維護(hù)的道理沒(méi)有太大的區(qū)別,但是其中讓我印象最深刻的就是對(duì)于valuesum的維護(hù)。在與同學(xué)進(jìn)行討論時(shí),我一度認(rèn)為維護(hù)這個(gè)屬性量沒(méi)有必要,因?yàn)槲蚁氘?dāng)然覺(jué)得這條指令不會(huì)多次出現(xiàn),歸根結(jié)底還是意識(shí)不到位。這導(dǎo)致在互測(cè)結(jié)果公布前我看到我們房間基本都hack成功并感慨大家都好厲害的時(shí)候,絲毫沒(méi)有意識(shí)到其實(shí)所有的刀都插在了我一個(gè)人頭上哦吼吼。當(dāng)然,這是一次很好的教訓(xùn),以后在思考到用戶(hù)相關(guān)需求的時(shí)候,我們應(yīng)該做好充分的準(zhǔn)備,對(duì)是否需要維護(hù)進(jìn)行正確的選擇。 HW-11:本次作業(yè)相對(duì)前兩次增加的代碼沒(méi)有進(jìn)行特別的維護(hù)。
性能問(wèn)題及規(guī)格與實(shí)現(xiàn)分離
性能問(wèn)題
本單元作業(yè)我的性能問(wèn)題實(shí)在是層出不窮
HW-9 :第九次作業(yè)強(qiáng)測(cè)一開(kāi)始我出現(xiàn)了3個(gè)CTLE,在重測(cè)之后發(fā)現(xiàn)少了兩個(gè),只有一個(gè)CTLE。一開(kāi)始我還不服氣,但后來(lái)當(dāng)我發(fā)現(xiàn)我的問(wèn)題之后,我覺(jué)得我的運(yùn)氣真是有夠好,還能少錯(cuò)兩個(gè)點(diǎn)。我錯(cuò)誤的原因在于在dfs選擇容器存儲(chǔ)已訪問(wèn)節(jié)點(diǎn)的時(shí)候使用的是ArrayList而不是HashMap,這樣就導(dǎo)致在判斷是否contain的時(shí)候時(shí)間復(fù)雜度相對(duì)更高。當(dāng)更換容器之后時(shí)間快了很多,從7000ms壓縮到1000ms左右,通過(guò)了BUG修復(fù)??梢?jiàn)容器的選擇十分重要,我們需要明確使用這個(gè)容器的目的是什么,并依此選擇合適的容器。 HW-10:第十次作業(yè)我又出現(xiàn)了CTLE,是因?yàn)闆](méi)有對(duì)valuesum進(jìn)行維護(hù)。維護(hù)之后通過(guò)了BUG修復(fù)。 HW-11:第十一次作業(yè)沒(méi)有出現(xiàn)性能問(wèn)題,但是涉及到關(guān)鍵的容器選擇,那就是在Person類(lèi)中的信息數(shù)組應(yīng)該選擇用鏈表容器進(jìn)行存儲(chǔ)。因?yàn)镴ML規(guī)格規(guī)定對(duì)于每個(gè)人的信息數(shù)組,新來(lái)的信息要插在容器的頭部,此時(shí)運(yùn)用鏈表容器最為合適。這提示我們,JML規(guī)格告訴我們最終要實(shí)現(xiàn)的效果,但是實(shí)現(xiàn)過(guò)程中可以使用的方法多樣,我們應(yīng)該根據(jù)具體要求選擇使代碼性能最佳的容器。
規(guī)格與實(shí)現(xiàn)分離
談到規(guī)格與實(shí)現(xiàn)分離,我認(rèn)為規(guī)格與實(shí)現(xiàn)只不過(guò)是“形”離,而“神”未離。規(guī)格是給定的JML語(yǔ)言,而實(shí)現(xiàn)則是我們自己編寫(xiě)的代碼。規(guī)格與實(shí)現(xiàn)分離的含義只不過(guò)是可能有些方法我們并未嚴(yán)格按照規(guī)格所給出的邏輯來(lái)進(jìn)行書(shū)寫(xiě)。 舉個(gè)例子,在NetWork的JML規(guī)格中,查詢(xún)?nèi)切蝹€(gè)數(shù)的方法使用了三重循環(huán)。如果我們的代碼中也通過(guò)三重循環(huán)來(lái)實(shí)現(xiàn)的話,雖然能夠保證正確性且只需要在這一個(gè)地方進(jìn)行計(jì)算,但是隨著此類(lèi)指令的增加,代碼的運(yùn)行效率會(huì)大大降低,這不是我們想看到的。 因此,我們不能完全被JML規(guī)格束縛住手腳,我們只需要明白JML規(guī)格要我們干什么事情,然后我們?cè)偻ㄟ^(guò)思考和分析,實(shí)現(xiàn)最后的效果即可。還是拿查詢(xún)?nèi)切蝹€(gè)數(shù)舉例,我們并沒(méi)有使用三重循環(huán),而是給了MyNetwork一個(gè)屬性并進(jìn)行維護(hù),這就是規(guī)格與實(shí)現(xiàn)分離。規(guī)格與實(shí)現(xiàn)分離是一個(gè)明智的選擇,既能充分發(fā)揮JML的作用,也能融入我們自己的思考與判斷,讓代碼變得更加高效。
Junit測(cè)試
規(guī)格信息是編寫(xiě)測(cè)試代碼的最好根據(jù)。在編寫(xiě)測(cè)試代碼的時(shí)候,我們要仔細(xì)閱讀規(guī)格語(yǔ)言,并時(shí)刻關(guān)注一系列關(guān)鍵字,觀察哪些量是能夠改變的,哪些量是不能夠被改變的。在編寫(xiě)測(cè)試時(shí),一開(kāi)始我忽略了深淺克隆的問(wèn)題。如果不進(jìn)行深克隆而直接通過(guò)get來(lái)執(zhí)行整個(gè)操作過(guò)程,那么測(cè)試函數(shù)的編寫(xiě)就失去了意義,每一個(gè)assert一定會(huì)成立,因?yàn)楸容^的都是一個(gè)對(duì)象。只有實(shí)現(xiàn)深克隆,即創(chuàng)建兩個(gè)相同的社交網(wǎng)絡(luò)才能正確地完成測(cè)試,我認(rèn)為這是理解中十分關(guān)鍵的一環(huán)。 總的來(lái)說(shuō),我認(rèn)為測(cè)試不過(guò)就是自己編寫(xiě)數(shù)據(jù)加上對(duì)規(guī)格語(yǔ)言的翻譯。但是這一過(guò)程中的難點(diǎn)在于翻譯的過(guò)程,我們需要保證邏輯的正確性以及調(diào)用方法的合理性。
學(xué)習(xí)體會(huì)
本單元相比前兩個(gè)單元難度下降很多,寫(xiě)代碼的過(guò)程還算比較順利,如果有不熟悉的算法可以及時(shí)進(jìn)行復(fù)習(xí)鞏固。架構(gòu)設(shè)計(jì)也不需要費(fèi)勁,課程組已經(jīng)給出。本單元相對(duì)來(lái)講最難的地方就在于debug的過(guò)程和及時(shí)維護(hù)的意識(shí)。同時(shí),這個(gè)單元給我?guī)?lái)的最大收獲就是知道了JML規(guī)格這種實(shí)現(xiàn)方法,給了編寫(xiě)程序的人一個(gè)可以依靠的模版。同時(shí),JML規(guī)格還能夠?yàn)榫帉?xiě)測(cè)試的人提供便利,即當(dāng)完全不知道被測(cè)試代碼的情況下依然能夠進(jìn)行正確的測(cè)試編寫(xiě)。 總的來(lái)說(shuō),JML規(guī)格拓寬了我的視野,現(xiàn)在我才能夠理解了JML規(guī)格的存在意義。
柚子快報(bào)邀請(qǐng)碼778899分享:java OO第三單元總結(jié)
文章來(lái)源
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。