软件测试和测试优先的编程

软件测试:

软件测试是提高软件质量的重要首都那。测试主要是为了破坏,证错。test是提高软件质量的重要手段。

好的测试要有一定特点:

能发现错误

不冗余

最佳特性,多种方案中最好的

别太复杂也别太简单

测试的阶段:

  1. 单元测试:针对软件的最小单元模型开展测试,隔离各个模块,容易定位错误和调试(使用JUnit进行单元测试是课程实验的一部分)
  2. 集成测试
  3. 系统测试
  4. 验收测试

一旦程序被修改,重新执行之前的所有测试(回归测试)。

静态测试与动态测试

静态测试:without actually executingprograms

动态测试:executes programmed code with a given set of test cases

白盒测试:对程序内部代码结构的测试

黑盒测试:对程序外部表现出来的行为的测试

测试用例=输入+执行条件+期望结果

junit中assert的使用

assertEquals(expected, actual):查看两个对象是否相等。类似于字符串比较使用的equals()方法;

assertNotEquals(first, second):查看两个对象是否不相等。

expected为用户期望某一时刻对象的值,actual为某一时刻对象实际的值。如果这两值相等的话(通过对象的equals方法比较),说明代码运行是正确的。

assertNull(object):查看对象是否为空。

assertNotNull(object):查看对象是否不为空。

assertSame(expected, actual):查看两个对象的引用是否相等,类似于使用“==”比较两个对象;

assertNotSame(unexpected, actual):查看两个对象的引用是否不相等,类似于使用“!=”比较两个对象。

assertTrue(String message, boolean condition) 要求condition == true,查看运行的结果是否为true;

assertFalse(String message, boolean condition) 要求condition == false,查看运行的结果是否为false。

以判断某个条件是真还是假,如果和预期的值相同则测试成功,否则测试失败。

assertArrayEquals(String message, XXX[] expecteds,XXX [] actuals) 要求expected.equalsArray(actual),即查看两个数组是否相等。

assertThat(String reason, T actual, Matcher matcher) :要求matcher.matches(actual) == true,使用Matcher做自定义的校验。

fail:能使测试立即失败,这种断言通常用于标记某个不应该被到达的分支。通常用于测试在应该抛出异常的时候确实会抛出异常。

黑盒测试:

黑盒测试用于检查程序功能的正确性,不关心内部实现细节。理想情况下,用尽可能少的测试用例,尽快运行,尽可能发现程序的错误

等价类划分:

基于等价类划分的测试:针对每个输入数据需要满足的约束条件划分等价类,从等价类中导出测试用例。

例:设计max: int × int → int的测试用例。
划分为三个等价类: a < b, a = b, a > b。
设计对应的测试用例,可以是:
(a, b) = (1, 2) to cover a < b
(a, b) = (9, 9) to cover a = b
(a, b) = (-5, -6) to cover a > b
例:二维输入空间
划分为四个等价类,分别对应四个象限

边界值分析方法
大量的错误发生在输入域的“边界”而非中央,边界值分析方法是对等价类划分方法的补充。故可在等价类划分时,将边界作为等价类之一加入考虑。

例:重新设计max: int × int → int的测试用例。
考虑a或b取边界值的情况,如0, INT_MAX, INT_MIN等等,添加到等价类中。

两种覆盖方式:

笛卡尔积:全覆盖,多个划分维度上的多个取值,要组合起来,每个组合都要有一个用例。测试完备,但用例数量多,测试代价高。

覆盖每个取值:每个维度的每个取值至少被1个测试用例覆盖一次即可,测试用例少,代价低,但测试覆盖度未必高。

白盒测试

白盒测试要考虑内部实现细节,根据程序执行路径设计测试用例。通常由开发人员完成,一般较早执行。针对功能(实现)进行测试,但测不出未实现的需求。

独立/基本路径测试:对程序所有执行路径进行等价类划分,找出有代表性的最简单的路径(例如循环只需执行1次),设计测试用例使每一条基本路径被至少覆盖1次。

代码覆盖率:

代码覆盖度:已有的测试用例有多大程度覆盖了被测程序。
代码覆盖度越低,测试越不充分;要达到很高的代码覆盖度需要大量的测试用例,测试代价高。

评判代码覆盖度的几个方面:

函数覆盖:所有的方法是否都被测试一次
语句覆盖:所有的语句都被测试一次
分支覆盖:所有的分支都被测试一次
条件覆盖:所有的条件的真假组合都被执行一次
路径覆盖:所有的路径都被执行一次,这是测试中最强的覆盖标准

测试效果:路径覆盖>分支覆盖>语句覆盖
测试难度:路径覆盖>分支覆盖>语句覆盖

自动测试工具:junit

覆盖率测试工具:EclEmma

测试策略:根据什么选择的测试用例

目的:便于理解和评审

总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值