软件技术体系
简介
软件技术体系(Software Technology Stack)是指在软件开发过程中所使用的各种技术和工具的组合。一个完整的软件技术体系包括编程语言、开发框架、数据库、服务器、版本控制工具、开发工具以及测试工具等。
软件技术体系价值
- 提高测试效率
- 提高测试质量
- 促进团队协作
- 提高就业竞争力
基础概念
软件测试分类
软件测试是一项复杂而关键的活动,旨在确保软件系统的质量和可靠性。根据不同的标准和目的软件测试进行分类。了解和掌握不同类型的测试方法,可以帮助测试人员全面评估软件的质量,发现并修复潜在的问题,从而提高软件的可靠性和用户满意度。
按开发阶段分类
- 单元测试:测试代码的最小单元,如函数或方法,确保它们按照预期工作。通常由开发人员编写和执行。
- 集成测试:测试多个单元之间的接口和交互,确保它们能够协同工作。
- 系统测试:对整个系统进行测试,验证系统是否符合需求规格说明书。
- 验收测试:由最终用户或客户进行的测试,以确定系统是否满足业务需求和可交付标准。
系统测试分类
- 系统测试:
- 功能测试:验证系统的每个功能是否按照需求规范运行。
- 兼容性测试:验证系统在不同环境、操作系统、浏览器和设备上的兼容性。
- 性能测试:评估系统的性能表现,如响应时间、吞吐量和资源使用情况。
- 安全测试:识别系统中的安全漏洞,确保系统能够抵御攻击。
验收测试分类
- 验收测试:
- α 测试:由内部人员在开发环境中进行的测试,主要在软件开发的早期阶段进行。
- β 测试:由实际用户在真实环境中进行的测试,通常在软件发布之前进行,以获取用户反馈。
按是否查看代码
- 黑盒测试:测试人员不关注代码内部结构,只关注输入和输出。测试用例基于需求和功能规格设计。
- 白盒测试:测试人员需要了解代码的内部结构,测试覆盖代码的不同路径和条件。
- 灰盒测试:结合黑盒测试和白盒测试的方法,测试人员了解一些代码内部结构,但主要关注输入和输出。
黑盒测试
- 又称数据驱动测试。
- 完全不考虑程序内部结构和内部特性。
- 注重于测试软件的功能需求。
- 只关心软件的输人数据和输出数据。
白盒测试
- 研究产品内部的源代码和程序结构。
- 单元测试就是白盒测试的一种。
按测试执行方式
- 静态测试:静态测试是在不运行程序代码的情况下进行的测试,通过检查代码、文档和设计等来发现潜在的问题。(代码审查、静态分析、走查、技术评审、同行评审等。)
- 动态测试:动态测试是在运行程序代码的情况下进行的测试,通过实际执行代码来验证软件的功能和性能。(单元测试、集成测试、系统测试、验收测试等。)
按是否手工执行划分
- 手工测试:由测试人员手动执行测试用例,适用于探索性测试和一些复杂的测试场景。
- 自动化测试:使用测试工具和脚本自动执行测试用例,适用于重复性高、容易自动化的测试。
其他分类
- 冒烟测试:冒烟测试是对软件进行的一种初步测试,用来确保软件的基本功能正常工作。其目的是在更深入的测试之前,验证软件的主要功能是否能正常运行,确保软件没有重大问题或崩溃。
- 回归测试:回归测试是在软件修改后进行的测试,以确保新代码的变更没有引入新的缺陷或破坏已有功能。其目的是验证修改后的系统仍然符合原有的需求和功能。
- 随机测试:随机测试是一种测试方法,通过随机生成输入数据或随机选择操作来测试软件系统。其目的是发现系统在非预期输入下的行为和潜在问题。
- 探索性测试:探索性测试是一种非正式的、同时进行测试设计和执行的测试方法。测试人员根据自己的经验和直觉,在测试过程中不断调整和设计新的测试用例,动态探索软件系统的行为和缺陷。
分层测试体系
分层测试体系是一种系统化的测试方法,将测试过程划分为多个层次或阶段,每个层次针对特定的测试目标和需求进行测试。这样可以确保软件质量,通过多层次的测试全面覆盖各种测试场景和需求。
自动化分层测试体系
自动化测试分层可以理解为将测试任务划分为多个层次,每个层次专注于不同的测试任务和范围。通过这种分层方式,测试人员能够更有效地管理和组织测试工作,确保测试的全面性和准确性。
- 70% 单元测试
- 20% 服务测试
- 10% 用户界面测试
- 低层测试高频率:根据测试金字塔模型,低层次的测试(如单元测试)应当更频繁地执行,因为这些测试运行速度快且能够以较低的成本发现问题。随着测试层级的提升,测试的频率可以逐步降低。
- 早期测试策略:测试应当尽早开始,以便尽快发现问题。这意味着在代码编写阶段就要开始进行单元测试,确保早期捕捉和解决缺陷。
- 全面覆盖测试:每个层次的测试都需要全面覆盖其关注的方面。例如,UI 测试应覆盖所有用户界面元素,系统测试则应覆盖所有业务逻辑,确保所有功能都经过充分测试。
- 测试独立性原则:各层次的测试应保持独立,不依赖其他层次的测试。单元测试应只关注被测单元,不应依赖于UI或数据库等其他组件,以确保测试的准确性和可维护性。
单元测试
执行单元测试框架:
- Java:
- JUnit:
JUnit
是Java
最流行的单元测试框架之一,用于编写和运行重复的测试。它提供了许多有用的注解和断言方法。 - TestNG::
TestNG
是一个功能强大的测试框架,设计灵活,支持单元测试、集成测试和端到端测试。
- JUnit:
- Python:
- unittest:
unittest
是Python
的内建单元测试框架,灵感来自于 `JUnit,提供了编写和执行测试的基本工具。 - pytest:
pytest
是一个流行的Python
测试框架,以其简洁的语法和强大的功能而著称。它支持更复杂的测试需求和插件。
- unittest:
接口测试
- 接口全称
Application Programming Interface
,一般称作API
。 - 是针对软件对外提供服务的接口的输入输出进行测试。
- 检查接口参数传递的正确性,接口功能实现的正确性,输出结果的正确性,以及对各种异常情况的容错处理的完整性和合理性。
选择合适的工具可以帮助更高效地进行接口测试,确保 API
的功能、性能和安全性。
执行接口测试的相关工具:
- Charles:
Charles
是一款HTTP
代理工具,提供了流量监控和调试功能。可以用来捕获、分析和修改HTTP
和HTTPS
请求。 - Fiddler:
Fiddler
是一个功能强大的HTTP
调试代理,可以捕获和分析网络流量。 - postman:
Postman
是一个流行的API
客户端,用于设计、测试和文档化 API。 - Jmeter:
JMeter
是一个开源的负载测试工具,可以用于性能测试和功能测试。 - loadRunner:
LoadRunner
是一个企业级负载测试工具,用于测试应用程序的性能和可伸缩性。 - python:
- Requests:
requests
是一个流行的Python HTTP
库,用于发送HTTP
请求和处理响应。 - HttpRunner:
HttpRunner
是一个基于Python
的开源API
测试工具,支持接口测试、性能测试和测试自动化。
- Requests:
- Java:
- HttpClient:
HttpClient
是Apache
提供的一个用于发送 HTTP 请求和处理响应的 Java 库。 - RestAssured:
RestAssured
是一个用于Java
的库,用于测试RESTful Web
服务。
- HttpClient:
UI 测试
UI 测试(用户界面测试)是软件测试的一种类型,专注于验证应用程序的用户界面是否符合预期。它确保用户界面的各个方面,如布局、功能、交互、以及视觉效果,按照设计规范进行实现。
UI 测试方法:
- 人工方法:
- 人工查看:测试人员手动检查应用程序的用户界面,以确认所有元素(按钮、输入框、菜单等)是否按照需求规格正确显示和布局。
- 人工操作:测试人员手动执行操作(如点击、输入、滚动等),以验证用户界面的功能是否符合预期。
- 自动化方法:
- web:
Selenium
适用于各种Web
浏览器和操作系统。 - app:
Appium
适用于Android
和iOS
移动应用。
- web:
总结
- 软件测试的分类(开发阶段、是否查看代码、执行方式、是否手工执行、其他分类)。
- 自动化分层测试体系(单元测试、服务测试、用户界面测试)。