原创,转载请保留原文url地址
一 什么是测试
1. 什么是测试
最通俗的说就是检验被测试的软件或者产品是否符合要求。
在具体一点就是检验在 什么条件 下符合要求
更具体一点就是检验在一些条件下符合要求, 超出这些条件后会不会有危害等
在更具体一点,就是 检验在一些条件下是否符合要求, 然后在这个条件下有一些不正常的输入或者扰动是否还能满足要求,并且不会有危害等
可以在继续想,还有那些等等不同扩展项目, 我初步估计做好这些就差不多了,再多成本太高
2. 被测对象的要求
被测对象的要求就是 被测试对象或者产品需要达到的功能,特定条件下的功能, 超出条件后也不能有危害的要求, 即使有些不正确的输入也要尽量满足要求的功能, 即使有些环境的影响也要能正确的本领。
这些要求,个人认为可以分为静态的一些要求和动态的一些要求
- 静态要求, 就是静态的需求,就是程序或者功能展示界面等的 显示效果, 包括有多少显示页面, 每个页面如何显示, 哪里是文字, 文字大小, 哪里是按钮, 有多少个,这些都应该出现在程序的 需求说明书或者程序的效果图中。
- 动态要求,就是动态功能, 就是程序各个页面如何切换的, 在那些条件下切换到那些页面, 那些条件不同后,显示不同,大小变化等等
这些都是测试要做的内容,但是不仅仅是测试要做的内容。
3. 被测对象产生的过程
这些东西, 需求提出者,通常都是买单的人要有一定的要求, 他可以没有具体的要求但是要有目标,有打算。
然后需求提出者要委托产品设计人员要进行规划设计,产品设计人员最后要提出上述两项,一个静态的要求,包括原型图, 效果图等等, 同时还要有动态的要求就是一些流程图, 一些说明等等 这些都要具备以后才能是比较完备的解决方案。
这个解决方案还要需求提供者进行相关的验证等等,否则后续的事情都要浪费了,同时这个时候测试人员就要介入了, 技术开发人员也要介入,但是他们仅仅是了解,做个预热。 除非有真的办不到的东西出现。
产品设计人员完成相关工作,一般会出效果图等, 然后技术人员会根据这些效果图进行,需求说明, 流程功能等进行相关开发等。开发中技术人员要不断的检验自己实现的东西是否符合相关要求,因此而展开必要的调试, 测试, 联调, 必要的单元测试, 以及系统的功能测试等。 在这个过程中,主要还是开发人员在进行,但是这个时候测试人员一般会同开发人员保持密切的联系, 并协助做好相关辅助测试等等。
开发人员完成相关开发后, 就要将相关产品进行提交,测试人员就要对这个产品进行检验,检验他符合相关需求的程度等等, 通过各种科学的,完善的手段来进行发现,探索等等
总结一下: 产品输出开发和测试的依据, 开发根据开发依据进行开发, 最后测试根据测试的依据, 对被测对象(技术开发的产品)进行测试。
这三者都做好了才能输出有效的产品。
试想一个汽车厂输出的汽车没有经过严格的测试,哪有人敢用。
一个财务软件没有经过严格有效的测试,哪敢用呀!
二 测试的分类
测试是一次实践活动也是一门科学, 测试方法分为很多,在不同情况下, 采用不同的测试手段和方法。
1. 根据对被测对象的了解程度可以分为:
- 白盒测试, 就是考虑盒子是透明, 测试人员能从外面看到被测对象的里面, 这里有两层含义, 一是了解内部, 二是, 从外面看, 不是修改, 就是测试尽量不干扰被测对象的含义。 当然是尽量不干扰, 其实没有完全不干扰就是把干扰降低到最小。 白盒测试对测试人员的要求最深,成本最高, 时间最长。
- 黑盒测试, 就是考虑被测对象是个黑盒子, 你没办法了解里面的东西, 你仅仅能根据需求说明书进行测试, 仅仅测试外部特性, 输入输出, 扰动, 环境等进行相关测试与检验。 黑盒测试用的最多, 成本相对较低。
- 灰盒测试, 就是介于白盒和黑盒之间测试, 也较长采用。
2. 根据对被测对象的重点考察对象分为
- 功能测试, 就是对被测对象的符合产品需求的程度进行测试, 包括显示, 逻辑等等
- 性能测试, 就是对被测对象的性能指标进行测试与统计,例如一次相应要多长时间, 打开页面要多少时间等等
- 压力测试, 就是检验被测对象在多大的压力(多少人用)下能正常工作, 多少压力后,他工作不正常了,在这些情况下是否有危害等等
- 异常测试, 主要就是针对被测对象的不正确输入, 环境的异常情况进行测试,一般这个测试时非常重要的, 这些异常情况下产品都可能有问题。例如一个产品能否在北极下工作, 即使不工作也不能伤害到人,例如一个产品能否在热带工作, 及时不工作也不能自燃, 否则伤害人。
- 兼容测试, 主要测试产品在不同设备,不同情况下的工作情况, 也可以考虑产品自身前后的兼容性, 产品的前一个版本同当前版本的情况。 比如一辆车放到车库了, 然后您发财了, 更换豪车,但是发现车库小了, 豪车只能在风雨中,嗨不兼容呀!!
类似的情况还有很多, 可以参考更多资料,下面是一个测试相关的资料可以供大家参考 链接: http://pan.baidu.com/s/1gdlaGYv 密码: dhjv
其实个人感觉, 资料里面的东西太科班了, 按照那个东西搞测试, 产品永远都发布不了,时间太长了。
就像小孩子学说话, 不是全部汉字都学会,学好才说话的, 他在刚刚会点就开始说话的, 他不管是否说对的, 就是说, 总之不断实践, 不断检验, 慢慢就成功了。 小孩子学走路也一样都是这样的。
因此产品, 开发,测试是很微妙的。
3. 根据产品开发的阶段可以分为
- 调试,感觉调试原则上不是测试的,但是应该是测试之前的必须进行的,一般程序都很难一下写完, 一下子没bug的, 可以看做测试的前传吧
- 单元测试, 单元测试一般都是程序员进行的, 单元测试是白盒测试, 一般是程序员进行,正常情况下是程序员自己写单元测试代码。 好一点的办法是程序员内部的另外程序员之间相互写单元测试代码,相互测试,这样可以避免测试中自己的思维定式在发生影响。
- 集成测试, 就是把各个模块等汇集到一起, 一块测试相关功能,重在测试相关模块配合。
- 内部测试,一般法就是单位内部相关人员或者其他人员进行的测试工作, 更多情况下是专门的QA团队,针对被测对象进行比较全面的测试工作。 这些测试主要包括:功能测试, 性能测试, 压力测试, 异常测试等等。 通过内部测试后对产品能否满足要求就基本心理有点数了。但是还不够
- 内部用户测试, 这里同内部QA的测试是不一样的, 一般是把单位内部员工或者一定的关系单位的人找到一起, 让他们模拟最终用户进行测试。这里的重点是模拟真实用户进行测试,了解用户体验等
- 外部用户体验测试, 就是在外面小范围选取一定的人员,让他们参与测试, 更大范围的了解用户的想法了解产品的情况等。
一般bs架构的产品 就需要1~4就可以了, 因为bs架构的产品是部署在自己的服务器上的, 就是发现了bug也可以快速修改, 然后部署, 不需要用户更新自己安装的东西(用户也没安装)。
单机产品和cs架构的东西需要1~6的步骤, 因为有些东西一旦下发,没办法收回的, 或者收回成本太高需要谨慎从事。
三 测试的成本
是不是很牛逼的测试人员就能把全部问题都给测试出来??然后就o了!!!
其实未必,甚至是办不到的, 其实被测对象可以看做为 y = f(x)
x就是被测对象的各种输入, y就是被测对象的输出, 也就是结果, f就是被测对象的功能。 要想完全的测试出相关功能,就需要对 全部x进行遍历,然后依次检验相关输出。
但是有时候, 你不完全了解 有些输入同 输出的关系!!
甚至有时候 x是个 无限的集合如何完全遍历。
另外, 往往, 系统的功能还要受到扰动的影响,因此系统模型可以模拟为
y = f(x, r1, r2, r3,....) 等等 r1, r2, r3 是系统扰动因素, 并且这些扰动有多少不确定。。。
因此完全测试是 不可能, 在牛的测试人员也做不到!!
那么正常的测试时什么 , 我个人认为测试时 在x的无限集合内选取一个 有限的集合 x1 ∈ X 就是在 无限的一个集合内选取一个真子集, 然后计算 y1 = f(x1)
牛一点的测试人员选取的x1会更有代表性,测试会更有针对性。
因此测试不是测试出问题越多越好, 要在测试的成本和测试的结果直接做好平衡。
最后, 来点干货,低成本,高产出的测试方法。
1. 测试同开发平行进行, 就是在开发人员刚刚开始开发就进行测试, 这个过程可能对金钱成本造成浪费, 但是对最宝贵的时间成本是有非常好的节省。 通过在产品需求阶段的参与, 开发阶段的提早参与, 可以更早的了解被测对象, 更早提醒开发人员甚至产品人员, 提早修改bug可以大量节省时间,以及资金成本。
2. 在产品开发初期早做异常测试, 在产品开发的早期, 一般仅仅开发出一些部分模块,没办法进行完整的测试, 因此这个时候进行异常测试, 通常异常情况下的程序处理开发人员未必考虑到, 这个时候可以早点发现, 但是开发人员未必有时间修改,但是早点发现, 在以后有时间时好进行修改, 这样也可以节省时间。
3. 早点做性能、压力测试,性能一旦不达标, 有可能早成软件较大的修改,甚至架构的调整, 因此早做,万一有问题好及时调整。
4. 测试尽量全面测试, 尽可能多的早点反馈各种测试结果
5. 详细记录测试过程和截图层, 这样便于程序员排查
6. 全民结兵, 尽早发动全部员工进行黑盒测试, 早点发现问题,早点解决
7. 专业的压力测试工具等进行详细的测试等
10. 没错,这里是10,缺少了8,9, 缺少的是 测试人员要做的其他测试, 这里的10是最后的测试。 最后的测试是回归的, 全面的测试,在产品最后发布前要把全部功能测试一遍, 重点bug要检验一下, 压力要检验一下, 部署环境要测试一下, 等等。。。。