201571030310/201571030329《小學四則運算訓練軟件》結對項目報告
一.項目源碼。
Github地址:https://github.com/lucky6991/SoftWareTest/tree/master/SoftWareTest3
二.項目報告。
1.需求分析:
(1)由計算機從題庫文件中隨機選擇20道加減乘除混合算式,用戶輸入算式答案,程序檢查答案是否正確,每道題正確計5分,錯誤不 計分,20道題測試結束後給出測試總分;
(2)題庫文件可采用實驗二的方式自動生成,也可以手工編輯生成,文本格式如下:
(3)程序為用戶提供三種進階四則運算練習功能選擇:百以內整數算式(必做)、帶括號算式、真分數算式練習;
(4)程序允許用戶進行多輪測試,提供用戶多輪測試分數柱狀圖,示例如下:
(5)程序記錄用戶答題結果,當程序退出再啟動的時候,可為用戶顯示最後一次測試的結果,並詢問用戶可否進行新一輪的測試;
(6)測試有計時功能,測試時動態顯示用戶開始答題後的消耗時間。
(7)程序人機交互界面是GUI界面(WEB頁面、APP頁面都可),界面支持中文簡體。
2.軟件設計:
(1)設計流程圖:
(2)設計類圖
1> ReadFile類是讀取所有文件,將生成的算式全部讀出來,以棧的形式放入數組內;
2> Fraction類是關於分數的計算,分為真分數和假分數;
3> Calculate類是百內整數的加減乘除運算;
4> Textview就是顯示最終運算結果,以及顯示分數,計時等功能。
(3)核心代碼:
1>讀取生成的文件:
2>分數的運算:
public int getNumerator()
{
return c;
}
public int getDinominator()
{
return d;
}
public void selfTrim()
{
int maxCommon=commonDivisor(c,d); //求出兩個數的最大公約數。
c=c/maxCommon; //分式為最簡。
d=d/maxCommon;
//整理正負號。
if((c>0&&d<0)||(c<0&&d<0))
{
c=-c;
d=-d;
}
}
public String toString() //重寫tostring().
{
if(c==0||d==1) //分母為1 直接輸出分子.
{
return Integer.toString(c);
}
return Integer.toString(c)+"/"+Integer.toString(d); //輸出c/d.
}
//----- plus
public Fraction minus(Fraction f2)
{
int newNumerator=c*f2.getDinominator()-d*f2.getNumerator();
int newDinominator=d*f2.getDinominator();
int maxCommon=commonDivisor(newNumerator,newDinominator);
return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);
}
//---- minus
public Fraction plus(Fraction f2)
{
int newNumerator=c*f2.getDinominator()+d*f2.getNumerator();
int newDinominator=d*f2.getDinominator();
int maxCommon=commonDivisor(newNumerator,newDinominator);
return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);
}
//----- mutiply
public Fraction multiply(Fraction f2) //兩個分數相乘。
{
int newNumerator=c*f2.getNumerator();
int newDinominator=d*f2.getDinominator();
int maxCommon=commonDivisor(newNumerator,newDinominator);
return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);
}
//----- divide
public Fraction divide(Fraction f2)
{
if(f2.getNumerator()==0)
{
System.out.println("0不能做除數!");
System.exit(0);
}
Fraction result=new Fraction(c,d);
return result.multiply(new Fraction(f2.getDinominator(),f2.getNumerator()));
}
//計算2個數的最大公約數。按絕對值計算。
(4)運行結果:
測試結果統計:
(5)本次設計的PSP:
PSP2.1 |
任務內容 |
計劃共完成需要的時間(天) |
實際完成需要的時間(天) |
Planning |
計劃 |
9 |
14 |
Estimate |
估計這個任務需要多少時間,並規劃大致工作步驟 |
0.5 |
1.5 |
Development |
開發 |
9 |
10.5 |
Analysis |
需求分析 (包括學習新技術) |
1 |
0.5 |
Design Spec |
生成設計文檔 |
0.5 |
0.5 |
Design Review |
設計復審 (和同事審核設計文檔) |
0.5 |
0.5 |
Coding Standard |
代碼規範 (為目前的開發制定合適的規範) |
0.5 |
0.5 |
Design |
具體設計 |
1 |
1 |
Coding |
具體編碼 |
4 |
6 |
Code Review |
代碼復審 |
1 |
1 |
Test |
測試(自我測試,修改代碼,提交修改) |
0.5 |
0.5 |
Reporting |
報告 |
1.5 |
1.25 |
Test Report |
· 測試報告 |
0.5 |
0.5 |
Size Measurement |
計算工作量 |
0.5 |
0.25 |
Postmortem & Process Improvement Plan |
· 事後總結 ,並提出過程改進計劃 |
0.5 |
0.5 |
(6)請使用漢堡評價法給你的小夥伴一些點評。
我的小夥伴很認真,對待每一件事都有一個積極的態度,能很積極主動的和我交流意見,提出他的想法與觀點,在本次項目開發中他主要負責計算器和分數統計,能夠很認真的做開發,對我設計界面開發和計時器的設計提出了很多建議,我倆做了充分的交流和研究,最終分析利弊,用更完善的方式完成了這次的作業,我們互相刪減代碼中的冗余部分;和他合作我感覺到很越快,我們的合作很成功,我也期待下次和他繼續合作開發項目。在此過程中我們也遇到很多問題,但是我們都沒有推卸責任,而是積極探討、一起解決,解決問題後兩個人就特別激動。
(7)結對編程真的能夠帶來1+1>2的效果嗎?通過這次結對編程,請談談你的感受和體會。
通過本次項目,我體會到結對編程真的能夠帶來1+1>2的效果,本次項目的規模相比於上一次大了不少。所以結隊編程的好處也就是提高了編碼和效率,減輕了工作量;也能夠更好地了解他人的想法和思路,對於自己做程序開發也是有很大的積極作用,而且當自己一個人遇到困難的時候,很容易輕易放棄。兩個人一起編程,就會感覺不到編程的枯燥與乏味,反而是很輕松,能彼此討論自己想法的過程。
201571030310/201571030329《小學四則運算訓練軟件》結對項目報告