軟工實踐寒假作業(2/2)
軟件工程實踐第一次寒假作業
| 這個作業屬于哪個課程 | 2021春軟件工程實踐|S班 |
|---|---|
| 這個作業的要求在哪里 | 寒假作業2/2 |
| 這個作業的目標 | 1、閱讀《構建之法》并提出問題 2、學習使用git以及github 3、制定自己的代碼規范 4、實現WordCount命令行程序 |
| 其他參考文獻 | 《構建之法》、《廖雪峰的Git教程》 |
任務一.對《構建之法》的思考
1:結對編程

兩人進行角色互換,閱讀對方的代碼、理解對方思路時是否會浪費大量時間?
2:團隊中的鸚鵡

這段文字包含對鸚鵡類型角色的鄙視,但我認為一個好的想法,好的構思對一個軟件的開發是非常關鍵的,特別是考慮到軟件日后在市場中的表現,一個鸚鵡類型的角色在團隊之中是至關重要的。
3:大部分成功的創新者不是先行者

引發我的思考:成功不一定需要創新,更需要有好的眼光和堅持。
4:好的想法不一定會贏

人的習慣實在是一個可怕的東西,如同例子中關于鍵盤布局的例子,即使另一種布局要比現在的鍵盤布局提升大量效率,可在習慣的驅使下,大部分人還是不愿意更換鍵盤布局。
5:創新的方法

不是標新立異就是創新,要掌握正確的創新方法,否則只會淪為笑柄。
任務二.WordCount編程
2.1項目github鏈接
2.2codestyle鏈接
2.3PSP表格
| PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
|---|---|---|---|
| Planning | 計劃 | ||
| ? Estimate | ? 估計這個任務需要多少時間 | 30 | 40 |
| Development | 開發 | ||
| ? Analysis | ? 需求分析 (包括學習新技術) | 90 | 90 |
| ? Design Spec | ? 生成設計文檔 | 20 | 25 |
| ? Design Review | ? 設計復審 | 20 | 15 |
| ? Coding Standard | ? 代碼規范 (為目前的開發制定合適的規范) | 5 | 5 |
| ? Design | ? 具體設計 | 60 | 70 |
| ? Coding | ? 具體編碼 | 480 | 450 |
| ? Code Review | ? 代碼復審 | 90 | 90 |
| ? Test | ? 測試(自我測試,修改代碼,提交修改) | 120 | 100 |
| Reporting | 報告 | ||
| ? Test Repor | ? 測試報告 | 60 | 40 |
| ? Size Measurement | ? 計算工作量 | 30 | 30 |
| ? Postmortem & Process Improvement Plan | ? 事后總結, 并提出過程改進計劃 | 90 | 90 |
| 合計 | 1095 | 1015 |
2.4解題思路
- 分析需求:
- 要實現文件的讀寫功能;
- 統計文件字符數并輸出;
- 統計文件的單詞總數并輸出;
- 統計文件的有效行數并輸出;
- 統計文件中各單詞的出現次數并按序輸出頻率前十的單詞及出現次數。
- 逐步實現需求。
2.5設計與實現過程
- 實現了幾個函數
- int isChar(char c);//判斷是否是字母
- int isCharOrDig(char c);//判斷是否是數字或字母
- int countChar(string input);//計算字符數
- int countWord(string input);//計算單詞數
- void output(ofstream& out,string input);//輸出到文件
- 關鍵代碼
for(;j<i+4;j++){
if(!isChar(input[j])){
temp=0;//只有前四個字符都為字母是才被認為是單詞
break;
}
}
multimap<int,string,greater<int> > sortMap;//利用map類自動排序的特性,對詞頻排序
for(map<string,int>::iterator it=stringMap.begin();it!=stringMap.end();it++){
sortMap.insert(pair<int,string>(it->second,it->first));
// cout<<it->first<<endl;
}
int cnt=0;
for(map<int,string>::iterator it=sortMap.begin();it!=sortMap.end()&&cnt<10;it++){
// cout<<it->second<<": "<<it->first<<endl;
out<<it->second<<": "<<it->first<<endl;//按詞頻輸出
cnt++;
}
2.6單元測試與性能分析
單元測試

性能分析

2.7異常處理
in.open(argv[1]);
if(!in.is_open())
cout<<"文件打開失敗!"<<endl;
只做了打開文件時的異常處理
2.8心路歷程與收獲
- 因為選課的問題,加入班級群后只剩幾天的時間,所以代碼寫的很急,也沒有使用面向對象的方式編程,之后還需要進行改進,同時嘗試用java也實現本次作業的功能。
- 雖然之前也有使用過github,但是只是將完成后的代碼提交到服務器。在這次作業中,更深入的對github的功能進行了了解,體會到了用github倉庫管理代碼的好處,今后的編程都要盡量使用github幫助進行代碼管理。
- 之前編程時,特別是大一使用dev-C++編程時,由于編譯器沒有自動糾正代碼格式,自己也一直沒有注意代碼的規范,程序雜亂無章,可讀性很差。這次由于作業有了要求,也在這方面多注意了一點,寫出的代碼確實更好讀懂,并且也更加美觀。
浙公網安備 33010602011771號