【问题标题】:Is input validation necessary?是否需要输入验证?
【发布时间】:2014-01-23 11:53:30
【问题描述】:

这是一个关于一般输入验证的非常幼稚的问题。

我了解了输入验证技术,例如 parse 和 validatestring。事实上,MATLAB 内置函数充满了这些验证和解析器。所以,我自然而然地认为这是专业的代码开发方式。使用这些技术,您可以确定输入变量的数据格式。否则您的代码将拒绝输入并返回错误。

但是,有些人认为如果输入变量有问题,代码会导致错误并停止。无论如何你都会注意到这个问题,那么那些复杂的验证又有什么意义呢?鉴于验证代码本身需要一些努力和时间,而且通常具有相当复杂的流程控制,我不得不承认这种观点有其道理。通过大量输入验证,代码的可读性可能会受到影响。

我想听听高级用户对此问题的意见。

【问题讨论】:

  • 我认为这更适合programmers.stackexchange.com 在这里,这种类型的概念问题不太受欢迎。
  • 非常感谢。我注意到这里的问题大多是非常技术性和具体的。我去看看!

标签: matlab validation readability maintainability


【解决方案1】:

这是我的经验,我希望它符合最佳实践。

首先,让我提一下,我通常在我可以完全控制的情况下工作,并且不会像@tom 提到的那样构建自己的 UI。一般来说,如果您的程序很可能在任何时候收到垃圾输入,则值得对其进行检查。

我通常会做出一些权衡来决定是否应该检查我的输入:

  • 开发时间与调试时间
    • 如果错误的输入很难调试(例如,因为它们不会导致错误,而只会导致不良结果),那么天平通常会支持检查,否则不会。
    • 如果您不确定最终将在哪里(重新)使用该代码,这可能有助于强制执行输入所需的任何假设。
  • 开发时间与运行时体验
    • 如果您的代码需要一个小时才能运行,并且最终会在出现无效输入值时中断,您可能需要在代码开头检查这一点
    • 如果代码在打开文件时遇到错误,用户可能不会立即理解,如果您提到没有指定有效的文件名,这可能更容易处理。

【讨论】:

  • 干杯!这些是我一直在寻找的答案。
  • 你的所有四点对我来说都很有意义。其实,这些都是我自己想的,虽然不是这么简洁。感谢您澄清此事。
  • 有时当我向别人询问代码时,他/她只给了我一个功能。如果没有输入数据的示例,也没有明确的输入验证来指定输入变量的要求,那么很难弄清楚该函数中发生了什么。所以,我决定明确地询问代码和测试数据。出于同样的原因,也许我应该包括输入验证。这个别人可以在几个月内轻松成为我自己。
  • @JohnSmith 在这种情况下,输入验证可能是个好主意,但请记住,它不能替代正确的描述/文档!我建议在开始每个函数时先简要介绍一下函数(包括其输入)。
  • 再次感谢您。我已经意识到关于输入和输出变量格式的描述的重要性。实际上,我周围并没有多少人遵循这些做法!
【解决方案2】:

真正(真正)的短篇小说:

  • 将您的设计分解为用户界面、业务逻辑和数据 -(参见 MVC 模式)
  • 在您的 UI 层中,进行“常识”验证,例如如果输入是 $ 成本值,那么它应该 >= 0,能够解析成小数等。
  • 在您的业务逻辑层中,验证值,例如$ 成本值可能不允许大于利润率(等等)
  • 在您的数据层中,验证数据操作,例如插入操作成功

额外的非常短的故事:是的!验证所有输入。

有关额外阅读学分,请参阅:this!

【讨论】:

  • 感谢您的意见。我很惊讶甚至有一个“图形用户界面测试”的 Wikipedia 页面。多么全面!
猜你喜欢
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 2011-10-28
  • 2011-11-13
  • 1970-01-01
相关资源
最近更新 更多