天天看點

面向對象的程式設計-子產品四課程總結

目錄
  • 壹·本單元兩次作業的架構設計
  • 貳·架構設計與OO方法了解的演進
  • 叁·測試的演進
    • 靜态測試
    • Junit測試
    • 自動化測試
  • 肆·課程收獲
  • 伍·OO課程改進

本單元兩次作業的架構設計中:

  • 第一次作業 采用 類圖 - 類 - 類中的其他元素 的架構進行設計和編碼
    面向對象的程式設計-子產品四課程總結
    在代碼的複雜度控制上,

    MyUmlInteraction

    中添加

    UmlElement

    的方法,由于需要控制不同類型的

    UmlElement

    添加的順序,導緻本方法的v(G)較高。
  • 第二次作業 考慮到在作業要求中,狀态圖、順序圖和類圖之間聯系性不大,是以将三者分開處理。由

    MyUmlGeneralInteraction

    綜合對于三個不同圖(

    stateMap

    ,

    sequenceMap

    classMap

    )的操作指令,并由類圖完成各自需要的操作。在具體實作上,也采用了Lazy更新、緩存等機制來優化查詢時間。
    面向對象的程式設計-子產品四課程總結
    在代碼複雜度控制方面,我在

    UmlGeneralInteraction

    類中,對輸入的

    UmlElement

    進行了分級處理,導緻本方法的v(G)過高。在類的複雜度控制方面,給對類圖需要做的東西沒有進行很好的拆分,導緻其複雜度很高,影響了代碼整體的品質。

四個單元的OO作業的設計,是一個架構越來越清晰的過程。從A.多項式求導作業時的資料結構寫法,到逐漸能夠分離問題、逐個分析,到最後代碼的架構能夠較為清晰地反應思維過程。能夠運用一些設計模式來分析問題,解決問題。在第二單元的相關作業中,我看到了簡單的多線程程式應當如何架構,和将程式功能分塊解耦對于程式後續發展的重要性。

在第三單元的某次作業中,看到同組有的同學的架構并不是很好,這對後續修BUG是非常不友好的。這也提醒了我,一個良好的架構不論是對于程式正确性還是對于程式的後續改進都是非常必要的。在看自己的作業的過程中,也能看到前面的一些作業變量的命名不是非正常範,在編碼的過程中也确實出現了變量名誤用這類的bug,這也提醒自己在今後程式設計的過程中,在設計完成時一定要對變量名進行規範化的分層命名,防止誤用。

測試是整個作業完成過程中比較耗費時間的部分,也是對保證正确性比較重要的部分。在整個學期的OO學習中,我使用到的測試方法主要有 人眼Review + Junit測試 + 自動化測試 這幾種方法,從靜态到動态,從小規模到大規模、壓力資料、邊界資料,來保證代碼的安全性。

靜态測試是檢查代碼邏輯性的重要手段,在編碼的過程中,根據JML或者是編寫的Javadoc來确定每個方法的具體用處和其規範,再逐個方法檢查它的實作是否符合需求。這裡需要注意的是在編碼的過程中,就要逐層規範使用變量名,在便于檢查的同時,也防止因為變量誤用導緻的失誤發生。

小黃鴨Debug在測試過程中是非常有效的方法,但是一些時候,自己在看自己程式的過程中是不容易發現錯誤的,還是需要通過編寫資料進行測試來發現bug。

單元測試對保證代碼的品質同樣非常重要。通過編寫單元測試,可以對代碼的正确性進行覆寫性測試,一些邊界資料樣例也能保證代碼是符合我們要求的。

在個人編寫單元測試的過程中,可能經常會覺得有些枯燥和無聊,是以會在一定程度上偷懶,而錯誤也是在這些不經意間的偷懶中産生的。例如在第三單元JML的第三次作業中,我在原本的代碼的基礎上拓展了新的功能,在使用Junit進行測試的過程中,我為新加入的代碼編寫的測試資料,而沒有測試原來代碼的正确性。然而自己在編碼的過程中,對原本代碼進行了一行的修改,也正是這一行,導緻了那次強測中20個點隻有2個是正确的。

自動化測試的有點在于其效率高,其測試的随機性可以對以上兩種辦法中涉及不到的點做較好的補充。自動化測試由于其生成的資料規模較大,建構的測試模型可以較為複雜,能夠對代碼進行較好的性能測試。

在本學期OO課程的四個單元中,我利用同學/自己的測試腳本對代碼進行了測試,充分的自動化測試,基本上能夠保證代碼整體的正确性。在電梯作業中,使用自動化測試來繪制電梯在生命周期内的運作圖,來獲得得電梯排程性能更加直覺的感受。

自動化測試也具有一定的缺點,一個是在資料生成的過程中,如果生成的資料不夠全面,則不能很好地檢查程式的全部内容;第二個是自動化的資料生成得到的一些資料可能并不是“最強”的,也即對程式的測試仍然不是完全的。

OO這門課就像是一個敲門磚,給我們打開了OOP的大門。在課程進行的過程中,很多知識很多方法,因為時間的倉促、每周作業的壓力,都沒有來得及去學,還是非常遺憾的。但是OO這門課卻給我們大緻介紹了OOP的大緻架構,在今後自己進一步地探索和摸索的過程中,相信在本學期的學習中積累到的、收獲到的都能夠提供良好的幫助。相信OO課程更多地也是想要教會同學們方法,去學習更多的知識吧。

在本學期的OO課程中,無論從知識還是代碼能力上都是有着進步的。

對于未來的OO課程,希望老師們能夠更多地講解設計模式等方面的細節。希望課程組能夠多提供一些代碼例程來幫助同學們更好地學習OO代碼的書寫方式。在測試方面,課程組也可以更多地提供一些Junit等測試方法的教程,能夠更好地幫助同學們對代碼進行測試。

一學期的OO課程過得很快,現在滿眼還是當時完成寒假預備作業時的樣子。

本學期的課程、實驗和作業中,收獲了很多。

感謝老師和助教學長們的辛勤付出。