[软件构造] 软件测试用例与测试优先

资料来源:软件构造PPT

软件测试与测试优先

PART Ⅰ 测试相关知识点

Q:为什么要测试?

测试能够发现程序中的错误,提高程序正确性的信心。

Q:测试需要注意哪些点?

  • 正确性
  • 需求是否满足spec
  • 对所有输入能否正确相应(robustness)
  • 性能能否接受,运行时间能够接受
  • 是否可用
  • 能否正确的安装部署和运行
  • 能否实现期望

Q:一个好的测试具有哪些特征?

  • 能够发现错误
  • 不冗余
  • 能够最佳测试要测试的函数
  • 不是太复杂也不是太简单

Q:测试的等级有哪些?

  • 最底层:单元测试,测试功能函数

  • 中间层:集成测试,对于多个类、包、组件的集中测试

  • 顶层:系统测试,测试一个完整的系统

  • 回退:回归测试,重复迭代

    image
  • 最终交付:验收测试

    image

Q:静态测试与动态测试区别?

  • 静态测试不会实际的运行代码

    ​ 静态测试常常是内部运行的,比如在代码工具/文本编辑器中会检查代码的结构或者编译器检查语法和数据流。

  • 动态测试测试代码运行的表现,也就是会在测试用例中真正的跑起来

    在代码未完全实现之前,动态检查会检查特定的代码段,现在用来动态测试的技术要么是驱动或者在debug环境中执行。

Q:测试和调试的区别(testing vs. debugging)?

  • 测试是用来发现是否存在错误
  • 调试是用来识别错误根源,消除错误

PART Ⅱ 软件测试用例选择

接下来就要说一下软件测试了。

Q:为什么说软件测试很难?

  • 行为在离散输入空间中差异巨大,输入并不符合统计学规律。bug的出现不符合概率分布。
  • 在错误发生时,输入无统计分布规律可循
  • 暴力穷举是不可能的

所以说,软件测试用例必须要慎重和系统的选择

Q:测试用例是什么东西?

测试用例是一个测试输入、执行条件、预期结果的集合。测试用例是你项目中有价值的资产!

Q:测试用例的设计原则?

  • 有代表性
  • 明确性,有明确的结果
  • 可重复性,同一case,同一结果

PART Ⅲ 测试优先编程

Q:什么叫测试优先编程?

在你写代码之前,先把测试写好

Q:具体的流程应该是什么?

  • 先写spec
  • 再写符合spec的测试用例
  • 写代码 --> 执行测试 --> 修改 ,重复

Q:SPEC怎么写?

  • 给输入的参数类型和约束条件,比如平方函数不能是负的。
  • 给出返回值和以及返回值和输入之间关系
  • spec也包括方法的特点和有关它是用来干啥的评述

当然,SPEC是不可能一次就写好的,所以我们得写测试用例,写测试用例,可以理解、修正、完善spec设计

Q:先写测试还是后写呢?

题目叫什么??当然是先写

Q:什么叫测试驱动开发?

测试驱动开发(TDD),就是以测试驱动开发。先写需求,再写测试,然后编程实现通过测试,循环。短平快,跟之前先编码,后来发现对不上需求的编码方式相反。

PART Ⅳ 单元测试 Unit Test

Q:什么叫单元测试?

针对软件最小单元模型开展测试,隔离各个模块,容易定位错误和调试

Q:那么单元测试要考虑哪些情况呢?

  • 模块的接口,确保数据流正确的输入和输出。
  • 本地的数据结构,确保在经过算法计算后结构不会变。
  • 各个独立分支,确保所有控制结构,条件分支都能测试到。
  • 边界条件,不多说了。
  • 针对错误的解决方法。

Q:有没有自动测试工具?

有,JUnit,测试文件要单独放在test文件夹下.使用assert语句来判断。

image

PART Ⅴ 黑盒测试(重要)

Q:什么是黑盒测试?
黑盒测试不关心代码如何实现,只检查代码的功能。

ⅰ以划分来选择测试用例

Q:什么叫等价类划分?
将函数的输入域划分为等价类,从等价类中导出测试用例。其中根据每个输入所需要满足的约束条件,划分等价类。每一个等价类都代表着对约束加以满足/违反/无效的数据集合。

Q:等价类划分的一般规则?

  • 输入数据限定了范围,那么就会产生一个合法域和两端的非法域。
  • 输入数据指明了特定的值,那么就会产生一个合法值和一个非法值。
  • 输入数据确定了一组数据,那么就有一组合法和一组非法数据。
  • 输入数据为yes | no,我不说了。

:输入学号

  1. 长度为10位,:10、>10、<10
  2. 117开头:以此开头、以其他开头
  3. 后两位数为特定数字

Q:对于数字测试如何划分?

  • 根据约束
  • 考虑很大的数

multiply()函数

约束
产生的划分

每个划分内选一个就足够代表了

max()函数

max函数

练习:

String
image

ⅱ 在划分中包含边界

  • 大量的错误发生在输入域的边界而非中央

    • 0是正负的边界
    • 最大数MAX和最小数MIN对于int和double是边界
    • 空对象(empty string、empty list、 empty array)对于collection是边界
    • collection的第一个和最后一个是边界
  • BVA(boundary value analysis)是测试技巧,在边界中选择测试用例

  • 边界值分析方法是对等价类划分方法的补充

  • 在考虑边界划分时,不仅要考虑边界,还要考虑边界的两侧

边界测试的例子:

边界测试

边界测试加上划分例子:

边界加划分

边界测试例子max函数

image

ⅲ 两种极端的划分

  • 笛卡儿积:全覆盖

    在多个维度划分的多个取值,全部组合起来,每个组合都要有一个用例。

  • 覆盖每个取值,最少1次即可

    在每个维度选择至少一个用例,但不需要测试所有的组合。

两者的区别:

前者测试完备,但数量多,测试代价高。后者测试用例少,代价低,但覆盖度未必高。

PART Ⅵ 白盒测试

白盒测试要考虑内部实现的细节,使用内部视角来编写测试用例。根据程序执行的路径设计测试用例,一般较早执行。也就是说,白盒测试需要覆盖被测代码的所有路径

ⅰ 代码覆盖度

代码覆盖度有很多不同的种类

  • 函数覆盖:测试的函数是否被调用
  • 语句覆盖:每条语句是否被执行
  • 分支覆盖:if while for的每个分支,正确或错误分支是否都被执行
  • 条件覆盖:同上
  • 路径覆盖:程序的每条执行路径path(各种执行路线)是否 被用例覆盖

测试效果:

​ 路径覆盖 > 分支覆盖 > 语句覆盖

当然……测试难度也是这样从高到低

推荐工具:EclEmma

PART Ⅶ 自动测试与回归测试

​ 事实上,手工测试的代价太高,最好达到完全的自动化

自动测试

​ 意思为自动调用被测函数、自动判定测试结果、自动计算覆盖度。这里只是指测试用例的自动执行,而不是自动生成测试用例。

回归测试

​ 一旦程序被修改,重新执行之前的所有测试。在这里

  • 一旦发现bug,马上写一个可以重现bug的输入的测试用例,并将其加入测试库
  • 自动测试和回归测试几乎都用在合并代码构建中
  • 自动化回归测试是现代软件工程中的最佳实践方式

PART Ⅷ 编写测试策略

在ADT设计文档中,单元测试策略是非常重要的一环。写它的目的是在代码评审中,让其他人可以理解你的测试,检查你的测试是否足够充分。

比如,在测试函数时,在测试类顶部写下测试策略,在每个测试函数上写下它的测试用例是怎么选择的,也就是这个测试覆盖了哪些划分类。

策略

本章小结

  • 测试优先编程。
  • 划分和边界,能够系统的选择测试用例
  • 白盒测试和statement覆盖来填充测试
  • 单元测试,使得每个测试尽可能独立不耦合
  • 自动回归测试
  • 免于遭受bug
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容