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

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

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

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

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

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

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

最佳答案

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

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

本文翻译自 https://stackoverflow.com/questions/5207101/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 testing methodology


相关文章:

iis - 如何使用NTLM身份验证测试HTTP客户端?

android - 将测试类/程序包放在一个测试套件中

java - 在大型Java堆转储中查找内存泄漏的方法

forms - 使用OATS的Oracle Forms Automation

c# - 为什么在凯撒密码期间我的弦会改变?

testing - Webdriver.io中的类型“ BrowserObject”上不存在属性“ config”

android - 如何以及何时在应用程序中使用片段?

algorithm - 看看与您想要做的事情完全相反的方法值得吗?

c++ - 如何在没有数据争用的情况下在一个套接字上实现具有并行请求和响应的无阻塞客户端-服务器通信模型

ruby-on-rails - ActionMailer最佳实践:是在模型中还是在控制器中调用方法?