testing - 您如何证明功能有效?

原文 标签 testing methodology

我最近有了测试的信仰,并且主要从单元测试开始。我对单元测试进行了编码,以说明该函数在某些情况下可以正常工作,尤其是使用我正在使用的确切输入。我可以做一些单元测试来行使功能。不过,除了该功能在我测试的场景下可以实现的功能之外,我实际上没有证明任何其他功能。可能还有其他我没想到的输入和方案,考虑到极端情况是昂贵的,尤其是在边际上。

这对我来说不是很令人满意。当我开始考虑必须先进行测试以满足分支和路径覆盖范围,然后进行集成测试时,预期的排列可能会有些令人头疼。

因此,我的问题是,如何才能证明(以证明数学定理的相同方式)函数有效(并且在理想情况下,将这些“证明”组合为系统有效的证明)?

是否有某个测试领域涵盖了您试图通过证明系统的所有功能正常工作来证明系统正常工作的方法?学术界以外的人是否会为这种方法所困扰?有帮助的工具和技术吗?

我意识到我对“工作”一词的使用不准确。我想我的意思是,当某个函数执行某些规范(书面或隐含的)规定应执行的操作且仅执行其他操作时,该功能即起作用。

请注意,我不是数学家,而是程序员。

最佳答案

在学术界,有一个类似于数学归纳的概念,称为结构归纳。但是,它仅适用于完全没有副作用的功能性编程语言和方法。在其他情况下,很难(即使不是不可能)证明一种方法具有副作用。

在TDD中,您尝试制定一种方法必须满足的边缘情况,但是,有可能会错过这种情况。即使(非平凡的)方法满足了您的所有测试要求,也可能存在参数或事件序列的组合,而您根本没有想到会破坏代码。简而言之:这就是生活。您可能可以预测非平凡实现中的所有结果,但可以确保该方法适用于特定的极端情况,并期望某些情况如此前卫,以至​​于碰触它们时都会不顾一切。 (糟糕,双关语)。

相关文章:

python - 当项目包含urls.py时,如何对其进行单元测试?

ruby-on-rails - 从上级工厂女孩工厂访问子级属性

javascript - 如何改善JavaScript的结构以更好地利用OOP

css - 为什么不建议在CSS中按ID选择? [关闭]

php - 在数据库中存储可变数量的事物值

networking - 如何在CoAP一致性测试套件中对测试用例进行分组

go - 测试中的模拟方法

testing - 在颤振测试中无法输入文本

process - 如何停止精益编程成为牛仔编码? [关闭]

agile - 敏捷软件开发方法的基本步骤[关闭]