软件工程测试

news2024/11/24 18:49:00

1. 软件测试概述

通俗地说,软件测试是为了发现错误而执行程序的过程。

软件测试:根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。

1.1 测试的目的

通俗地说,软件测试是为了发现错误而执行程序的过程。 软件测试的目的绝不是为了证明软件的正确性,而是为了尽可能多地发现软件中的错误、排除错误,从而将一个高质量的软件交付给用户使用。

Grenford J.Myers就软件测试目的提出以下观点:

  • 测试是程序的执行过程,目的在于发现错误;
  • 一个好的测试用例在于能发现至今未发现的错误;
  • 一个成功的测试是发现了至今未发现的错误的测试。

1.2 测试的原则

  • 应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。
  • 测试用例应由测试输入数据和与之对应的预期输出结果这两部分组成。
  • 应由第三方人员从事测试工作。
  • 在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。
  • 注意测试中的错误群集现象。
  • 严格执行测试计划,排除测试的随意性。
  • 妥善保存测试计划、测试用例、出错统计和最终分析报告。

1.3 测试的方法

如果已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。

如果已知产品的内部工作过程,可以进行测试证明每种内部动作是否按设计规格要求正常进行。

软件测试一般也常用这样的两种方法,前者称为黑盒测试,后者称为白盒测试。

黑盒测试

黑盒测试也称功能测试,是通过测试来检测每个功能是否都能正常使用。

它把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。

白盒测试

白盒测试是对软件的过程性细节做细致的检查,又称为结构测试。

它把测试对象看做一个打开的盒子或透明的盒子,允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。

1.4 测试的步骤

软件测试采用“自底向上”的方法,即从小规模测试开始逐步进行大规模测试。

首先重点测试单个程序模块,然后重点转移到正在集成的模块组,接着对整个系统进行测试,最后由用户进行系统的验收测试。

软件测试一般分为四个阶段:单元测试、 集成测试、系统测试和验收测试。

单元测试

单元测试是指对软件中的最小可测试单元进行检查和验证。此测试步骤容易发现编码和详细设计阶段的错误。

集成测试

集成测试是把软件单元按照软件概要设计规格说明组装子系统或系统,测试子系统或系统的工作是否达到或实现相应技术指标及要求。着重测试模块之间的接口,即模块之间的通信是否正常等等。

系统测试

系统测试是将经过集成测试的软件作为计算机系统的一部分,与系统中其他部分结合起来,在实际运行环境下进行一系列严格有效的测试,以发现软件潜在的问题,保证系统的正常运行。

验收测试

验收测试是针对用户需求、业务流程进行的正式的测试,以确定系统是否满足验收标准,由用户或其他授权机构决定是否接受系统。

1.5 软件测试V模型

软件测试的四个阶段与前期开发的各个阶段的对应关系,即软件测试V模型:

2. 黑盒测试

2.1 黑盒测试概述

黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。

黑盒测试主要是为了发现以下错误:

  • 是否有功能错误,是否有功能遗漏。
  • 是否能够正确地接收输入数据并产生正确的输出结果。
  • 是否有数据结构错误或外部信息访问错误。
  • 是否有程序初始化和终止方面的错误。

2.2 等价类划分法

等价类划分法是一种典型的黑盒测试方法,是把程序的输入分为若干类(子集),然后每一类中选取少数代表性数据作为测试用例,每一类的代表性数据在测试中的作用等价于这一类中的其他值。

等价类划分法:解决如何选择适当的子集,使其尽可能多地发现错误。

步骤:划分等价类(列出等价类表)和选取测试用例。

2.3 等价类划分法案例

某一软件的注册用户名规定“必须是未注册过的5到16位英文字母或数字的字符串”,用等价类划分的方法得到上述规格说明的输入有效等价类和无效等价类表。

2.4 边界值划分法

边界值分析法是对等价类划分方法的补充。

测试工作经验:大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。所以针对各种边界情况设计测试用例,可以查出更多的错误。

边界:对于输入等价类和输出等价类而言,稍高于其边界值及稍低于其边界值的一些特定情况,所以边界值分析是通过选择等价类边界的测试用例进行测试的。

设计测试用例应当选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。

2.5 边界值划分法案例

某一软件的注册用户名规定“必须是未注册过的5到16位英文字母或数字的字符串”,采用等价类划分与边界值分析法相结合完成测试用例。

2.6 黑盒测试案例

采用等价类划分与边界值分析法相结合完成读者密码的测试用例设计。

读者密码规定“必须是6到12位英文字母、数字和特殊符号(空格除外)的组合,至少包含两种”。

建立输入数据的有效等价类表

建立输入数据的无效等价类表

基于边界值分析法设计测试用例

3. 白盒测试

3.1 白盒测试概述

白盒测试清楚盒子内部的东西以及里面是如何运作的,白盒测试目的:

  • 保证程序中所有关键路径都被测试到,防止系统投入使用后用户发现系统问题。
  • 便于衡量测试的完整性,即有没有把某个功能点的所有可能情况都测试到。
  • 可以测试到程序中所有的真分支、假分支。
  • 检查局部数据结构的有效性。
  • 检查程序的异常处理能力。
  • 检查代码是否遵循编码规范。

白盒测试的方法总体上分为静态白盒测试和动态白盒测试两大类。

静态白盒测试

静态白盒测试是一种不通过执行程序而进行测试的技术,其关键功能是检查软件的表示和描述是否一致,有无冲突或者歧义,包括检查文档内容、界面、代码规范等。

动态白盒测试

动态白盒测试将程序在受控的环境下使用特定的测试用例进行正式的运行,它显示了一个系统在检查状态下是正确还是不正确,最重要的动态测试技术是路径和分支测试。

3.2 静态白盒测试

静态白盒测试也称为人工测试,这种测试不实际运行被测系统本身,检查和审查代码的设计、结构,也称为结构分析,它能够尽早发现程序中30%-70%的缺陷,并为黑盒测试人员提供测试思路。

静态白盒测试一般包括代码检查、桌前走查和代码审查。

  • 代码检查:程序员自行设计测试用例,对源代码、详细设计进行仔细检查,并记录错误、不足之处等。
  • 桌前走查:测试人员先阅读相应的文档和源代码,然后人工输入测试数据,沿着程序的逻辑走查运行一遍,跟踪走查运行的进程来发现程序的错误。  
  • 代码审查:审查人员首先仔细阅读软件的有关资料,根据错误类型清单填写检测表,提出根据错误类型要提出的问题。

3.3 动态白盒测试

动态白盒测试的另一个常用名称是结构测试,因为软件测试员可以查看并使用代码的内部结构,从而设计和执行测试。

它根据程序的内部逻辑来设计测试用例,对程序模块的所有独立的执行路径至少执行一次,对所有逻辑判定的“真”、“假”取值至少测试一次,在循环的边界执行循环体,测试内部数据结构的有效性等等。

一般采用逻辑覆盖的白盒测试技术,即考察用测试数据运行被测程序时对程序逻辑的覆盖程度。

3.4 白盒测试案例

进行各种逻辑覆盖的白盒测试,即设计相应的测试用例。

流程图中包含3条不同的路径: P1(ab)、P2(acd)、P3(ace)

4. 单元测试

单元测试又称为模块测试,是针对软件设计的最小单位—程序模块进行正确性检验的测试工作,目的在于发现各模块内部可能存在的各种差错。它需要从程序内部结构出发设计测试用例,多个模块可以平行地独立进行。

单元测试主要在5个方面对被测模块进行检查:

  • 模块接口测试
  • 局部数据结构测试
  • 重要路径测试
  • 错误处理测试
  • 边界测试

5. 集成测试

是单元测试的逻辑扩展,也叫做组装测试,是测试和组装软件的系统化技术。

集成测试采用的方法是测试软件单元的组合能否正常工作,以及与其他组的模块能否集成起来工作。最后,还要测试构成系统的所有模块组合能否正常工作。

6. 系统测试

系统测试是将已经集成好的软件系统,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行的环境下,对计算机系统进行一系列的组装测试和确认测试。

验收测试是相关的用户和独立测试人员根据测试计划和结果对系统进行测试和接收。

常用策略:正式验收测试、Alpha 测试、Beta 测试。

6.1 Alpha测试

Alpha测试(α测试),是由某用户在开发环境下进行,或公司内部用户在模拟实际操作环境下进行。开发者坐在用户旁边,随时记下错误情况和使用中的问题。

6.2 Beta 测试

Beta 测试(β测试),是由软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,由用户记下遇到的所有问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2129359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习:基础知识

深度学习是机器学习的一个领域 神经网络构造 一个神经元有n个输入,每一个输入对应一个权值w,神经元内会对输入与权重做乘法后求和。 感知器 由两层神经元组成的神经网络--“感知器”(Perceptron),感知器只能线性划分数据。 公式…

Netty笔记03-组件Channel

文章目录 Channel概述Channel 的概念Channel 的主要功能Channel 的生命周期Channel 的状态Channel 的类型channel 的主要方法 ChannelFutureCloseFuture💡 netty异步提升的是什么要点总结 Channel概述 Channel 的概念 在 Netty 中,Channel 是一个非常重…

c++题目_洛谷 / 题目详情 P1012 [NOIP1998 提高组] 拼数

# [NOIP1998 提高组] 拼数 ## 题目描述 设有 $n$ 个正整数 $a_1 \dots a_n$,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。 ## 输入格式 第一行有一个整数,表示数字个数 $n$。 第二行有 $n$ 个整数,表…

Linux学习笔记(黑马程序员,前四章节)

第一章 快照 虚拟机快照: 通俗来说,在学习阶段我们无法避免的可能损坏Linux操作系统,如果损坏的话,重新安装一个Linux操作系统就会十分麻烦。VMware虚拟机支持为虚拟机制作快照。通过快照将当前虚拟机的状态保存下来,…

Leetcode 移动零

要求将数组中的所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。下面是该题的 C 解决方案&#xff1a; class Solution { public:void moveZeroes(vector<int>& nums) {int nonZeroPos 0; // 记录非零元素应该放置的位置// 遍历数组&#xff0c;…

镭速如何高效使用SQLite数据库高速传输结构化数据文件传输

SQLite数据库因其小巧、跨平台和无需配置的特性&#xff0c;在众多关系型数据库中独树一帜。与传统的服务器/客户端架构数据库&#xff0c;例如MySQL不同&#xff0c;SQLite通常被嵌入到应用程序中作为一个库。它不仅支持创建索引&#xff0c;还严格遵循ACID原则&#xff0c;非…

先攒一波硬件,过几年再给电脑升级,靠谱吗?想啥呢?

前言 最近有小伙伴发来消息&#xff1a;我可以今年先买电脑的部分硬件&#xff0c;明年再买电脑的另一部分硬件&#xff0c;再组装起来不就是一台电脑了吗&#xff1f; 这确实是一个很好的办法。 我还记得大学有个室友&#xff0c;从大一每个月省吃俭用&#xff0c;攒下的钱…

全球AI应用市场洞察:市场快速崛起,“陪伴式AI”、“图像AI”应用爆款频出!

自2023年 GPT4 的问世以来&#xff0c;得益于这股新的技术变量&#xff0c;各类 AI 应用在市场上遍地开花。在这轮热潮之下&#xff0c;不同市场和细分赛道有何机遇和挑战&#xff1f;以下根据 Sensor Tower 最新报告分析&#xff0c;帮助移动开发者、广告主洞察全球AI应用市场…

Linux系统:chgrp命令

1、命令详解&#xff1a; chgrp命令是Linux操作系统中用于修改文件或目录的所属组的命令。chgrp命令还可以修改链接文件的所属组&#xff0c;而不是链接所指向的文件的所属组。默认情况下&#xff0c;只有文件的所有者和超级用户才能修改文件的所属组&#xff0c;但如果用户是一…

JavaWeb【day08】--(MySQL-Mybatis入门)

数据库开发-MySQL 1. 多表查询 1.1 概述 1.1.1 数据准备 SQL脚本&#xff1a; #建议&#xff1a;创建新的数据库 create database db04; use db04; ​ -- 部门表 create table tb_dept (id int unsigned primary key auto_increment comment 主键ID,name v…

Win32编程:创建属于你的第一个窗口

目录 一、Win32程序的运行过程 二、创建Windows窗口 1、分析 2、完整代码 一、Win32程序的运行过程 Win32编程&#xff0c;也称为Windows编程。运行步骤主要包含&#xff1a;加载程序&#xff08;操作系统加载程序的可执行文件&#xff08;exe格式&#xff09;到内存中,创建…

代码随想录刷题day30丨452. 用最少数量的箭引爆气球, 435. 无重叠区间,763.划分字母区间

代码随想录刷题day30丨452. 用最少数量的箭引爆气球&#xff0c; 435. 无重叠区间&#xff0c;763.划分字母区间 1.题目 1.1用最少数量的箭引爆气球 题目链接&#xff1a;452. 用最少数量的箭引爆气球 - 力扣&#xff08;LeetCode&#xff09; 视频讲解&#xff1a;贪心算法…

ColorThief的介绍与使用

概述 colorThief是一个 Javascript 插件&#xff0c;支持在浏览器端或 Node 环境中使用。Thief的中文意思是偷窃、小偷。colorThief的作用就是通过算法去获取图片的色源。 API 介绍与示例 colorThief提供两个方法&#xff0c;getColor和getPalette&#xff0c;这两个方法在 …

类和对象(c++)

欢迎来到本期频道&#xff01; 类和对象 类定义&#xff1a;格式&#xff1a;类域&#xff1a;访问限定符友元内部类this指针静态与非静态成员关系类型转换六大默认成员函数&#xff08;C98&#xff09;1️⃣构造函数2️⃣拷贝构造函数浅拷贝与深拷贝 3️⃣赋值重载拷贝函数4️…

x-cmd pkg | superfile: 终端文件管理器,界面精致美观

目录 简介快速上手功能特点竞品和相关项目进一步阅读 简介 superfile 是 github.com/yorukot 用 Go 开发的终端文件管理器&#xff0c;相比于其他终端文件管理器&#xff0c;它最显著的特点是 UI 精致美观。 Tip Superfile 采用了特殊的 Unicode 符号来标识各种类型的文件&…

【我的 PWN 学习手札】Unsortedbin Leak

前言 从前都是野路子学习&#xff0c;学校时间也比较紧张&#xff0c;没有能够好好总结。一直有做个人笔记的习惯&#xff0c;但是学习路线比较分散盲目&#xff0c;虽然跟着wiki做&#xff0c;但是也面临知识点不全的窘境。近期开始跟着课程系统的学习&#xff0c;对于老的知…

mp3转文字要怎么处理?使用这4个工具就对了

MP3是音频当中比较常用的格式&#xff0c;如果像将其转换成文字内容&#xff0c;一般的语音转文字工具都是可以完成的。但是音频转换成文字的过程中&#xff0c;它的准确率是会受到像口音&#xff0c;语言&#xff0c;环境音等因素的影响的。所以大家如果想将自己的mp3语音转成…

en造数据结构与算法C# 用数组实现个栈还不简单???看我一秒破之!!!(unity演示)

实现效果 线性表&#xff0c;线性表是指数据元素按顺序排列的一种数据结构&#xff0c;下面这些东西可以说都是线性表&#xff0c;所以用array实现三者一点问题都没有 分别是List动态数组&#xff0c;stack栈和queue队列&#xff0c;今天就秒掉stack 栈&#xff1a;先进后出 实…

Vue邮件发送:如何有效集成邮件发送功能?

vue邮件发送功能实现方法&#xff1f;Vue邮件发送性能怎么优化&#xff1f; 无论是用户注册验证、密码重置&#xff0c;还是通知提醒&#xff0c;邮件发送功能都能提供重要的支持。本文将详细探讨如何在Vue项目中有效集成邮件发送功能&#xff0c;确保邮件能够准确、及时地送达…

万龙觉醒免费辅助:VMOS云手机辅助巴克尔阵容搭配攻略!

《万龙觉醒》是一款策略类手游&#xff0c;选择合适的英雄阵容搭配能够极大提升战斗效果。而借助VMOS云手机的辅助功能&#xff0c;玩家可以更加轻松地管理游戏进程&#xff0c;优化操作体验。以下是VMOS云手机的三大核心功能&#xff0c;帮助你更好地掌控《万龙觉醒》战局。 V…