­

結對項目

  • 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 的熟練使用大大提高了我們編程的效率。
     
  • 對問題有獨特的見解,善於發現問題

張家維:

結對感受:

  • 第一次接觸,受益良多。在結對編程時,我們將需求列出,根據難度不同從而安排開發流程,每個人根據自己能力特出點
    不同而去做不同的需求,再通過交流約定我們每個人的介面,做到最大化的取長補短。最大的收穫是提高了溝通能力,簡化開發流程,提高效率

對彼此的閃光點或建議

  • 思路清晰,對解決問題有多種思路
     
  • 程式碼規範,注釋清晰