2016012084結對做業項目報告

倉庫:https://git.coding.net/librarian1/Operation_Generation_Validate.git 網站:http://ali.hellowood.com.cn:8089/ 出題作題都能實現,若是生成題目數量較多,會有一點延遲 隊友:馬越 http://www.cnblogs.com/mayue-/p/8768455.html ##目錄html

  • 需求分析
  • 接口設計方法
  • 計算模塊
    • 計算模塊接口設計與實現
    • 計算模塊接口性能改進
    • 計算模塊單元測試
    • 計算模塊異常處理說明
  • 界面模塊
    • 界面模塊設計
    • 界面與計算模塊對接
  • 結對
    • 結對過程
    • 結點優缺點
  • PSP展現

##需求分析 帶界面四則運算出題網頁程序前端

  • 基本功能: 定製出題要求: -n題目數量範圍1 ~ 10000 -m [lower] [upper] 設定題目數值的範圍(包括原始題目與運算過程當中全部中間結果的絕對值的數值範圍)下界參數範圍爲 1到100,上界參數範圍爲 50到1000 -o題目中最多有多少個運算符,默認爲1,範圍1 ~ 10,除非指定運爲1,不然每一個算式運算符大於等於2 -c題目中是否包含乘除法 -b題目中是否包含括號 運算過程當中不得出現小數,能夠出現負數。 生成result.txtgit

  • 作題功能: 不包括分數,但可能會出現負數與括號 在後臺解析題目; 將題目挨個順序展現,讓用戶答題; 用戶答題結束後,軟件可統計本次用戶的答題時長與答對題目的數量。算法

  • 附加功能 計時器express

##接口設計方法 Information Hiding信息隱藏編程

1972年,David Parnas 發表了一篇題爲《論將系統分解爲模塊的準則》的論文首次讓公衆注意到信息隱藏這一律念。 信息隱藏式結構程序設計與面向對象設計的基礎之一。在面向對象設計中,它又引出了封裝和模塊化的概念,並與抽象的概念緊密相關。 in Parnas's seminal 1972 paper On the Criteria to Be Used in Decomposing Systems into Modules, this dictum is expressed in terms of information hiding, and the terms cohesion and coupling are not used. 來自維基百科後端

這是論文on the criteria to be used in decomposing systems into modules summary的英文PDF 下載模塊化

信息隱藏是軟件的首要技術使命中格外重要的一種啓發式方法,由於它強調的就是隱藏複雜度。函數

loose coupling 鬆耦合性能

在電腦運算和系統設計中,一個鬆耦合的系統中的每個組件對其餘獨立組件的定義所知甚少或一無所知。子範圍包括類、接口、數據和服務之間的耦合。

作法: 將出題功能與作題功能設計爲2個類; 爲每個具體的出題參數設計一個接口,在生成題目的generation類中實現這些接口,而且對這個類進行封裝; 在設計中不寫入具體數字,而是設計常量; 避免循環調用,每個類的方法都儘可能封閉,不須要互相調用。 實現鬆耦合,接口能夠由具體類generation和validate直接實現,而不須要改變依賴類interface,使得軟件設計具備可擴展性

##計算模塊 ###計算模塊接口設計與實現

關鍵算法:

  • 作題算法

  • 出題算法 生成算子算符 —— 算結果並判斷合法——生成算式(加括號)——輸出

####如何使用調度場算法

  1. 先隨機生成一串算子(整數)和一串算符(按算符參數要求),存入兩個鏈表

算子:A B C D 算符:x y z

  1. 算結果並判斷合法 整數加減乘除,有優先級 逐步計算出結果,一旦過程出現分母爲零或小數,則跳出

A x B y C z D ####注意:這其中會出現A + B * C從左至右的運算,但以後輸出算式會是(A + B)* C

  1. 生成算式(加括號) 整數加減乘除 設置2個整型priority1 ,priority2 對算子串中先後兩個算子進行優先級判斷,+-爲低優先級0,×/爲高優先級1。 若是priority1 ,priority2 爲 01 那麼在兩端加括號,不然00 10 11則不加。

###計算模塊接口性能改進 ###計算模塊單元測試 用Junit4對generation類和validate類中每個方法進行單元測試,由於是第一次寫單元測試,因此一開始簡直毫無頭緒,後來決定用簡單的assert斷言來編寫測試,而且遵守了一部分單元測試的原則,即

Right. 結果是否正確.

Boundary. 主要是CORRECT 原則

Independent. 一個測試應只專一於一個函數,或一組函數.

  • validate類中doResult方法的單元測試 覆蓋率:100%

  • generation類中operation,operator,character,bracket方法的單元測試

  • operator類

  • operation類

###計算模塊異常處理說明

對於題目數量,數值範圍,運算符數量和題目要求輸入等四個接口分別設計了異常。 異常寫在了枚舉類enum裏面,而後在頁面輸入那些題目要求的時候會對每一個輸入框進行判斷,若是有異常會走後臺的方法輸出異常

  • EXCEPTION_TITEL_NUMBER
    未設置題目數量或題目數量不符合規定
  • EXCEPTION_NUMBER_RANGE 未設置數值範圍或數值範圍不符合規定
  • EXCEPTION_SIGN_NUMBER 未設置運算符數量或運算符數量不符合規定
  • EXCEPTION_SIGN_NUMBER 題目要求未提交

##界面模塊 我負責的是後端計算模塊的設計,命令行的實現和單元測試,界面模塊由馬越同窗負責。

###界面模塊設計

  • 定製作題

  • 計時器和展現題目

  • 判斷對錯和記錄

  • 展現正確答案

界面與計算模塊對接

兩個servlet

  • GenerationServlet類 ——負責出題作題 用表單將前臺的參數傳給generation類。而後生成String類型的字符串傳給servlet,在servlet中寫入的文件。
  • UploadServlet類 ——負責解析作題

##結對 ###結對過程 ###結對優缺點

  • 缺點 付出了兩我的的努力卻只獲得了一我的的生產力,在剛剛開始結對編程時的確如此,兩個同窗都各自寫各自的代碼,最後還要將對方的代碼再看一遍。 剛開始結對時,對於本身的設計都會更加自信,相似「若是我本身作速度會更快」,特別是後期若是出現什麼BUG,就會加大這種分歧。
  • 優勢, 我負責後端算法,馬越負責前端界面,兩個不一樣領域的人能夠互補學習,能產出更優秀的代碼。 兩人還可以從相互的交流中受益,一般能寫出更加高效的代碼。

隊友互評 馬越:

  • 作事果斷,行動力強
  • 比較浮躁 沒法集中注意力 我(唐禕琳):
  • 喜歡思考比較有挑戰的問題,不畏懼難題
  • 不喜歡求助

##PSP展現 任務內容 | 計劃共完成須要的時間(min) | 實際完成須要的時間(min) :- | :- | :- 計劃 |5 |5 · 估計這個任務須要多少時間,並規劃大體工做步驟 |5 |5 開發 | 782|1175 · 需求分析 (包括學習新技術) |60 |90 · 生成設計文檔 |10 |10 · 設計複審 (和同事審覈設計文檔) |2 |5 · 代碼規範 (爲目前的開發制定合適的規範) |2 |2 · 具體設計 |60 |90 · 具體編碼 | 480|540 · 代碼複審 |30 |60 · 測試(自我測試,修改代碼,提交修改) |120 |180 報告 |55 |37 · 測試報告 |40 |30 · 計算工做量 |5 |2 · 過後總結, 並提出過程改進計劃 |10 |5 ##總結與改進 對於這一次的項目,是在單純的寫程序的基礎上加上了測試和異常,還有用戶界面的實現,這些都是我之前不感興趣的內容,我總覺的過於簡單了,不如算法有趣,可是實踐才發現並不是如此,其實測試也須要優秀的代碼和思考,異常須要全面的考慮,界面須要有審美與用戶體驗的關注。

相關文章
相關標籤/搜索