0

测试驱动开发可以正式验证吗?是否可以保证程序正确且正常运行?选择测试有什么正式的依据吗?有什么算法可以遵循吗?

4

4 回答 4

4

TDD 不是灵丹妙药。您仍然必须编写代码,并且您仍然可以在逻辑和代码中犯错误。我认为 TDD 是一种思维工具,可以帮助您以非常系统的方式解决问题。

以下是一些文章,可以帮助您了解要遵循的算法:

TDD 的 3 条规则

转型优先前提

于 2014-09-28T19:46:18.970 回答
1

很好的一点是,如果没有系统功能的正式规范,就很难编写一组已知足够的测试。以下是一些可能会有所帮助的论文,以及他们摘要中的引用:

http://www.pst.ifi.lmu.de/~baumeist/publications/baumeister04a.pdf

“本文的目标是表明,在适当的工具支持下,可以将正式规范与测试驱动开发相结合,而不会失去测试驱动开发的敏捷性。”

http://wiki.overturetool.org/images/d/df/WS9Mochio.pdf

“本文介绍了使用 VDM++ 形式规范语言作为可扩展敏捷形式 (SAF) 软件开发方法的基础,这是一种用于任务关键型或大规模软件开发的敏捷方法”

https://online.tugraz.at/tug_online/voe_main2.getVollText?pDocumentNr=275810&pCurrPk=67400

“在本文中,我们建议将几种技术组合到一个敏捷的正式开发过程中:基于模型的测试、正式模型、模型改进、模型检查和测试驱动开发。”

于 2014-09-29T13:05:50.143 回答
0

TDD 是一种基于经验的、基于示例的过程,而不是基于证明的方法。就正确性而言,它的价值取决于从业者的严谨程度。TDD 提供了关于如何通过测试进行编程的指导而不是如何编程或测试什么——您几乎可以通过 TDD 来完善一个什么都不做或通过毫无头绪的测试的实现。

但是,您可以应用等价分区等传统测试技术来提高 TDD 测试的完整性。代码覆盖率分析还提供了关于测试有效性的(不完整的)视图。

对于更面向定理证明的方法,您可以查看基于属性的测试。它可能会受到 TDD 思维方式的攻击,尽管在这种情况下 TDD 循环肯定不会看起来像一个规范的循环。

于 2014-09-29T15:34:33.727 回答
0

测试驱动开发可以正式验证吗?

测试驱动开发没有正式的验证,因为它的主要目标不是产生测试,而是提供一种接近设计和编码的方法。

是否可以保证程序正确且正常运行?

我认为无论我们采用哪种方法,都不能完全保证程序是正确的。

选择测试有什么正式的依据吗?

我们在 TDD 中选择测试的方式是编写那些应该指导我们完成我们将要编写的下一个代码单元的实现的测试。

有什么算法可以遵循吗?

它实际上非常简单(但很难精通)。

  1. 想想应该编写的下一个代码单元。
  2. 编写一个由于没有实现代码而将失败的测试。
  3. 编写代码并确认测试成功。
  4. 重构
于 2014-09-30T17:45:13.800 回答