一、多选题 1. 从下列叙述中选出5条关于好的程序设计风格的正确叙述。 A.使用括号以改善表达式的清晰性。 B.对递归定义的数据结构不要使用递归过程。 C.尽可能对程序代码进行优化。 D.不要修补不好的程序, 要重新写。 E.不要进行浮点数的相等比较。 F.应尽可能多地输出中间结果。 G.利用数据类型对数据值进行防范。 H.用计数方法而不是用文件结束符或输入序列结束符来判别输入的结束。 I.程序中的注释是可有可无的。 J.使用有意义的标识符。 2.从下列叙述中选出5条关于软件测试的正确叙述。 A.为了使得软件容易测试, 应该使用高级的程序设计语言编制程序。 B.程序测试是一个程序的执行过程, 目的是为了发现软件中隐藏的错误。 C.如果程序中连锁式连接了8个判定(IF)结构, 则程序中总的路径数达28 。 D.白盒测试仅与程序的内部结构有关, 完全可以不考虑程序的功能要求。 E.为了快速完成集成测试, 采用一次性集成方式是适宜的。 F.对一批模块进行测试,发现错误多的模块中残留的错误将比其它的模块少。 G.好的测试用例应能证明软件是正确的。 H.边界值分析方法是取输入/输出等价类的边界值做为测试用例。 I.等价类划分方法考虑了各等价类之间取值的组合情况下可能的结果。 J.判定覆盖法可能查不出在判定中逻辑运算符使用有误时产生的错误。 3.从下列叙述中选出5条有利于软件可维护性的正确叙述。 � A.在进行需求分析时需同时考虑如何实现可维护性问题。 � B.完成测试作业后,为了缩短源程序的长度应删去程序中的注解。 � C.尽可能在软件生产过程中保证各阶段文档的正确性。 � D.编程时应尽可能使用全局变量。 � E.选择时间效率和空间效率尽可能高的算法。 � F.尽可能利用硬件的特点。 � G.重视程序结构的设计,使程序具有较好的层次结构。 � H.使用维护工具或支撑环境。 � I.在进行概要设计时应加强模块间的联系。 � J.提高程序的可读性,尽可能使用高级语言编写程序。 � K.为了加快软件维护作业的进度,应尽可能增加维护人员的数目。 二、填空题 1. 软件设计中划分程序模块通常遵循的原则是使各模块间的耦合尽可能 。三种可能的模块耦合是: ,例如,一个模块直接引用另一个模块中的数据。 ,例如,一个模块把开关量作为参数传送给另一个模块。 ,例如,一个模块通过公共数据结构把数据传送给另一个模块。其中, 的耦合性最强。 2. 为高质量地开发软件项目,在软件结构设计时必须遵循 的原则, 建立软件系统的模块结构。并且应根据 评价系统模块划分的质量。此外在模块设计时,应从5种基本的 出发,利用它们组合成一个模块的程序块结构。 要求每个 的结构应是单入口和单出口。 三、简答题 1. 下面是一段用赛德尔迭代法求解线性方程组的程序。其中A[n][n] 是方程组的系数矩阵, B[n]是方程组的右端项,X[n] 是方程组的解向量。eps是控制迭代精度的较小实数。imax是控制迭代的最大次数。flag是标志,=0,表示迭代不收敛;=1,表示迭代收敛。 ��for ( k = 1; k <= n; k++ ) X[k] = 0.0; ��X[n] = 1.0; ��for ( i = 1; i <= imax; i++ ) { ���flag = 1; ���for ( j = 1; j <= n; j++ ) { ����s = B[j]; ����for ( k = 1; k <= n; k++ ) { �����if ( j == k ) s = s + X[k]; �����s = s-A[j, k] * X[k]; ����} ����if ( abs(X[j]-s) > (abs(s) + 1.0) * eps ) flag = 0; ����X[j] = s; ���} ���if ( flag ) break; ��} ��(1) 试画出它的结构化的程序流程图。 ��(2) 将它改为N-S图。 ��(3) 计算它的McCabe环路复杂性。 2. 下面是一趟插入排序的程序, 把R[i+1]插入到R[1..i]的适当位置 ��R[0] = R[i + 1]; j = i; ��while ( R[j] > R[0] ) ���{ R[j + 1] = R[j]; j = j -1; } ��R[j + 1] = R[0]; 用路径覆盖方法为它设计足够的测试用例(while循环次数为0次、1次、2次)。 3. 阅读下列关于软件可靠性方面的叙述,回答问题1和问题2。 ��软件的可靠度可定义为:在假定输入和硬件不发生错误的前提下,对于给定的环境和给定的输入,在指定的时间内能完成规定任务的概率。 ��某软件中心的评测部为了评估已开发实现的应用软件ASP的可靠性,决定采用软件可靠性的错误播种模型来进行测试和评估。评测部在评估时,作了下列三个假设: �(1) 在测试前,单位长度的故障个数ET / IT 为一常数,此常数基本上落在一个固定的范围内。其中IT 为被测程序的长度(即机器指令条数),ET 为被测程序中故障总数。 �(2) 失效率正比于软件中剩余的(潜伏的)故障数,平均无故障时间MTTF与单位长度的剩余故障个数成反比,即 MTTF = 1/(K*εr )。其中εr 为单位长度剩余故障个数,K的典型值现取为200。 �(3) 测试中发现的错误都得到了及时改正,在测试过程中没有引入新的错误。评测部对ASP软件人为地植入了10个错误,即NS = 10,在开始测试的一小段时间内,发现了160个固有故障,即n = 160,又发现了植入的故障2个,即nS = 2,被测程序ASP的长度(机器指令条数)为105 。 �问题1:用故障播种(植入)的数学模型,估算出被测程序ASP的固有故障的个数N的值。如果通过测试一段时间后,发现的固有错误个数为ED = 795时,请估算此程序的平均无故障时间MTTF值。 �问题2:若要求把此MTTF再提高4倍,应至少再排除多少个固有错误? 请简要地列出有关计算式。