什么是软件测试,新手带走_慧乐课堂软件测试的博客-程序员秘密

技术标签: 软件测试  

软件测试定义

在软件应用程序或程序中发现错误,以使应用程序按照最终用户的要求运行的过程或方法称为软件测试。

描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。据此,您可能会想,软件测试永远不可能完整的确立任意电脑软件的正确性。然而,在可计算理论(计算机科学的一个支派)一个简单的数学证明推断出下列结果:不可能完全解决所谓“死机”,指任意计算机程序是否会进入死循环,或者罢工并产生输出问题。

还有一种定义:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。

从上面可以看出,换句话说,软件测试是一种实际输出与预期输出间的审核或者比较过程。

软件测试方法

软件测试有许多方法,但对复杂的产品运行有效测试不仅仅是研究过程,更是创造并严格遵守某些呆板步骤的大事。测试的其中一个定义:为了评估而质疑产品的过程;这里的“质疑”是测试员试着对产品做的事,而产品以测试者脚本行为反应作为回答。虽然大部分测试的智力过程不外乎回顾、检查,然而“测试”这个词意味着产品动态分析──让产品流畅运行。程序质量可能,而且通常会,随系统不同而有差异;不过某些公认特性是共通的:可靠性、稳定性、轻便性、易于维护、以及实用性。

软件测试一般分为黑盒测试和白盒测试。

黑盒测试

黑盒测试(black-box testing),也称黑箱测试,是软件测试方法,测试应用程序的功能,而不是其内部结构或运作。测试者不需具备应用程序的代码、内部结构和编程语言的专门知识。测试者只需知道什么是系统应该做的事,即当键入一个特定的输入,可得到一定的输出。测试案例是依应用系统应该做的功能,照规范、规格或要求等设计。测试者选择有效输入和无效输入来验证是否正确的输出。

此测试方法可适合大部分的软件测试,例如集成测试(integration testing)以及系统测试(system testing)。

白盒测试

白盒测试(white-box testing,又称透明盒测试glass box testing、结构测试structural testing等)是一个测试软件的方法,测试应用程序的内部结构或运作,而不是测试应用程序的功能(即黑盒测试)。在白盒测试时,以编程语言的角度来设计测试案例。测试者输入数据验证数据流在程序中的流动路径,并确定适当的输出,类似测试电路中的节点。

白箱测试可以应用于单元测试(unit testing)、集成测试
(integration testing)和系统的软件测试流程,可测试在集成过程中每一单元之间的路径,或者主系统跟子系统中的测试。尽管这种测试的方法可以发现许多的错误或问题,它可能无法检测未使用部分的规范。

测试的进程

Alpha测试

Alpha测试通常是阶段性的开发完成后所开始进行,一直持续到进入Beta测试阶段前的阶段。Alpha测试是一种验证测试,在模拟的环境中以模拟的数据来运行。

在这个阶段中,通常是在开发单位由开发人员与测试的测试人员,以模拟或实际操作性的方式进行验证测试。

Beta测试

在系统测试中通常先进行Alpha测试以验证信息系统符合用户以及设计需求所期望的功能。当Alpha阶段完成后,开发过程进入到Beta阶段,由公众参与的测试的阶段。Beta测试可称为确认测试,在一个真实的环境中以实际的数据来运行测试,以确认性能,系统运行有效率,系统撤销与备份作业正常,透过测试让信息系统日后可以更趋完善。

封测与公测

封闭测试(Closed Beta,常简作封测或CB)是软件或服务等产品在开发完成后、将公开上市前的测试过程。相对于公开测试,封闭测试的主要用途是测试软件的功能和检查程序错误等等,因此通常只提供给少数人进行测试。有些公司会要求参与测试者签署保密协议,以避免测试的产品提前外流。MMORPG的封测结束之后,游戏公司常会将角色数据删除,但也有少数不删的。

公开测试(Open Beta,常简作公测或OB),一般常指软件或服务等产品在正式上市前开放给不特定人试用,虽然原意是希望试用者能够提报bug,但并不是把试用者当做真正的验证人员。由于通常为免费性质,故常常能够吸引到大批的试用者参与,可视为另一种营销策略。另一方面也节省下测试人员的成本,和验证稳定度(对于多人使用的带宽及机器是否能负载,又称压力测试)的时间。

Gamma测试

Gamma测试是一个很少被提及的非正式测试阶段,该测试阶段对应的是对“存在缺陷”产品的测试。考虑到任何产品都可以被称为“存在缺陷”的产品(测试只能发现产品中存在的问题,不能说明产品不存在问题),因此这个概念存在一定的不确定性。 对Alpha和Beta测试常见的一个误解是“Beta测试=黑盒测试”。实际上,Alpha和Beta测试对应在软件产品发布之前的Alpha和Beta阶段,而白盒、黑盒和灰盒测试技术是从技术和方法层面对测试的描述,不应该将这两部分概念混淆。

测试的类型

功能测试

按照测试软件的各个功能划分进行有条理的测试,在功能测试部分要保证测试项覆盖所有功能和各种功能条件组合。

系统测试

对一个完整的软件以用户的角度来进行测试,系统测试和功能测试的区别是,系统测试利用的所有测试数据和测试的方法都要模拟成和用户的实际使用环境完全一样,测试的软件也是经过系统集成以后的完整软件系统,而不是在功能测试阶段利用的每个功能模块单独编译后生成的可执行程序。

极限值测试

对软件在各种特殊条件,特殊环境下能否正常运行和软件的性能进行测试。 特殊条件一般指的是软件规定的最大值,最小值,以及在超过最大、最小值条件下的测试。 特殊环境一般指的是软件运行的机器处于CPU高负荷,或是网络高负荷状态下的测试,根据软件的不同,特殊环境也有过不同。

性能测试

性能测试是对软件性能的评价。简单的说,软件性能衡量的是软件具有的响应及时度能力。因此,性能测试是采用测试手段对软件的响应及时性进行评价的一种方式。根据软件的不同类型,性能测试的侧重点也不同。

压力测试

压力测试常常和性能测试相混淆。它们主要不同点是,压力测试要求进行超过规定性能指标的测试。例如一个网站设计容量是100个人同时点击,压力测试就要是采用120个同时点击的条件测试。

压力测试的通常判断准则:

•系统能够恢复。
•压力过程中不要有明显性能下降。

测试的阶段

单元测试

单元测试是对软件组成单元进行测试,其目的是检验软件基本组成单位的正确性,测试的对象是软件设计的最小单位:函数。

集成测试

集成测试也称综合测试、组装测试、联合测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。其主要目的是检查软件单位之间的接口是否正确,集成测试的对象是已经经过单元测试的模块。

系统测试

系统测试主要包括功能测试、界面测试、可靠性测试、易用性测试、性能测试。 功能测试主要针对包括功能可用性、功能实现程度(功能流程&业务流程、数据处理&业务数据处理)方面测试。

回归测试

回归测试指在软件维护阶段,为了检测代码修改而引入的错误所进行的测试活动。回归测试是软件维护阶段的重要工作,有研究表明,回归测试带来的耗费占软件生命周期的1/3总费用以上。

与普通的测试不同,在回归测试过程开始的时候,测试者有一个完整的测试用例集可供使用,因此,如何根据代码的修改情况对已有测试用例集进行有效的复用是回归测试研究的重要方向,此外,回归测试的研究方向还涉及自动化工具,面向对象回归测试,测试用例优先级,回归测试用例补充生成等。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hlkt521/article/details/108648380

智能推荐

超标量、超级流水线、超长指令字、向量机_blueplain的博客-程序员秘密

记得本科学计算机系统结构时,在了解了流水线这一用于提高cpu处理速度的方法后,书中还介绍了一些其他的结构,这些结构一般用于较高性能的计算机中(呵呵,嵌入式系统中我还没看到,连multi issue的cpu都不多),包括:超标量(Super Scalar)、超级流水线(Super Pipeline)、超长指令字(VLIW)、和向量机。这些概念我总混淆,现在随着理解的深入,已经完全知道了它们各自的特点

python3从友盟批量导出app统计数据_ttb60606的博客-程序员秘密

用过友盟统计的小伙伴都知道,它并不支持数据的批量导出。虽然友盟提供了图表可视化功能,对应的数据都会在图表附近给出下载链接,但也恰恰因为如此,导致不同的数据指标分散在各个不同的页面,变成了按不同应用、不同页面、不同维度划分的碎片化数据。因此,从友盟导出数据,不但下载过程费时费力(根据笔者的亲身经历,单调重复性的工作特别容易使人烦躁抓狂~~~),而且下载下来的数据还需要大量的整合、整理工作才能正式进入...

Pandas 二十二:使用pyecharts来绘制折线图、柱状图_pandas pyecharts_蔡大远的博客-程序员秘密

一:绘制折线图读取文件import pandas as pdxlsx_path = "datas/baidu_stocks.xlsx"df = pd.read_excel(xlsx_path, index_col="datetime", parse_dates=True)为索引排序df.sort_index(inplace=True)代码from pyecharts.charts import Linefrom pyecharts import options as opts#

手把手教你实现一个Butterknife_手动实现butterknife_努力的小码农 Day_Day_Up的博客-程序员秘密

相信从事Android开发的同学们,平时肯定没少写过findViewById的代码,自从Jake Wharton大神出了一个Butterknife框架后,很多人就开始使用这个,利用Android Studio的插件,一键生成,帮我们节省了不少时间和重复代码。说实话,这个框架刚出来的时候,由于对这个不了解,总觉得会影响性能,一直没有使用,当慢慢熟悉他的原理时候,用着真香。其实在这个Butterknife之前,xUtils3也有自动绑定view的框架,不过他是使用的java 反射会影响性能,后面慢慢的很多开..

python编程入门第一课_《第一课 用Python编程》.ppt_weixin_39648432的博客-程序员秘密

* 八年级上册 学习目标: 1、了解什么是编程,什么是编程语言 2、了解什么是Python命令,什么是Python程序 3、掌握Print() 函数的常用格式;能区分字符串和数值 4、掌握输入Python命令和输入Python程序的方法 重难点: 1、掌握输入Python命令和输入Python程序的方法 2、区分“字符串”表达式和“数学”表达式bnq 编程的定义 编程是编写程序的简称...

随便推点

使用python编写hadoop的mapper 和reducer_python 5个mapper 2个reducer结构_marywang56的博客-程序员秘密

参考: https://www.cnblogs.com/hopelee/p/7476145.html https://blog.csdn.net/zhaoyl03/article/details/8657031上一篇文章,学习了搭建hadoop 环境,现学习如果使用python编写mapper 和reducer。如未搭建hadoop环境,请参考hadoop搭建Had...

MySQL技术内幕_mysql技术内幕 第5版_柏瑞128的博客-程序员秘密

mysql技术内幕 第5版是MySQL方面名副其实的一本著作,由保罗·迪布瓦编著,张雪平,何莉莉,陶虹共同翻译。全书向读者详细的介绍了mysql的基础知识及其有别于其他数据库系统的独特功能,其中包括sql的工作原理和mysql API的相关知识等,能够快速帮助读者学习并掌握mysql数据库的管理及使用,非常适合适合初学者和想要深入了解MySQL的数据库管理人员和开发人员们下载阅读。内容介绍《mys...

杭电---1106排序_在未来等你的博客-程序员秘密

排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 39229    Accepted Submission(s): 11160 Problem Description输入一行数字,如果我们把这行数字中的‘5’都看成空格,

Java实现ping功能的三种方法--windows(版本)---linux下请自行修改 【ping】参数 跟 正则验证_shasiqq的博客-程序员秘密

检测设备的运行状态,有的是使用ping的方式来检测的。所以需要使用java来实现ping功能。 为了使用java来实现ping的功能,有人推荐使用java的 Runtime.exec()方法来直接调用系统的Ping命令,也有人完成了纯Java实现Ping的程序,使用的是Java的NIO包(native io, 高效IO包)。但是设备检测只是想测试一个远程主机是否可用。所以,可以使用以下三种方式

java的课程总结_java课程总结报告_Denny W的博客-程序员秘密

【www.gz85.com - java试用期转正总结报告】java课程报告该怎么写呢?下面是小编带带来的java课程总结报告,请参考!java课程总结报告【1】刚开始学的时候,感觉这两门课程好高大上的样子,因为自从学软件工程这个专业以来,一直都是学的理论性、框架性的东西,就没有接触到编程的实质性的部分,终于开始学编程了,感觉蛮兴奋的,前几节课也是精神饱满,信心十足,怀着一腔热血来听课。再加上老师...

ssl 1764 1682 USACO 3.1 Agri-Net 最短网络 (最小生成树)#prim#_lemondinosaur的博客-程序员秘密

题意:求最小生成树的权值和。#include <cstdio>#include <cctype>#include <climits>using namespace std;int a[101][101],lowcost[101]; bool v[101];inline int in(){ char x=getchar(); int