軟件工程寒假作業(2/2)


這個作業屬於哪個課程 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;

性能改進

沒有時間改進性能

單元測試

測試部分和截圖

大寫字母加數字

avatar

運行結果

avatar

中文加數字

avatar

運行結果

avatar

中文加字母

avatar

運行結果

avatar

長英文文章

avatar

運行結果

avatar

近3萬字英文文章

avatar

運行結果

avatar

異常處理說明

若沒有檢測到輸入時,結束程序並返回提示信息

  if(!raw_word.size()){
       printf("There is no word in the \"in.txt\" or \"in.txt\" inexistence!\n");
       return 0;
    }

心理歷程和收獲

心路歷程

一開始看到繁雜的任務的時候頭很大,拖延症直接犯了,沒想到deadline快到的時候手還扭傷了,緊趕慢趕的,總體對自己這次作業不是很滿意,很多細節都沒好好構思。

收獲

這次讓我意識到任何事情都不能拖到最后幾天,應該合理分配時間去完成任務,才能有多余的時間更加完善自己的項目。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM