這次的任務是對文字檔案的詞頻統計,要求在這裡:詞頻統計作業要求
雖然要求的細節一改再改,我們終於還是如期完成了這個專案,並且因為此次結對程式設計的主題任務是效能分析,我們還做了效能分析和一些優化。
不同於要求,我們的幾次commit除了實現功能外,大多是因為要求的變化而對**進行修改,或是修復bug、優化效能。
在專案開始之前選擇語言的階段,我們商討的結果是,由於我們都沒有用過python平台的效能分析工具,並且剛好我比較熟悉c#的文字處理,所以決定這次我們的程式語言選擇c#,合作方式是由我來做駕駛員,隊友做領航員。
design guideline:由於此次程式設計任務的功能比較直接但是繁瑣,我們一開始就達成一致從最簡單的功能開始寫起,並列地完成每乙個功能,再做優化。
coding convention:由於我們的合作方式,我們的coding convention基本按照我的習慣和vs的自動縮排等來,命名等則是我們一邊寫一邊達成一致。
reach agreement: 在合作過程中,但我們有了不一致我們會停下工作來討論,直到reach agreement
此次專案的目標是優化程式執行的速度,功能實現本來不難,而時間很長,於是我們想要先把功能實現然後進行測試和優化。於是一開始我們連續幾天晚上一起結對程式設計,大體實現了功能,然而由於我們的理解與具體的要求有偏差,並且要求本身也沒有非常確定,我們的功能實現並不能作為最終版本,因此我們擱置了乙個多星期。當任務要求的細節終於大概確定我們終於可以繼續工作時,由於我個人的原因,我們實際可以工作的時間只有兩個工作日的晚上和乙個週六的白天。為了完成任務,我們只好推遲了休息時間,加班加點地實現功能並做了一些測試和優化。
我的隊友的優點:想演算法的時候邏輯清晰,對**的規範意識比較好,忍受了我有限的時間陪我熬夜趕ddl
缺點:在做領航員的實時複審工作時會漏掉一些bug,有點不夠細心
我們使用vs的performance profiler做效能分析,並根據report的熱行等資訊做優化。
在具體的操作過程中,我們發現c#的list資料結構的一些方法,如list.contains(), list.count(),內部是用遍歷的方式來實現,效能非常差。針對前乙個問題我們寫了乙個vocabtree類,試圖用遞迴的方法索引單詞,效果有很大改善,後來我們使用了hashset和dictionary來替代vocabtree,速度更快。而後乙個問題我們換了list.length就解決了。list.sort()方法耗費的時間也很長,於是我們將改為使用ienumerable.orderby(),效果明顯提公升。
這之後,我們發現在輸出統計結果的時候,c#的console.writeline()耗時超過了50%,於是我們優化了邏輯,將原本一次write乙個字典項改為將字典項存進buffer再write。這樣效能也提公升了不少。
然後我們分析,如果想要繼續優化,需要修改**邏輯、使用多執行緒,但由於時間和精力十分有限,我們沒有再繼續做下去。
結對程式設計 詞頻統計
倉庫位於 azure 可執行程式 windows exe 位於 可執行檔案 不是病毒 首先我們採用的程式語言是 c 我們採用的平台是 azure devops。總體的合作方式是採用官僚式,即每個人都負責各自的乙個功能,本次程式中一共有4個功能需要實現 字母佔比 單詞統計 片語統計 動詞 介詞統計,我...
結對程式設計 詞頻統計
搭檔 施蓓蓓 原始碼 github 貢獻比例 50 結對程式設計 1 要求 基於作業3的結果,讀取乙個較小的文字檔案a tale of two cities.txt,統計該檔案中的單詞的頻率,並將統計結果輸出到當前目錄下的 result1.txt 檔案 2 程式 ifstream infile a ...
軟體工程結對程式設計作業
功能模組名稱 語法分析 審查人王斌 審查日期 2018 4 6 名稱 123 作者 李少鵬檔案結構 重要性 審查項結論 標頭檔案和定義檔案的名稱是否合理?是標頭檔案和定義檔案的目錄結構是否合理?是版權和版本宣告是否完整?無重要 標頭檔案是否使用了 ifndef define endif 預處理塊?無...