首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在测试软件时,我们可以假设用户不会在软件上执行如此愚蠢的操作吗?

在测试软件时,我们可以假设用户不会在软件上执行如此愚蠢的操作吗?
EN

Software Engineering用户
提问于 2017-12-16 01:12:39
回答 8查看 16.7K关注 0票数 72

例如:在web应用程序中执行表单的功能测试时,我们将通过输入不同类型的随机输入值来测试字段。

通常,我们作为web应用程序的用户实际上不会将随机值输入到字段中。

那么,当在生产中出现这类问题的可能性要小得多的时候,合并所有这些可能会导致错误的测试用例有什么用呢?

注意:上面的示例只是一个示例;此类问题可能发生在任何类型的功能/模块中。

我问这个问题只是想知道是否有任何标准的做法是要遵循的,还是完全取决于产品,领域和所有其他因素。

EN

回答 8

Software Engineering用户

发布于 2017-12-16 02:04:51

您可能不会在web应用程序的字段中输入随机值,但是肯定会有人这样做。

有些人是偶然地随机输入的,而另一些人则是故意试图破坏应用程序。在这两种情况下,您都不希望应用程序崩溃或显示其他不必要的行为。

对于第一种类型的用户,您不希望这样做,因为这会给他们带来糟糕的体验,并且可能会拒绝他们。

对于第二种类型的用户,他们通常没有高尚的意图,你不想让他们访问他们不应该访问的信息,或者允许他们拒绝真正的用户访问您的服务。

测试的标准做法不仅是验证天气良好的情况是否有效,而且还要检查异常的边缘案例,以发现潜在的问题,并确信攻击者无法轻松地访问您的系统。如果您的应用程序已经与随机输入崩溃,您不想知道攻击者可以如何处理巧尽心思构建的输入。

票数 189
EN

Software Engineering用户

发布于 2017-12-16 02:02:37

从不假设任何事情,

您不能假设任何用户都不会无意或故意地对您的软件做一些“愚蠢”的事情。用户可以不小心按错按钮,猫可以走过键盘,系统可能发生故障,他们的电脑可能被恶意软件劫持等等。

此外,用户本身也可能是恶意的,故意寻找破坏您的软件的方法,希望他们能够找到一种方法来利用它对他们有利。即使他们发现了一个他们无法利用的漏洞,他们发现的任何东西都可能刺激他们去探测你的系统,寻找他们可以攻击的东西,因为他们知道你的QA程序是缺乏的。

就测试而言,防范随机输入是有用的,但是选择完全随机的测试输入(即没有对任何用例或边缘用例进行特别考虑)几乎是无用的。测试的目的是根据雇主/客户/用户的要求和期望验证您的解决方案;这意味着您需要专注于针对所有边缘情况和边界条件,以及任何不符合用户预期工作流程的“退化”情况。

当然,您可能会运行一些测试,这些测试揭示了您后来认为不值得修复的bug;这可能是出于各种原因--相对于它对用户的影响而言,修复该bug可能太昂贵了,或者您可能会发现没有人使用的特性中的bug,或者该bug可能已经在系统中得到了很好的确认,以至于一些用户将其作为一项功能来处理。

或者,您可能正在编写一些定制的软件,这些软件拥有严格限制的“专家”用户群,在这些软件中,花费时间修复bug没有商业好处,因为这些用户能够使用错误软件完成他们的工作(例如,内部IT团队使用的诊断工具并没有提供任何收入,所以如果它偶尔崩溃,那么没有人愿意支付修复它所需的时间--他们只会告诉it团队接受错误)。

但是,只有了解这些bug,才能做出这些决定。例如,用户可能输入一个恶意输入,这会擦除整个数据库--如果您没有显式地针对这个场景进行保护和测试,那么您就无法确定这种情况是否会发生。将未发现的bug留在系统中的风险意味着,如果其中一个bug在现实世界中暴露出来并对您的用户产生重大影响,那么您就有可能面临真正的问题。

因此,虽然是否修复bug的决定可能需要软件所有者(通常是支付您的薪水的人)的一些投入,但决定是否测试bug,以及测试哪些案例是一个工程问题,需要在评估和项目规划中考虑到,考虑到时间/金钱/资源的限制,目标应该尽可能接近全面覆盖。

票数 101
EN

Software Engineering用户

发布于 2017-12-16 07:45:24

这里有很多很好的答案来描述为什么这很重要,但对于如何明智地保护应用程序却没有太多的建议。“标准实践”是在客户机和服务器上使用健壮的输入验证。非理性的输入很容易被保护,你只需拒绝任何在特定环境下没有意义的东西。例如,社会保险号码仅由破折号和数字组成;您可以安全地拒绝用户输入到社会保险号码字段中的任何其他内容。

在您编写的每个应用程序上都应该进行两种测试,它们都有不同的目的。您在自己的应用程序上所做的测试是肯定的测试;它的目的是证明该程序有效。测试人员在您的应用程序上所做的测试是负测试;它的目的是证明您的程序不工作。你为什么需要这个?因为你不是测试自己软件的最佳人选。毕竟,这东西是你写的,所以很明显它已经起作用了,对吧?

当您编写输入验证时,您将使用阳性测试来证明您的验证有效。测试人员将使用随机输入来试图证明它不工作。注意,随机输入的问题空间本质上是无界的;您的目标不是测试每个可能的排列,而是通过拒绝无效的输入来限制问题空间。

还要注意的是,最终用户并不是唯一一个为您的程序提供输入的用户。您编写的每个类都有自己的API和对被认为有效的输入的约束,因此健壮的验证(即“代码契约”)对您的类也很重要。这个想法是强化你的软件,使意想不到的行为是罕见的或不存在的,以最大限度的可能。

最后,工作流很重要。我看到了应用程序的崩溃,不是因为用户输入了一些荒谬的东西,而是因为它们在应用程序中以意想不到的顺序执行操作。您的应用程序应该意识到这种可能性,或者优雅地处理意外的工作流,或者要求用户按照指定的顺序执行操作。

票数 12
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/362491

复制
相关文章
敏捷软件测试(上)
这是通过一种敏捷的做事方法,可以让团队协作更紧密、工作效率更高,确保以可持续的速度频繁地交付客户所期望的业务价值。
用户6884826
2021/07/08
5590
软件测试对用户的分析
大部分程序员都由于不能使自己进入必要的精神状态,因而不能有效地测试自己的程序。 除了这个心理学问题之外,还有一个重要的问题:程序中可能包含由于程序员对问题的叙述或说明的误解而产生的错误。如果是这种情况,当程序员测试自己的程序时,往往还会带着同样的误解致使问题难以发现。在自已的工作中找出缺陷往往是人的心理状态所不容的。
新梦想IT职业教育
2019/09/04
7890
【软件测试】探索和学习在模型中的软件测试
Testing can reveal where and when the software fails, but it cannot prove that the software is completely free from errors. 测试可以揭示软件在何时何地出现故障,但它不能证明软件完全没有错误。
ImAileen
2024/03/24
1260
【软件测试】探索和学习在模型中的软件测试
ccs5可以软件仿真吗(ccs软件仿真)
起因:我用的是C6748板子,在用CCS进行软件仿真和硬件仿真时,发现矩阵的计算结果不同。查看内存,发现软件仿真内存中没有初值,但连接上板子后debug时发现有的内存中存在数据。
全栈程序员站长
2022/08/01
7530
软件测试|selenium执行js脚本
JavaScript是运行在客户端(浏览器)和服务器端的脚本语言,允许将静态网页转换为交互式网页。可以通过 Python Selenium WebDriver 执行 JavaScript 语句,在Web页面中进行js交互。那么js能做的事,Selenium应该大部分也能做。WebDriver是模拟终端用户的交互,所以就不能点击不可见的元素,有时可见元素也不能点击。在这些情况下,我们就可以通过WebDriver 执行JavaScript来点击或者执行页面元素。本文将介绍如何使用WebDriver执行JavaScript语句。
霍格沃兹测试开发Muller老师
2022/12/28
3.2K0
软件测试|selenium弹窗操作
<font size='3'>说明:本篇博客基于selenium 4.1.0</font>说明操作弹窗共分两步:创建弹窗对象alert = driver.switch_to.alert操作弹窗print(alert.text) # 获取弹窗文本alert.send_keys('helloworld') # 弹窗输入,需要弹窗有输入框才能输入alert.accept() # 弹窗确定,等同于点击弹窗的'确定'按钮alert.dismiss()
霍格沃兹测试开发Muller老师
2022/12/28
6570
软件项目的用户验收测试
 随着当今技术和市场环境的变化,越来越多的企业选择将软件项目外包,同时也有更多成熟的大型软件企业加入到软件项目的承包队伍中。外包的软件项目越来越多,如何对这些外包的项目进行验收测试日益成为企业的一个关键问题。
顾翔
2019/12/12
1.4K0
什么软件可以测试网络的稳定性,网络稳定性测试软件
=======================================================================
全栈程序员站长
2022/09/30
1.6K0
BackgroundWorker在单独的线程上执行操作
直接使用多线程有时候会带来莫名其妙的错误,不定时的发生,有时候会让程序直接崩溃,其实BackgroundWorker 类允许您在单独的专用线程上运行操作。可以通过编程方式创建 BackgroundWorker,也可以将它从“工具箱”的“组件”选项卡中拖到窗体上。如果在 Windows 窗体设计器中创建 BackgroundWorker,则它会出现在组件栏中,而且它的属性会显示在“属性”窗口中。
张果
2022/05/09
1.2K0
BackgroundWorker在单独的线程上执行操作
软件测试-开始软件测试
1.测试的目的:在于发现错误(缺陷),保证整个软件开的质量,但软件的质量不能以软件测试为依据 2.成功的测试:是发现了未曾发现的软件错误(缺陷) 3.好的测试用例:是能有效地发现别的测试用例未发现的软件错误
达达前端
2019/07/03
2.4K0
HANA如此高大上,屌丝程序员可以玩吗?
HANA是SAP推出的一款In-Memory数据库,能够既支持行式和列式存储,客户可以只有一份数据Copy就能够实现OLTP和OLAP的操作,尤其在OLAP场景下表现很强大。有兴趣的同学可以参考:https://www.sap.com/india/products/hana.html。
Bruce Li
2019/08/08
2.7K0
HANA如此高大上,屌丝程序员可以玩吗?
wptx64能卸载吗_电脑可以卸载bonjour软件吗?详细介绍bonjour软件
细心的用户发现电脑里面忽然多了一个叫bonjour的程序,以前都没有见过的,bonjour是什么?它是苹果电脑公司在其开发的操作系统Mac OS X10.2版本之后引入的服务器搜索协议所使用的一个商标名。为什么电脑会多出bonjour软件?那么bonjour软件可以卸载吗?带着一系列疑问,我们一起阅读下文教程吧。
全栈程序员站长
2022/06/26
4.1K0
做软件测试需要懂代码吗?
随着大数据、机器学习时代的到来,不少人有了“测试不需要懂代码,那我就试试”的想法。这就引发了一系列疑问:不懂代码可以做测试吗?测试人员到底需不需要懂代码?测试人员需要写代码吗?
陈哥聊测试
2024/06/03
1260
做软件测试需要懂代码吗?
软件测试,功能测试转测开容易吗?
2、 您可能一直从事功能测试工作,工作模式或大环境下,被中了草,想学习测试开发相关的知识;
软件测试君
2022/12/05
7390
软件测试,功能测试转测开容易吗?
在软件测试中使用 ChatGPT
AI 可以为软件交付带来帮助,并用于自动化软件测试和优化项目工作。Dimitar Panayotov 使用 ChatGPT 生成测试数据、创建电子邮件模板,并基于测试结果生成解释。这为他节省了时间,提高了生产效率。
深度学习与Python
2024/02/17
2000
在软件测试中使用 ChatGPT
Python自动化软件测试,解放我们的双手!
对软件产品的特性进行监视和测量,主要依据软件需求规格说明书,验证产品是否满足要求。所开发的软件产品是否可以交付,要预先设定质量指标,并进行测试,只有符合预先设定的指标,才可以交付。
Tricy软件测试工程师
2022/03/11
6670
当我们优化用户配置文件时我们在优化什么?
相信做过VDI虚拟桌面(现在更多被称之为“云桌面”)或终端标准化的兄弟们对用户配置文件优化应该都不陌生,无数个夜晚,无数次操作,只为了默认配置文件能够兼容应用的一个控件或一个设置。有可能仅仅是一个软件的小Feature或一个B/S系统的小表格,我们可能都要耗费上N久的时间。
SuperDream
2020/06/03
2.6K1
软件测试|Vue3 - 组件「上」
将 Vue 组件定义在一个单独的 .vue 文件中,这被叫做单文件组件 (简称 SFC):
霍格沃兹测试开发Muller老师
2022/12/29
6040
ToDesk软件在渗透测试中的应用
之前我也分享过一篇"ToDesk软件在权限提升中的应用",记录的是在权限提升场景下的利用方式。
潇湘信安
2022/09/22
3.5K0
ToDesk软件在渗透测试中的应用
只擅长构建软件是不够的,我们必须擅长构建可测试的软件 | QCon
作者丨 Blake Norrish 译者丨明知山 策划丨孙瑞瑞 你的测试问题实际上是可测性问题。 我坚信下面这个说法是对的: 在验证具有同等复杂性的软件系统的难度方面,可能存在数量级的差异。 这种说法并非夸大其词。虽然我们无法精确地衡量验证难度(比较两个不相关系统的相对复杂性具有高度的主观性),但我仍然认为,整体工作量差异可能是数量级的。如果验证一个系统需要一个小时,那么验证另一个系统可能需要 100 多个小时。这种信念来自于我在过去的 22 年里观察并参与了数十家公司数百个系统的开发和测试。
深度学习与Python
2023/03/29
2520
只擅长构建软件是不够的,我们必须擅长构建可测试的软件 | QCon

相似问题

谁应该执行验证测试,软件开发人员还是软件用户?

20

当我们处理游戏开发时,软件测试是否不同?

20

作为后端开发人员,我们应该学习软件测试吗?

20

单元测试软件可以用于单元测试本身吗?

50

我们需要在64位Windows中测试32位软件吗?

60
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文