嘀嘀嘀—— 倒車!請注意!倒車!請注意! git
Bilibili:非職業天使 戰網國服:圖南#51221 Steam:屍體A github
前排廣告君表示要辭職了!!! 這個up根本不更新還處處發廣告! web
題目要求編程
任務分配小程序
(點♂擊♂名♂字♂打♂開♂鏈♂接)數組
修改建議:安全
若是想細分「不合法」的條件就應該sum爲一類,max爲一類。sum裏包括輸入不爲正和輸入太大;max包括輸入不爲正。否則合併在一塊兒你們都是不合法,寫成交叉數學邏輯上沒錯,可是不符合邏輯習慣。app
順便max也可加入「不能過大」的條件。小學數學不須要太多大數,萬之內就足夠了。ide
1 public class MainActivityTest { 2
3 @Test//動態處理運算符數組並返回checked值
4 public void getOperatorArray() { 5 assertEquals(true,new MainActivity().getOperatorArray(true,true,true,true)); 6
7 assertEquals(true,new MainActivity().getOperatorArray(true,true,true,false)); 8 assertEquals(true,new MainActivity().getOperatorArray(true,true,false,true)); 9 assertEquals(true,new MainActivity().getOperatorArray(true,false,true,true)); 10 assertEquals(true,new MainActivity().getOperatorArray(false,true,true,true)); 11
12 assertEquals(true,new MainActivity().getOperatorArray(true,true,false,false)); 13 assertEquals(true,new MainActivity().getOperatorArray(true,false,true,false)); 14 assertEquals(true,new MainActivity().getOperatorArray(false,true,true,false)); 15 assertEquals(true,new MainActivity().getOperatorArray(true,false,false,true)); 16 assertEquals(true,new MainActivity().getOperatorArray(false,true,false,true)); 17 assertEquals(true,new MainActivity().getOperatorArray(false,false,true,true)); 18
19 assertEquals(true,new MainActivity().getOperatorArray(true,false,false,false)); 20 assertEquals(true,new MainActivity().getOperatorArray(false,true,false,false)); 21 assertEquals(true,new MainActivity().getOperatorArray(false,false,true,false)); 22 assertEquals(true,new MainActivity().getOperatorArray(false,false,false,true)); 23
24 assertEquals(false,new MainActivity().getOperatorArray(false,false,false,false)); 25 } 26
27 @Test//構建隨機式,成功則返回1,失敗則返回0
28 public void buildItems() { 29 assertEquals(1,new MainActivity().buildItems(10)); 30 assertEquals(0,new MainActivity().buildItems(-10)); 31 } 32 @Test//出錯邏輯處理,返回出錯類型並返回出錯類型,返回0則無錯,1爲max、sum輸入不合法,2爲sum太大,3爲沒選操做符
33 public void dealError() { 34 assertEquals(0,new MainActivity().dealError("10","10",true)); 35
36 assertEquals(1,new MainActivity().dealError("10","-10",true)); 37 assertEquals(1,new MainActivity().dealError("10","-10",false)); 38 assertEquals(1,new MainActivity().dealError("-10","10",true)); 39 assertEquals(1,new MainActivity().dealError("-10","10",false)); 40 assertEquals(1,new MainActivity().dealError("-10","-10",true)); 41 assertEquals(1,new MainActivity().dealError("-10","-10",false)); 42
43 assertEquals(2,new MainActivity().dealError("999999999","10",true)); 44 assertEquals(2,new MainActivity().dealError("999999999","10",false)); 45
46 assertEquals(3,new MainActivity().dealError("10","10",false)); 47 } 48 }
測試結果:全部測試用例都經過測試。截圖以下。函數
重要性 |
激活 |
級別 |
檢查項 |
總計 |
|||
命名 |
|||
重要 |
Y | 20 |
命名規則是否與所採用的規範保持一致? |
Y | 20 |
是否遵循了最小長度最多信息原則? |
|
重要 |
Y | 50 |
has/can/is前綴的函數是否返回布爾型? |
註釋 |
|||
重要 |
Y | 10 |
註釋是否較清晰且必要? |
重要 |
Y |
10 |
複雜的分支流程是否已經被註釋? |
N | 10 |
距離較遠的}是否已經被註釋? |
|
N | 10 |
非通用變量是否所有被註釋? |
|
重要 |
Y |
50 |
函數是否已經有文檔註釋?(功能、輸入、返回及其餘可選) |
Y | 10 |
特殊用法是否被註釋? |
|
聲明、空白、縮進 |
|||
N | 20 |
每行是否只聲明瞭一個變量?(特別是那些可能出錯的類型) |
|
重要 |
Y | 40 |
變量是否已經在定義的同時初始化? |
重要 |
Y | 40 |
類屬性是否都執行了初始化? |
Y | 20 |
代碼段落是否被合適地以空行分隔? |
|
Y |
20 |
是否合理地使用了空格使程序更清晰? |
|
Y | 20 |
代碼行長度是否在要求以內? |
|
N | 20 |
折行是否恰當? |
|
語句/功能分佈/規模 |
|||
Y | 20 |
包含複合語句的{}是否成對出現並符合規範? |
|
N | 20 |
是否給單個的循環、條件語句也加了{}? |
|
Y | 20 |
if/if-else/if-else if-else/do-while/switch-case語句的格式是否符合規範? |
|
Y | 40 |
單個變量是否只作單個用途? |
|
重要 |
Y | 20 |
單行是否只有單個功能?(不要使用;進行多行合併) |
重要 |
Y | 40 |
單個函數是否執行了單個功能並與其命名相符? |
Y |
20 |
操做符++和— —操做符的應用是否複合規範? |
|
規模 |
|||
重要 |
Y | 20 |
單個函數不超過規定行數? |
重要 |
Y | 100 |
縮進層數是否不超過規定? |
重要 |
Y | 100 |
是否已經消除了全部警告? |
重要 |
Y |
40 |
常數變量是否聲明爲final? |
重要 |
Y | 80 |
對象使用前是否進行了檢查? |
重要 |
N | 80 |
局部對象變量使用後是否被複位爲NULL? |
重要 |
Y | 70 |
對數組的訪問是不是安全的?(合法的index取值爲[0, MAX_SIZE-1])。 |
重要 |
Y | 20 |
是否確認沒有同名變量局部重複定義問題? |
Y | 20 |
程序中是否只使用了簡單的表達式? |
|
重要 |
Y |
20 |
是否已經用()使操做符優先級明確化? |
重要 |
Y |
20 |
全部判斷是否都使用了(常量==變量)的形式? |
Y | 80 |
是否消除了流程懸掛? |
|
重要 |
N | 80 |
是否每一個if-else if-else語句都有最後一個else以確保處理了全集? |
重要 |
Y | 80 |
是否每一個switch-case語句都有最後一個default以確保處理了全集? |
Y | 80 |
for循環是否都使用了包含下限不包含上限的形式?(k=0; k<MAX) |
|
重要 |
Y | 40 |
XML標記書寫是否完整,字符串的拼寫是否正確? |
Y | 40 |
對於流操做代碼的異常捕獲是否有finally操做以關閉流對象? |
|
Y | 20 |
退出代碼段時是否對臨時對象作了釋放處理? |
|
重要 |
Y | 40 |
對浮點數值的相等判斷是不是恰當的?(嚴禁使用==直接判斷) |
可靠性(函數) |
|||
重要 |
Y |
60 |
入口對象是否都被進行了判斷不爲空? |
重要 |
Y |
60 |
入口數據的合法範圍是否都被進行了判斷?(尤爲是數組) |
重要 |
Y |
20 |
是否對有異常拋出的方法都執行了try...catch保護? |
重要 |
Y |
80 |
是否函數的全部分支都有返回值? |
重要 |
Y | 50 |
int的返回值是否合理?(負值爲失敗,非負值成功) |
Y | 20 |
對於反覆進行了int返回值判斷是否認義了函數來處理? |
|
Y | 60 |
關鍵代碼是否作了捕獲異常處理? |
|
重要 |
N | 60 |
是否確保函數返回CORBA對象的任何一個屬性都不能爲null? |
重要 |
N | 60 |
是否對方法返回值對象作了null檢查,該返回值定義時是否被初始化? |
重要 |
N | 60 |
是否對同步對象的遍歷訪問作了代碼同步? |
重要 |
N | 80 |
是否確認在對Map對象使用迭代遍歷過程當中沒有作增減元素操做? |
重要 |
N | 60 |
線程處理函數循環內部是否有異常捕獲處理,防止線程拋出異常而退出? |
N | 20 |
原子操做代碼異常中斷,使用的相關外部變量是否恢復先前狀態? |
|
重要 |
Y | 100 |
函數對錯誤的處理是恰當的? |
可維護性 |
|||
重要 |
Y | 100 |
實現代碼中是否消除了直接常量?(用於計數起點的簡單常數例外) |
Y | 20 |
是否消除了致使結構模糊的連續賦值?(如a= (b=d+c )) |
|
Y | 20 |
是否每一個return前都要有日誌記錄? |
|
Y | 20 |
是否有冗餘判斷語句?(如:if (b) return true; else return false;) |
|
N | 20 |
是否把方法中的重複代碼抽象成私有函數? |
標題欄文字描述正確,背景顏色合理。
背景顏色與字體顏色和背景色相搭配.
佈局合理。控件,文字,線條位置,數量,顏色合理,跟總體風格搭配。
界面文字無錯別字。文字大小,顏色,位置一致。
控件大部分使用正常。
提示框設計合理,提示語友好,簡明。
列表型界面有上下滑動效果。
窗口適應差,不能橫向。
功能入口不明顯。
修改建議:
一、右上角菜單爲無效菜單,需刪除。
二、右下角生成按鈕圖標不明確,更像是「刷新」。建議按鈕上標註文字「生成題庫」。
三、界面窗口不能自動適應各類類型的屏幕。
四、應提示用戶點擊算式查看答案。
APP本體:點擊下載APP
測試環境:榮耀暢玩6X Android7.0
測試流程:安裝->運行->基本功能測試->異常處理測試
測試截圖:
進入APP:歡迎界面美觀,停留時間合理。
輸入非法字段,彈出提示。
題數過多,彈出提示。
生成題目
測試結果:
個人小夥伴果真超級厲害,很快就寫完了程序,並且還作出了界面,已經能夠發佈了~ 可是有一些細節須要處理。好比對「不合法」條件的理解,斷定條件之間有交叉;還有界面右上角無效菜單,右下角生成按鈕圖標不明確,界面窗口不能自動適應各類類型的屏幕,也沒提示用戶查看答案的方法。
還有最重要的是不能導出生成的題目。這應該在開發的最一開始就決定的。咱們的題意實際上是想給老師作一個程序,讓他們出題方便。可是個人小夥伴沒有考慮這一點,只完成了基本的功能,這樣只能讓學生本身下載app而後使用了。可是小學生怎麼可讓他們隨便玩手機呢!理想的狀況應該是導出一個.txt或者.doc,老師能夠再進行編輯,而後打印出來當卷子給學生使用。並且能夠把正確答案再單獨導出一份,方便老師批改卷子。
若是隻是這樣的app給學生使用的話,其實還能夠作成自測小程序,讓學生本身輸入算的答案,最後點擊提交,程序能夠對比答案,直接給出分數。
過此次做業,我對敏捷編程有了初步的認識和體驗。兩我的一塊兒可以互相監督,互相幫助。說來慚愧,代碼都是個人小夥伴獨立完成的,我只能看看,再研究研究是怎麼寫的。畢竟當初選修的Android課是全英文授課,沒聽懂就算了,本身也沒課後研究,如今有點想吃後悔藥了orz
原本做業中測試的本意是想鍛鍊咱們熟練掌握覆蓋標準和自動測試,可是最初咱們的程序沒有能測試的地方。整個功能的實現都在一個大類裏,並且咱們生成的隨機算式是沒辦法進行測試的。輸出是一個隨機的數,咱們怎麼可能肯定咱們的指望值呢。爲了可以測試,個人小夥伴又特地把程序大改了一遍,所有劃分紅小方法,設好了傳入參數和傳出參數,好讓我可以有測試的東西。
咱們一塊兒預定了研修室,改了一下午程序,後來又預定了一小時,最後總算是有點成果了。想一想其實若是準備工做充足,把程序的結構和功能提早設計明白,就沒這麼多麻煩事了。果真開發初期的工做真的很重要啊,大的方向把握好了才能走向成功的道路。我做爲領航員卻沒有準備好初期工做,是個人失誤。現在有了經驗教訓,之後必定不再犯這個錯誤了。
時間緊迫,做爲做業,咱們只能這樣把它提交了。可是做爲一個成品,它還須要更多的修改和完善。若是有機會,咱們能夠把它好好作完,並投入使用。