第一题: 对一个包含10000条机器指令的程序进行一个月集成测试后,总共改正了15个错误,此时MTTF=10h;经过两个月测试后,总共改正了25个错误(第二个月改正了10个错误),MTTF=15h。
要求:
(1)根据上述数据确定MTTF与测试时间之间的函数关系,画出MTTF与测试时间τ的关系曲线。在化这条曲线是做了什么假设?
(2)为做到MTTF=100h,必须进行多长时间的集成测试?当集成测试结束时总共改正了多少个错误,还有多少个错误潜伏在程序中?
假设调试过程中没有引入新的错误。
(2)根据估算平均无故障时间的公式可得:
1/K(Et/10000-100/10000)=10
1/K (Et/10000-300/10000)=15
计算可得:K=333,Et=45
当MTTF=100h时,有
1/333(45/10000-Ec/10000)=100
计算可得:Ec=42.按前两个月测试改错的进度估算,需进行3个月的集成测试。
当测试结束时,共改正了42个错误,还有3个错误潜伏在程序中。
第二题: 如对一个长度为100000条指令的程序进行集成测试期间记录下下面的数据:
(a)7月1日:集成测试开始,没有发现错误。
(b)8月2日:总共改正100个错误,此时MTTF=0.4h
(c)9月1日:总共改正300个错误,此时MTTF=2h
根据上列数据完成下列各题。
估计程序中的错误总数。
为使MTTF达到10h,必须测试和调试这个程序多长时间?画出MTTF和测试时间τ之间的函数关系曲线。
答:(1)根据估算平均无故障时间的公式可得:
1/K(Et/100000-100/100000)=0.4
1/K (Et/100000-300/100000)=2
计算可得:K=1000,Et=350即程序中的错误总数为350。
(2)当MTTF=10h时,有
1/K (350/100000- Ec/100000)=10
计算可得:Ec=340.按前两个月测试改错的进度估算,还进行2个月的集成测试。
(3)MTTF和测试时间τ之间的函数关系曲线如下:
第三题: 软件的可维护性与哪些因素有关?在软件开发过程中应该采取哪些措施来提高软件产品的可维护。
答:
(1)可理解性、可预测性、可修改性、可移植性以及可重用性。
(2)在每个阶段结束前的技术审查和管理复查中,应该着重对可维护性进行复审过程中,应该对将来要改进的部分和可能要改的部分加以注意指明,应该讨论软件的可移植性问题,考虑可能影响软件维护的系统界面。在设计和编码过程中应该尽量使用可重用的软件构件,每个测试步骤都可以暗示在软件正式交付使用之前,程序中可能需要做预防性维护的部分。在完成每项维护工作之后,都应该对软件维护本身仔细认真地复审。
第四题: 说明的模块耦合和模块内聚的类型和关系。
答:
内聚:
耦合:
总:模块的内聚和耦合,我们主要的抓点就是:耦合是多个模块之间的关系;内聚是一个模块内部各成员的关系。
第五题:什么是模块测试和集成测试?它们各有什么特点?
答:
模块测试是对每个单独的模块,分别用黑盒和白盒测试技术,测试它的功能是否正确,检查模块控制结构中的特定路径并发现最大数量的错误。
其特点是:主要应用白盒测试的技术,对多个模块的测试可以并发的进行。
集成测试是把模块装配在一起形成完整的软件包,在装配的同时进行测试。
特点是:可能发生接口问题。
第六题:设计下列伪码程序的语句覆盖和路径覆盖测试用例:
START
INPUT(A,B,C)
IF A>5
THEN X=10
ELSE X=1
END IF
IF B>10
THEN Y=20
ELSE Y=2
END IF
IF C>15
THEN Z=30
ELSE Z=3
END IF
PRINT (X,Y,Z)
STOP
答:
1、语句覆盖的测试用例
因为每个判定表达式为真或为假时均有赋值语句,为了使每个语句都至少执行一次,总共需要两组测试数据,以便使得每个判定表达式取值为真或为假各一次。下面是实现语句覆盖的典型测试用例:
2、路径覆盖的测试用例
本程序共有8条可能的执行通路,为做到路径覆盖总共需要8组测试数据。下面是实现路径覆盖的典型测试用例:
第七题: 在测试一个长度为24000条指令的程序时,第一个月由甲、乙两名测试员各自独立测试这个程序。经一个月测试后,甲发现并改正20个错误,使MTTF达到10h。与此同时,乙发现24个错误,其中6个甲也发现了。以后由甲一个人继续测试这个程序。问:
(1)刚开始测试时程序中总共有多少个潜在的错误?
(2)为使MTTF达到60h,必须再改正多少个错误?还需多长测试时间?
(3)画出MTTF与集成测试时间τ之间的函数关系曲线。
答:(1)根据公式:B0=B2B1/bc,可得:
B0=20*24/6=80,即刚开始测试时程序中总共有80个错误。
(2)根据估算平均无故障时间的公式可得:
1/K(80/24000-20/24000)=10
1/K(80/24000- Ec/24000)=60
计算可得:K=40,Ec=70
即还需要改正50个错误。根据甲的改正进度,估计还需要3个月。
(3)MTTF与集成测试时间τ之间的函数关系曲线如下:
第八题: 请至少使用两种方法,分别计算下列所示两个流图的环形复杂度。
答:方法1:环形复杂度等于流图中的区域数。
图1、环形复杂度=流图中的区域数=4(Ⅰ、Ⅱ、Ⅲ、Ⅳ4个区域)
图2、环形复杂度=流图中的区域数=6(Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ、Ⅵ)
图3、环形复杂度=流图中的区域数=5(Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ)
方法2:流图环形复杂度=流图中边的条数-结点数+2。
图1:流图环形复杂度=流图中边的条数11-结点数9+2=4
图2:流图环形复杂度=流图中边的条数17-结点数13+2=6
图3:流图环形复杂度=流图中边的条数15-结点数12+2=5
第九题:设计下列伪码程序的分支覆盖和条件组合覆盖测试用例:
START
INPUT(A,B,C,D)
IF (A>0) AND (B>0)
THEN X=A+B
ELSE X=A-B
END
IF (C>A) OR (D<B)
THEN Y=C-D
ELSE Y=C+D
END
PRINT (X,Y)
STOP
答:(1)分支覆盖(即判定覆盖)标准为,不仅使每个语句至少执行一次,而且使每个判定表达式的每个分支都至少一次。
为做到分支覆盖,至少需要两组测试数据,以使每个判定表达式之值为真或为假各一次。
下面是典型的测试用例:
1)使两个判定表达式之值全为假
输入:A=-1,B=-2,C=-3,D=1预期的输出:X=1,Y=-22)使两个判定表达式之值全为真
输入:A=1,B=2,C=3,D=1预期的输出:X=3,Y=2
(2)条件组合覆盖标准为,使得每个判定表达式中条件的各种可能组合都至少出现一次。
本题程序中共有两个判定表达式,每个判定表达式中有两个简单条件,因此,总共有8种可能的条件组合,它们是:
1)A>0,B>0
2)A>0,B≤0
3)A≤0,B〉0
4)A≤0,B≤0
5)C〉A,D
6)C〉A,D≥B
7)C≤A,D Q
8)C≤A,D≥B
下面的4个测试用例,可以使上面列出的8种条件组合每种至少出现一次:
1)实现1,5两种条件组合
输入:A=1,B=1,C=2,D=0预期的输出:X=2,Y=22)实现2,6两种条件组合
输入:A=1,B=0,C=2,D=1预期的输出:X=1,Y=13)实现3,7两种条件组合
输入:A=0,B=1,C=-1,D=0预期的输出:X=-1,Y=-14)实现4,8两种条件组合
输入:A=0,B=0,C=-1,D=1预期的输出:X=0,Y=0
第十题: 解释以下名词:
1、Alpha和Beta测试。
2、回归测试
3、逻辑覆盖。
4、逻辑内聚。
5、盒图(N-S图)
答:1、Alpha测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。开发者负责记录发现的错误和使用中遇到的问题。Alpha测试是在受控的环境中进行的。
Beta测试由软件的最终用户们在一个或多个客户场所进行。与Alpha测试不同,开发者通常不在Beta测试的现场。
Beta测试是软件在开发者不能控制的环境中的“真实”应用。
2、在集成测试过程中,每当一个新模块结合进来时,程序就发生了变化:建立了新的数据流路径,可能出现了新的I/O操作,激活了新的控制逻辑。在集成测试的范畴中,回归测试是指重新执行已经做过的测试的某个子集,以保证上述这些变化没有带来非预期的副作用。
回归测试就是用于保证由于调试或其他原因引起的变化,不会导致非预期的软件行为或额外错误的测试活动。
回归测试可以通过人工地进行,也可以使用自动化的捕获回放工具自动进行。利用捕获回放工具,软件工程师能够捕获测试用例和实际运行结果,然后可以回放(即重新执行测试用例),并且比较软件变化前后所得到的运行结果。
回归测试集(已执行过的测试用例的子集)包括下述3类不同的测试用例。
(1) 检测软件全部功能的代表性测试用例。
(2) 专门针对可能受修改影响的软件功能的附加测试。
(3) 针对被修改过的软件成分的测试。
在集成测试过程中,回归测试用例的数量可能变得非常大。因此,应该把回归测试集设计成只包括可以检测程序每个主要功能中的一类或多类错误的那样一些测试用例。
3、有选择地执行程序中某些最有代表性的通路,是对穷尽测试的惟一可行的替代办法。所谓逻辑覆盖是对一系列测试过程的总称,这组测试过程逐步进行越来越完整的通路测试。
从覆盖源程序语句的详尽程度分析,测试数据覆盖(即执行)程序逻辑的程度可以划分成语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖和条件组合覆盖等5个等级。从对程序路径的覆盖程度分析,主要有点覆盖、边覆盖和路径覆盖等3个等级。
4、逻辑内聚指模块内执行个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。指机能相关的程序组合成一模块的程度,或是各机能凝聚的状态或程度。是结构化分析的重要概念之一。
5、N-S图,也被称为盒图或NS图(Nassi Shneiderman图)。是结构化编程中的一种可视化建模。
特点: