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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...