Skip to content

软件技术体系

简介

软件技术体系(Software Technology Stack)是指在软件开发过程中所使用的各种技术和工具的组合。一个完整的软件技术体系包括编程语言、开发框架、数据库、服务器、版本控制工具、开发工具以及测试工具等。

软件技术体系价值

  • 提高测试效率
  • 提高测试质量
  • 促进团队协作
  • 提高就业竞争力

基础概念

软件测试分类

软件测试是一项复杂而关键的活动,旨在确保软件系统的质量和可靠性。根据不同的标准和目的软件测试进行分类。了解和掌握不同类型的测试方法,可以帮助测试人员全面评估软件的质量,发现并修复潜在的问题,从而提高软件的可靠性和用户满意度。

todo 截图

按开发阶段分类

  • 单元测试:测试代码的最小单元,如函数或方法,确保它们按照预期工作。通常由开发人员编写和执行。
  • 集成测试:测试多个单元之间的接口和交互,确保它们能够协同工作。
  • 系统测试:对整个系统进行测试,验证系统是否符合需求规格说明书。
  • 验收测试:由最终用户或客户进行的测试,以确定系统是否满足业务需求和可交付标准。
系统测试分类

todo 截图

  • 系统测试:
    • 功能测试:验证系统的每个功能是否按照需求规范运行。
    • 兼容性测试:验证系统在不同环境、操作系统、浏览器和设备上的兼容性。
    • 性能测试:评估系统的性能表现,如响应时间、吞吐量和资源使用情况。
    • 安全测试:识别系统中的安全漏洞,确保系统能够抵御攻击。
验收测试分类

todo 截图

  • 验收测试:
    • α 测试:由内部人员在开发环境中进行的测试,主要在软件开发的早期阶段进行。
    • β 测试:由实际用户在真实环境中进行的测试,通常在软件发布之前进行,以获取用户反馈。

按是否查看代码

  • 黑盒测试:测试人员不关注代码内部结构,只关注输入和输出。测试用例基于需求和功能规格设计。
  • 白盒测试:测试人员需要了解代码的内部结构,测试覆盖代码的不同路径和条件。
  • 灰盒测试:结合黑盒测试和白盒测试的方法,测试人员了解一些代码内部结构,但主要关注输入和输出。
黑盒测试
  • 又称数据驱动测试。
  • 完全不考虑程序内部结构和内部特性。
  • 注重于测试软件的功能需求。
  • 只关心软件的输人数据和输出数据。

todo 截图

白盒测试
  • 研究产品内部的源代码和程序结构。
  • 单元测试就是白盒测试的一种。

todo 截图

按测试执行方式

  • 静态测试:静态测试是在不运行程序代码的情况下进行的测试,通过检查代码、文档和设计等来发现潜在的问题。(代码审查、静态分析、走查、技术评审、同行评审等。)
  • 动态测试:动态测试是在运行程序代码的情况下进行的测试,通过实际执行代码来验证软件的功能和性能。(单元测试、集成测试、系统测试、验收测试等。)

按是否手工执行划分

  • 手工测试:由测试人员手动执行测试用例,适用于探索性测试和一些复杂的测试场景。
  • 自动化测试:使用测试工具和脚本自动执行测试用例,适用于重复性高、容易自动化的测试。

其他分类

  • 冒烟测试:冒烟测试是对软件进行的一种初步测试,用来确保软件的基本功能正常工作。其目的是在更深入的测试之前,验证软件的主要功能是否能正常运行,确保软件没有重大问题或崩溃。
  • 回归测试:回归测试是在软件修改后进行的测试,以确保新代码的变更没有引入新的缺陷或破坏已有功能。其目的是验证修改后的系统仍然符合原有的需求和功能。
  • 随机测试:随机测试是一种测试方法,通过随机生成输入数据或随机选择操作来测试软件系统。其目的是发现系统在非预期输入下的行为和潜在问题。
  • 探索性测试:探索性测试是一种非正式的、同时进行测试设计和执行的测试方法。测试人员根据自己的经验和直觉,在测试过程中不断调整和设计新的测试用例,动态探索软件系统的行为和缺陷。

分层测试体系

分层测试体系是一种系统化的测试方法,将测试过程划分为多个层次或阶段,每个层次针对特定的测试目标和需求进行测试。这样可以确保软件质量,通过多层次的测试全面覆盖各种测试场景和需求。

自动化分层测试体系

自动化测试分层可以理解为将测试任务划分为多个层次,每个层次专注于不同的测试任务和范围。通过这种分层方式,测试人员能够更有效地管理和组织测试工作,确保测试的全面性和准确性。

  • 70% 单元测试
  • 20% 服务测试
  • 10% 用户界面测试

todo 截图

  1. 低层测试高频率:根据测试金字塔模型,低层次的测试(如单元测试)应当更频繁地执行,因为这些测试运行速度快且能够以较低的成本发现问题。随着测试层级的提升,测试的频率可以逐步降低。
  2. 早期测试策略:测试应当尽早开始,以便尽快发现问题。这意味着在代码编写阶段就要开始进行单元测试,确保早期捕捉和解决缺陷。
  3. 全面覆盖测试:每个层次的测试都需要全面覆盖其关注的方面。例如,UI 测试应覆盖所有用户界面元素,系统测试则应覆盖所有业务逻辑,确保所有功能都经过充分测试。
  4. 测试独立性原则:各层次的测试应保持独立,不依赖其他层次的测试。单元测试应只关注被测单元,不应依赖于UI或数据库等其他组件,以确保测试的准确性和可维护性。
单元测试

todo 截图

执行单元测试框架:

  • Java:
    • JUnit:JUnitJava 最流行的单元测试框架之一,用于编写和运行重复的测试。它提供了许多有用的注解和断言方法。
    • TestNG::TestNG 是一个功能强大的测试框架,设计灵活,支持单元测试、集成测试和端到端测试。
  • Python:
    • unittest:unittestPython 的内建单元测试框架,灵感来自于 `JUnit,提供了编写和执行测试的基本工具。
    • pytest:pytest 是一个流行的 Python 测试框架,以其简洁的语法和强大的功能而著称。它支持更复杂的测试需求和插件。
接口测试
  • 接口全称 Application Programming Interface,一般称作 API
  • 是针对软件对外提供服务的接口的输入输出进行测试。
  • 检查接口参数传递的正确性,接口功能实现的正确性,输出结果的正确性,以及对各种异常情况的容错处理的完整性和合理性。

选择合适的工具可以帮助更高效地进行接口测试,确保 API 的功能、性能和安全性。

执行接口测试的相关工具:

  • Charles:Charles 是一款 HTTP 代理工具,提供了流量监控和调试功能。可以用来捕获、分析和修改 HTTPHTTPS 请求。
  • Fiddler:Fiddler 是一个功能强大的 HTTP 调试代理,可以捕获和分析网络流量。
  • postman:Postman 是一个流行的 API 客户端,用于设计、测试和文档化 API。
  • Jmeter:JMeter 是一个开源的负载测试工具,可以用于性能测试和功能测试。
  • loadRunner:LoadRunner 是一个企业级负载测试工具,用于测试应用程序的性能和可伸缩性。
  • python:
    • Requests:requests 是一个流行的 Python HTTP 库,用于发送 HTTP 请求和处理响应。
    • HttpRunner:HttpRunner 是一个基于 Python 的开源 API 测试工具,支持接口测试、性能测试和测试自动化。
  • Java:
    • HttpClient:HttpClientApache 提供的一个用于发送 HTTP 请求和处理响应的 Java 库。
    • RestAssured:RestAssured 是一个用于 Java 的库,用于测试 RESTful Web 服务。
UI 测试

UI 测试(用户界面测试)是软件测试的一种类型,专注于验证应用程序的用户界面是否符合预期。它确保用户界面的各个方面,如布局、功能、交互、以及视觉效果,按照设计规范进行实现。

todo 截图

UI 测试方法:

  • 人工方法:
    • 人工查看:测试人员手动检查应用程序的用户界面,以确认所有元素(按钮、输入框、菜单等)是否按照需求规格正确显示和布局。
    • 人工操作:测试人员手动执行操作(如点击、输入、滚动等),以验证用户界面的功能是否符合预期。
  • 自动化方法:
    • web:Selenium适用于各种 Web 浏览器和操作系统。
    • app:Appium适用于 AndroidiOS 移动应用。

总结

  • 软件测试的分类(开发阶段、是否查看代码、执行方式、是否手工执行、其他分类)。
  • 自动化分层测试体系(单元测试、服务测试、用户界面测试)。