简单且循序渐进地查找软件中Bug的实用方法

译文 精选
安全 应用安全
查找并解决 bug 对软件开发至关重要。本文将带你学习如何以简单且循序渐进的方式查找软件中的 bug。

译者 | 刘汪洋

审校 | 重楼

“Bug”这个词常常让许多开发者感到头疼。即使是经验丰富、技术娴熟的开发人员在开发过程中也难以避免遭遇到 Bug。 软件中的故障会让程序员感到挫败。我相信在你的软件开发生涯中,也曾遇到过一些难以排查的问题。软件中的错误可能会导致项目无法按时交付。因此,发现并解决这些问题至关重要。 在本文中,我们将探讨如何以简单且循序渐进的方式定位软件中的故障。

查找 Bug:最佳方法、常见类型及工具

本文将介绍查找软件 Bug 的最佳方法,了解到常见 Bug 的类型,以及一些可以简化繁琐 Bug 查找任务的工具。

关于软件 Bug 的一些惊人事实

● 最近的 iPhone Bug 导致用户无法输入字母"I"。

● 某些 bug 的修复代价高昂,如千年虫 Bug,修复此类 Bug 可能会耗费巨资。

● 一个软件 Bug 曾导致人员死亡,如1991 年由于爱国者导弹的 Bug ,28 人因此丧生。

● 含有 Bug 的代码会对开发者及其团队的形象造成负面影响,进而影响公司的营收。

● 含有 Bug 的代码难以使用,会降低生产力。代码质量越高,工作效率就越高。最终,团队将为 Bug 付出高昂的代价。

● 2017 年,各种软件 Bug 预计给全球经济造成了 1.7 万亿美元的损失。

因此,发现并解决每个软件中的每一个小 Bug 至关重要。毫不夸张地说,软件中的 Bug 可能导致业务停摆。如果用户无法获得优质产品,他们将会转向其他替代品。接下来,让我们详细探讨如何查找 Bug。

找出软件中最多 Bug 的最佳方法

1. 在真实浏览器和设备上进行快速攻击

在没有明确需求的情况下,创建测试场景可能非常困难。在这种情况下,最有效的方法是通过输入异常值来攻击系统,以触发软件故障。这种方法有助于发现潜在的问题。

你可以通过以下方式测试软件:留空必填字段、扰乱用户界面流程、在字符输入框中输入数字、超出字符数限制、使用非法字符,以及输入过多错误的密码。

这种攻击方法的逻辑是在有限时间内快速分析软件质量。它帮助测试人员通过发现的 Bug 数量快速评估软件的质量。即使只发现一个 Bug,也可能表明主要功能存在缺陷。相反,如果这种方法没有发现 Bug,通常表明“理想路径”功能正常。

请记住,这些快速测试必须在真实用户环境中进行。这意味着在不可预测的情况下测试软件时,必须在与最终用户相同的环境中进行。

总结而言,快速测试必须在实际设备和环境中进行。即使是仿真器或模拟器,也可能无法检测到只有在真实设备上才会出现的 Bug。

2. 关注测试环境

测试人员通常需要一定时间来准备测试场景、制定时间表并设置测试流程。在此过程中,评估测试基础设施(也称为测试环境)至关重要。因为测试环境中的缺陷会导致生成测试结果时出现不必要且完全可以避免的延迟。

此外,这还可能导致出现并非由软件本身引起的 Bug。最令人头痛的是那些无法通过代码修复的环境配置相关 Bug。在这种情况下,Bug 的实际来源难以立即发现,从而导致测试延迟。

设想一个场景:测试人员发现并报告了一个 Bug,但开发人员在检查代码时却未发现任何问题。因此,当开发人员沮丧地在搜索“如何在代码中找到 Bug”时,测试无法继续进行,因为这个“Bug”实际上无法修复。

在环境配置出现问题的情况下,同一个测试每次可能会产生不同的结果。这使得 Bug 难以重现,对开发人员来说无疑是一场噩梦。

3. 自行研究

在开始测试之前,请全面了解整个应用程序或模块。运行测试前,准备充足的测试数据;若测试涉及数据库应用程序,则数据集应包括测试用例条件和数据库记录。

在代码中插入标记,以帮助开发者更容易地定位代码块或错误。这可以通过添加打印语句、注释或其他调试工具实现。使用断点,在特定位置暂停代码,检查断点前的所有操作是否正常。

无论遇到什么问题,可能以前都有人遇到过。因此,通过研究和在 Google 上搜索,往往可以找到解决方法。

4. 帕累托原则

根据帕累托原则,20% 的努力产生 80% 的结果,而剩余的 80% 的努力仅带来 20% 的结果。意大利经济学家维尔弗雷多·帕累托提出了这一原则,因此得名帕累托原则。

在软件测试中,帕累托原则意味着 80% 的 Bug 存在于 20% 的程序模块中。虽然这个比例不必严格遵循,但关键在于大多数 Bug 集中在代码的特定部分,且大多数重大 Bug 也存在于这些部分。因此,应特别关注这些代码。

5. 设定软件质量目标

测试人员应明确需要维护的软件标准,这将帮助他们识别和查找各种 Bug。

如果测试人员想知道如何在软件中找到 Bug,最好的方法是了解用户对软件在用户体验、新功能及性能等方面的期望。

明确目标有助于质量保证人员创建相应的测试场景和测试用例。如果了解用户对软件主要功能的需求和期望,那么测试人员可以优先测试那些对大多数用户重要的功能。

因此,建议与质量保证经理沟通并获取软件质量目标文档。自行研究相关内容也有助于发现重要的 Bug。

11 种常见的软件 Bug 类型

作为开发人员或软件测试人员,如果你清楚了解软件可能遇到的各种类型的 Bug,你就能更快地解决问题。

1. 功能 bug

每个程序都应该在功能上正确运行。当软件未能执行预期功能时,就会出现功能 Bug。这类问题范围广泛,从简单的问题(如不可点击的按钮)到无法使用软件的主要功能。功能测试通常用于检测功能 Bug。

例如,“保存”按钮的功能是保存文档中的更改,如果该按钮无法点击,则这是一个功能 Bug。通过功能测试,软件测试人员可以发现导致功能问题的具体 Bug。

2. 语法 Bug

这种类型的 Bug 出现在程序的源代码中。语法错误是最常见的 Bug 之一,它会阻止应用程序正确编译。这类问题通常是由于代码缺少或包含错误字符所引起的,可能是拼写错误的命令或缺少的括号。通常,开发团队在编译程序时会意识到这些 Bug。

3. 逻辑 bug

逻辑 Bug 是指那些导致软件产生错误输出、崩溃或失败的代码问题。逻辑缺陷,如无限循环,是软件流程中的 Bug。无限循环由于编写不当或编码错误而发生,导致程序故障,使特定序列不断重复,直到程序崩溃或出现外部中断(如关闭程序或断电)。 一些逻辑 Bug 的例子包括:

  • 错误地给变量赋值
  • 将两个数字相除而不是将它们相加,从而产生意外结果

4. 性能 Bug

性能缺陷是与软件速度、稳定性、响应时间或资源消耗有关的 Bug。这类问题通常在软件开发过程中被发现,且是最常见的软件 Bug 之一。这类 Bug 包括软件运行速度低于要求或响应时间超过项目规定的可接受范围。

5. 计算 Bug

当软件返回不正确的值时,无论是最终用户看到的值还是传递给其他程序的值,都会出现计算 Bug。这可能由多种原因引起,包括:

  • 软件使用错误的算法来计算值
  • 计算中存在数据类型不匹配
  • 开发人员错误地编写了计算代码或传递值给另一个程序

6. 安全 Bug

安全漏洞是软件开发人员或工程团队可能遇到的最严重缺陷之一。 与其他软件 Bug 不同,安全漏洞会使项目面临重大风险。安全漏洞使软件、公司和客户面临严重的潜在攻击。这些攻击可能给企业造成高昂的代价,无论企业规模大小。 一些最常见的安全 Bug 包括加密错误、SQL 注入漏洞、XSS 漏洞、缓冲区溢出、逻辑错误和身份验证不充分等。

7. 单元级 Bug

单元级软件 Bug 是另一种常见的 Bug。程序编码完成后,开发人员通常会进行单元测试,即测试代码的小部分以确保其正常运行。 在此过程中,团队会发现单元级 Bug,如计算错误和基本逻辑错误。由于涉及的代码量较小,这些单元级 Bug 容易被隔离和修复。

8. 系统级集成 Bug

当两个不同子系统的交互出现错误时,就会发生系统级集成 Bug。由于涉及多个软件系统,且通常由不同的开发人员编写,这类错误通常更难修复。 系统级集成 Bug 主要发生在不同开发人员编写的代码单元无法相互交互,或组件之间存在不一致时。 这类错误难以跟踪和修复,需要开发人员排查大量代码。内存溢出问题和应用程序 UI 与数据库之间的不当接口都是系统级集成 Bug 的典型例子。

9. 可用性错误

可用性缺陷是指阻止用户充分利用软件的错误,这种错误使得软件使用变得困难或不便。 复杂的内容布局或过于繁琐的注册功能都是可用性缺陷的例子。在可用性测试阶段,软件工程师和用户体验设计师必须根据《网络内容可访问性指南》和其他可用性要求检查软件,以发现这些类型的 Bug。

10. 控制流错误

软件控制流描述了接下来会发生的事情以及发生的条件。 控制流中的错误会阻止软件正确地进行下一任务,并可能减慢整个公司的工作流程。例如,当用户在问卷或流程结束时,点击“保存并下一步”按钮后未被重定向到新页面时,就会发生控制流错误。

错误、Bug 和失误随处可见,如果不及时发现和纠正,可能会造成重大损失,尤其是在 IT 行业中。一个逗号的缺失就可能影响整个 IT 产品,因此我们必须专注于检测和修复 Bug。 从一开始,所有 IT 公司都有专职测试人员,他们长时间与新软件的每个组件合作,逐一发现和消除错误。因此,在选择 IT 合作伙伴时应牢记这一点。

11. 兼容性错误

当软件或应用程序与硬件或操作系统不兼容时,就会出现兼容性错误。查找兼容性错误并不容易,因为在初始测试期间可能无法检测到它们。 因此,开发人员应进行兼容性测试,以确保软件与常见的硬件和操作系统兼容。

软件 Bug 的一些例子

按严重程度划分的软件缺陷

  • 关键缺陷:通常会阻碍整个系统或模块的功能,导致测试无法继续,直到此类缺陷被修复。例如,在尝试登录后应用程序返回服务器错误消息。
  • 高严重性缺陷:影响应用程序的关键功能,使应用程序的行为与需求规定的显著不同。例如,电子邮件服务提供商不允许在收件人字段中添加多个电子邮件地址。
  • 中严重性缺陷:是指次要功能未按需求规定的那样运行。例如,应用程序的“条款和条件”部分中的一个链接打不开。
  • 低严重性缺陷:主要与应用程序的用户界面相关,例如按钮大小或颜色不统一。

按优先级划分的软件缺陷

  • 紧急缺陷:必须在报告后 24 小时内修复。此类别包括关键严重性的缺陷。然而,低严重性缺陷也可以划分为高优先级。例如,应用程序主页上公司名称的拼写错误虽然对软件没有技术影响,但对业务有重大影响,因此属于紧急缺陷。
  • 高优先级缺陷:高优先级缺陷是必须在未来版本中修复以满足退出条件的错误。例如,高优先级缺陷指的是尽管用户输入了有效的登录数据,但应用程序无法将用户从登录页面跳转到主页。
  • 中优先级缺陷:是可以在后续版本中或即将发布的版本之后修复的错误。例如,应用程序返回预期结果,但在特定浏览器中格式不正确,这就是中优先级缺陷。
  • 低优先级缺陷:是不需要修复即可满足退出标准,但必须在应用程序发布给公众之前修复的错误。此类别通常包括拼写错误、对齐问题、元素大小和其他外观上的 UI 问题。

当你在软件中发现 Bug 时,首先做什么?

1. 开始测试其他相关的场景

Bug 总是成群结队出现的。当你在一个区域发现一个 Bug 时,通常会发现相关问题。因此,一旦发现问题,就继续查找,因为你可能会发现更多问题。

2. 记录应用程序的当前状态

这可以帮助你确定是否是外部问题导致了 Bug。你不仅需要知道如何重现问题,还需要了解当前测试环境的状态。

3. 检查是否已被报告

有些 Bug 已经被发现并报告。重复已经完成的工作是没有意义的。

4. 尽快报告

如果发现该 Bug 尚未报告(参见上一步),你必须尽快提交报告。Bug 需要被识别和确认。

给它们五分钟的曝光时间。当问题还在你脑海中时,编写一份好的 Bug 报告会更容易。你还希望缩短反馈循环的时间(从代码创建到验证完成)。这有助于提升团队的生产力。

5. 享受这一刻

我见过测试人员在发现 Bug 时变得愤怒。他们因为系统出现问题而感到沮丧。 遇到 Bug 时确实令人恼火。随着截止日期的临近和团队承受的压力增大,查找软件中的 Bug 可能是最让人不愿意做的事情。虽然一切正常运行时,你会轻松很多,但这就是你的职责。你的职责是比客户先发现 Bug。你的职责是既要扮演英雄也要扮演反派。当你下次发现 Bug 时,要感谢自己,因为你在帮助他人。

查找软件 Bug 的步骤

测试软件 Bug 的推荐方法如下:

  • 在开始测试之前,彻底了解整个应用程序或模块的功能。
  • 开始测试之前,创建具体的测试用例,特别强调包括应用程序主要风险的功能测试用例。
  • 在运行测试之前准备足够的测试数据。如果你在测试与数据库相关的应用程序,该数据集应包括测试用例条件和数据库记录。
  • 在不同的测试环境中运行测试。
  • 尝试确定预期结果,然后将你的结果与预期模式进行比较。
  • 当你认为已经完成大多数测试条件,并感到有些疲惫时,进行一些“猴子测试”(一种随机、无规律的软件测试方法,以发现潜在问题)。
  • 使用之前的测试数据模式分析当前的测试集。
  • 执行一些在其他应用程序中发现 Bug 的标准测试用例。例如,如果你在测试一个输入文本框,尝试插入一些 HTML 标签作为输入,看看显示页面上会发生什么。
  • 最后也是最好的技巧是,像测试如何破坏应用程序一样,努力查找 Bug。

Bug 查找工具

使用 Bug 识别工具可能是发现软件 Bug 的最简单方法。这些工具使跟踪、报告和分配软件开发中的 Bug 变得更简单,可以简化测试。有许多好用的工具,如 SpiraTeam、Userback 和 ClickUp,这些工具可以极大地简化软件测试。

实际设备在 Bug 查找中的作用

要在行业中发布高度完善、高效、且用户友好的软件,必须在真实用户条件下彻底测试软件。 这有助于检测和解决最终用户在实际使用中可能遇到的大部分 Bug。全面测试需要一个强大的设备实验室,使测试人员能够在各种设备、浏览器和操作系统组合中测试他们的网络和移动应用程序。 请记住,建立一个测试实验室需要大量的资金投入和持续的维护,并不适用于所有企业。

结论

随着技术的进步和竞争的加剧,软件开发变得越来越困难。你必须定期提供更新,添加新功能等。

所有这些都会导致软件中出现不同类型的 Bug。在有限的时间、资源和预算下,很难找出每一个 Bug。因此,采用某种框架来尽可能多地解决 Bug,并全面测试对你的业务最关键的应用程序至关重要。

译者介绍

刘汪洋,51CTO社区编辑,昵称:明明如月,一个拥有 5 年开发经验的某大厂高级 Java 工程师,拥有多个主流技术博客平台博客专家称号。

原文标题:Easy and Step-By-Step Ways of Finding Bugs in Software,作者:Tejas Patel

责任编辑:华轩 来源: 51CTO
相关推荐

2019-06-25 09:02:44

加密加密算法密钥

2022-04-21 14:03:54

开发API生命周期

2011-05-20 10:39:43

oracle

2010-12-28 16:49:05

2012-03-01 22:37:02

Linux入门

2009-08-07 03:47:00

2009-08-26 14:25:46

C#消息

2011-05-24 13:47:25

程序员

2023-03-23 08:49:39

负载均衡服务器

2010-12-28 16:38:16

Windows SerWindows 部署服

2020-02-19 08:48:04

Java内存模型CPU

2018-02-05 15:30:01

MariaDB服务器主从复制

2010-12-31 15:28:41

Windows 7

2009-10-30 14:43:24

宽带接入网

2020-07-17 10:37:08

云计算安全IT

2022-04-29 11:27:26

循序渐进!开展零信任

2022-03-31 06:23:43

自动化响应网络安全

2014-05-22 10:54:27

iOS开发查找BUG

2020-11-23 11:09:18

大数据教育云计算

2010-01-06 16:40:30

cisco交换机vla
点赞
收藏

51CTO技术栈公众号