軟體工程第二次作業—個人專案
軟體工程第二次作業—個人專案
1. 程式碼倉庫地址:https://gitee.com/liumangxiaozi/software_engineering.git
2. PSP表格
PSP2.1 |
Personal Software Process Stages |
預估耗時(分鐘) |
實際耗時(分鐘) |
Planning |
計劃 |
5 |
10 |
· Estimate |
· 估計這個任務需要多少時間 |
10 |
5 |
Development |
開發 |
10 |
15 |
· Analysis |
· 需求分析 (包括學習新技術) |
200 |
300 |
· Design Spec |
· 生成設計文件 |
60 |
100 |
· Design Review |
· 設計複審 |
20 |
20 |
· Coding Standard |
· 程式碼規範 (為目前的開發制定合適的規範) |
10 |
5 |
· Design |
· 具體設計 |
20 |
20 |
· Coding |
· 具體編碼 |
500 |
500 |
· Code Review |
· 程式碼複審 |
200 |
250 |
· Test |
· 測試(自我測試,修改程式碼,提交修改) |
200 |
200 |
Reporting |
報告 |
40 |
40 |
· Test Repor |
· 測試報告 |
40 |
40 |
· Size Measurement |
· 計算工作量 |
10 |
10 |
· Postmortem & Process Improvement Plan |
· 事後總結, 並提出過程改進計劃 |
20 |
20 |
|
合計 |
1345 |
1535 |
3. 學習日誌
學習時段:2018.1229.0800-0930
學習內容:python對文字檔案的讀取
收穫體會:在學習過程中效率很低,主要原因在於自己對於python的整體的程式設計能力的不足,我在自己的D盤內設定有a.txt檔案,但是我在編碼的過程中採用的呼叫格式一直也只是a.txt,到最後一直無法對檔案進行操作,最後發現,應該在a.txt後面再加一個.txt,這麼一個小的錯誤花費了一個小時才解決
自我效率評價:差
學習時段:20198.0102.1900-2030
學習內容:文字處理-字串
收穫體會:找了一本python基礎的書,對其中字串處理模組進行了學習,由於是對著書本學習,邊學習邊編寫,所以感覺整體效率還算不錯。
自我效率評價:較高
學習時段:20198.0104.1400-1730
學習內容:編寫詞頻統計程式
收穫體會:參考了https://www.cnblogs.com/Eudemines/p/9764409.html博文的內容和方法,對自己的程式設計有了一個整體的規劃,在緩衝區的處理部分,暫時採用了該博主提供的方法,但是整個程式還是有bug沒消掉。
自我效率評價:較低
學習時段:20198.0105.1400-1700
學習內容:編寫詞頻統計程式
收穫體會:參考了社群大神的許多建議和方法,針對bug進行處理,解決了bug,並優化了部分的程式結構。
自我效率評價:較低
4. 解題思路描述
①將文字儲存為一個字串形式,統計字串的長度,文字的行數;
②將字串內所有的大寫字母轉為小寫字母;
③將字串中緩衝區進行處理;
④將字串分離為單個的單詞
⑤統計單詞的詞頻
⑥輸出詞頻在前十的單詞
⑦對特定的功能點檢查自己實現的功能點的缺陷,一個一個優化
5. 設計思路過程
測試用例
功能 |
測試文字 |
輸出 |
純英文字元 |
The to the |
長度:10,行數:1 ,‘the’:2,‘to’:1 |
數字英文混合 行數檢測 |
the123 1the |
長度:14,行數:2,‘the123’:1,‘to’:1 |
大小寫檢測 |
The the |
長度:7,行數:1,‘the’:2 |
空行處理 |
the
the |
長度:13,行數:2,‘the’:2 |
首尾空格 |
The the |
長度:10,行數:1 ,‘the’:2 |
漢字處理 |
這 the |
長度:4,行數:1 ,‘the’:1 |
特殊字元處理 |
@#$ the |
長度:7,行數:1 ,‘the’:1 |
字母數字混合 |
The123the |
長度:9,行數:1 ,‘the123the’:1 |
6. 效能分析
通過程式對四段英文字串進行處理,程式執行一共花費了接近0.121秒
7. 關鍵程式碼
def main():
dst = "a.txt.txt"
bvffer = process_file(dst)
word_freq = process_buffer(bvffer)
output_result(word_freq)
if __name__ == "__main__":
import cProfile
import pstats
cProfile.run("main()", "result")
# 直接把分析結果列印到控制檯
p = pstats.Stats("result") # 建立Stats物件
p.strip_dirs().sort_stats("call").print_stats() # 按照呼叫的次數排序
p.strip_dirs().sort_stats("cumulative").print_stats() # 按執行時間次數排序
p.print_callers(0.5, "process_file") # 如果想知道有哪些函式呼叫了process_file,小數,表示前百分之幾的函式資訊
p.print_callers(0.5, "process_buffer") # 如果想知道有哪些函式呼叫了process_buffer
p.print_callers(0.5, "output_result") # 如果想知道有哪些函式呼叫了output_res
8心路歷程和收穫
本次開發過程比較坎坷,中間還穿插著一門矩陣理論的考試課,所以總體的時間還是很緊張,自己編寫的軟體中存在許多的不足,譬如沒能實現老師要求的對以英文和數字混合字元的識別和統計,只是對純英文文字進行處理,同時對其他字元的處理只是簡單的採用了識別和替換的方法,若是輸入超出我的編寫程式的範圍可能會導致軟體的奔潰,不管其他,最終還是做出來了一個小小的軟體,基本實現了其功能,感悟有三點:一、自己的程式設計技術太low,需要加強、加強、再加強;二、軟體工程中各個部分的工作加起來遠比程式設計多得多;三、學到了許多實用的技能。