Logo
Section 1 / 7

错误的原因及发现

本课程探讨了错误产生的原因,然后讲解了如何发现这些错误。

导入

错误的原因及发现

本课程探讨了错误产生的原因,然后讲解了如何发现这些错误。

众所周知,任何运行计算机程序的设备都可能存在软件缺陷。从最简单的设备到最复杂的系统,软件缺陷无处不在。调试和修复软件缺陷是程序员日常工作中较为不受欢迎的任务之一。

缺陷产生的原因

软件缺陷的产生原因多种多样。以下是一个不完全列表,大致涵盖了从程序设计阶段到实际编码过程中的各种因素:

  • 程序的需求和规格可能不够清晰。在设计阶段,程序真正应该实现的功能可能并不明确。

  • 程序员可能误解了部分需求。

  • 编程语言表达能力不足。即使母语使用者也可能因人类语言的语法复杂而困惑,编程语言中非自然的语法和规则也容易导致程序员出错。

  • 程序员可能基于错误的假设进行开发。例如,可能认为 3.14 足够精确地表示 π。

  • 程序员可能对某个主题掌握的信息不准确或完全不了解。例如,可能不知道在特定逻辑表达式中使用浮点变量并不可靠。

  • 程序可能遇到未预料的情况。例如,在程序通过 foreach 循环遍历目录文件时,该目录下的某个文件被意外删除或重命名。

  • 程序员可能犯一些低级错误。例如,变量名拼写错误,意外与另一个变量名重复。

遗憾的是,目前仍没有一种软件开发方法能够保证程序永远正确运行。这依然是软件工程领域的一个热门话题,每隔十年左右就会出现一些有前景的解决方案。

发现缺陷的过程

软件缺陷会在程序生命周期的不同阶段,由不同类型的工具和人员发现。以下是缺陷可能被发现的时间点,按时间先后顺序排列:

  • 编写程序时

    • 由程序员自己发现
    • 在结对编程过程中由另一位程序员发现
    • 由编译器通过编译提示发现
    • 作为构建过程一部分的单元测试发现
  • 代码审查时

    • 由在编译时分析代码的工具发现
    • 由其他程序员在代码评审过程中发现
  • 运行程序时

    • 由在运行时分析程序执行过程的工具发现(例如 valgrind)
    • 在质量保证测试中,通过断言检查失败或观察程序行为发现
    • 在程序发布前由测试用户(Beta 用户)发现
    • 在程序发布后由最终用户发现

越早发现缺陷,造成的经济损失、时间浪费,甚至在某些情况下的人身安全风险就越小。此外,事后由最终用户发现的缺陷,其根本原因往往比在开发早期发现的缺陷更难追溯。


下一课将讲解如何利用单元测试来捕捉缺陷。

断言和强制执行语句

单元测试