软件测试技术-随堂练习01答案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

随堂练习011.FindBugsA.查看FindBugs发现的问题,一共有几类问题,各是什么含义?将这几类问题翻译成中文;答:一共有以下三种类型的问题:1.Bug:InvocationoftoStringoncombinationinsolver.Matrix.main(String[])ThecodeinvokestoStringonanarray,whichwillgenerateafairlyuselessresultsuchas[C@16f0472.ConsiderusingArrays.toStringtoconvertthearrayintoareadableStringthatgivesthecontentsofthearray.中文:在组合代码调用toString数组,这将产生一个相当无用的结果。考虑使用Arrays.toString方法将数组转化成可读的字符串。2.Bug:solver.Matrix.compute()concatenatesstringsusing+inaloopThemethodseemstobebuildingaStringusingconcatenationinaloop.Ineachiteration,theStringisconvertedtoaStringBuffer/StringBuilder,appendedto,andconvertedbacktoaString.Thiscanleadtoacostquadraticinthenumberofiterations,asthegrowingstringisrecopiedineachiteration.BetterperformancecanbeobtainedbyusingaStringBuffer(orStringBuilderinJava1.5)explicitly.中文:这个方法似乎是建立在一个循环中使用连接字符串。在每个迭代中,字符串转换为StringBuffer/StringBuilder,附加到,转换回一个字符串。这可能导致成本数量的二次迭代,在每个迭代字符串复制。可以获得更好的性能通过使用StringBuffer显式(或StringBuilderJava1.5中)。3.Bug:Unreadfield:gui.MainWindow.m_gameOutputThisfieldisneverread.Considerremovingitfromtheclass.中文:gui.MainWindow.m_gameOutput这个属性没有被读。这个字段是不会被程序读的。考虑把它从类中移除。B.如何解决FindBugs指出的问题?请修改Sudoku程序,以改正所有FindBugs指出的问题。注意:同类错误仅需记录一次修改思想即可。答:1.使用Arrays.toString将数组转换为字符串。2.将String类型的该变量定义为StringBuffer类型的,并在循环体中用append()方法替代+操作。3.通过”查找”找出对应的属性的所有代码,并注释\删除。(或者调用print方法输出该属性)2.Junit源程序:packagesale;publicclassSaleMachine{privateintcountOfBeer,countOfJuice,countOfFiveCents,countOfOneDollar;privateString[]typeOfGoods={Beer,Juice};privateStringresultOfDeal;publicSaleMachine(){initial();}publicvoidinitial(){//默认售货机countOfBeer=3;countOfJuice=3;countOfFiveCents=3;countOfOneDollar=3;}publicSaleMachine(intfiveCents,intoneDollar,intnumOfBeer,intnumOfOrange)//带参数的初始化售货机{countOfFiveCents=fiveCents;countOfOneDollar=oneDollar;countOfBeer=numOfBeer;countOfJuice=numOfOrange;}publicStringcurrentState(){//返回当前售货机状态Stringstate=库存\n+啤酒:+countOfBeer+\n+橙汁:+countOfJuice+\n+五角硬币:+countOfFiveCents+\n+一元硬币:+countOfOneDollar;returnstate;}publicStringbuy(Stringtype,intmoney)//用户购买的方法。type是用户选择的产品,money是用户投币种类{if(money==50)//如果用户投入5角钱{if(type.equals(typeOfGoods[0]))//如果用户选择啤酒{if(countOfBeer0)//如果还有啤酒{countOfBeer--;countOfFiveCents++;resultOfDeal=请取出饮料;returnresultOfDeal;}else{resultOfDeal=目前该饮料已经售完;returnresultOfDeal;}}elseif(type.equals(typeOfGoods[1]))//用户选择橙汁{if(countOfJuice0){countOfJuice--;countOfFiveCents++;resultOfDeal=请取出饮料;returnresultOfDeal;}else{resultOfDeal=目前该饮料已经售完;returnresultOfDeal;}}else{resultOfDeal=目前不提供该饮料;returnresultOfDeal;}}elseif(money==100)//如果用户投入一元钱{if(countOfFiveCents0)//如果售货机有零钱{if(type.equals(typeOfGoods[0])&&countOfBeer0)//如果用户选择啤酒而且还有啤酒{countOfBeer--;countOfFiveCents--;countOfOneDollar++;resultOfDeal=请取饮料,并取回找钱;returnresultOfDeal;}elseif(type.equals(typeOfGoods[1])&&countOfJuice0)//如果用户选择橙汁而且还有橙汁{countOfJuice--;countOfFiveCents--;countOfOneDollar++;resultOfDeal=请取饮料,并取回找钱;returnresultOfDeal;}else{if(type.equals(typeOfGoods[0])&&countOfBeer=0){resultOfDeal=目前该饮料已经售完;returnresultOfDeal;}elseif(type.equals(typeOfGoods[1])&&countOfJuice=0){resultOfDeal=目前该饮料已经售完;returnresultOfDeal;}else{resultOfDeal=目前不提供该饮料;returnresultOfDeal;}}}else{resultOfDeal=对不起,目前不能找钱,请投5角硬币;returnresultOfDeal;}}resultOfDeal=请投5角或者1元的硬币;returnresultOfDeal;}}测试程序以下测试场景均基于上述程序:测试场景:投币1元购买橙汁三次,然后投币1元购买啤酒三次。预期结果:显示“对不起,目前不能找钱,请投5角硬币”函数代码:publicvoidtest_NoCoin(){SaleMachinesm=newSaleMachine();assertEquals(sm.buy(orange,100),请取饮料,并取回找钱);assertEquals(sm.buy(orange,100),请取饮料,并取回找钱);assertEquals(sm.buy(orange,100),请取饮料,并取回找钱);assertEquals(sm.buy(beer,100),对不起,目前不能找钱,请投5角硬币);}测试结果:通过测试场景:投币1元,购买可乐预期结果:显示“目前不提供该饮料”函数代码:publicvoidtest_Cola(){//售货机有5角,投币1元,选择非啤酒非橙汁SaleMachinesm=newSaleMachine();assertEquals(sm.buy(Cola,100),目前不提供该饮料);}测试结果:通过测试场景:投币5块,购买橙汁预期结果:显示请投5角或者1元的硬币函数代码:publicvoidtest_500orange(){//售货机没有啤酒剩余,用户投币5角,选择啤酒SaleMachinesm=newSaleMachine();assertEquals(sm.buy(orange,500),请投5角或者1元的硬币);}测试结果:通过测试场景:投币1元购买啤酒一次预期结果:显示“请取饮料,并取回找钱”函数代码:publicvoidtest_50Beer3(){//测试连续买三次啤酒每次投币5角SaleMachinesm=newSaleMachine();assertEquals(sm.buy(beer,50),请取饮料,并取回找钱);}测试结果:通过测试场景:投币5角购买啤酒四次预期结果:显示“目前该饮料已经售完”函数代码:publicvoidtest_50Beer3(){//测试连续买三次啤酒每次投币5角SaleMachinesm=newSaleMachine();assertEquals(sm.buy(beer,50),请取出饮料);assertEquals(sm.buy(beer,50),请取出饮料);assertEquals(sm.buy(beer,50),请取出饮料);assertEquals(sm.buy(beer,50),目前该饮料已经售完);}测试结果:通过测试场景:初始化五角/一元硬币/啤酒/橙汁都为4个,投币50,购买5次橙汁预期结果:显示“请取出饮料”*4+目前该饮料已经售完函数代码:publicvoidtest_50Orange4(){//售货机没有啤酒剩余,用户投币5角,选择啤酒SaleMachinesm=newSaleMachine(4,4,4,4);assertEquals(sm.buy(orange,50),请取出饮料);assertEquals(sm.buy(orange,50),请取出饮料);assertEquals(sm.buy(orange,50),请取出饮料);assertEquals(sm.buy(orange,50),请取出饮料);assertEquals(sm.buy(orange,50),目前该饮料已经售完);}测试结果:通过截图:

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功