一、什么是软件测试
????????说起软件测试,很多人的第一想法就是找bug。 ????????其实这是不正确。
???????? 软件测试的定义是:
在软件生产过程中,手工或者利用软件测试工具(自动)有计划地检查程序代码和用户文档,检查软件功能和软件性能,来发现软件产品中存在的问题(bug),并追踪和验证问题(bug)的处理。
????????所以测试是为发现错误而执行一个程序或者系统的过程,测试是为了证明程序有错,而不是证明程序无错误。
????????比如我们考试做完卷子,需要检查,这个过程也是在“测试”; ????????买了一台新手机,打开看看功能能不能正常使用,这也是在测试。
???????? ????????基本的一个解释就是:验证软件的功能是否满足用户需求。 ????????
????????纵观软件测试的整个历史:
- 1979年,Glenford Myers(美 梅尔斯),<软件测试艺术>[The Art of Software Testing]:为了发现错误而执行程序或者系统的过程。
- 1983年,Bill Hetzel在《软件测试完全指南》(Complete Guide of Software Testing)一书中指出:测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量。
- 1983年,IEEE软件工程标准术语:使用人工或自动手段,来运行或测试某个系统的过程。其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
????????我们发现,软件测试的定义随着发展而不断扩展,但是不可否认的是软件测试最基本的活动就是找bug。而不同的定义只是说明了测试的目的以及如何来衡量测试是否成功。
二、软件测试与开发的区别
- 难易程度: 开发广度小,专业度高。测试广度大,专业度低
- 工作环境 基本类似
- 薪水 中小企业总体比研发低,自动化等专业测试领域和研发基本无差距。大厂研发测试基本无差别
- 发展前景 自动化测试、安全测试等领域发展前景和研发基本一致。
- 繁忙程度 一般比研发轻松,但敏捷模式下差距不大,产品发布前压力比较大
- 技能要求 测试要求更广泛:业务能力,设计和架构分析能力,测试手段和工具使用,用户模型分析和理解以及编程能力。
三、选择软件测试的原因
????????假定你打算写一个VOIP程序
????????请问怎么测试它的效果?没有经验的测试可能会告诉你我连上两台机器确定电话可以打通就可以了,而有经验的测试可能会给你列出一大堆的组合:
你的场景支持笔记本和耳机么?你支持什么耳机?蓝牙还是3.5mm插口耳机?你的场景支持使用笔记本麦克风么?还是只支持配麦克风的耳机?你的场景支持使用手机设备么?Android还是iOS?
????????为什么要列出这么多东西?有人可能会对此嗤之以鼻:只是为了保证什么都能测到而已。但是其实这里每一个场景都是有意义的:
????????蓝牙耳机普遍都有硬件支持的回声消除模块(Acrostic Echo Cancellation),而普通3.5mm耳机则通常由于结构简单而没有。对于没有回声消除的普通耳机,我们必须自己提供软件的回声消除避免影响接听效果。我们不能使用完全相同的逻辑处理耳机和笔记本麦克风的语音输入。
????????因为耳机麦克风的定向性比笔记本麦克风强很多,它只能取到声源凑得很近时发出的声音,而笔记本麦克风的设计则是用来在屏幕前相当大的范围内取声的。如果对笔记本麦克风使用耳机麦克风的声音检测算法则会由于灵敏度过高而将大量周边杂音收入,影响通话效果。而且有些场景是笔记本麦克风特有的,比如用户的打字音和风扇噪音。
???????? Android和iOS都有内建的通话模块。iOS甚至提供了非常高效的回声消除和增益控制模块,但是没有静音检测模块。所以如果桌面程序移植到手机上时可以很好地利用这些功能简化自己的代码。而Android的回声消除模块则表现非常不稳定,需要很多调整才能得到较好的效果。
????????这就是所谓的“发现”,发现开发没注意的地方,发现项目经理没定义的场景,并提出相应的测试场景。这需要宽广的知识面才能做到。没有经验的测试更倾向于对所有测试的平台做全排列,但求不忽略任何一个场景。这在资源无限的情况下当然没问题,但真实项目中,测试的资源经常是最有限的,所以我们得学会怎么做最有效的测试,而不是闭着眼睛搞全面铺开。 ????????????????????????????????——引用自软件测试的魅力何在?您为什么选择测试一行而不做开发?
????????
一句话概括就是,发现他人未曾注意的方向,解决他人不曾注意的问题。这是一种乐趣
|