经过8周的学习,软件测试这门课(貌似是倒数第二门专业必修)华丽丽滴结束啦。
测试课结束啦,但是我们对于测试的学习其实是永无止境的。那么我就来简要总结下这门课上自己学习到的内容吧。
一.黑盒测试VS白盒测试
不用多说,两次实验内容的核心,老师上课也花费了大量的内容讲解如何设计两种测试方法的测试用例。
先来两张图感受一下吧(我自己画的,丑就凑合看吧)
黑盒测试-设计测试用例方法
白盒测试-设计测试用例方法(控制流覆盖准则)
黑盒测试:功能的测试,依据规格要求说明书测试
白盒测试:结构的测试,根据程序内容设计
========================黑盒测试=============================
1. 黑盒测试的优点有 :
1) 比较简单,不需要了解程序的内部的代码及实现
2) 与软件的内部实现无关
3) 从用户的角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题
4) 基于软件开发文档,所以也能知道软件实现了文档中的哪些功能
5) 在做软件自动化测试时较为方便
缺点 :
1) 不可能覆盖所有的代码, 覆盖率较低,大概只能达到总代码量的30%
2) 自动化测试的复用性较低。
========================白盒测试==============================
2. 白盒测试的优点有 :
1) 帮助软件测试人员增大代码的覆盖率。 提供代码的质量,发现代码中隐藏的问题
缺点 :
1) 程序运行会有很多不同的路径,不可能测试所有的运行路径
2) 测试基于代码,只能测试开发人员做的对不对,而不能知道设计是否正确,可能会漏掉一些功能需求
3) 系统庞大时,测试开销会非常大。
二.单元测试vs系统测试vs集成测试
单元测试 (Unit Testing)
单元测试又称模块测试,是针对软件设计的最小单位 ─ 程序模块,进行正确性检验的测试工作。
其目的在于发现各模块内部可能存在的各种差错。
单元测试需要从程序的内部结构出发设计测试用例。
多个模块可以平行地独立进行单元测试。
集成测试(Integrated Testing)
通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需要考虑的问题是:
– 在把各个模块连接起来的时侯,穿越模块接口的数据是否会丢失;
– 一个模块的功能是否会对另一个模块的功能产生不利的影响;
– 各个子功能组合起来,能否达到预期要求的父功能; – 全局数据结构是否有问题;
– 单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。
在单元测试的同时可进行集成测试,发现并排除在模块连接中可能出现的问题,最终构成要求的软件系统。
子系统的集成测试特别称为部件测试,它所做的工作是要找出集成后的子系统与系统需求规格说明之间的不一致。
系统测试(System Testing)
系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。
系统测试的目的在于通过与系统的需求定义作比较, 发现软件与系统的定义不符合或与之矛盾的地方。
总结:
我的理解是单元测试就是对最小可测的单元进行测试,比如Java中的一个类或者一个函数,
集成测试是在单元测试完成后把你的耳朵类,眼睛类,鼻子类,头发类等结合起来组成你的脸的功能,
每个类之间的接口要着重测试,而且有可能一个单元的功能是好的,但是他们一旦交互起来就会有问题
系统测试呢,是最全局的测试,在上述测试都完成的基础上,与系统,计算机硬件,外设等的交互,比如这个软件在windows系统上可以运,但是不兼容Linux这种
这里再说一句,回归测试也是很重要的,就是说一旦你的产品发生变化,要测试新的变化带来的影响。
软件测试流程V形图
三.软件测试的意义:
1.软件测试是怎样一种体验?
ans:——可能比编代码还要烦,因为找Bug修bug才是最痛苦的。
2.不测试行不行?
ans:——呵呵,不测试的成本代价太大!写完了就测,从小单元开始测,可比遍历全局测试强多了吧,绝对不要把测试的任务交给用户呐
3.tester和coder的区别很大吗?
ans:——大家任务不同,但是都是为了用户需求呐,如果code时候考虑到测试的问题,真的会大大节约tester的工作量哒。
总而言之,软件测试是软件项目开发环节中必不可少的环节,与编程相伴相随,我觉得他俩就是一种寄生关系。
一个好的软件产品背后必定有着精细,完备的测试工作支撑。用户需求才是软件产品的核心。