結對項目
- 2020 年 10 月 11 日
- 筆記
=================
這個作業屬於哪個課程 | 軟體工程 |
---|---|
作業要求 | 作業要求 |
Github | Github鏈接 |
小隊成員 | 3118005433 張家維、 3118005431 嚴為煒 |
這個作業的目標 | 熟悉結對編程,實現自動生成小學四則運算題目程式,對給定的題目文件和答案文件,判定答案中的對錯並進行數量統計 |
核心功能實現
1. 生成題目
實現思路:
-
隨機生成參數列表和運算符列表
-
判斷算式是否存在括弧
if 存在不括弧:
返回獲取到的無括弧算式
else:
返回獲取到的括弧算式
-
算式存在括弧
-
括弧數為1時
利用 random.randint(0, len(op_list) – 1)來決定左括弧的位置
利用 random.randint(left_bracket_index + 1, len(parameter_list) – 1)來決定右括弧的位置 -
括弧數為2時
隨機獲取括弧類型
if 括弧類型為並列:
循環獲取參數列表和運算符列表獲取到算式時,在相應的的位置插入括弧,即:( A +B ) + ( C + D )
else 括弧類型為嵌套:
先確定外層括弧的位置,再利用遞歸,傳遞外層括弧里的子字元串,從而確定內從括弧,最終得到嵌套括弧的算式
-
流程圖
程式碼截圖
2. 計算
實現思路
先處理算式,得到參數和操作符組成的列表,例如:' 1 + 2' 處理成 ['1', '2', '3']
創建數字棧和操作符棧
進行循環獲取算式列表
如果是數字則壓入數字棧
如果是操作符
while True 的循環
如果操作符棧為空,或者運算符為 '(' 時
入棧,break
如果當前操作符的優先順序比棧頂操作符的優先順序高
入棧,break
如果當前操作符為 ')',且棧頂操作符為 '('
'(' 出棧,丟掉 ')',break
如果當前操作符的優先順序比棧頂操作符的優先順序低
獲得數字棧最後兩個元素、操作符棧最後一個元素,進行計算
如果除數為零、被除數大於除數、結果為負數
return Error
得到結果入棧
if 循環之後如果數字棧和操作符棧還有內容
while 直到操作符棧不為空:
計算
如果除數為零、被除數大於除數、結果為負數,return Error
得到的結果入棧
數字棧的元素就是計算得出的結果
流程圖
程式碼截圖
3. 多執行緒查詢是否存在生成重複問題
部分程式碼截圖
功能運行
命令行參數
python Myapp.py [args|args]
[args]
├─ -h –help # 輸出幫助資訊
├─ -n # 指定生成表達式數量,默認10
├─ -r # 指定生成表達式各個數字的取值範圍,默認10
├─ -e # 需和-a參數共同使用進行批改,指定練習文件
├─ -a # 需和-e參數共同使用進行批改,指定答案文件
└─ -g # 開啟GUI
命令行介面
1. -h
2. -r -n (也可以只輸入一個參數)
3. -e -a (需要同時輸入兩個參數)
GUI 介面(-g)
採用了多執行緒的介面,任何操作不會阻塞其他操作,例如:可以在生成答案的同時批改作業
1. 生成題目以及在線做題(有驗證答案和查看答案兩個功能)
2. 設置題目數量以及範圍(默認兩個值都為10)
3. 檢查題目答案(輸入兩個文件路徑即可開始檢查)
異常處理
命令行輸入參數錯誤
GUI輸入錯誤
性能分析
GUI介面性能
生成題目
檢查答案對錯
PSP表格
PSP2.1 | Personal Software Process Stages | 預估耗時(分鐘) | 實際耗時(分鐘) |
---|---|---|---|
Planning | 計劃 | 100 | 80 |
· Estimate | · 估計這個任務需要多少時間 | 100 | 80 |
Development | 開發 | 1680 | 2110 |
· Analysis | · 需求分析 (包括學習新技術) | 40 | 30 |
· Design Spec | · 生成設計文檔 | 100 | 70 |
· Design Review | · 需求分析 (包括學習新技術) | 80 | 100 |
· Coding Standard | · 程式碼規範 (為目前的開發制定合適的規範) | 60 | 90 |
· Design | · 具體設計 | 100 | 120 |
· Coding | · 具體編碼 | 800 | 1050 |
· Code Review | · 程式碼複審 | 250 | 300 |
· Test | · 測試(自我測試,修改程式碼,提交修改) | 250 | 350 |
Reporting | 報告 | 100 | 90 |
· Test Repor | · 測試報告 | 20 | 20 |
· Size Measurement | · 計算工作量 | 20 | 20 |
· Postmortem & Process Improvement Plan | · 事後總結, 並提出過程改進計劃 | 60 | 50 |
· 合計 | 1880 | 2280 |
項目小結
嚴為煒:
結對感受:
- 這是我第一次接觸結對編程,通過結對編程,我們能及時地對功能需求進行討論,同時將每個功能模組化,各自實現相應的功能,提高了編程效率。
對彼此的閃光點或建議
- 效率高,對 IDE 的熟練使用大大提高了我們編程的效率。
- 對問題有獨特的見解,善於發現問題
張家維:
結對感受:
- 第一次接觸,受益良多。在結對編程時,我們將需求列出,根據難度不同從而安排開發流程,每個人根據自己能力特出點
不同而去做不同的需求,再通過交流約定我們每個人的介面,做到最大化的取長補短。最大的收穫是提高了溝通能力,簡化開發流程,提高效率
對彼此的閃光點或建議
- 思路清晰,對解決問題有多種思路
- 程式碼規範,注釋清晰