IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> # 软件测试的心理学和经济学## -> 正文阅读

[开发测试]# 软件测试的心理学和经济学##

软件测试是一项技术性工作,但同时也涉及经济学和人类心理学的一些重要因素。

1 软件测试的心理学
2 软件测试的经济学

前言

在理想情况下,我们会测试程序的所有可能执行情况。然而,在大多数情况下,这几乎是不可能的,即使一个看起来非常简单的程序,其可能的输入与输出组合可达到数百种甚至数千种,对所有的可能情况都设计测试用例是不切合实际的。对一个复杂的应用程序进行完全的测试,将耗费大最的时间和人力资源,以至于在经济上是不可行的。

另外,要成功地测试一个软件应用程序,测试人员也需要有正确的态度(也许用“愿景(vision)”这个词会更好一些)。在某些情况下,测试人员的态度可能比实际的测试过程本身还要重要。因此,在深入探讨软件测试更加技术化的本质之前,我们先探讨一下软件测试的心理学和经济学问题。

一、软件测试的心理学

测试执行得差,其中一个主要原因在于大多数的程序员一开始就把“测试”这个术语的定义搞错了,他们可能会认为:
? “软件测试就是证明软件不存在错误的过程。”
? “软件测试的目的在于证明软件能够正确完成其预定的功能。”
? “软件测试就是建立一个‘软件做了其应该做的’信心的过程。”
这些定义都是本末倒置的。

每当测试一个程序时,总是想为程序增加一些价值。通过测试来增加程序的价值,是指测试提高了程序的可靠性或质量。提高了程序的可靠性,是指找出并最终修改了程序的错误。因此不要只是为了证明程序能够正确运行而去测试程序;相反,应该一开始就假设程序中隐藏着错误(这种假设对于几乎所有的程序都成立),然后测试程序,发现尽可能多的错误。那么,对于测试,更为合适的定义应该是:“测试是为发现错误而执行程序的过程”。

虽然这看起来像是个微妙的文字游戏,但确实有重要的区别。理解软件测试的真正定义,会对成功地进行软件测试有很大的影响。

人类行为总是倾向于具有高度目标性,确立一个正确的目标有着重要的心理学影响。如果我们的目的是证明程序中不存在错误,那就会在潜意识中倾向于实现这个目标,也就是说,我们会倾向于选择可能较少导致程序失效的测试数据。

另一方面,如果我们的目标在于证明程序中存在错误,我们设计的测试数据就有可能更多地发现间题。与前一种方法相比,后一种方法会更多地增加程序的价值。这种对软件测试的定义,包含着无穷的内蕴,其中的很多都蕴涵在本书各处。

这个定义还暗示了对于一个特定的程序:
应该如何设计测试用例(测试数据)、哪些人应该而哪些人又不应该执行测试。

为增进对软件测试正确定义的理解,另一条途径是分析一下对“成功的”和“不成功的”这两个词的使用,当项目经理在归纳测试用例的结果时,尤其会用到这两个词。

大多数的项日经理将没发现错误的测试用例称为一次“成功的测试”,而将发现了某个新
错误的测试称为“不成功的测试”。
在这里插入图片描述

“软件测试就是证明软件不存在错误的过程”,这个定义会带来第二个问题。

对于几乎所有的程序而言,甚至是非常小的程序,这个目标实际上也是无法达到的。另外,心理学研究表明,当人们开始一项工作时,如果已经知道它是不可行的或无法实现时,人的表现就会相当糟糕。

但是如果要求在四个小时之内完成填字游戏,我们很可能有理由期望在最初 10 分钟之内的进展会比前一种情况下的大。将软件测试定义为发现程序错误的过程,使得测试是个可以完成的任务,从而克服了这个心理障碍。

诸如“软件测试就是证明‘软件做了其应该做的’的过程”此类的定义所带来的第三个问题是,程序即使能够完成预定的功能,也仍然可能隐藏错误。也就是说,当程序没有实现预期功能时,错误是清晰地显现出来的;

如果程序做了其不应该做的,这同样是一个错误;考虑一下第 l 章中的三角形测试程序。
即使我们证明了程序能够正确识别出不规则三角形、等腰三角形和等边三角形,但是在完成了不应执行的任务后(例如将 1,2,3 说成是一个不规则三角形或将 0,0,0 说成是一个等边三角形),程序仍然是错的。

如果我们将软件测试视作发现错误的过程,而不是将其视为证明“软件做了其应该做的”的过程,我们发现后一类错误的可能性会大很多。

二、软件测试的经济学

给出了软件测试的适当定义之后,下一步就是确定软件测试是否能够发现“所有”的错误。我们将证明答案是否定的,即使是规模很小的程序。一般说来,要发现程序中的所有错误也是不切实际的,常常也是不可能的。这个基本的问题反过来暗示出软件测试的经济学问题、测试人员对被测软件的期望,以及测试用例的设计方式。
为了应对测试经济学的挑战,应该在开始测试之前建立某些策略。

总结

软件测试更适合被视为试图发现程序中错误(假设其存在)的破坏性的过程。一个成功的测试用例,通过诱发程序发生错误,可以在这个方向上促进软件质量的改进。
当然,最终我们还是要通过软件测试来建立某种程度的信心:软件做了其应该做的,未做其不应该做的。
但是通过对错误的不断研究是实现这个目的的最佳途径。有人可能会声称“本人的程序完美无缺”(不存在错误),针对这种情况建立起信心的最好办法就是尽量反驳他,即努力发现不完美之处,而不只是确认程序在某些输入情况下能够正确地工作。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 11:07:03  更:2021-07-23 11:08:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 20:49:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码