《高级软件工程》复习测验+答案 2.docx
- 文档编号:23657358
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:17
- 大小:38.99KB
《高级软件工程》复习测验+答案 2.docx
《《高级软件工程》复习测验+答案 2.docx》由会员分享,可在线阅读,更多相关《《高级软件工程》复习测验+答案 2.docx(17页珍藏版)》请在冰豆网上搜索。
《高级软件工程》复习测验+答案2
复习测验3
以下的问题会引用到一个假定的“加油站控制系统”(GSCS),它旨在帮助管理美国式的加油或服务站。
我们的加油站将提供两种基本的服务:
∙包含一个出售汽车配件的小商店,它至少有一台收银机,并由加油站的职员来操作。
∙包含多个加油泵,客户可以在这里停车,用信用卡支付然后加油。
客户也可以选择到配件商店的收银机交费或刷卡。
因此,GSCS系统主要有两类使用者:
一类是收银员,他们使用GSCS来记录汽车配件的销售情况。
收银员可以在GSCS中通过输入配件的类型和数量来计算总售价并完成交易。
另一类使用者是购买汽油的用户。
他们在加油泵和GSCS交互:
指明要加的汽油类型和数量,在加油泵或者收银机结帐,然后自己加油。
这个系统也需要和其他自动系统交互来实现它的功能。
例如,GSCS需要和信用卡公司的系统交互来处理刷卡支付的事务。
信用卡系统负责检查客户的帐户是否正常,能否支付相应的费用,并负责转帐到加油站。
虽然GSCS需要知道这些外部系统如何通知他们操作的成功与否,但这些的操作具体细节不在GSCS的考虑范围之内。
开发小组已经结束了系统的设计,开始编写代码。
1.Danielle,GSCS开发小组的领导者,决定强调共同软件指导原则的使用。
下面哪些说法最好的描述了当提供代码文档并且使代码具有可读性时,开发小组所获得的好处?
a.提供代码文档改善了代码的效率。
b.提供代码文档提供了设计模块的可追溯性。
c.提供代码文档改善了代码的组织。
d.a,b和c。
e.只有a和b。
f.只有b和c
2.下面哪些语句对函数使用引用传递一个变量的原则的描述是不正确的?
a.函数终止后变量的值的改变是需要的,变量的长度是小的。
b.函数终止后变量的值的改变是不需要的,变量的长度是小的。
c.函数终止后变量的值的改变是需要的,变量的长度是大的。
d.函数终止后变量的值的改变是不需要的,变量的长度是大的。
3.输入域是所有实数的函数用正整数、负整数和零来测试。
在所有的测试中,函数的行为是正确的。
“函数已经被完全测试并且行为将会是正确的”这个假设是安全的。
(回答TRUE或FALSE)
在下面的GSCS的程序片断中,识别违反好的编程方式的情况(如果有的话)。
在你的回答中使用下列选择:
(a)一般性原则
(b)有效率原则
(c)格式化原则
(d)提供文档原则
(e)无违反情况
4.voidPrintPartFile(){
/*打开parts.dat文件,把每一行打印到标准输出。
*/
/*关闭文件*/
ifstreamPartFile(“parts.dat”);
charline[100];
while(PartFile.getline(line,100))
cout< PartFile.close(); } 5.intValidateParts(PartList&parts,PartList&master){ /*测试有效性并且计数零件列表(parts)中的零件数。 */ /*如果一个列表parts中的零件不在主列表(master)中,*/ /*返回-1*/ /*如果列表parts中的所有零件都存在于主列表中,*/ /*返回列表parts中每个零件所含有的数量的和。 */ inttotal=0; for(inti=0;i if(! master.Exists(parts[i]))return-1; for(intj=0;j total+=parts[i].getquantity(); returntotal; } 6.constintMAXSALES=100000;/*存储的最大销售数目*/ constintMAXNAME=100;/*最大的名字的大小*/ structCashierRecord{ charname[MAXNAME];/*收银员的名字*/ floatsales[MAXSALES];/*收银员的销售额*/ intcount;/*在销售队列中存储的销售的数目*/ }Cashier; Cashiercashier1; /*SumSales求收银员的销售交易的和。 */ /*返回值是所有交易的总和。 */ floatSumSales(Cashierc){ floattotal;/*存储返回值的变量*/ inti;/*loopcounter*/ total=0; /*求销售交易的和*/ for(i=0;i total+=c.sales[i]; returntotal; } . . . intmain(){ Cashiercashier1; . . . SumSales(cashier1); . . . } 7.voidPrint(istream&is,ostream&os){ /*打印输入流(is)的每一行到输出流(os)。 */ charline[MAXLINE]; while(is.getline(line,MAXLINE)) os< } 8./*打印值数组中的每个值到单独的一行上*/ /*在值之后,打印总额到单独的一行上。 */ for(inti=0;i total+=values[i]; cout< cout<<“Total=“< 在GSCS代码评审的时候,下列错误被指出。 在每个代码片断上归类错误的类型。 9.intn; floatx[1000]; x[i]=(1-2/(n-1))*x[i-1]+2/(n-1)*x[i]; 在这个片断中,因为n是一个整数,2/(n-1)的商返回一个整数值。 a.边界错误 b.初始化错误 c.计算/精确度错误 d.只有b和c e.只有a和b f.上述都不是 10.List: : ~List(){ /*删除列表中所有的元素。 */ for(inti=1;i deletelist[i]; } 在这个片断中,列表的第一项(list[0])没有被删除。 a.初始化错误 b.提供文档错误 c.精确度错误 d.只有b和c e.只有a和b f.上述都不是 11.intlist[10]; for(inti=0;i<=10;i++)list[i]=i; 在这个片断中,循环包括了一个在list[10]上的操作,而list[10]不是数组的元素。 a.初始化错误 b.精确度错误 c.容量或溢出错误 d.a,b和c e.上述都不是 12.floatlist[100]; floatxrange=list[99]-list[0]; for(inti=0;i<100;i++) list[i]=(list[i]-list[0])/xrange; 在这个片断中,list[0]在第一次迭代之后被改变.数组执行完之后,数组中所有的元素都为0。 并且,没有对xrange的检查。 它可能计算到0从而引起被0除。 a.计算/精确度错误 b.初始化错误 c.容量或溢出错误 d.a,b和c e.上述都不是 13.给定下列断言: A1: (T是一个数组)&(T的长度为N)&(S是一个数组)&(S的长度是N) Aend: (T'是一个数组)&(T'长度是N)&(∀i,0≤i≤N,T'(i)=S(i)) a.数组$S$的值被赋给了数组$T’$. b.数组$T$的值被赋给了数组$S$. c.数组$S$的值被加到了数组$T’$的值上。 d.数组$T$的值被加到了数组$S$的值上。 e.以上都不是。 14.假设GSCS开发的主要目标是获得一个能够尽快显示给客户的工作系统。 最好选择的测试方法是: a.自底向上测试。 b.自顶向下测试。 c.Big-bang测试 d.a或b e.a或c GSCS的实现完成了,开发进入了测试阶段。 可能考考的话在下面类型中选几题 下图显示了GSCS系统的部件层次。 使用该图识别给定序列指示的测试策略。 “;”使用在测试集之间,每个测试集被表示成一个逗号分割的列表。 例如,序列{F,G};{B,F,G}意味着部件F和G先被测试,然后,部件B,F和G再被测试。 15.{J};{K};{I};{H};{G};{F};{B};{C};{D};{E};{A};{A,B,C,D,E,F,G,H,I,J,K} a.自顶向下测试 b.自底向上测试 c.三明治测试 d.Big-bang测试 e.改良的自顶向下测试 16.{A};{A,B,C,D,E};{A,B,C,D,E,F,G,H,I,J,K} a.自顶向下测试 b.自底向上测试 c.三明治测试 d.Big-bang测试 e.改良的自顶向下测试 17.{F};{G};{H};{I};{J};{K};{B,F,G};{C,H};{D,I};{E,J,K};{A,B,C,D,E,F,G,H,I,J,K } a.自顶向下测试 b.自底向上测试 c.三明治测试 d.Big-bang测试 e.改良的自顶向下测试 18.{A};{B};{C};{D};{E};{A,B,C,D,E};{F};{G};{H};{I};{J};{K};{A,B,C,D,E,F,G,H,I,J,K} a.自顶向下测试 b.自底向上测试 c.三明治测试 d.Big-bang测试 e.改良的自顶向下测试 19.{A};{F};{G};{H};{I};{J};{K};{B,F,G};{C,H};{D,I};{E,J,K};{A,B,C,D,E,F,G,H,I,J,K} a.自顶向下测试 b.自底向上测试 c.三明治测试 d.Big-bang测试 e.改良的自顶向下测试 20.在GSCS收银员子系统的一个部件的一个函数中,一个变量没有正确的初始化。 下列哪种类型的测试最有可能发现这个错误? a.单元测试 b.完整性测试,就是集成测试 c.可接受性测试 d.安装测试 e.性能测试 21.部件A中的一个函数X需要一个指向整数的指针作为一个参数传递,但是部件B中对函数X的一个调用传递了一个整数值。 下列哪种类型的测试最有可能发现这个错误? a.部件A的单元测试 b.部件A和B的完整性测试 c.性能测试 d.安装测试 e.可接受性测试 22.假设加油泵子系统允许用户选择是否打印收条,但是打印函数没有被实现。 下列哪种类型的测试最有可能发现这个错误? a.单元测试 b.完整性测试 c.性能测试 d.可接受性测试 e.函数测试 23.报告子系统使用的一个配置文件没有放在用户环境的正确的目录下。 下列哪种类型的测试最有可能发现这个错误? a.完整性测试 b.安装测试 c.性能测试 d.可接受性测试 e.函数测试 24.为了改正一个错误,进行了一些改变。 错误被纠正了,但是它引起了前面测试过的代码的一个错误。 下列哪种类型的测试最有可能发现这个错误? a.单元测试 b.可接受性测试 c.衰退测试 d.性能测试 e.安装测试 25.用户对于到达汽车零件列表屏幕之前所经过的屏幕的数目不满意,这个屏幕是在使用该系统时经常被访问的。 下列哪种类型的测试最有可能发现这个缺陷? a.完整性测试 b.安装测试 c.性能测试 d.可接受性测试 e.函数测试 26.GSCS系统包括了从第三方卖主那里得来的重用部件。 重用部件的源代码是不可得的。 下面哪种类型的测试是可行的? a.全路径测试 b.数据流测试(根据变量定义和使用位置来选择测试路径的测试) c.分支测试 d.黑盒测试 Tom是负责测试GSCS的经理,他关心系统的可靠性。 他决定用在代码中种植错误的方法来估计剩余的错误。 他有两个测试代码的小组。 一个小组是由David领导的。 另一个测试小组是由Daniel领导的。 假设50个错误被种植在代码中。 在David小组的测试中,70个错误被检测出来。 其中40个是种植的错误。 必考,类似,数字不同,播种错误 27.代码中依然存在的非种植的错误的百分比的Mills估计是多少? a.10% b.20% c.50% d.80% e.从已有信息中不能够得出。 28.代码中依然存在的本身的错误的总数的Mills估计是多少? a.7.5 b.10 c.17.5 d.30 e.37.5 f.从已有信息中不能够得出。 假设同样的代码给Daniel的测试组。 他的小组找到了50个错误。 其中35个错误也被David的小组找到了。 29.使用Daniel小组的数字,尚存在的代码本身的错误总数的Mills估计是多少? a.17.5 b.30 c.50 d.71.5 e.从已有信息中不能够得出。 30.David组的效率是多少? a.30% b.50% c.70% d.85% e.从已有信息中不能够得出。 31.Daniel小组的效率是多少? a.30% b.50% c.70% d.85% e.从已有信息中不能够得出。 32.使用从两个测试组得到的数据,错误总数的估计是多少? a.100 b.87.5 c.70 d.50 e.从已有信息中不能够得出。 33.假设39个错误被种植到一个部件中去了。 测试该部件发现了32个种植的错误,但是没有发现非种植的错误。 该部件是无错的信心级别是多少? (书上有公式,直接代,必考) a.78% b.80% c.82% d.86% e.以上都不是。 必考,一定要会 34.使用前面问题的数据,如果想获得90%的信心级别(置信度),在没有发现代码本身的错误的情况下,必须发现多少种植的错误才行? a.32 b.35 c.36 d.37 e.上述都不是 35.考虑下面从GSCS归档的问题报告中摘录的内容。 下面每一项属于哪种类型的报告(矛盾或错误)? 回答错误报告或者矛盾报告。 a.“当检查零件列表时,发生了一个分段违例。 零件列表数组可能不够大,不能容纳所有的零件。 检查PartList类头” b.“在需求文档中,2.1.5节,‘打印’选项应该包含在所有的‘文件’菜单中。 零件配置屏幕的‘文件’菜单不包括‘打印’选项”。 c.“当提交了增加零件表格以后,等待结果返回需要花费3分钟的时间。 提交表格不应该花费超过1分钟的时间” d.“当收银员列表显示的时候,新添加的收银员不出现在列表中,检查CashierList类中的Add方法。 一个相似的问题在零件列表中也出现。 Theresa在研究零件列表中的问题。 见201号报告获得该问题的更详细信息以及她的解决方法。 ” 答案3 1.f;可读的代码并不总是改善效率。 有时候,在可读性和效率之间有一个折中。 【7.1,7.2节】 2.b;通过引用传递一个变量的意思是变量的值将会被改变。 如果改变的值在函数终结后不需要并且变量的长度是小的,那么变量应该使用值传递。 3.FALSE;假设函数行为正确是不安全的,因为它只在整数上进行了测试。 对于非整数,函数可能产生错误的输出,或者因为舍入错误而引起失败。 4.a;用该函数只有一个文件可以被读和打印。 它应该可以在更一般的情况下被写。 5.b;两个循环可以被合并,从而使得该代码更有效率。 6.b;因为收银员结构的销售数组很大,给SumSales的参数应该用引用传递来改善效率。 7.e 8.c;这段代码的格式使得它容易被误解。 它隐藏了一个错误在代码中。 9.c;因为n是一个整数,表达式2/(n-1)将计算到一个整数,给出一个不正确的答案【8.1节】 10.e;代码不做注释中描述的事情。 变量i被不正确的初始化了。 【8.1节】 11.c;list[10]超过了定义的数组的边界【8.1节】 12.a;数组的第一个元素(list[0])在循环的第一次迭代中被覆盖了。 覆盖了的值在后来的迭代中被使用。 当循环终结时数组的每个元素都将是0。 计算不检查xrange=0,这将会导致被零除的错误。 这两个错误都是计算错误。 【8.1节】 13.a;【8.3节】 14.b;使用自底向上和big-bang方法,在工作程序可以给用户看之前,整个系统必须被建立。 使用自顶向下测试,在整个系统建立之前,可以使用stubs和drivers来测试系统。 【8.4节】 15.d;big-bang测试【8.4节】 16.a;自顶向下测试【8.4节】 17.b;自顶向下测试【8.4节】 18.e;改良的自顶向下测试【8.4节】 19.c;三明治测试【8.4节】 20.a;单元测试;这个错误可以被隔离到单独的部件的一个单独的函数中。 单元测试应该可以发现这种类型的错误。 21.b;因为这个错误包括了两个部件的接口,部件A和B的完整性测试可以检查出这个错误。 部件A的单元测试不会发现该错误,因为错误存在于部件B中。 【8.2节】 22.e;函数测试用于确定在需求规范中描述的函数是否在系统中被实现了。 【8.2节】 23.b;安装测试的目的是确保系统在安装后功能正常【8.2节】 24.c;衰退测试的目的是保证对系统的更改没有否定前面测试的效果。 【9.1节】 25.d;可接受性测试是测试系统与用户的需求是否一致。 【8.2节】 26.d;因为代码不可得,代码的结构在测试中未知。 在这种情况下,黑盒测试是唯一可行的选项。 【8.2节】 27.b;本身仍然有的错误的百分比等于依然存在的种植错误的百分比。 (1-40/50)=.2【8.8节】 28.a;【8.8节】 29.e;第二个测试组的种植的错误数没有给定。 30.c;效率=重叠错误/第二个测试组找到的错误。 效率=35/50=70%【8.8节】 31.b;效率=35/70=50%【8.8节】 32.a;全部错误=35/(.7*.5)=100【8.8节】 33.b; 【8.8节】 34.c; 【8.8节】 35. a.错误的报告;问题的描述包括了从开发者的观点得来的信息。 【9.8节】 b.矛盾报告;这个描述说明需求和实现间的不同。 【9.8节】 c.矛盾报告;这个描述说明了从用户观点看到的一个问题。 【9.8节】 d.错误报告;描述的问题包括了从开发者观点得到的信息【9.8节】
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级软件工程 高级软件工程复习测验+答案 高级 软件工程 复习 测验 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)