軟件工程第二次結對做業

1.題目要求

可以自動生成四則運算練習題
能夠定製題目數量
用戶能夠選擇運算符
用戶設置最大數(如十之內、百之內等)
用戶選擇是否有括號、是否有小數
用戶選擇輸出方式(如輸出到文件、打印機等)
最好能提供圖形用戶界面(根據本身能力選作,以完成上述功能爲主)css

2.角色分配

駕駛員:武學澤
領航員:楊港
武學澤博客地址:http://www.javashuo.com/article/p-pticloxr-hz.htmlhtml

3.代碼

代碼地址:https://github.com/wuxuezeproject/-2java

4.關鍵函數測試

本次做業咱們主要採用Java編寫,主要分紅兩個部分git

(1)圖形化界面

圖形化界面的編寫也沒有太多的問題,測試的話能直接的肉眼就能看出來
惟一須要注意的就是監聽是否正確,也就是可否正確的交互
以下圖
github

當選中4個題的時候,就只出現了4個題,運算符也沒有出現乘法,也沒有出現小數,最大值也沒超過50.
經測試圖形化界面經過編程

(2)算式的生成

咱們把算式的定義爲了一個類,裏面包含了一些功能函數。
主要都是爲構建算式的一些函數
下面主要測試這些功能函數
因爲要實現對符號,小數,最大值,括號的控制
編寫的構造函數以下
數組

設計測試樣例
當輸入不一樣的初始值時,觀察類中的成員是否被賦予了正確的值
new test(10,2)表示最大值max=10,符號能夠取減號
如圖
函數

爲了便於檢測我又多設置了幾組數據
如圖工具

運行結果如圖post

接下來就是利用已經知道的初始條件,來生成算式,可是因爲生成的是隨機數,利用單元測試的話很複雜,因此直接觀察結果就比較容易
以下圖

將全部的條件都選上,最大值爲50。通過檢測上面的算式都符合邏輯,沒有出錯誤
爲了肯定正確我又多選了幾組測試
以下圖

下面的一次測試就有一點小瑕疵了,當我第一次選完20組數目的題時,我想改爲14組題,但我發現前14道題改變了,可是後六道題沒有變化,這裏應該清屏後再顯示的,就不會出現這個問題但影響不大

總的來講程序知足基本要求

5.代碼檢查表

功能模塊名稱 四則運算
審查人 楊港  審查日期 2019/5/2 
代碼名稱 四則運算 代碼做者 武學澤
文件結構
重要性       審查項 結論
                 頭文件和定義文件的名稱是否合理? 是 
  頭文件和定義文件的目錄結構是否合理? 是 
  版權和版本聲明是否完整? 是 
重要 頭文件是否使用了 ifndef/define/endif 預處理塊? 否 
  頭文件中是否只存放「聲明」而不存放「定義」
     
程序的版式
重要性       審查項 結論
  空行是否得體? 是 
  代碼行內的空格是否得體? 否 
  長行拆分是否得體? 否 
  「{」 和 「}」 是否各佔一行而且對齊於同一列?  
重要 一行代碼是否只作一件事?如只定義一個變量,只寫一條語句。
重要 If、for、while、do等語句自佔一行,不論執行語句多少都要加 「{}」。 是 
重要 在定義變量(或參數)時,是否將修飾符 * 和 & 緊靠變量名?註釋是否清晰而且必要? 否 
重要 註釋是否有錯誤或者可能致使誤解? 否 
重要 類結構的public, protected, private順序是否在全部的程序中保持一致? 否 
     
命名規則 
重要性       審查項 結論
重要 命名規則是否與所採用的操做系統或開發工具的風格保持一致? 是 
  標識符是否直觀且能夠拼讀? 是 
  標識符的長度應當符合「min-length && max-information」原則? 否 
重要 程序中是否出現相同的局部變量和所有變量? 否 
  類名、函數名、變量和參數、常量的書寫格式是否遵循必定的規則? 是 
  靜態變量、全局變量、類的成員變量是否加前綴? 否 
     
表達式與基本語句 
重要性       審查項 結論
重要 若是代碼行中的運算符比較多,是否已經用括號清楚地肯定表達式的操做順序? 是 
  是否編寫太複雜或者多用途的複合表達式?
重要 是否將複合表達式與「真正的數學表達式」混淆? 否 
重要 是否用隱含錯誤的方式寫if語句? 例如 是 
  (1)將布爾變量直接與TRUE、FALSE或者一、0進行比較。  
  (2)將浮點變量用「==」或「!=」與任何數字比較。  
  (3)將指針變量用「==」或「!=」與NULL比較。  
  若是循環體內存在邏輯判斷,而且循環次數很大,是否已經將邏輯判 否 
  斷移到循環體的外面? 是 
重要 Case語句的結尾是否忘了加break? 否 
重要 是否忘記寫switch的default分支? 否 
重要 使用goto 語句時是否留下隱患? 例如跳過了某些對象的構造、變量的初始化、重要的計算等。 否 
     
常量 
重要性       審查項 結論
  是否使用含義直觀的常量來表示那些將在程序中屢次出現的數字或字符串? 是 
  在C++ 程序中,是否用const常量取代宏常量? 否 
重要 若是某一常量與其它常量密切相關,是否在定義中包含了這種關係?
  是否誤解了類中的const數據成員?由於const數據成員只在某個對象 否 
  生存期內是常量,而對於整個類而言倒是可變的。 是 
     
函數設計 
重要性       審查項 結論
  參數的書寫是否完整?不要貪圖省事只寫參數的類型而省略參數名字。 否 
  參數命名、順序是否合理? 是 
  參數的個數是否太多? 是 
  是否使用類型和數目不肯定的參數? 否 
  是否省略了函數返回值的類型? 是 
  函數名字與返回值類型在語義上是否衝突? 否 
重要 是否將正常值和錯誤標誌混在一塊兒返回?正常值應當用輸出參數得到,而錯誤標誌用return語句返回。 是 
重要 在函數體的「入口處」,是否用assert對參數的有效性進行檢查? 否 
重要 使用濫用了assert? 例如混淆非法狀況與錯誤狀況,後者是必然存在的而且是必定要做出處理的。 否 
重要 return語句是否返回指向「棧內存」的「指針」或者「引用」? 是 
  是否使用const提升函數的健壯性?const能夠強制保護函數的參數、返回值,甚至函數的定義體。「Use const whenever you need」 否 
     
內存管理 
重要性       審查項 結論
重要 用malloc或new申請內存以後,是否當即檢查指針值是否爲NULL?(防止使用指針值爲NULL的內存) 否 
重要 是否忘記爲數組和動態內存賦初值?(防止將未被初始化的內存做爲右值使用) 否 
重要 數組或指針的下標是否越界? 否 
重要 動態內存的申請與釋放是否配對?(防止內存泄漏) 否 
重要 是否有效地處理了「內存耗盡」問題? 否 
重要 是否修改「指向常量的指針」的內容? 是 
重要 是否出現野指針?例如(1)指針變量沒有被初始化;(2)用free或delete釋放了內存以後,忘記將指針設置爲NULL。 否 
重要 是否將malloc/free 和 new/delete 混淆使用? 否 
重要 malloc語句是否正確無誤?例如字節數是否正確?類型轉換是否正 確? 是 
重要 在建立與釋放動態對象數組時,new/delete的語句是否正確無誤? 否 
     
C++ 函數的高級特性 
重要性       審查項 結論
  重載函數是否有二義性? 否 
重要 是否混淆了成員函數的重載、覆蓋與隱藏? 否 
  運算符的重載是否符合制定的編程規範? 否 
  是否濫用內聯函數?例如函數體內的代碼比較長,函數體內出現循環。 否 
重要 是否用內聯函數取代了宏代碼? 否 
     
類的構造函數、析構函數和賦值函數
重要性       審查項 結論
重要 是否違背編程規範而讓C++ 編譯器自動爲類產生四個缺省的函數: 否 
  (1)缺省的無參數構造函數;  
  (2)缺省的拷貝構造函數;  
  (3)缺省的析構函數;  
  (4)缺省的賦值函數。  
重要 構造函數中是否遺漏了某些初始化工做? 是 
重要 是否正確地使用構造函數的初始化表?
重要 析構函數中是否遺漏了某些清除工做? 否 
  是否錯寫、錯用了拷貝構造函數和賦值函數? 是 
重要 賦值函數通常分四個步驟:  
  (1)檢查自賦值;  
  (2)釋放原有內存資源;  
  (3)分配新的內存資源,並複製內容;  
  (4)返回 *this。是否遺漏了重要步驟?         是 
重要 是否正確地編寫了派生類的構造函數、析構函數、賦值函數?  
  注意事項:  
  (1)派生類不可能繼承基類的構造函數、析構函數、賦值函數。  
  (2)派生類的構造函數應在其初始化表裏調用基類的構造函數。  
  (3)基類與派生類的析構函數應該爲虛(即加virtual關鍵字)。  
  (4)在編寫派生類的賦值函數時,注意不要忘記對基類的數據成員從新賦值  
     
類的高級特性
重要性       審查項 結論
重要 是否違背了繼承和組合的規則? 否 
  (1)若在邏輯上B是A的「一種」,而且A的全部功能和屬性對B而言都有意義,則容許B繼承A的功能和屬性。  
  (2)若在邏輯上A是B的「一部分」(a part of),則不容許B從A派生,而是要用A和其它東西組合出B。  
     
其它常見問題 
重要性       審查項 結論
重要 數據類型問題:  
  (1)變量的數據類型有錯誤嗎? 否 
  (2)存在不一樣數據類型的賦值嗎? 存在
  (3)存在不一樣數據類型的比較嗎? 存在 
重要 變量值問題:  
  (1)變量的初始化或缺省值有錯誤嗎? 否 
  (2)變量發生上溢或下溢嗎? 否 
  (3)變量的精度夠嗎?        
重要 邏輯判斷問題:  
  (1)因爲精度緣由致使比較無效嗎?
  (2)表達式中的優先級有誤嗎? 無 
  (3)邏輯判斷結果顛倒嗎?         否 
重要 循環問題:  
  (1)循環終止條件不正確嗎? 正確 
  (2)沒法正常終止(死循環)嗎? 否 
  (3)錯誤地修改循環變量嗎? 否 
  (4)存在偏差累積嗎?         否 
重要 錯誤處理問題:  
  (1)忘記進行錯誤處理嗎? 是 
  (2)錯誤處理程序塊一直沒有機會被運行? 否 
  (3)錯誤處理程序塊自己就有毛病嗎?如報告的錯誤與實際錯誤不一致,處理方式不正確等等。 否 
  (4)錯誤處理程序塊是「馬後炮」嗎?如在被它被調用以前軟件已經出錯。 否 
重要 文件I/O問題:  
  (1)對不存在的或者錯誤的文件進行操做嗎? 否 
  (2)文件以不正確的方式打開嗎? 否 
  (3)文件結束判斷不正確嗎? 否 
  (4)沒有正確地關閉文件嗎? 否 
     

6.總結

此次做業仍是比較有意思,我感受難度也比較大,咱們此次採用的Java語言來開發,這是我第一次使用Java。雖然主要是武學澤在完成代碼部分的工做,可是我仍是學到了很多的東西,我以爲最難的部分也是最有趣的部分,就是圖形化界面的編寫,武學澤同窗仍是很厲害的,經過看他寫的代碼仍是瞭解到了本身的不足和缺點。也初步瞭解了Java,爲之後的工做打下了基礎。在最開始的時候咱們對於代碼的編寫產生了分歧,但最終成功解決了。經過此次做業,也讓我知道合做的強大,之前幾乎全部的代碼全是本身一我的想,一我的作,但合做的效率是真的高,並且能夠集思廣益,有更多的思路,也能夠在編碼是發現本身的錯誤,平時一我的編寫的話很難發現,尤爲是一些細小的錯誤,可是每每他人就很容易看出來,還能學習到不少新的東西。 總的來講,此次的做業的基本要求都完善了,可是有一個小缺點就是對算式答案的計算並非很正確,有一些錯誤的處理沒有作的很好,但我感受咱們就花了兩三天就作成這樣子已經很不錯了,此次實驗也然讓我瞭解了java的強大,也增強了我對Java的學習興趣。也認識到了團隊中每一個角色的重要性,每一個角色都是軟件開發過程當中不可缺乏的部分,收穫較大

相關文章
相關標籤/搜索