天天看點

個人項目作業

項目 内容
這個作業屬于哪個課程 班級部落格
這個作業的要求在哪裡 作業要求
我在這個課程的目标是 學好并應用好軟體工程
這個作業在哪個具體方面幫助我實作目标 學習個人軟體開發流程
作業正文 如下

github位址:https://github.com/pyb19991125/Experiment.git

解題思路描述

拿到題目後,以為是求在一定範圍内的交點個數,采用分治的思想,随機挑選一條直線将平面分開,将所有直線分為左邊的直線(未與這條直線相交)、右邊的直線(未與這條直線相交)、中間的直線(與這條直線相交),然後分别遞歸調用左邊和右邊,再計算中間直線分别和左右直線相交的交點個數,加上中間直線自己相交的交點個數。

後來發現題目看錯了,因為時間原因,直接采用兩兩搜尋的方法,每兩條不平行的直線算出交點,最後将這些交點去重,輸出交點個數。

設計實作過程

代碼包括三個主要函數:

個人項目作業

兩個結構體:

個人項目作業

input_and_deal函數讀取輸入檔案内容,将直線變為Ax+By+C=0(使用y=kx+b可能會導緻斜率無窮大);

add_point函數:每兩條直線相比較,如果不平行,計算出交點坐标,放入向量中;

point_number函數:将相同的交點去重,因為是double類型,使用abs(x1-x2)<eps進行高精度的比較;

三個函數順序執行;

單元測試測試這三個主要函數和求兩個數最大公因數的函數,測試中間結果和最終結果:

(沒有設計對邊界的用例,隻考慮了一般情況下的測試,測試不夠細緻)

單獨測試求兩個數最大公因數的函數

個人項目作業

設計一些用例測試中間結果和最終結果

個人項目作業
個人項目作業

改進的思路

性能分析圖:

個人項目作業
個人項目作業

在改程序式性能上花費時間30分鐘;

最大消耗函數為point_number()函數,計算不同交點個數;改進思路,求不同交點個數先快排後去重。

代碼說明

個人項目作業

通過公式求A,B,C;

個人項目作業

這段代碼用于求不平行直線的交點坐标,因為有可能A或B等于0,需要分别讨論;

個人項目作業

比較交點坐标,記錄不同的交點個數。

時間記錄

PSP2.1 Personal Software Process Stages 預估耗時(分鐘) 實際耗時(分鐘)
Planning 計劃 30
· Estimate · 估計這個任務需要多少時間 2
Development 開發
· Analysis · 需求分析 (包括學習新技術) 200 150
· Design Spec · 生成設計文檔 20
· Design Review · 設計複審 (和同僚稽核設計文檔)
· Coding Standard · 代碼規範 (為目前的開發制定合适的規範)
· Design · 具體設計 100 400
· Coding · 具體編碼 300
· Code Review · 代碼複審 60
· Test · 測試(自我測試,修改代碼,送出修改)
Reporting 報告
· Test Report · 測試報告
· Size Measurement · 計算工作量
· Postmortem & Process Improvement Plan · 事後總結, 并提出過程改進計劃
合計 842 1160

因為看錯了需求,以為交點必須在範圍内才算,重新設計,寫代碼,是以和預估的時間差别很大。

經過 Code Quality Analysis 工具的分析

個人項目作業
個人項目作業