面向對象第四次博客
測試與正確性論證差異對比
測試指為檢測目標是否符合標準而采用特殊工具和方法進行驗證。測試的優點在於你可以不用知道程序是如何實現的,直接輸入測試樣例,然後比較程序運行結果和正確結果,如果兩者不同,就說明程序肯定有BUG。從中我們知道測試是快速方便的,它可以檢測並定位一個程序的BUG。但是測試的效果很大程度取決於測試樣例是否完善,如果不完善,就會遺漏一些潛在的致命的BUG,這也是測試最大的缺點。若要達到很好的測試效果,需要構造規模龐大的測試用例,這會消耗很多精力,而且你並不能保證這個龐大的測試用例已經覆蓋了所有情況。
正確性論證需要測試者分析代碼的需求和規格,深刻地理解代碼。它的最大的優點就是可以覆蓋程序的所有情況,若通過正確性論證,則可以說這個程序100%正確了。它的缺點就是如果代碼量過大,消耗的精力是非常大的;如果代碼量較小,也會消耗過多時間,這與測試相比是不值得的(因為測試在代碼量較小時幾乎能保證覆蓋所有情況)。論證是建立在正確的規格與需求之上的,所以在論證前需要保證規格的絕對正確。
OCL與JSF的相似與不同
OCL,即對象約束語言,作為圖形符號的補充,說明建模元素的有關細節。
相同點:OCL和JSF都可以用來描述對象及其行為的限制,都有前置條件、後置條件和不變量的概念。
不同點:OCL語言基於UML類圖而JSF基於代碼。OCL的標準更加完善,JSF要求使用布爾表達式,比OCL更加嚴謹。
第十四次作業圖
1. 類圖
2. 時序圖
3. 狀態圖
總結
1. 知識點的關系
第一單元是基礎入門單元,主要目的是在於讓我們熟悉使用Java語言編寫程序,通過構造程序,分析程序,更加深入地理解面向對象的概念。
第二單元主要是多線程編程,其難度斷崖式地上升。在多線程的編程中,“線程安全”是一個始終被提及的點,這也是這個單元的核心內容。通過這一個單元的多線程程序訓練,對多線程的實現機制、線程同步、沖突問題等問題的理解更加深入。
第三單元要求在寫程序的基礎上對程序的規格進行撰寫與完善。課堂上介紹了JSF的規範書寫和程序的規格化設計,通過作業更好地理解了規格的重要性。課程的重點由代碼編寫轉移到了規格撰寫與完善。
第四單元的重點轉移到了測試,測試包括了Junit測試和正確性論證。通過這個單元的訓練,豐富了我們的測試手段,提高了我們的測試能力。
這四個單元是循序漸進的,首先訓練寫代碼的能力,然後補充程序的規格並對程序進行測試從而保證程序的正確性。這四個單元的訓練目的在於讓我們不僅能寫出正確的程序,還養成了良好的代碼設計習慣。
2. 程序的進步
在程序設計方面,之前寫一個程序是先進行一個簡單的構思,然後開始寫代碼,在寫的過程中不斷地添加與修改。而現在寫程序,我會全面地對程序進行構思,比如說需要哪些類,這個類有什麽屬性和方法,這個類應該起到什麽作用等。在經過細致地構思後,寫代碼就變得比較輕松了,修改的部分也少了很多。
在程序質量方面,之前寫的程序的行數都是比較少的,功能也比較簡單。經過這幾個單元的訓練後,寫的程序已經有上千行,實現的功能也比較復雜。
在程序風格方面,之前的程序的變量與函數命名不夠嚴謹,而且也沒有進行規格的撰寫,這導致了程序可維護性和可讀性低。現在寫程序會使用嚴謹的命名,對每個類和方法都會撰寫相應的規格,代碼的風格好了很多。
在程序測試方面,之前測試程序就是直接輸入測試樣例進行測試,忽略了每個類單獨的測試。現在對程序進行測試,除了輸入測試樣例之外,使用Junit和正確性論證是很好的測試方法。
3. 工程化開發的理解
工程化開發,它是一個完整的體系,它包括了需求、實現、完善整個過程,其重點在於多人協作。在多人項目開發過程中,為了提高開發的效率,就需要項目的多個開發成員之間有著良好的溝通。為了成員能夠較好地溝通代碼,需要程序有著很高的可讀性。因此規格化設計對於工程化開發是非常重要的。
4. 期望和建議
首先希望作業的難度能夠降低一點,或者是延長作業的間隔時間。在這個學期的學習過程中,OO的確讓我的編程能力提高了不少,也讓我有了培養良好代碼書寫習慣的意識,但是占用的學習時間太多了,很大地影響到了其他科目的學習。除此之外,互測機制還是存在一些問題的,希 望這個機制能夠更加完善。最後,感謝老師們和助教們的付出,希望這門課能夠越來越好。
面向對象第四次博客