软件工程第三次作业 作业范围: 第七章至第八章

第一题: 对一个包含10000条机器指令的程序进行一个月集成测试后,总共改正了15个错误,此时MTTF=10h;经过两个月测试后,总共改正了25个错误(第二个月改正了10个错误),MTTF=15h。
要求:
(1)根据上述数据确定MTTF与测试时间之间的函数关系,画出MTTF与测试时间τ的关系曲线。在化这条曲线是做了什么假设?
(2)为做到MTTF=100h,必须进行多长时间的集成测试?当集成测试结束时总共改正了多少个错误,还有多少个错误潜伏在程序中?

答:(1)MTTF与测试时间τ的关系曲线如下:
软件工程第三次作业 作业范围: 第七章至第八章_第1张图片

假设调试过程中没有引入新的错误。
(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和测试时间τ之间的函数关系曲线如下:
软件工程第三次作业 作业范围: 第七章至第八章_第2张图片

第三题: 软件的可维护性与哪些因素有关?在软件开发过程中应该采取哪些措施来提高软件产品的可维护。
答:
(1)可理解性、可预测性、可修改性、可移植性以及可重用性。
(2)在每个阶段结束前的技术审查和管理复查中,应该着重对可维护性进行复审过程中,应该对将来要改进的部分和可能要改的部分加以注意指明,应该讨论软件的可移植性问题,考虑可能影响软件维护的系统界面。在设计和编码过程中应该尽量使用可重用的软件构件,每个测试步骤都可以暗示在软件正式交付使用之前,程序中可能需要做预防性维护的部分。在完成每项维护工作之后,都应该对软件维护本身仔细认真地复审。

第四题: 说明的模块耦合和模块内聚的类型和关系。
答:
内聚:

  • 1、巧合内聚:讲几个模块中没有明确表现出独立功能的相同程序代码段独立出来建立的模块称巧合内聚模块。
    2、逻辑内聚:逻辑内聚是指完成一组逻辑相关任务的模块,调用该模块时,由传送给 模块的控制性参数来确定该模块应执行哪一种功能。
    3、时间内聚:时间内聚是指一个模块中的所有任务必须在同一时间段内执行。
    4、过程内聚:过程内聚是指一个模块完成多个任务,这些任务必须指定的过程执行。
    5、通信内聚:通信内聚是指一个模块内所有处理元素都集中在某个数据结构的一块区 域中。
    6、顺序内聚:顺序内聚是指一个模块完成多个功能,这些功能又必须顺序执行
    7、功能内聚:功能内聚是指一个模块中各个部分都是为完成一项具体功能而协同工作, 紧密联系,不可分割。

耦合:

  • 1、内容耦合:当一个模块直接修改或操作另一个模块的数据,或者直接转入另一 个模块时,就发生了内容耦合。此时,被修改的模块完全依赖于修
    改它的模块。如果发生下列情形,两个模块之间就发生了内容耦合 (1)一个模块直接访问另一个模块的内部数据;
    (2)一个模块不通过正常入口转到另一模块内部; (3) 两个模块有一部分程序代码重叠(只可能出现在汇编语言中); (4)
    一个模块有多个入口。
    2、公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
    3、外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
    4、控制耦合:如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。
    5、标记耦合:一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。其实传递的是这个数据结构的地址;
    6、数据耦合:一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量) 来交换输入、输出信息的。
    7、非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。

总:模块的内聚和耦合,我们主要的抓点就是:耦合是多个模块之间的关系;内聚是一个模块内部各成员的关系。

第五题:什么是模块测试和集成测试?它们各有什么特点?

答:

  • 模块测试是对每个单独的模块,分别用黑盒和白盒测试技术,测试它的功能是否正确,检查模块控制结构中的特定路径并发现最大数量的错误。
    其特点是:主要应用白盒测试的技术,对多个模块的测试可以并发的进行。

  • 集成测试是把模块装配在一起形成完整的软件包,在装配的同时进行测试。
    特点是:可能发生接口问题。

第六题:设计下列伪码程序的语句覆盖和路径覆盖测试用例:

	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、语句覆盖的测试用例
因为每个判定表达式为真或为假时均有赋值语句,为了使每个语句都至少执行一次,总共需要两组测试数据,以便使得每个判定表达式取值为真或为假各一次。下面是实现语句覆盖的典型测试用例:

  • 1)使3个判定表达式之值全为假 输入:A=1,B=1,C=1预期的输出:X=1,Y=2,2=32)使3个判定表达式之值全为真。
    输入:A=20,B=40,C=60; 预期的输出:X=10,Y=20,Z=30

2、路径覆盖的测试用例
本程序共有8条可能的执行通路,为做到路径覆盖总共需要8组测试数据。下面是实现路径覆盖的典型测试用例:

  • 1)3个判定表达式之值全为假输入:A=1,B=1,C=1;预期的输出:X=1,Y=2,Z=3
  • 2)3个判定表达式依此为假、假、真
    输入:A=1,B=1,C=60;预期的输出:X=1,Y=2,Z=30
    3)3个判定表达式依此为假、真、假;输入:A=1,B=40,C=1;预期的输出:X=1,Y=20,Z=3
    4)3个判定表达式依此为假、真、真;输入:A=1,B=40,C=60;预期的输出:X=1,Y=20,Z=30
    5)3个判定表达式依此为真、假、假;输入:A=20,B=1,C=1;预期的输出:X=10,Y=2,Z=3
    6)3个判定表达式依此为真、假、真;输入:A=20,B=1,C=60;预期的输出:X=10,Y=2,Z=30
    7)3个判定表达式依此为真、真、假;输入:A=20,B=40,C=1;预期的输出:X=10,Y=20,Z=3
    8)3个判定表达式全为真输入:A=20,B=40,C=60;预期的输出:X=10,Y=20,Z=30

第七题: 在测试一个长度为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与集成测试时间τ之间的函数关系曲线如下:
软件工程第三次作业 作业范围: 第七章至第八章_第3张图片
第八题: 请至少使用两种方法,分别计算下列所示两个流图的环形复杂度。
软件工程第三次作业 作业范围: 第七章至第八章_第4张图片

答:方法1:环形复杂度等于流图中的区域数。

软件工程第三次作业 作业范围: 第七章至第八章_第5张图片

图1、环形复杂度=流图中的区域数=4(Ⅰ、Ⅱ、Ⅲ、Ⅳ4个区域)


软件工程第三次作业 作业范围: 第七章至第八章_第6张图片

图2、环形复杂度=流图中的区域数=6(Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ、Ⅵ)


软件工程第三次作业 作业范围: 第七章至第八章_第7张图片

图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图)。是结构化编程中的一种可视化建模。
特点:

  • 1)NS图形象直观,功能域明确,具有良好的可见度;
  • 2)很容易确定局部和全局数据的作用域;
  • 3)不可能任意转移控制;
  • 4)很容易表示嵌套关系及模块的层次关系;
  • 5)复杂度接近代码本身,修改需要重画整个图;
  • 6)它强制设计人员按SP方法进行思考并描述他的设计方案,因为除了表示几种标准结构的符 号之处,它不再提供其他描述手段,这就有效地保证了设计的质量,从而也保证了程序的质量。

你可能感兴趣的:(软件工程习题作业答案)