## 根据软件的生命周期:
(1)需求分析阶段:需求规格说明书——检测需求文档是否正确实现了用户需求
(2)系统设计阶段: 概要设计说明书
详细设计说明书——检测是否有逻辑和设计中的错误
(3)编码阶段:源代码——检测是否有编程上的错误
(4)系统测试阶段:检测软件是否满足了用户的需求
## 测试级别(明确在不同阶段测试的目的)
(1)单元测试(效果好效率低):针对被测系统最小的组成单元实施的测试,一般是类或函数,也可能是最小功能单元。——检测是否满足详细设计中的要求
又称模块测试,针对软件设计中的最小单位——程序模块,进行正确性检查的测试工作。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。
单元定义:C中指一个函数,Java中指一个类,在图形化的软件中,单元一般指1个窗口,1个菜单。
![](https://img.kancloud.cn/8e/0a/8e0a011b66f41172736819521f140462_777x424.png)
• 1.什么时候进行单元测试?
• 2.由谁来做单元测试?
• 3.单元测试的依据?
• 4.单元测试的通过标准?
• 5.国内单元测试的现状?
• 6.如何进行单元测试?
(2)集成测试:针对于组件/单元与组件/单元之间的接口进行的测试——检测接口设计是否与设计相符。分为三种:函数间集成、模块间集成、子系统间集成
![](https://img.kancloud.cn/5c/f8/5cf8c6294e9327f1072bf8c26313a329_790x216.png)
• 1.什么时候进行集成测试?
• 2.由谁来做集成测试?测试人员
• 3.集成测试的依据?
(3)系统测试(效率高商业软件):通过集成测试得到的软件,部署在真实的用户环境下进行的测试。系统测试指的是将整个软件系统看为一个整体进行测试,包括对功能、性能、以及软件所运行的软硬件环境进行测试。系统测试在系统集成完毕后进行测试,前期主要测试系统的功能是否满足需求,后期主要测试系统运行的性能是否满足需求,以及系统在不同的软硬件环境中的兼容性等。
(4)验收测试:以用户为主的测试,验收组应该由项目组成员、用户代表组成。
分为α(alpha也称内侧版本)测试:测试人员在开发环境下进行,开发人员在场,发现问题及时修改,测试人员在受控环境下进行的测试、β(beta也称公测本)测试:开发人员不在场,测试人员在在自然环境测试,发现问题专人统一收集,由研发人员修改。Y(gamma也称候选版)也就是上线前的最终测试,测试完成后需达到上线标准
## 按照测试内容分类
功能测试:关注功能正常(包含兼容性测试),除了下面分类都测;
性能测试:关注(比如前端性能、后端性能);
安全测试:关注传输、存储等安全;
特性测试:特性指平台差异(即部分兼容性测试),如PC端鼠标,键盘操作特性(Tab键等);如手机触屏操作,横竖屏,中断恢复(来电)等。
## 按是否查看代码划分
### 1 黑盒测试
黑盒测试也称功能测试或者数据驱动测试,测试中把被测的软件当成一个黑盒子,不关心盒子的内部结构是什么,只关心软件的输入数据与输出数据。
![](https://img.kancloud.cn/f9/7a/f97add4066c3452e4e105fafc73f995e_606x367.png)
黑盒测试能发现以下几类错误:
功能不对或功能遗漏。
界面错误。
数据库访问或者处理错误。
性能问题
#### 黑盒测试的优点
• 测试人员不需要了解实现得细节,包括特定的编程语言(没有编程经验的人也可以设计测试用例);
• 测试人员和编程人员是相互独立的(黑盒测试用例设计与程序如何实现无关);
• 从用户的角度进行测试,很容易被接受和理解;
• 有助于暴露任何与规格不一致或者歧异的地方;
#### 黑盒测试的缺点
• 不能测试程序内部特定部位;
• 如果程序未执行的代码无法发现;
• 不可能做到穷举测试
#### 黑盒测试的分类
(1)功能测试(functiontesting)
是黑盒测试的一方面,它检查实际软件的功能是否符合用户的需求。
逻辑功能测试(functiontesting)
界面测试(UItesting)
易用性测试(usability testing)
安装测试(installationtesting)
兼容性测试(compatibilitytesting)
(2)性能测试(performance testing)峰值(后面详细 现在了解)
是软件测试的高端领域,性能测试工程师的待遇和白盒测试工程师不相上下,通常我们所说的高级软件测试工程师一般就是指性能测试或是白盒测试工程师。
时间性能(事务响应时间等)
空间性能(系统资源消耗)
一般性能测试
稳定性测试
负载测试:通过负载测试来确定在各种工作负载下,系统各项性能指标的变化情况。
压力测试:通过确定一个系统的瓶颈或者刚好不能接受的性能点,来获得系统能够提供的最大服务级别。
#### 2 白盒测
白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒指的打开盒子,去研究里面的源代码和程序结果。
![](https://img.kancloud.cn/72/82/728241fea382f65edb4d4c3c62bc1bad_534x408.jpg)
#### 优点
• 迫使测试人员去仔细思考软件的实现
• 可以检测代码中的每条分支和路径
• 揭示隐藏在代码中的错误
• 对代码的测试比较彻底
• 最优化
#### 缺点
• 昂贵
• 无法检测代码中遗漏的路径和数据敏感性错误
• 不验证规格的正确性
### 3 灰盒测试
灰盒测试,是介于白盒测试与黑盒测试之间的一种测试,既可保证黑盒的关注点又可掌控白盒的内部结构,但不会去对内部程序功能和运作做详细了解,灰盒测试结合了白盒测试和黑盒测试的要素。
## 按是否执行程序划分
### 静态方法
静态方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。阿旺分析如下
* 检查项:代码风格和规则审核;程序设计和结构的审核;业务逻辑的审核;走查、审查与技术复审手册。
* 静态质量:度量所依据的标准是ISO9126。在该标准中,软件的质量用以下几个方面来衡量,即功能性(Functionality)、可靠性(Reliability)、可用性(Usability)、有效性(Efficiency)、可维护性(Maintainability)、可移植性(Portability)。
### 动态测试方
动态测试方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能。这种方法由三部分组成:构造测试用例、执行程序、分析程序的输出结果。
## 按是否查看代码划分
1 手工测(Manual testing)
手工测试就是由人去一个一个的输入用例,然后观察结果,和机器测试相对应,属于比较原始但是必须的一个步骤。阿旺总结优缺点:
* 优点:自动化无法替代探索性测试、发散思维类无既定结果的测试。
* 缺点:执行效率慢,量大易错。
2 自动化测试(Automation Testing)
就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。简单说自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。
自动化测试比如功能测试自动化、性能测试自动化、安全测试自动化。
通常所说的自动化是指功能测试自动化。
Findyou看AI技术的兴起发展,类似可预见工作都有可能会被伪AI代替。
## 冒烟测试(Smoke Testing)
在《微软项目求生法则》一书第14章“构建过程”关于冒烟测试,就是开发人员在个人版本的软件上执行目前的冒烟测试项目,确定新的程序代码不出故障。
冒烟测试目的是确认软件基本功能正常,冒烟测试的执行者是版本编译人员。
现基本执行对象为测试人员,在正规测试一个新版本之前,投入较少的人力和时间验证基本功能,通过则测试准入
## 随机测试(Ad-hoc Testing)
随机测试主要是根据测试者的经验对软件进行功能和性能抽查。
根据测试说明书执行用例测试的重要补充手段,是保证测试覆盖完整性的有效方式和过程。随机测试主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试用例(TestCase)没有覆盖到的部分。
## 安全测试(Security Testing)
安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程 。
Findyou觉现在对安全知识的普及,大家意识都提上来了。比如现在越来越多的不支持HTTP协议,转用HTTPS等。
## 探索性测试(Exploratory testing)
探索性测试可以说是一种测试思维技术。它没有很多实际的测试方法、技术和工具,但是却是所有测试人员都应该掌握的一种测试思维方式。探索性强调测试人员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略。
探索性测试自动化暂时无法代替。Findyou也无法被代替。
## 回归测试(Regression Testing)
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。
在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。通过选择正确的回归测试策略来改进回归测试的效率和有效性是很有意义的。
![](https://img.kancloud.cn/0b/3c/0b3c2511ae6707945e4ce67569718233_1549x735.png)