git地址 | https://github.com/Jason98w |
git用戶名 | Jason98w |
學號後5位 | 72323 |
博客地址 | https://www.cnblogs.com/jason5689/ |
做業連接 | https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2793 |
聲明:html
本次博客部分細節內容參考了ChildishChange的博客git
博客地址:http://www.javashuo.com/article/p-gozxhvvr-dq.html程序員
項目背景:github
阿超家裏的孩子上小學一年級了,這個暑假老師給家長們佈置了一個做業:家長天天要給孩子出一些合理的,但要有些難度的四則運算題目,而且家長要對孩子的做業打分記錄。編程
做爲程序員的阿超心想,既然天天都須要出題,那何不作一個能夠自動生成小學四則運算題目與解決題目的命令行 「軟件」呢。他把老師的話翻譯一下,就造成了這個軟件的需求:windows
程序接收一個命令行參數 n,而後隨機產生 n 道加減乘除(分別使用符號+-*/來表示)練習題,每一個數字在 0 和 100 之間,運算符在 2 個 到 3 個之間。因爲阿超的孩子才上一年級,並不知道分數。因此軟件所出的練習題在運算過程當中不得出現非整數,好比不能出現 3÷5+2=2.6 這樣的算式。數據結構
練習題生成好後,將生成的 n 道練習題及其對應的正確答案輸出到一個文件 subject.txt 中。dom
項目的完成過程函數
1.配置環境工具
安裝能進行編碼,單元測試,效能分析等功能的工具VS2017,並用已學到的C#語言進行項目的開發。
在此處勾選則可進行進一步開發。
Tips:最後不要將安裝路徑設置爲C盤
配置環境的問題:
配置環境的操做步驟很簡單,就須要注意安裝路徑要有足夠的空間去放置VS2017。
2.克隆項目
1.在Github中拷貝本次項目中班級指定的倉庫,將指定倉庫的內容拷貝到本身的倉庫中。
2.安裝將倉庫內容拷貝到本地的工具Git
Git-windows版本下載地址:點擊此處
Tips:按自身電腦操做系統的位數進行選擇
下載安裝完成後,新建一個文件夾來保存倉庫中的文件,打開文件夾,在文件夾空白區域點擊右鍵,選擇Git Bash Here,輸入git clone + 倉庫的地址,能夠直接複製下來,可是Git中不能容許直接Ctrl+v進行粘貼,只能經過右鍵而後paste進行粘貼,輸入完成後按回車就能夠了
細節步驟以下:
打開文件夾,新建一個文件夾,命名爲本身的github用戶名
若是是第一次使用 Git,請須要在git命令行中使用以下兩條命令配置本身的我的郵箱與 Commit 時的用戶名,這裏的郵箱和用戶名最好與 Github 帳號保持一致。
git config --global user.name "你的用戶名"
git config --global user.email 你的郵箱號
接下來接連使用
git add .(注意這一個小點)
git commit -m "換成你想命名的分支名稱"(如:git commit -m "Hello")
便可利用 Git 記錄下全部的改動。
克隆項目的問題:
1.註冊和使用Github剛開始有點不熟練
2.利用git進行clone時不知道<clone url>是什麼
3.git命令語句的使用常常出現錯誤,經過百度相關問題獲得解決
3.代碼設計:
針對項目的要求進行分析,設計,而後在進行編碼,知足項目的需求。
過程:
將編碼的路徑設置爲上一步建立好的文件夾中
代碼設計思路:
Step1:利用formula()函數生成一個隨機序列的等式,其中運算符的個數也一樣是隨機的(2-3個)
Step2:將formula()返回的等式傳入Solve()函數中進行求解,返回等式+計算結果(如:3*4+5=17),若計算結果爲小數或等式包含÷0操做則從新生成
Step3:調用calculator()函數生成指定數量的等式,並經過Fwrite()函數寫入到本地文件中
部分代碼見下圖:
1 //生成等式 2 public static string formula() 3 { 4 int opNumber = 0; 5 int firstNum = 0; 6 int nextNum = 0; 7 int opNum = 0; 8 9 string result = null; 10 Random rd = new Random(); 11 12 firstNum = (int)rd.Next(0, 101); 13 opNumber = (int)rd.Next(2, 4); 14 result += firstNum; 15 16 for (int i = 0; i < opNumber; i++) 17 { 18 nextNum = (int)rd.Next(0, 101); 19 opNum = (int)rd.Next(0, 4); 20 result = result + Operator[opNum] + nextNum; 21 } 22 23 return result; 24 }
生成等式的函數
1 //求解生成的等式,調用Computer函數 2 public static string Solve(string msg) 3 { 4 5 DataTable dt = new DataTable(); 6 object ob = null; 7 ob = dt.Compute(msg, ""); 8 //不能出現小數和除0操做,若出現則從新生成 9 while (ob.ToString().Contains(".") || msg.Contains("/0")) 10 { 11 12 msg = formula(); 13 ob = dt.Compute(msg, ""); 14 } 15 return msg + "=" + ob.ToString(); 16 }
求解的函數
1 //寫入文件到記事本 2 public static bool Fwrite(String msg) 3 { 4 try 5 { 6 StreamWriter sw = new StreamWriter("F:\\result.txt"); 7 sw.Write(msg); 8 sw.Close(); 9 return true; 10 } 11 catch 12 { 13 Console.WriteLine("保存文本文件出錯!"); 14 return false; 15 } 16 }
寫入文件的函數
此次項目的難點就是生成隨機序列的等式,而且計算結果不能爲小數,等式中不能包含÷0運算,就需針對可能的結果進行判斷處理,直到知足項目的需求。
代碼運行結果:
代碼可以知足項目的各類需求,達到正常運行的標準,但還須要進行單元測試,進行跟細的分析。
代碼設計的問題:
1.在生成隨機運算符個數上處理不當,反覆修改了不少次
2.在等式求解的過程當中,用到不少方法都不合適,對之前學到的知識有所遺忘,需複習數據結構與C#的相關內容
3.兩個函數相互調用致使運行出錯,stackoverflow,需注意編程的細節問題
4.單元測試
用單元測試來保證代碼中的各個類與函數的正確性,從而保證整個項目的穩定性,這次測試運用VS2017搭載的測試環境來進行
1.首先要將全部私有的類和函數都改成共有的(private->public),而後對須要測試的函數或類建立單元測試,相似於C#中組件的調用。
建立成功則會自動添加對類的引用
若是沒有完成修改則會彈出以下提示信息
建立好單元測試後,就能對指定函數或類進行測試了,下面對該項目中的Solve()函數進行測試,具體測試代碼以下:
接下來,判斷函數是否知足測試的代碼
觀察測試結果,注意提示信息
出現錯誤,找出緣由,對代碼進行修改後,繼續測試,直到代碼準確無誤
顯示正確信息,則函數經過單元測試,後對其餘函數或類進行測試,操做步驟類似,修改測試條件便可.
該項目的全部函數都經過測試
單元測試問題:
1.沒有將類和函數改爲public就建立單元測試,致使一直出現錯誤信息
2.對函數的測試,沒有知足全部出現的狀況,只是簡單的測試
3.代碼的規範性對單元測試的影響很大
5.基本操做(斷點和監視器的使用)
斷點和監視器的使用對於程序的調試有着很重要的做用,能夠很快很準確的找出程序的錯誤緣由和出現錯誤的位置,從而根據調試的結果去從新修改程序,知足程序的正確性。
斷點使用方法
鼠標點擊窗體左邊緣,造成一個紅色的一點便可
而後點擊調試圖標或按F5就能開始對程序的調試了
調試過程當中會用到這樣的一個調試框,經過逐語句圖標使程序一句一句運行,達到調試的效果。觀察變量的值是否知足程序設計的要求,找到出現問題的緣由。
監視器的使用方法
對須要一直觀察的變量,能夠經過添加監視的方式,更好的到達調試的效果
隨着程序的執行,監視的變量則會一直處於監視的狀態,來觀察其值的變化
條件斷點的使用
可以更加快捷的達到程序員須要看到的結果,從而更快的判斷程序是否合理,或者找到錯誤的緣由
基本操做的問題:
1.斷點位置的標記的合理性存在問題,須要不斷實踐,熟練掌握方法
2. 準備觀察,調試過程當中變量值的變化則是調試的關鍵
6.迴歸測試
迴歸測試是指修改了舊代碼後,從新進行測試以確認修改沒有引入新的錯誤或致使其餘代碼產生錯誤。自動迴歸測試將大幅下降系統測試、維護升級等階段的成本。
該項目中,在以前的單元測試過程,就運用到了迴歸測試,修改源代碼以後,對其從新進行單元測試,而且修改後的代碼仍然要知足單元測試的正確性,達到迴歸測試的目的
迴歸測試問題:
1.養成修改代碼以後,就對其從新進行單元測試的習慣,將程序效能優化的修改纔是所須要的
7.效能分析
這次的效能分析運用了VS2017自帶的性能探查器
選擇CPU使用率做爲此項目的分析目標
以後就能夠對代碼進行效能分析了,具體執行圖以下
還可查看更爲詳細的效能分析報告
效能分析會幫助程序員從機器的運行角度方面去思考程序的運行效率,對程序的優化有着重要做用
8.提交代碼
在完成項目的源代碼與單元測試工做之後,便可將代碼上傳到Github上,在最初的文件夾目錄中打開Git
在使用該命令前,請確保全部本地的改動都已經add並commit了。能夠用
git status來檢查:
若出現這樣的效果圖就能夠執行 git push命令了,將程序提交到Github中
輸入本身的Github的帳號密碼就能夠成功的完成提交了
在完成 push 後,咱們就能夠開始向源倉庫(即阿超的倉庫)發起 Pull Request(指發起請求給倉庫貢獻代碼)。打開你 Fork 後的項目主頁,如圖所示,點擊按鈕New pull request
此時點擊 Create pull request
便可發起請求。等待倉庫主人阿超經過審覈後,你的代碼就能夠成功合併進阿超的倉庫,至此就完成了整個教程。
請求結果以下圖:
感悟總結:
呼呼,此次的做業是真的麻煩呀,代碼已經很久沒敲過了,有點生疏了,數據結構的知識也有點忘記了,而後就是各類翻書找資料,終於把此次的做業作完了,~~ 可是仍是有不少收穫的,第一次進行這麼全面的去完成一個小項目,學會了Github的使用,對代碼進行單元測試,迴歸測試,效能分析,對程序的仔細調試等等,更深刻的瞭解了軟件工程這一專業並不僅是簡單的敲代碼,而是一個工程項目,須要計劃明確,合理分工才能作出滿意的產品。
發現Github還有不少其餘大佬分享的源代碼,值得去借鑑學習,~~ 下次做業繼續加油咯~