1、項目Coding.net原碼倉庫地址:https://git.coding.net/caoying/Teamwork.git前端
隊員:java
盧琪:2016011986git
曹瀅:2016012102web
2、PSP表格之時間規劃算法
PSP編程 |
任務內容小程序 |
計劃時間(min)後端 |
Planning網絡 |
計劃架構 |
30 |
Estimate |
估計這個任務須要多少時間,並規劃大體工做步驟 |
30 |
Development |
開發 |
2880 |
Analysis |
需求分析 |
30 |
Design Spec |
生成文檔 |
40 |
Design Review |
設計複審 |
20 |
Coding Standard |
代碼規範 |
10 |
Design |
具體設計 |
40 |
Coding |
具體編碼 |
2000 |
Code Review |
代碼複審 |
30 |
Test |
測試 |
30 |
Reporting |
報告 |
180 |
Test Report |
測試報告 |
30 |
Size Measurement |
計算工做量 |
20 |
Postmortem & Process Improvement Plan |
過後總結,並提出過程改進計劃 |
30 |
3、接口設計介紹
Information Hiding, Interface Design, Loose Coupling
信息隱藏(Information Hiding)
信息隱藏是指在設計和肯定模塊時,使得一個模塊內包含的特定信息(過程或數據),對於不須要這些信息的其餘模塊來講,是不可訪問的。
接口設計(Interface Design)
接口泛指實體把本身提供給外界的一種抽象化物(能夠爲另外一實體),用以由內部操做分離出外部溝通方法,使其能被內部修改而不影響外界其餘實體與其交互的方式。
鬆耦合(Loose Coupling)
鬆耦合系統一般是基於消息的系統,此時客戶端和遠程服務並不知道對方是如何實現的。客戶端和服務之間的通信由消息的架構支配。只要消息符合協商的架構,則客戶端或服務的實現就能夠根據須要進行更改,而沒必要擔憂會破壞對方。
4、計算模塊接口的設計及實現(獨立完成)
1.類和函數的組成及關係
咱們設計了一些函數,例如生成只含加減號的四則運算還有包括加減乘除的四則運算,還能夠控制括號的有無,生成題目的時候就有對這些函數的調用
2.函數流程圖
4.算法的關鍵及獨到之處
咱們的獨到之處是界面模塊簡潔、功能齊全,算法易懂易理解。
5、計算模塊接口的性能改進
1.性能改進思路及時間花費
爲確保軟件知足或超過設計的指望值,有必要分析應用程序的性能以發現潛在的問題。這個過程被稱爲「性能分析」。它包括檢查應用程序以確保每一個組件有效地工做,並根據設計密切注視處理器的使用、網絡和系統服務、存儲和輸入/輸出(I/O)。
在運行代碼的性能分析中,咱們發現資源回收不徹底。通過各類調試,咱們發現是輸入輸出流的關係,因此咱們關閉輸出流、修改了代碼。整個過程花費了接近三個小時。
2.性能分析圖展現及程序中消耗最大函數
展現圖:
程序中消耗最大的函數無疑是包含過程最多、工程量最大的函數Calculate。
6、單元測試展現(展現出項目部分單元測試代碼,並說明測試的函數,構造測試數據的思路。並將單元測試獲得的測試覆蓋率截圖,發表在博客中。只須要測試命令行部分,且該部分覆蓋率到90%以上。)
1.單元測試代碼及函數
單元測試的代碼:(這裏就以算分這個類爲例,其他測試相似)
public class CoreTest extends TestCase { public void testNewExpSome() { Core.newExpSome(true, 50, 1, 3); } public void testNewExpAll() { Core.newExpAll(false, 50, 1, 3); } public void testDivideExactly() { Core.divideExactly(48, 8,5); } }
單元測試的函數:(這裏就以算分這個類爲例,其他測試相似)
2.構造測試數據的思路
咱們的思路是從要測試的對象出發:首先,咱們有一個生成加減乘除類、有一個能夠計算式子並返回結果的類、有一個判斷優先級的類;接下來咱們就要對它們測試。其次咱們還有GUI窗口,所以也要進行測試。
3.測試覆蓋率截圖
在同窗的幫助下,使得咱們團隊的測試覆蓋率達到了97%。以下圖
7、異常處理說明(詳細介紹每種異常的設計目標。每種異常都要選擇一個單元測試樣例發佈在博客中,並指明錯誤對應的場景)
1.輸入數判斷是否超範圍
這裏用try——catch方法來捕獲異常:
try { n = Integer.parseInt(n.getText()); if (n<0 || n > 10000) { n.setText("n不在範圍內,需重輸"); return; } flag0 = 1; } catch (Exception a) { n.setText("n異常,需重輸"); }
2.文件處理異常
這裏一樣用try——catch方法來捕獲異常:
try { Ffile = new PrintStream("result.txt"); System.setOut(Ffile); } catch (Exception e) { System.out.println("文件生成錯誤"); }
8、界面設計過程(詳細介紹界面模塊是如何設計的,並寫一些必要的代碼說明解釋實現過程)(獨立完成)
1.設計思路
咱們要設計各個界面的GUI,就要弄清楚分幾個界面、各個界面要包含哪些組件、要實現什麼具體的功能。因此咱們根據分析,有這些:首頁GUI設計,分爲兩塊,出題和作題、出題界面GUI的設計、答題界面GUI的設計及文件上傳界面GUI的設計。
2.實現過程
首頁界面GUI代碼:
static class Hello extends JPanel { JLabel title = new JLabel("歡迎來到四則運算小程序!"); JLabel l = new JLabel(); JButton timu = new JButton("生成題目"); JButton finish = new JButton("完成題目");
出題界面GUI代碼:
static class InMakeExp extends JPanel{ JLabel timunum = new JLabel("題目數量"); JLabel timulower = new JLabel("數值的下界範圍"); JLabel timuupper = new JLabel("數值的上界範圍"); JLabel most = new JLabel("運算符最多個數"); JCheckBox chenchu = new JCheckBox("乘除法",false); JCheckBox bracket = new JCheckBox("括號",false); JButton ok = new JButton("提交");<br> JTextField num = new JTextField(10); <br> JTextField lower = new JTextField(10); <br> JTextField upper = new JTextField(10); <br> JTextField most_ = new JTextField(10);
答題界面GUI代碼:
timu = new JLabel("題目:"); timu.setSize(100, 40); timu.setLocation(650, 100); l.add(timu); timu.setVisible(false); daan = new JLabel("答案:"); daan.setSize(100, 40); daan.setLocation(650, 160); l.add(la22); daan.setVisible(false); question = new JTextArea(); question.setSize(150, 30); question.setLocation(700, 100); l.add(question); question.setVisible(false); answer = new JTextArea(); answer.setSize(70, 30); answer.setLocation(700, 160); l.add(answer); answer.setVisible(false); tijiao= new JButton("提交"); tijiao.addActionListener(this); tijiao.setSize(70, 30); tijiao.setLocation(780, 160); tijiao.setFont(new Font("Dialog", 1, 14)); l.add(next); tijiao.setVisible(false); }
文件上傳界面GUI代碼:
shangchuan= new JButton("上傳文件"); shangchuan.addActionListener(this); shangchuan.setFont(new Font("Dialog", 1, 18)); shangchuan.setSize(120, 30); shangchuan.setLocation(515, 140); l.add(upload);
9、界面模塊與計算模塊的對接(詳細地描述UI模塊的設計與兩個模塊的對接,並截圖實現的功能)(獨立完成)
1.對接描述
咱們GUI界面與計算模塊的對接是經過獲取參數,調用方法來實現的。出題時,將題目寫入文件,而後文件下載到本地。作題時,上傳題目後,將題目和答案封裝到result集合中。
2.功能截圖
首頁:
出題界面:
答題界面:
文件上傳截圖:
生成題目截圖:
作題判斷結果:
10、結對過程描述及合照
和曹瀅同窗結對打代碼是一件使人開心的事,雖然咱們倆對java都不是特別瞭解,可是咱們互相陪伴互相鼓舞,也是完成了這份做業。請教了室友呂曉真同窗,原本我和曹瀅同窗準備作先後臺網頁版的,可是請教過周圍一些同窗,發現咱們倆都比較傾向於前端,然後端代碼不是很熟悉,沒法作到與前臺緊密結合,也很抱歉曹瀅同窗已經完成一份前臺樣式代碼了,因此咱們改戰GUI。
合照:
圖左是我,圖右是曹瀅同窗~
11、結對編程的優缺點(同時指出結對的每個人的優勢和缺點在哪裏 (至少三個優勢和一個缺點))
結對編程的優勢:1.兩我的有商有量,能夠各自分擔項目的一半;
2.兩我的互相學習,能夠相互鼓勵增長彼此信心;
3.兩我的更有動力,能夠促進各自寫代碼的效率。
結對編程的缺點:1.兩我的商量可能會出現意見有分歧;
2.兩我的分開完成項目的一部分,可能會致使事倍功半,好比咱們以前作web項目卻中途進行不下去了;
3.兩我的之中有一個更厲害的,那麼另外一人可能會產生依賴、付出也較少。
個人隊友曹瀅同窗的優勢:1.爲人和藹,易溝通;2.前端技術掌握的好,善於學習;3.作事認真負責 缺點:對後端java不是特別熟悉
個人優勢:1.易於溝通;2.認真學習;3.虛心請教。 缺點:對技術方面掌握的很差;缺少耐心;有時候碰到困難會不知道怎樣解決
12、總結與反思
經過此次的結對項目,讓我清晰地體會到本身的不足,還有不少地方欠缺,但願在從此的學習中可以有所提高!
PSP |
任務內容 |
實際完成時間(min) |
Planning |
計劃 |
60 |
Estimate |
估計這個任務須要多少時間,並規劃大體工做步驟 |
60 |
Development |
開發 |
3000 |
Analysis |
需求分析 |
30 |
Design Spec |
生成文檔 |
60 |
Design Review |
設計複審 |
30 |
Coding Standard |
代碼規範 |
20 |
Design |
具體設計 |
50 |
Coding |
具體編碼 |
2100 |
Code Review |
代碼複審 |
40 |
Test |
測試 |
50 |
Reporting |
報告 |
185 |
Test Report |
測試報告 |
35 |
Size Measurement |
計算工做量 |
30 |
Postmortem & Process Improvement Plan |
過後總結,並提出過程改進計劃 |
40 |