1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 1及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 阅读以下说明,回答问题 1 2,将解答填入对应的解答栏内。 说明 某程序的功能是输入三个正整数作为边长,判断三条边构成的三角形是否等边、等腰或是一般三角形。 1 通过该程序的算法用等价类设计测试用例,检查逻辑覆盖标准。 2 用边界值分析法设计测试用例,检查逻辑覆盖标准。 3 阅读以下说明,回答问题 1 4,将解答填入对应的解答栏内。 说明 设 T1, T2, T3为如下所述 的三个事务。 T1:A:=A+1。 T2: A:=A*2。 T3:A:= 在屏幕上输出 A,并将
2、 A置为 1;其中 A为数据库中的某个数据项。设 A的初值为 0。 3 若这三个事务允许并行执行,则请列举出有多少可能的正确结果。 4 各个事务的内部结构如下所示。若事务不施加任何锁,则有多少可能的调度。 T1: R1( Get A into t1 ;t1: = t1 + 1 ); U1( Update A from t1 ); T2: R2( Get A into t2 ;t2: = t2 * 2); U2( Update A from t2); T3:1t3( Get A into t3; display t3 ); U3( Update A from 1 ); 5 能否产生 “正确 ”结
3、果但不可串行化的调度 ? 6 若这三个事务都遵守两段锁协议,那么是否存在事实上可串行化但又不能形成的调度 ? 7 阅读以下说明,回答问题 1 4,将解答填入对应的解答栏内。 说明 假设二叉树采用连接存储结构进行存储, root 指向根接点, p 所指结点为任一给定的结点,编写一个求从根结点到 p所指结点之间路径的函 数。 void path (root, p) btree * root, * p; Btree *stackm0, *s; int tagm0, top =0, i, find =0; s =root; do while (s ! = NULL) stack top = s; ta
4、gtop =0; (1) if (top 0) (2) if (tagtop = =1) if(3) for (i=1; i =top; i+ + printf (“%d“ ,stacki- data); find=1; else top - -; if(4) p=p- right; (5) while (find (s! = NULL 7 阅读以下说明,回答问题,将解答填入对应的解答栏内。 说明 计算下列源代码的 McCabe环数,画出控制流程图并用罗马数字标出区域。 read x, y, z; type =“scalene”; if (x= =y or x = = z or y= = z)
5、type =“isosceles ”; if (x = = y and x = = z) type =“equilateral”; if (x = y+ z Or y = x+20rz =x+ y) type= “not a triangle”; if (x =0 or y = 0 or z =0) type =“bad inputs”; print type; 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 8 阅读以下说明和 c+码,将应填入 (n)处的字名写在的对应栏内。 说明 以下函数完成求表达
6、式 的值,请填空使之完成此功能。 float sum ( float x ) float s=0.0; int sign = 1; (1); for(inti=1;(2); i+ +) t=t*x; s=s+(3); sign = - sign; (4); 9 阅读以下说明和 Java 码,将应填入 (n)处的字名写在的对应栏内。 说明 编写一个学生类 Student,要求: (1) 学生类 Student 属性有: id: long 型,代表学号 name: String类对象,代表姓名 age: int 型,代表年龄 sex: boolen 型,代表性别 (其中: true 表示男, fa
7、lse 表示女 ) phone: String 类对象,代表联系电话 (2) 学生类 Student 的方法有: Student (long i, String n, int a, boolean s, String p) :有参构造函数,形参表中的参数分别初始化学号、姓名、 年龄、性别和联系电话。 int getAge ():获取年龄作为方法的返回值。 boolean getSex ():获取性别作为方法的返回值。 String getPhone ():获取联系电话作为方法的返回值。 public String to String ():以姓名:性别:学号:联系电话的形式作为方法的返 imp
8、ort java. applet. Applet; import java. awt.* ; public class Student extends Applet long id; String name, phone; int age; boolean sex; Student(long i, String n, int a, boolean s, String p) id=i; name = n; age = a; sex= s; phone = p; public void paint( Graphics g) Student x= new Student (5000,“ xiaoli
9、u“ , 89, true, “ 8989898“ ); (1); (2) g. drawstring( x. getPhone( ), 140,140); int getAge( ) return age; boolean getsex ( ) return sex; String getPhone( ) return phone; String ToString( ) (3) 10 阅读以下说明和 Visual Basic 码,将应填入 (n)处的字名写在的对应栏内 说明 在窗体上画一个列表框、一个命令按钮和一个标签,其名称分别为 List1、Command1和 Label1,通过属性窗口
10、把列表框中的项目设置为: “第一个项目 ”、“第二个项目 ”、 “第三个项目 ”、 “第四个项目 ”。程序运行后,在列表框中选择一个项目,然后单击命令按钮,即可将所选择的项目删除,并在标签中显示列表框当前的项目数,运行情况如图所示 (选择 “第三个项目 ”的情况 )。下面是实现上述功能的程序,请填空。 1. Private Sub Command1_ Click( ) If List1. ListIndex =(1) Then List1. RemoveItem (2) Label1. Caption =(3) Else MsgBox “请选择要删除的项目 ” End If End Sub 软
11、件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 1答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 (1)划分等价类并编号,见下表:(2)为合理设计等价类测试用例,对于表中对应的四个合理等价类,用三个测试用例覆盖,见下表:(3)为每 个不合理等价类设计一个侧试用例,见 下表:2 【正确答案】 用边界值法设计测试用例,见下表:【试题解析】 本题属于软件测试中测试用例的设计,分为白盒技术和黑盒技术。 等价类划分是将输人数据域按有效的或无效的划分成若干个等价类,测试每个等价类的代表值就等于对该类其他值的测试。 步骤如下; 1)按程序的功能说明,找出一个个输入条件,
12、将每个输入条件划分成两个或多个等价类,将其列表。 2)确定测试用例。根据已划分的等价类,按以下步骤设计测试用例: 为每一个等价类编号 没计一个测试用例,使其尽可能多地覆盖尚未被覆盖过的合理等价类, 重复此步,直到所有合理等价类被测试用例覆盖。 设计一个测试用例,使其只覆盖一个不合理等价类。重复这一步,直到所有不合理等价类被测试用例覆盖。 边界值分析不是从一个等价类中任选一个例子作为代表,而是将测试边界情况作为重点目标,选取正好等于,刚刚大于或刚刚小于边界值的测试数据。因为实践经验表明,程序往往在处理边界情况时发生错误。其基本思想是列出程序中可能发生错误的情况,根据这些情况选择测试用例。 逻辑覆
13、盖是白盒技术,它追求程序内部的逻辑覆盖程度,要设计使覆盖程度较高的或覆盖最优代表性的路径的测试用例。 3 【正确答案】 有 6种可能的正确结果,相应的 6个串行调度是: T1-T2-T3: A=1 T1-T3-T2: A=2 T2-T1-T3: A=1 T2-T3-T1: A=2 T3-T1-T2: A=4 T3-T2-T1: A=3 4 【正确答案】 总共有 90种可能的调度。 5 【正确答案】 能够产生。 6 【正确答案】 存在。 【试题解析】 在并行系统环境下,事务并发操作的调度的可串行性的标准如下: 调度结果的正确:保持数据库的一致状态。几个事务的并行执行是正确的 ,当且仅当其结果与按
14、某一次序串行的执行它们时的结果相同。可串行性是并行事务正确性的唯一准则。 因此,若有 3个事务并行执行时,可能的正确结果与 3个事务串行执行的结果应该相同。由于 3个事务串行执行有 6种可执行方案,因此有 6种可能的正确结果。若事务不施加任何锁,数据项则可以同时被读写。假设 Ri, Rj, Rk分别表示三种检索操作 R1, R2, R3,顺序无关紧要;类似地, Up, Uq, Ur分别表示更新操作 U1, U2, U3,顺序也无关紧要。但事务内部操作顺序是固定的。因此,可能的调度是: Ri-Rj -Rk-Up-Uq-Ur: 3*2*1*3*2*1=36 Ri-Rj-Up -Rk- Uq-Ur:
15、3* 2* 2*1*2*1=24 Ri-Rj-Up-Uq-Rk-Ur: 3*2*2*1*1*1=12 Ri-Up-Rj-Rk-Uq-Ur: 3*1*2*1*2*1=12 Ri-Up-Rj-Uq-Rk-Ur: 3*1*2*1*1*1=6 由此可见,总共有 90种可能的调度。本例能够产生 “正确 ”结构但不可串行化的调度。例如:调度 R1- R2-R3-U3-U2-U1得到的结果与 6个可能的串行调度中的两个相同。这样,对于给定的初始值。恰好是 “正确的 ”。但必须清楚这个正确只是巧合,完全是因为初始值恰好为。才得到的,对其他的初始值则未必如此。例如,考虑初始值为 10而非 0的情况,上面给出的调
16、度 R1- R2-R3-U3-U2-U1就不能得到正确的结果。因此,该调度是不可串行的。调度 R1-R3 -U1-U3-R2-U2是可串行的 (等价于串行调度 T1-T3-T2),但在 T1, T2和 T3都遵守两段锁协议时不能出现。因为在这一协议下,操作 R3会代表事务 T3在 A上获得 s锁;这样事务 T1中的操作 U1就无法在该锁释放前进行,且直到 T3结束时才会发生。事实上,事务 T3和 T1在操作 U3到达时将发生死锁。 7 【正确答案】 (1)s=s-left; (2)s=stack top; (3)(s=p) (4)(top0 i =100 - sign * i/( t + sign* i) return s 9 【正确答案】 g. drawString(x. ToString( ) ,20,100) g. drawString(x, getAge( ) ,80,120); retum(“姓名 ”+name + “学号: ” + id + “联系电话: ”“ +phone) ; 10 【正确答案】 0 List1. ListIndex List1. ListCount