BUAAOO-First-Summary

来源:https://www.cnblogs.com/i-love-ange-and-oo-forever/archive/2019/03/25/10591457.html
-Advertisement-
Play Games

目錄 homework & class & trainning : 兩次上機、三次作業、四周課堂 code analysis & review : 為什麼我沒有bug 黑盒測試和白盒測試 OO 設計感言 Scanning: Creational Pattern & Multithreading 一、 ...


目錄

  • homework & class & trainning : 兩次上機、三次作業、四周課堂
  • code analysis & review : 為什麼我沒有bug
  • 黑盒測試和白盒測試
  • OO 設計感言
  • Scanning: Creational Pattern & Multithreading

一、作業、課堂、上機總結若幹

   1. 關於Debug

  我對我三次房間的同學的bug都做了詳細的文檔記錄,這裡簡單的貼一下,很熱衷於和同學們分享。

  第一次

1 1.  多人刪除了首尾的特殊字元
2 2.  多人沒有判斷指數後面
3 3.  一人沒有考慮正則表達式爆棧
4 4.  一人沒有考慮對常數求導

 

  第二次 

[x] 1.in for rider TLE ,考慮嵌套,導致超市
[x] 2.in for saber 0 , 沒有考慮輸出0
[x] 3.in for archer WF ,沒有考慮格式錯誤
[?] 4.in for altergo saber assassin berserker rider UNKNOWN maybe because of sympy, sympy對拍精度問題,使用Wolfram Alpha複查
[?] 5.in for archer lancer UNKNOWN maybe because of sympy sympy對拍精度問題,使用Wolfram Alpha複查
[?] 6.in for rider WA UNKNOWN 「fail to debug」 ,沒有考慮化簡錯誤
[x] 7.in for archer WF ^ + ,沒有考慮`^ +`類型的錯誤格式
[x] 8.in for altergo WA , 化簡出現錯誤


x 表示 是錯誤數據
? 表示 是可疑數據

 

  第三次

整體錯誤較少,僅一人出現判錯格式。

 

  大佬分享課的收穫

  1. shh : 優秀的自動機分析

  2. cyx :優秀的設計模式思考者

  3. dyj :高階對拍器設計者

  4. hdl :優秀的面向對象和工業級設計師

  

  感謝各位同學,我受益匪淺,在分享知識後,我們收穫的更多:如何設計測試、如何做良好測試、如何運用設計模式、如何學習面向對象、如何挑戰自己的高度。

二、code review & analysis

   三次作業以來,我的作業在強測、互測階段沒有發現任何正確性錯誤、在弱測環節因為正確性產生的commit也非常少。我來總結一下我三次作業的流程、思路、設計、代碼實現。先是三張我的設計圖。

  第一次作業:

  

  第二次作業

  

  第三次作業

  

  從三次的設計圖來看,Unit 1對我的提升非常大,可以看到我的設計越來越有整體層次感、對象和介面的封裝、多態的函數返回模式、具有自我管理能力的類、Unit 1的設計最後充分體現了我的設計思想逐漸豐富。組合思維的應用讓我的程式越來越有設計感,越來越具有可擴展性和良性。

 

  為什麼我沒有bug:其實是由於我的開發流程在逐步細化:

    我的第一次開發流程:

    1. 做一個簡要的計劃

    2. 設計對象、畫圖

    3. 寫簡單的測試用例和測試代碼

    4. 寫代碼

    5. 小黃鴨調試

    6. 運行測試

 

    我的第二次開發流程:

    1. 學習遞歸下降法

    2. 第一次代碼重新閱讀

    3. 重構類型清單

    4. 一個新的設計計劃

    5. 設計新對象、做思維導圖

    6. 寫部分代碼

    7. 重構部分代碼,消除硬綁定、做軟綁定。

    8. 測試代碼和測試類

    9. 測試數據編寫

    10. 小黃鴨調試

    11. 黑盒運行調試

    12. 簡單白盒測試

  

    我的第三次開發流程

    1. 學習裝飾者模式、介面設計

    2. 第二次代碼重構模塊綁定

    3. 重構部分清單

    4. 表達式樹建立

    5. 文法和對象模式的逐一對應

    6. 寫代碼「僅40分鐘」

    7. 做頭腦風暴,考察多種測試數據和思路,並完成代碼

    8. 檢查是否存在硬綁定、消除硬綁定、為可行的優化做準備

    9. 擴展、將優化和求導均作為裝飾者執行。

    10. 寫代碼

    11. 測試類和測試代碼運行

    12. 測試數據構造和覆蓋性測試

    13. 小黃鴨測試

    14. 黑盒運行測試

    15. 覆蓋式白盒測試

    16. 優化及優化測試

    17. 性能分析和性能測試

    18. 代碼回顧和思考

 

    可以看到,在三次作業中,我沒有bug完全是因為通過學習、通過和優秀的各位同學在討論區交流、不斷提升自我、提高自己的代碼魯棒性、和建立具有糾錯能力的開發模式。我沒有bug不完全是運氣、但也有不少運氣成分、還有很多同學比我做得更好、向他們學習。在三次作業後,我逐漸看清了表達式問題的本質:即,用組合的思維去描述表達式樹的形態、用裝飾者的行為去描述求導和化簡這些可以變化的方法。是設計提升了我的代碼質量。可以發現,我的優化也是完全面向對象的松耦合實現!

 

  此外,在講講我三次作業的進步

  我的第一次作業,代碼其實有較高的耦合度。

  OCavg WMC
Poly 3.8333333333333335 23.0
Main 5.666666666666667 17.0
Total   40.0
Average 4.444444444444445 20.0

  我的第二次作業,代碼的耦合度就直線降低了。

  

  OCavg WMC
Deg 1.5714285714285714 11.0
Expr 2.7142857142857144 19.0
Main 1.0 1.0
Myinput 2.2222222222222223 40.0
Myoutput 3.0   6.0
Term 2.1818181818181817 24.0
Total   101.0
Average 2.1956521739130435 16.833333333333332

 

   我的第三次作業,在擴展之後,依然有較好的擴展性和松耦合。且後兩次的耦合主要在Input Handler即遞歸下降的部分,這部分HansBug學長已經給出了有效的OO風格的指導。

  

  OCavg WMC
Val 1.0 9.0
Sin 2.75 11.0
Pow 1.6666666666666667 10.0
Plus 2.272727272727273 25.0
Myoutput 1.0 1.0
Myinput 2.526315789473684 48.0
Mul 2.4545454545454546 27.0
Main 1.0 1.0
Cos 2.75 11.0
Total   143.0
Average 2.1666666666666665 15.88888888888889

三、黑盒測試和白盒測試  

  在黑盒測試部分,感謝:牛雅哲、張少昂兩位助教的建議和鼓勵、感謝林佬@login256,丁總,HugeGun,Nemo陳宇軒,對我的技術支持和指導。  

  在白盒測試部分,感謝:榮文戈老師的優質教學、感謝OO課程組老師的優質ppt、感謝何岱嵐教導實現junit做測試。

  

  黑盒測試:

  我的測試環境是: ubuntu 18.04 (Intel Core i7 8Gen) ,java 10 , g++ 7.3.0 , Python 3.6.7,GNU bash 4.4.19,我的測試方法在不同平臺和環境下有一定的調整、同學們可以自行調整、大部分內容是跨平臺的。

  我的測試構造技巧同樣可以參考我已經寫好的博文

  

  白盒測試:

  大量的同學在debug環節是黑盒測試的,即比較其他同學輸出和標準輸出的正確性,而這樣是勞心勞力、費時費資源的一種朴素測試思路,所以需要白盒測試,來彌補難以覆蓋的測試環節和情形。我通過單元測試、全路徑覆蓋的形式保證了:

  

    1. 保證模塊中所有獨立路徑至少被執行一次
    2. 對所有邏輯值都會測試TRUE和FALSE
    3. 在上下邊界及可操作範圍內運行所有迴圈情況
    4. 檢查內部數據結構以確保其有效性

四、OO設計感言

  OO設計是充滿驚險充滿挑戰的過程。面向對象的設計思想是從自然界中來的,因為在自然界中,類(Class)和實例(Instance)的概念是很自然的。Class是一種抽象概念,比如我們定義的Class——Student,是指學生這個概念,而實例(Instance)則是一個個具體的Student,比如,Bart Simpson和Lisa Simpson是兩個具體的Student。Java學起來很有趣,通過學習Java可以提高自己的邏輯思維能力。在學習Java期間我們做了一些程式,我們班的同學也都積極準備,完成的還不錯!因為Java是一種面向對象的編程語言,剛接觸Java的人可能會感覺比較抽象 ,不過沒關係不用著急,上課的時候認真聽老師講解,一些概念知識慢慢去理解,課後多做練習,認真完成課下作業,熟能生巧,哪怕是你的記性再好,課後不去強化練習也沒用,只有多練了,當你在做項目時你才能很熟練的寫出你想要代碼。

五、Design Pattern & Multithreading

  因為我本周很忙,很多任務,所以提前預習了很有意思的多線程。

六、鳴謝

  鳴謝OO課程組中對OO精心付出的每一位老師同學,希望後續的OO體驗會更好。我想在OO思維和設計模式的大海裡面徜徉。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • OO第一單元(求導)單元總結 這是我們oo課程的第一個單元,也是意在讓我們接觸瞭解掌握oo思想的一個單元,這個單元的作業以求導為主題,從一開始的加減多項式求導再到最後的嵌套多項式求導,難度逐漸提高,編程思想也逐步深入面向對象,如果說前兩次作業還可以用C語言的面向過程的思想去對付,那麼第三次作業可以說 ...
  • 面向方法的數據集緩存 使用了autofac做為ioc容器,使用Autofac.Extras.DynamicProxy2作為方法攔截器,緩存面向方法,直接在方法上添加CachingAttribute特性即可。 緩存註冊流程 1. 關於方法攔截器 1. 緩存名稱設計 1. 添加ioc 1. 添加攔截器與 ...
  • [TOC] 總 本博文是2019年北航面向對象(OO)課程第一單元作業(多項式求導)的總結。三次作業的要求大致如下: 第一次作業:簡單冪函數的求導,如 $1 + x^5 + 4 x^3$ 第二次作業:簡單冪函數和簡單正餘弦函數的求導,如 $ 5 sin(x)^2+5 cos(x) cos(x)+12 ...
  • 構造方法 概念: 又叫 構造器,區分於傳統的方法,是一個在創建對象時被系統自動調用的特殊方法 作用: 一:為對象進行初始化(成員變數)的工作 二:為對象在堆記憶體中開闢獨立的記憶體空間 定義格式: 訪問修飾符 方法名(){ } 用法: 只能通過new關鍵字進行調用 註意事項: 一:方法名必須和類名保持一 ...
  • 一、前三次作業內容分析總結 前言 前三次作業,我提交了三次,但是有效作業只有兩次,最後一次作業沒能實現多項式求導的基本功能因此無疾而終,反思留給後文再續,首先我介紹一下這三次作業,三次作業圍繞著多項式求導展開,輸出目的都是一致的,即對輸入的多項式進行求導,將求導結果列印到顯示屏,作業難度遞增,每一次 ...
  • 記得比較早使用手機掃碼登錄是網頁版微信,這種免去輸入繁瑣的賬號密碼,拿起手機掃一掃就可以登錄的方式一開始還是比較驚艷的,確實使用起來很方便。 那它是如何實現的呢?我們來簡單研究下。(以淘寶網二維碼登錄為例) 首先,任何一個二維碼表示的都是一串字元串。 我們打開淘寶登錄頁面: "https://log ...
  • 第一次作業 第一次作業需要完成的任務為簡單多項式導函數的求解。 思路 因為僅僅是簡單多項式的求導,所以求導本身沒有什麼可說的,直接套用冪函數的求導公式就行了,主要的精力是花在了正則表達式上。這裡推薦兩個網站: https://github.com/ziishaned/learn regex http ...
  • 第一單元總結 作業總結 一 程式結構分析 ​ 因為在此之前並沒有接觸過 java 語言或者是與之相似的語言, 而不用說 OO 的概念, 所以一切都是全新的. 開始的時候腦子並沒有任何面向對象的概念, 類這個概念僅僅建立在 C 語言的某個 .c 文件之上, 簡單地認為 java 中的類就是 C 中的 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...