oo第四次博客
一、測試與正確性論證的區別
測試:在之前的編程學習中,我們驗證程序是否正確的方法一般就是測試,自己先埋頭寫一通,寫的差不多了輸入一個測試樣例,如果能夠成功輸出就算自己的程序正確,如果沒有正確輸出就debug,改對為止。這種測試的方法在一開始的學習過程中並沒有什麽問題,因為一開始接觸編程的時候都是一些比較簡單的問題,簡單的測試樣例也有很高的測試價值。但是隨著我們編程學習的深入,代碼規模的不斷增加,通過測試進行代碼調試的弊端就凸顯出來了。尤其是在計算機組成這門課中的感受特別深刻,十幾條指令的組合通過手動生成測試樣例很難完全覆蓋到,然而這些沒覆蓋到的bug可能導致程序出現大問題。在面向對象中對於測試的弊端有了進一步的了解,因為不光有公測的測試點,還有各種僅憑自己難以測試到的情況,所以在前幾次作業中不管怎麽測試別人還都是能夠找到bug。
所以總結一下,測試的優點就是比較簡單方便,缺點是很難測試全面,而且通過測試debug也比較困難。
正確性論證:其實最開始接觸正確性論證的時候,很多同學包括我不理解為什麽我們要學習這個無比麻煩的東西,仿佛這個方法的存在就是讓別的測試者多扣自己的bug。但是隨著學習的深入我才漸漸理解了正確性論證的有用之處。
首先是jsf,對於這個東西一開始的反應是,不知道怎麽寫,最後發現自己覺得沒法寫jsf的類都是自己寫的不夠好的地方,大多都是那些巨無霸類,分工不夠明確,所以自己也很難講清楚這個類的作用是什麽,往往bug出現在這種類的時候最難調試,不是找不到就是沒法改,所以最後發現如果能寫出jsf就說明這部分的代碼寫的思路很清晰,也不容易出錯。
其次是repOK(),這個部分主要是保證任何時候抽象出來的對象都是有意義的正確的,以前我們總是覺得自己的程序寫的只要自己知道怎麽用就好了,進行學習後我們有了“別人也許對程序的使用方法不正確”的認識,所以任何時候對於程序的正確性都不能想當然。
最後是代碼覆蓋率和分支覆蓋率,其實對於這個部分的我的感受是最深的,因為就我自己來說,在完成一些有挑戰性的有一些難度的編程任務時,往往寫到最後只求測試能跑正確,根本不在意自己修改的增添的部分是否是有意義的,這樣修修補補寫出來的代碼往往很不可靠,在進行覆蓋率檢驗的時候我們能夠確保自己的每一句代碼都是有意義的。
總之,正確性論證可以通過一系列有邏輯的論證保證我們寫出來的代碼是可靠的,同時在這個過程中我們也能對自己的代碼有更深刻的了解和認識。
二、
OCL起源於1997年BIM公司為響應OMG的"面向對象分析和設計標準"征求稿所提交的"對象時間限制提議",OCL是該提議的部分內容。 用OCL可以描述四類約束,分別是不變量、前置條件、後置條件和監護條件。
jsf和OCL都是用來描述約束條件的,區別是兩者描述條件的區分不同,都能起到描述的作用。
三、
四、總結
4.1、四個模塊分別是學習java、使用多線程、線程安全、規格論證正確性。四個階段由難到易,循序漸進讓我從一個學期前的對java一無所知的小白到現在的了解了如何正確規範地寫java程序。雖然四個模塊的東西加在一塊量有些多,在學習的過程中還是有些吃不消的,但是後面的模塊也是對以前模塊的鞏固和提高,尤其是最後一個模塊讓我們對自己以前寫的代碼進行再次回顧,有很多的體會和收獲。
4.2 、一開始的程序設計,面向對象的思想都不是很明顯,還是在按照c語言的面向過程編程,也不能很好地劃分類和方法,經常有很雜亂的長方法,測試方面也經常忽略一些錯誤的輸入和操作,造成程序的crash。
經過這學期的面向對象學習,首先在設計上,在進行編寫代碼之前能預先完成對各個類的劃分和分工,已經理解了面向對象的意義,在處理多線程時也更加得心應手,最大的收獲是能夠理解和運用生產者消費者模型,用這個模型來解決各類多線程問題。在測試上從以前的只知道測試正確輸入下的程序運行情況到現在有意識地通過測試來預防一些錯誤使用造成的情況。程序質量上,代碼的書寫變得更加規範有更高的可讀性,crash的情況也變少。
4.3、工程化開發,我覺得工程化開發指的是多名程序員對一項工程的共同編寫,在開發的過程中要求每個人都遵守一定的書寫規範,程式化地編寫代碼,同時要求代碼具有一定的可擴展性。
4.4、對課程的建議、因為我是因為個人信息被無效過的,經歷過那種絕望,辛苦寫的程序就沒有任何收獲,所以我建議把個人信息的暴露列為一個互測中的可以申報的bug類型,並且這個bug的占分項可以相當高,因為個人信息被無效真的是有苦說不出。還有因為這個作業的分數是根據排名來的,所以我建議把互測可以扣的分數設置一個上限,公測得分不能被互測扣掉,這樣就能避免因為某些測試者惡意扣分導致一次作業的分數可以被扣光,這種情況對與同學們的積極性打擊都是相當大的。
最後我想說一學期的oo學習我們終於風風雨雨地度過了,雖然有很多不愉快的經歷但是不可否認的是我們確實收獲了很多,感謝老師和助教的辛苦工作和幫助。
oo第四次博客