$0 寫在前面
善始善終,臨近期末,為一學期的收獲和努力畫一個圓滿的句號。
?
?$1 測試與正確性論證的比較
?
$1-0 什么是測試?
?
測試是使用人工操作或者程序自動運行的方式來檢驗它是否滿足規定的需求或弄清預期結果與實際結果之間的差別的過程。
它是幫助識別開發完成(中間或最終的版本)的計算機軟件(整體或部分)的正確度(correctness) 、完全度(completeness)和質量(quality)的軟件過程;是SQA(software quality assurance)的重要子域。
Glenford J.Myers曾對測試的目的提出過以下觀點:
?(1)測試是為了發現程序中的錯誤而執行程序的過程。
(2)好的測試方案是極可能發現迄今為止尚未發現的錯誤的測試方案。
(3)成功的測試是發現了至今為止尚未發現的錯誤的測試。
(4)測試并不僅僅是為了找出錯誤。通過分析錯誤產生的原因和錯誤的發生趨勢,可以幫助項目管理者發現當前軟件開發過程中的缺陷,以便及時改進。
(5)這種分析也能幫助測試人員設計出有針對性的測試方法,改善測試的效率和有效性。
(6)沒有發現錯誤的測試也是有價值的,完整的測試是評定軟件質量的一種方法。
(7)另外,根據測試目的的不同,還有回歸測試、壓力測試、性能測試等,分別為了檢驗修改或優化過程是否引發新的問題、軟件所能達到處理能力和是否達到預期的處理能力等。
測試目標包括以下幾點
(1) 發現一些可以通過測試避免的開發風險。
(2) 實施測試來降低所發現的風險。
(3) 確定測試何時可以結束。
(4) 在開發項目的過程中將測試看作是一個標準項目。
$1-1 什么是正確性論證?
?
程序正確性論證是程序設計理論的一個重要組成部分,研究如何使用程序設計語言編制程序,以正確實現預定的目標。
程序正確性論證提出編制正確程序的兩種途徑一種稱為程序驗證,研究如何使用數學推理來嚴格論證程序是否符合其目標。
另一種稱為程序綜合,研究如何由給定目標出發,逐步構造一個在計算機系統上可運行的程序,而且要求構造過程的每一步都是嚴格保持正確無誤的。
在保證正確性的前提下,為提高程序運算效率而實現的程序之間的轉換,稱為程序變形,也是程序正確性論證的一個重要內容。
程序綜合和程序變形是自動程序設計的理論基礎。
?$1-2 測試與正確性論證的效果差異
?
測試是使用測試樣例對程序進行檢測而正確性論證則是根據代碼的邏輯進行驗證。
測試想要完全覆蓋的難度較大,需要大量的樣例才能達到近似的完全覆蓋,而正確性論證則不需要花費那么大的精力,只需要根據代碼的邏輯和規格進行一系列驗證即可。
二者相互補充,相輔相成。正確性論證可能由于一開始設計的錯誤導致程序運行的錯誤,而測試則難以覆蓋全面,二者相互補充之后便可以對程序進行充分的測試。
總體而言,二者都是用于工程化測試的好方法,但是面向對象本身就是一種極為具體化的簡單設計思路,大多數情況使用單元測試就能很好的應對測試需求。
?
?$2 OCL語言調研
?
?$2-0 關于OCL
?對象約束語言是一種用于施加在指定的模型元素上約束的語言。
對象約束語言簡稱OCL(Object Constraint Language)。
對象約束語言(Object Constraint Language, OCL)作為圖形符號的補充,說明建模元素的有關細節,例如:約束,前置條件,后置條件等。
OCL(object constraint language) 對象約束語言。用來進行約束定義的,形式化的無二義的語言。
OCL語言有如下特征
????? (1) 聲明性語言,不會改變模型中的內容。
???? ?(2) 形式化語言語言。
????? (3) 無二義規范語言。
????? (4) 類型性語言,每一個表達式都有類型;
????? (5) 易學好用。
?$2-1 OCL與JSF的異同
與JSF相比的相似點:二者都是形式語言,聲明式的語言,都沒有二義性,都有前置條件和后置條件以及不變式;
與JSF相比的不同點:OCL每個表達式都是具有類型的,且具有許多的基本數據類型等,不像JSF一樣完全使用邏輯表達式。
?
?$3 關于第14次作業的單電梯系統
?
根據第十四次作業的單電梯系統,針對調度器、電梯、請求隊列和請求,整理出如下的UML類圖以及時序圖,采用圖(graph)來演示成如下模型:
?
?$3-0 類圖
?
?
【圖1】 單電梯系統的類圖
類圖中表示了不同類之間的繼承依賴關系,在各個類中呈現了類全部的屬性和方法。
?$3-1 時序圖
?
【圖2】時序圖
該時序圖呈現了程序的執行過程,以及狀態轉換邏輯。
?
?$4 學期小結
?
?$4-0?闡述四個單元模塊知識點之間的關系
(1) 單元一主要介紹了JAVA面向對象語言的思想等,主要注重對語言基礎知識的訓練以及對面向對象思想的初步了解;
(2) 單元二開始變涉及多線程的編程訓練,介紹了多線程的機制、沖突,對面向對象的繼承、封裝、多態的特征也有了更進一步的深入介紹;
(3) 單元三開始進行規格化設計,通過JSF語言的書寫來實現程序的規格化設計;
(4) 單元四則是隊代碼的驗證與測試,編寫JUnit測試單元對程序開展自動化測試、編寫正確性論證文檔對程序類和方法實現的正確性進行論證等。
這四個單元循序漸進,相輔相成,一步步引導我們逐步深入的對面向對象的編程思想進行了解。
?$4-1 梳理自己所設計實現的程序,分析自己在設計、測試和質量上的進步
?本學期我一共實現了兩個獨立作業和兩個系列作業。
最開始的多項式處理作業,讓我對JAVA語言的基本運用有了初步的了解;
到后來電梯、出租車系列作業讓我接觸到了面向對象編程思想以及多線程編程的模式;
編寫單元測試JUnit,讓我掌握了自動化測試方法;
從頭至尾認真梳理下來,當我再次打開前幾次的代碼作業的時候,
令我欣慰的是,我能夠從中看到自己的進步:
(1) 編碼風格的進步:變量名、方法名的命名規范;方法的代碼行數明顯縮短;類的功能層次明顯。
(2) 符合規格規范:通過對JSF的編寫,能夠按照規格,來編寫符合規格約束的方法代碼。
(3) 對SOLID設計原則的更深刻體會:代碼不再是“靈機一動”的產物,而是經過思考和設計所編寫的、符合設計原則的代碼。
$4-2?闡述自己對工程化開發的理解
?工程化開發和作業由著本質的不同。作業更注重的是結果的正確性,而工程化開發則要求設計人員有著良好的代碼素養,和工程化開發規范。
“工程”和“過程”的不同,工程化開發要求將系統化的、規范的、可度量的方法應用于程序的開發、運行和維護的過程,即將工程化應用于軟件過程。
工程著重應用,工程項目一定是軟件過程的一個“產出”,一個個性化的實例!換句話來講,工程也是由過程組成的。
工程化開發遵從一定的規格設計進行程序的開發,十分有利于于團隊協作,提高工作效率和降低成本。
良好的工程化,能降低溝通成本,實現更好的協同,節省開發和測試人員的重復勞動,降低發布的常見問題的復現率等等。
?$4-3?對課程的任何期望或建議
?衷心的希望課程越辦越好,讓更多的人從中受益。