最适合网络开发者的网站
Java 编程语言。hyperskill 为初学者提供的课程

尿素

软件质量。什么是 bug?


理论

A 软件错误 是导致程序崩溃或产生无效输出的问题。软件错误的原因有很多;其中最常见的是软件设计、编码或对需求理解方面的人为错误。

程序通常被称为 稳定的 如果没有太多明显的错误,则认为该程序是安全的。如果程序有大量错误,影响其功能并导致错误的结果,则认为该程序是安全的。越野车 或者不稳定。用户无法与此类软件成功交互。发现错误很重要 用户开始与您的程序交互。


§1. Bug 词源

漏洞

您可能已经听说过“bug”一词,并且能够想象它的含义。这里有一个关于它的小故事。

第一个计算机漏洞是由哈佛大学的 Grace Murray 于 1947 年发现的,当时她正在研究 Mark II 计算机。在调查一个问题时,在继电器触点之间发现了一只真正的飞蛾。这只飞蛾被移除并添加到日志中,现在位于华盛顿特区史密森尼学会的美国国家历史博物馆

因此,计算机错误通常被称为 bug。该术语用于描述任何不正确的程序行为,直到确定错误的具体性质为止。

一些互联网资源对这个术语有不同的解释。如果你感兴趣,可以谷歌搜索。如果你发现一个最可信的故事,请告诉我们。


§2. 程序为什么会有bug?

开发人员常说,没有 bug 的程序是不存在的。软件中出现 bug 的一些常见原因如下:

  • 团队中的沟通问题;
  • 对要求的误解;
  • 软件复杂性;
  • 编程错误(程序员和其他人一样,都会犯错误);
  • 时间压力;
  • 使用不熟悉的技术;
  • 第三方库中的错误(是的,这种情况也会发生)。

在此课程中,您主要会遇到由于误解给定的要求或编程错误而导致的错误。


§3. 避免错误

大型程序中几乎不可能避免所有错误,但可以减少错误的数量。下面我们为您提供了五个步骤,它们可以帮助您在教育课程和工业编程中实现这一点。

  1. 确保你知道该怎么做。 作为一名程序员,你需要了解你将要开发的程序的要求。如果你有疑问,你总是可以在互联网上或从其他开发人员那里寻求帮助。
  2. 分解程序 将其分解成易于查看和理解的小单元。良好的架构可以降低软件复杂性,从而减少错误数量。
  3. 编写易于阅读的代码 并遵循语言的所有标准。这也将使你犯更少的错误。
  4. 运行程序 具有边界输入值。不要忘记考虑不同的情况:0 或一个巨大的数字作为输入值,0 或 1 个元素作为输入序列。这种情况通常会暴露错误。
  5. 编写自动化测试 它将在构建时检查程序。

我们不会在本主题中讨论自动化测试,但我们稍后会再讨论。此时,您可以简单地创建一组输入值并手动运行程序(如步骤 4 中所述)。


§4. 调试

假设你知道你的程序对于某些输入值不能正常工作。要修复这个错误,你需要在代码中找到它,然后进行一些更改。

要找到有虫子的地方,你可以:


  • 阅读代码并尝试理解它对输入值的作用;
  • 启动调试器并查看变量的当前值和程序的控制流;
  • 在代码的关键部分打印程序的当前状态(日志),然后对其进行分析。

上述方法的组合将帮助你找到程序中的大多数错误。


§5. 结论

让我们总结一下这个话题。错误是程序的错误行为。但是,有一些方法可以减少错误的数量。例如,了解程序的要求,遵循语言的标准,构建清晰的程序架构,使用边界值检查程序以及使用自动化测试。

如果仍然有错误,首先,您需要在代码中找到它。为此,您可以使用调试器或日志记录,或者尝试通过阅读代码来了解代码对输入值的作用。使用这些技巧,您很可能可以避免编写有错误的程序并花时间调试它们。

您还可以查看 hyperskill.org 上的课程.


实践任务及答案

给出了任务和答案选项。正确选项以 蓝色的 颜色。

№1. 错误的原因

问题: 开发团队的任务是编写处理网站上输入数据的代码。他们编写了一个程序,可以读取数字、姓名和登录名形式的密码。

但他们在测试程序时遇到了错误。密码除了数字外,还必须包含字母。您已经知道导致错误的原因是什么。那么,哪些原因导致了开发人员的失败?

从列表中选择一个或多个选项:

  • 办公室里的电脑不够好
  • 由于要求不明确而产生误解✔
  • 网络连接较弱
  • 顾客心情不好

解释。 根据提供的信息,导致程序出现错误最可能的原因是“误解要求,因为它们不明确”。开发人员可能误解了密码要求,没有包含必要的代码来确保密码除了数字、名称和登录名外还包含字母。要求清晰明确对于避免此类问题非常重要。


№2. 调试的重要性

问题: 为什么调试很重要?

从列表中选择一个选项:

  • 因为你的团队中的每个人都这样做
  • 避免程序错误✔
  • 因为主要开发者就是这么说的
  • 只是为了好玩

解释。 调试代码对于避免程序错误非常重要。调试有助于识别和修复代码中的问题,从而可以防止错误并提高程序的整体质量。调试是软件开发过程中的关键部分,有助于确保程序按预期运行。


№3. 软件错误

问题: 选择软件错误的根本原因:

从列表中选择一个或多个选项:

  • 编程错误✔
  • 外面天气
  • 团队沟通问题(当你不是一个人工作时)✔
  • 误解要求✔

解释。 软件缺陷的根本原因是“编程错误”和“误解需求”。编程错误可能是由于编码过程中的错误而发生的,例如语法错误、逻辑错误或变量使用不当。如果开发人员没有完全理解程序的期望,或者需求不明确或不完整,误解需求可能会导致缺陷。“外面的天气”不是软件缺陷的原因,“团队沟通问题”​​可能会导致问题,但不是缺陷的根本原因。


№4. 一个有很多错误的程序

问题: 如果一个程序有大量影响其功能并导致不正确结果的错误,你该如何描述它呢?

从列表中选择一个选项:

  • 它根本不是一个程序
  • 不必要
  • 不稳定 ✔
  • 不自然

解释。 如果程序有大量错误影响其功能并导致不正确的结果,则可以将其描述为“不稳定”。这意味着该程序不可靠,并且可能无法按预期执行。识别和修复这些错误对于提高程序的稳定性和功能性非常重要。


№5. 第一个错误

问题: 第一个计算机漏洞是在哪一年发现的?

从列表中选择一个选项:

  • 1948
  • 1947 ✔
  • 1946
  • 1945

№6. 什么是bug?

问题: 一个错误是:

从列表中选择一个选项:

  • 导致计算机崩溃的问题
  • 程序员无法解决的新任务
  • 代码中的新部分导致计算机崩溃或产生无效输出
  • 导致程序崩溃或产生无效输出的问题✔

解释。 错误是“导致程序崩溃或产生无效输出的问题”。它是代码中的错误或缺陷,在程序运行时可能导致意外行为或不正确的结果。错误可能是由于编程错误、对需求的误解或开发过程中的其他问题而发生的。识别和修复错误对于确保程序按预期运行非常重要。


№7. Bug 在哪里?

问题: 您正在编写一个使用各种第三方库的项目。在某个时候,您发现程序输出了不正确的值。您检查了代码,但没有发现任何错误。您最有可能在哪里找到错误?

从列表中选择一个选项

  • 在第三方库中✔
  • 在您的代码中,再检查一遍
  • 在计算机系统中
  • 在互联网连接中

解释。 如果您检查了代码但未发现任何错误,则最有可能在第三方库中找到错误。库的代码中可能存在错误,导致输出不正确。您可能需要查看库的文档或联系库的开发人员以获取帮助,以识别和修复问题。


№8. 如何定位bug?

问题: 为了找到有缺陷的地方,我们能做什么呢?

从列表中选择一个或多个选项:

  • 启动调试器✔
  • 分析代码✔
  • 打印当前程序状态✔
  • 重写整个代码
  • 只需再次运行代码

解释。 要找到错误所在,可以先分析代码以识别任何潜在的错误或问题。此外,使用调试器可以帮助逐步执行代码并识别发生错误的具体位置。在代码的各个点打印当前程序状态也有助于识别错误发生的位置。重写整个代码是不必要的,而且通常不是一种有效的解决方案。只是再次运行代码而不做任何更改不太可能解决问题。


№9. 减少错误数量

问题: 以下哪项建议可以减少程序中的错误数量?

从列表中选择一个或多个选项:

  • 将所有代码写在一个地方(即文件,类,方法)
  • 使用边界输入值运行程序✔
  • 了解你需要发展什么✔
  • 编写复杂且不明显的代码

解释。 以下建议可以减少程序中的错误数量:

  • 使用边界输入值运行程序:这有助于识别程序处理边缘情况或意外输入的任何问题。
  • 了解需要开发的内容:清楚地了解程序的要求和预期行为有助于避免代码中的误解和错误。
  • 避免编写复杂且不明显的代码:编写清晰、简单且易于理解的代码可以减少出现错误的可能性,并更容易识别和修复出现的任何问题。

不建议将所有代码都写在一个地方,因为这会使代码难以阅读、理解和维护。通常,最好根据代码的功能将其组织到单独的文件、类或方法中。


№10. 如何除掉虫子?

问题: 假设你写了一些代码,但由于错误,代码无法正常工作。你能做什么来修复代码?选择以下几种可能的操作:

从列表中选择一个或多个选项:

  • 编写自动化测试✔
  • 创建一组输入值并手动运行程序✔
  • 希望一切顺利
  • 查看程序并猜测它是否正确

解释。 如果您的代码由于错误而无法正常工作,以下操作可以帮助修复代码:

  • 编写自动化测试:这有助于识别代码中的特定问题并确保在部署代码之前修复这些问题。
  • 创建一组输入值并手动运行程序:这有助于识别程序处理特定输入或边缘情况的问题。
  • 查看程序并识别潜在问题:这有助于识别可能导致问题的代码特定区域,并允许您集中调试工作。

希望一切都顺利并不是一个推荐的做法,因为这不太可能解决任何问题,而且可能会导致后续出现更多问题。猜测程序是否正确也是不推荐的,因为这不太可能是一种有效的调试策略。