100%的测试覆盖率
这是一个很显而易见的答案。但是我不认为这是正确的答案。下面是一个小例子:
private int[] map = new int[] {
1, 3, 5, 8};
public int oddNumber(int index) {
return map[index - 1];
}
写一个简单的测试
@Test
public void first_odd_number_should_be_one() {
assertEquals(1, oddNumber(1));
}
这个测试是不是覆盖了100%的代码呢?我认为是覆盖了的。但是是不是真的测试了所有的执行路径呢?显然没有。oddNumber(4)应该是7,但是这个程序会返回8。我们改一个写法:
public int oddNumber(int index) {
switch(index) {
case 1: return 1;
case 2:return 3;
case 3: return 5;
case 4: return 8;
}
throw new UnsupportedOperationException();
}
换了一种写法之后,测试覆盖率立马就下去了。差别就在于,在第二种写法把执行路径对应到了字面的静态路径上了。所以说,测试应该覆盖是否完全的标准,应该是以动态路径为准,而不是以静态路径为准。同时,也提醒我们,想要靠最后根据测试覆盖率来补测试,是不能让你做到TDD时同等程度的自信的。
在TWU上学的时候,老师给了一个简单的准则:
代码增一行太多,减一行太少
当然,老师是用英文教课的,我是把意思用中文翻译了一下。这句话是说,代码不能多不能少,以恰好让所有测试通过为最佳。为了验证这个道理,据老师说,
ThoughtWorks UK有一个开发人员写了一个工具用来“删代码”。如果有一行代码是能够删掉之后还能让所有测试都通过的,那么就删掉它。我觉得,这个准则很有务实,也很有用。同时,也回答了另外一个问题,
是不是要给所有的类写对应的测试类来覆盖其所有的行为?我认为没有根据这个准则,答案应该是没有必要。只要你的测试覆盖了这个类的所有执行路径就可以了。至于这个测试是不是针对这个类独立进行测试的,是单元测试还是功能测试,是黑盒测试还是白盒测试,都不重要。重要的是,你删掉这个类中一行或者几行,都会让所有测试中至少一个测试失败。这就能说明,你的测试是写到位了。
当然,再加一些怀疑和批评的态度。对于上面那个放之四海皆准的准则,有一个例外:那就是这个准则只关心程序的正确性,但是我要说程序的行为是由正确性和效率共同组成的。举一个空泛的例子:
if (a) {
doSomethingUnderConditionA();
} else if (b) {
doSomethingUnderConditionB();
}
条件A和B可能在匹配的集合上是包含关系,也就是说一个是另外一个的强条件。假设A是更强的条件,那么在条件更强的情况下,我们往往可以给一个更有效率的解。但是有可能,如果没有条件A这个分支,所有情况都走条件B的分支,解仍然是正确的。所有说,A的存在不影响程序的正确性,只影响了程序在特定条件下的效率。那么,在这种情况下,就不能说代码增一行太多了。
分享到:
- 2006-11-19 22:38
- 浏览 11577
- 评论(24)
- 论坛回复 / 浏览 (23 / 18397)
- 查看更多
相关推荐
另外,管理层是否对测试理论、过程和工具有足够的了解,以便有效地管理测试计划和执行,并理解测试结果?这要求管理层不仅要提供资源,还要具备相应的专业知识,才能做出正确的决策。 ### 测试过程的应用 测试过程...
作为一个完整的详细设计书,它应该写清楚数据的增删改查,当然很多详细设计书没有写到这种程度,可是我们换个角度想,开发人员也是在这种不是很详细的设计下进行开发的,他们要根据式样的理解,写出满足条件的SQL...
测试用例的数量和深度直接影响了测试的质量和覆盖率,从而影响到软件的可靠性。 测试用例的重要性在于它们为测试活动提供了基础,确保测试的全面性和一致性。每个需求至少应有两个测试用例:一个是正向测试用例,...
测试记录模板的设计应尽可能简洁明了,同时包含足够的信息,以支持高效的缺陷管理和问题解决流程。通过规范化的记录,测试团队能够更有效地协作,提高软件和系统的整体质量。在实践中,不断优化和调整模板,使其适应...
今天,我们通过分析“测测你为什么遇不到真爱?”这一心理测试,揭示人们在爱情路上可能遇到的心理障碍,从而帮助大家在感情生活中取得新的突破。 心理测试通常以其简洁的题目和深刻的内涵吸引人。此次心理测试由四...
而软件测试面试题则考察应聘者是否掌握足够的知识和技能,以在实际工作中胜任软件测试的职责。 为了全面理解软件测试,我们需要先了解测试的类型。软件测试主要可以分为黑盒测试、白盒测试和灰盒测试三种方式。黑盒...
2. **测试驱动开发(TDD)**:先写测试用例再编写代码,确保代码质量。 3. **边界值分析**:测试边界条件下的行为,如数组的首尾元素。 4. **错误推测**:根据经验预测容易出错的地方,并针对性地设计测试用例。 5. **...
- **测试目标**:明确测试的目的是什么,例如验证菜单功能的正确性或优化用户体验。 - **测试环境**:列出测试所需的硬件、软件和网络条件。 - **测试步骤**:详述如何执行每个测试用例,包括操作步骤和预期结果。 -...
8. **优先级和关联性**:测试用例的重要程度和与其他用例的关系,帮助确定测试顺序。 9. **负责人**:指定负责执行该测试用例的人员。 10. **状态**:如新建、待执行、执行中、通过、失败等,表示用例的生命周期...
测试用例的设计和管理直接影响到测试的效率和有效性,而测试报告则为项目的各方提供了一个评估软件质量的依据。 首先,测试用例设计的基础是基于对软件需求的全面了解,这通常以软件需求分析文档为蓝本。测试用例...
- **白盒测试**:基于对代码结构的理解来设计测试用例,确保每个逻辑路径都被测试到。 - **黑盒测试**:只关注接口行为,不考虑内部实现细节。 - **边界值测试**:重点测试边界值和异常情况,以发现潜在的错误。 - *...
- **政策制定的重要性**:明确组织对软件测试的态度和支持程度。 - **关键问题**: - 组织是否有明确的软件测试政策? - 测试策略是否已经建立? - 是否有支持该策略所需的软件过程和工具? **知识点2:测试策略...
1.什么是软件测试 .................................................................................................................................. 2 2.软件测试的目标 ....................................
- **影响评估**:分析该缺陷对用户及测试过程的影响程度。 - **辅助调试**:提供可能有助于开发人员调试的信息,如截图、日志等。 - **证据支持**:提供证据证明问题的存在,增强报告的可信度。 #### 四、案例分析 ...
- **硬件配置**: 测试服务器的具体硬件配置未给出,通常需要足够的CPU、内存、存储空间等。 - **人员**: 包括测试审核人3名和测试实施人员30名。 - **工具**: - 缺陷管理工具: Mantis,用于记录和跟踪缺陷。 - ...
综合以上内容,我们可以了解到软件测试涉及的广泛知识,包括测试文档编写、测试策略制定、测试工具应用以及如何针对不同类型的系统进行有效的测试。这些资料对于学习和实践软件测试的人来说是宝贵的资源,能够提升...
### 测试你的C语言掌握程度 #### C语言基础与字符串操作 **字符串处理函数:** - **`strlen()`**:该函数用于计算一个字符串的实际长度(不包括结尾的空字符`\0`)。例如,对于字符串"hello",其长度为5。 - **`...
这些标准通常在测试规划阶段制定,包括了测试目标的实现程度、遗留缺陷的数量等。因此,选项A“测试规划”是最合适的答案。 #### 四、定义测试预期结果 **题目**: 以下哪一项定义了测试的预期结果? - A.测试用例...