一、软件测试定义
经典定义:软件测试是为了发现错误而操作程序的过程。
定义:通过人工或自动的方式,检测软件的使用,发现需求文档和程序中的错误、缺陷和不合理的地方,并验证软件是否达到规定的需求。(验证依据是需求文档)
目标:对软件的质量进行全面的评估和测试,使用户的体验更好,使软件的质量更高。
二、软件测试方法
1、按开发阶段分
单元测试:又称模块测试,对软件的组成单元进行测试。(模块,即代码片段,是软件测试的最小单元)。
目的:检测组成软件基本单元的准确性。
集成测试:又称联合测试(联调),将程序模块组装起来,对集成后的系统接口和功能进行测试。
目的:检测软件单元之间的接口是否正确
系统测试:把软件看成是一个系统的测试,包括对软件功能、性能以及硬件环境的测试。
冒烟测试:不考虑异常场景,按照正确的操作,过一遍测试流程。
目的:保证软件的主流程是通的,确保开发的质量合格。
回归测试:测试中发现bug,开发将bug修复好后,重新测的过程。
目的:把错误回归重测,确保开发修复好了bug。
验收测试:上线前的测试,检测软件是否满足需求方的要求。
2、按是否手工执行分
手工测试:人工输入用例,观察结果。(所有软件的第一版都是手工测试)
自动化测试:将人工输入用例的操作编写成脚本,让机器来执行。(不是所有的软件都适合做自动化,编写脚本需要时间成本)
3、 按是否查看代码分
黑盒测试:又成功能测试,把软件看成是一个黑盒子,不关心内部如何实现,只关心输入和输出。
白盒测试:又称结构测试,透明盒测试,打开盒子,研究里面的代码和结果。
灰盒测试:介于黑盒和白盒之间的测试,不只是考虑输入和输出,还要考虑如何实现的,但不详细看代码。(前后端如何交互,数据库如何存储),等价于接口测试,接口测试属于灰盒测试。
4、按是否运行划分
静态测试:检查文档、界面的问题。
动态测试:执行软件,检查结果与需求之间的差异。
5、按测试的对象分
(非功能性)
性能测试:检查软件是否满足需求规定的性能。(评价标准:响应时间、吞吐量和稳定性)
界面测试:UI测试,检查界面布局是否合理,风格是否一致,是否美观。
易用性测试:检查软件的交互适应性,用户体验。
安全测试:检查软件的网络安全、数据安全等。
兼容性测试:检查软件与软件之间 、软件与硬件之间能否正常运行。(平台是否兼容,浏览器是否兼容,软件版本是否向前向后兼容,与其他软件是否兼容,数据表增加字段是否兼容等)
文档测试:检查文档的正确性(开发文件,用户文件,管理文件)
安装卸载测试:测试软件的安装和卸载
6、按实施的组织划分
α测试:开发人员在开发环境模拟用户进行测试。
β测试:用户在自己的环境测试。
第三方测试:第三方测试公司外包测试。
7、按测试地域划分
本地测试:以上都是本地化测试。
国际化测试:面向其他国家用户的测试。
三、软件测试原则
1、测试应尽早进行。(最好在需求阶段就介入)
2、开发应避免检查自己的程序,软件测试应由测试人员进行。
3、软件测试要检查程序是否做了该做的是(满足需求)和不该做的事(需求之外)。
4、设计测试用例应考虑合法和不合法的输入,边界值和特殊情况(断电断网)。
5、长期保存测试用例,有助于回归测试。
四、软件测试策略
(布局,大局观,策略属于计划)
1、测试方法:选择最适合当前项目的测试方法。
2、角色和职责:明确各角色和对应的职责(项目经理、测试经理、测试人员等)。
3、环境需求:明确软硬件环境需求和网络环境,以便识别出资源方面的风险。
4、风险分析:预测风险,找到对应的解决办法(人员变动,开发进度慢等)。
5、测试进度评估:评估完成测试所需要的时间,明确测试范围,根据测试资源来制定测试进度计划。
6、回归策略:确定哪些用例应该在回归测试中运行,修复bug可能会影响的其他功能(和开发沟通,明确范围;测试bug本身相关的上下游操作;整体回归,核心用例和出现bug的功能)
7、优先级:为模块排定优先级,根据测试资源进行合理分配。
五、软件测试模型
软件测试模型是将测试活动进行抽象,明确测试和开发的对应关系。
1、瀑布模型
缺点:测试在前四个阶段没有参与,介入时间太晚。
2、V模型
优点:明确标明了测试过程中对应的关系;
缺点:测试介入太晚,没有体现尽早测试和不断测试的原则。