96.软件测试和自动化测试
软件测试是一种用来促进鉴定软件的正确性、完整性、安全性和品质的过程,也就是在规定的条件下对程序进行操作以发现程序中的错误,衡量软件的品质并对其是否能满足设计要求
课程内容
软件测试和自动化测试
软件测试概述
软件测试是一种用来促进鉴定软件的正确性、完整性、安全性和品质的过程,也就是在规定的条件下对程序进行操作以发现程序中的错误,衡量软件的品质并对其是否能满足设计要求进行评估的过程。
测试的方法
黑盒测试:测试应用程序的功能,而不是其内部结构或运作。测试者不需具备应用程序的代码、内部结构和编程语言的专门知识。测试者只需知道什么是系统应该做的事,即当键入一个特定的输入,可得到一定的输出。测试案例是依应用系统应该做的功能,照规范、规格或要求等设计。测试者选择有效输入和无效输入来验证是否正确的输出。此测试方法可适合大部分的软件测试,例如集成测试和系统测试。
白盒测试:测试应用程序的内部结构或运作,而不是测试应用程序的功能(即黑箱测试)。在白箱测试时,以编程语言的角度来设计测试案例。测试者输入数据验证数据流在程序中的流动路径,并确定适当的输出,类似测试电路中的节点。
由于时间和成本的约束,软件测试中一个最为关键的问题就是:“在所有可能的测试用例中,哪个子集能发现最多的错误?”。所以在设计测试用例时,白盒测试看重程序逻辑覆盖的程度(语句覆盖、条件覆盖、分支覆盖),黑盒测试可以使用等价类划分、边界值分析、因果图分析、错误猜测等方法来设计测试用例。
测试的种类(阶段)
单元测试:对软件组成单元进行测试,其目的是检验软件基本组成单位的正确性,测试的对象是软件设计的最小单位 - 函数。
集成测试:将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。其主要目的是检查软件单位之间的接口是否正确,集成测试的对象是已经经过单元测试的模块。
系统测试:系统测试主要包括功能测试、界面测试、可靠性测试、易用性测试、性能测试。
回归测试:为了检测代码修改而引入的错误所进行的测试活动。回归测试是软件维护阶段的重要工作,有研究表明,回归测试带来的耗费占软件生命周期的1/3总费用以上。
测试驱动开发(敏捷测试)
测试驱动开发包括以下三个步骤:
- 为未实现的新功能或者改进编写自动化测试。
- 提供通过所有定义的测试的最小代码量。
- 重构代码以满足所需的质量标准。
测试驱动开发的好处在于可以有效的防止软件回归以及提供更有质量的代码。还有就是验收测试应该由客户来进行,客户通过对使用场景来设计验收测试,对应用程序是否满足他们的要求进行客观、公正的确认。能够通过单元测试、甚至是系统测试的功能未必能够通过客户的验收测试。
互联网应用和移动应用的测试
互联网应用的测试策略:
- 表示层测试(内容测试、站点结构测试、用户环境(浏览器、操作系统等))
- 业务层测试(性能、数据验证、事务、外部服务)
- 持久层测试(响应时间、数据完整性、容错性)
移动应用的测试策略:
- 真机测试
- 基于模拟器的测试
单元(模块)测试
Python的标准库里有为编写单元测试而准备的unittest模块,执行测试时建议使用pytest或nose2。pytest是一款能够自动搜索并执行测试的测试执行工具,并且会输出详细的错误报告。关于单元测试可以看看。