這個作業屬於哪個課程 | 2021春軟件工程實踐S班 |
---|---|
這個作業要求在哪里 | 軟件工程寒假作業(2/2) |
這個作業的目標 | 閱讀《構建之法》並提問以及完成詞頻統計個人作業 |
GitHub地址 | Github項目地址 |
其他參考文獻 | 無 |
目錄
任務一:閱讀《構建之法》並提問
任務二:WordCount編程
Github項目地址
PSP表格
解題思路描述
代碼規范制定鏈接
設計與實現過程
性能改進
單元測試
異常處理說明
心路歷程與收獲
任務一:閱讀《構建之法》並提問
問題一:敏捷流程究竟是好是壞
前文也有提到,敏捷流程從理論上看美妙無比,讓我不禁想到,實際行動時是不是會遇到很多走捷徑般的“敏捷”呢?為了快而快。后文的一些經驗教訓中寫道“敏捷宣言表明的是一些優先級,不必當作聖旨或者教條來爭論”。由此我的思考是,就現如今來看,敏捷流程這個模式只要用對方法,就能把敏捷流程的優點做到極致,產品不拖泥帶水,能夠迅速找到問題並解決。
問題二:要如何做到創新
創新一直是一件很困擾我的事情,我一直覺得好像我能夠想到的別人早就已經做到了,編程的時候一些方法可以直接拿前人的用,直接封裝就可以了,這樣能夠做到創新嗎?看到這個電話我想到,創新就是要推陳出新,從這個早期的電話來看我們現在的電話設計,一樣設計有聽筒和話筒一上一下,編程時想要創新就要先學會看懂別人的算法和方法,這樣才能引起更多思考,把舊的往好的方向改進,也是一種創新。
問題三:代碼量的多少能代表水平嗎?
代碼量多積累的經驗應該也會很多,有如讀書破萬卷,下筆如有神。但是我覺得如果都是重復在做一樣的事,那樣堆積起來的代碼就像果樹B的樹葉一樣,無用的樹葉再多不如甜美的果實,並不能代表什么。所以要多吸收新的知識,讓自己更加充沛,才能結出更多香甜可口的果實。
問題四:怎樣成為一名合格的PM?
我的理解:PM應要比程序員更加有表達能力和理解能力,能夠理解用戶,站在用戶的角度考慮問題,善於發現一些隱性的需求,要有良好的管理能力,帶領團隊把抽象的目標轉化為可執行的且具體的設計,帶領成員形成一致意見,一致的開發理解,確保行動實施。
問題五:初級的軟件工程師要如何成長?
我認為要多花時間去積累軟件開發相關的知識,提升技術技能。還要多寫多練,多遇到問題主動去解決,這樣才能積累問題領域的經驗和知識,同時也要提升自我管理的能力,不能因為跟不上腳步就自我放棄,這個世界永遠有人比你走在前面,那你就要停下了嗎?雖然開發過程十分的枯燥,讓人多少有些自閉,但是也要多和人交流,溝通,才能把產品真正的做到大部分人滿意。
任務二:WordCount編程
Github項目地址
Github項目地址
PSP表格
PSP2.1 | Personal Software Process Stages | 預估耗時 | 實際耗時 |
---|---|---|---|
Planning | 計划 | 2 h | 3 h |
Estimate | 估計這個任務需要多少時間 | 48 h | 72 h |
Development | 開發 | 24 h | 48 h |
Analysis | 需求分析 (包括學習新技術) | 4 h | 8 h |
Design Spec | 生成設計文檔 | 1 h | 1 h |
Design Review | 設計復審 | 1 h | 1 h |
Coding Standard | 代碼規范 (為目前的開發制定合適的規范) | 0.5 h | 0.5 h |
Design | 具體設計 | 4 h | 8 h |
Coding | 具體編碼 | 4 h | 24 h |
Code Review | 代碼復審 | 2 h | 4 h |
Test | 測試(自我測試,修改代碼,提交修改) | 2 h | 4 h |
Reporting | 報告 | 2 h | 2 h |
Test Repor | 測試報告 | 2 h | 2 h |
Size Measurement | 計算工作量 | 1 h | 1 h |
Postmortem & Process Improvement Plan | 事后總結, 並提出過程改進計划 | 1 h | 1 h |
合計 | 50.5h | 107.5 |
解題思路描述
需要實現的功能:1、統計英文文本中字符的個數,2、統計英文文本中單詞的個數,3、統計英文文本的行數,4、統計出現頻率最高的10個單詞
我的思路:首先先剔除掉不滿足要求的字符,再對單詞集合進行統計,同時統計下字符和'\n'出現的次數,最后將結果輸出到output中。
代碼規范制定鏈接
代碼規范制定地址
設計與實現過程
用一個typedef結構設計單詞字符等變量,定義number_of_words來記錄單詞統計總數,分別用兩個vector來緩存input文本中的單詞集和總的統計結果集。
關鍵函數:
虛讀取以處理資源文件除大小寫字母外的所有漢字及字符
bool skip(){ scanf("%*[^a-z||A-Z]"); return true;}
判斷字符是否為字母和數字
bool is_digit(char ch){
return (ch>='0'&&ch<='9');
}
bool is_alpha(char ch){
return ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'));
}
找出高頻詞匯並排序
sort(raw_word.begin(),raw_word.end(),cmp_raw_word);
for(last=raw_word.begin(),it=raw_word.begin()+1;it!=raw_word.end();it++){
if(*it!=*last){
w.str=*last;
w.wordcnt=it-last;
word_statistics.push_back(w);
last=it;
}
}
w.str=*last;
w.wordcnt=it-last;
word_statistics.push_back(w);
sort(word_statistics.begin(),word_statistics.end(),cmp_word_statistics);
bool b=false;
性能改進
沒有時間改進性能
單元測試
測試部分和截圖
大寫字母加數字
運行結果
中文加數字
運行結果
中文加字母
運行結果
長英文文章
運行結果
近3萬字英文文章
運行結果
異常處理說明
若沒有檢測到輸入時,結束程序並返回提示信息
if(!raw_word.size()){
printf("There is no word in the \"in.txt\" or \"in.txt\" inexistence!\n");
return 0;
}
心理歷程和收獲
心路歷程
一開始看到繁雜的任務的時候頭很大,拖延症直接犯了,沒想到deadline快到的時候手還扭傷了,緊趕慢趕的,總體對自己這次作業不是很滿意,很多細節都沒好好構思。
收獲
這次讓我意識到任何事情都不能拖到最后幾天,應該合理分配時間去完成任務,才能有多余的時間更加完善自己的項目。