当开发软件时,会进行各种类型的测试 - 单元,集成,功能,手动。在我当前的项目(带有sql server的winforms)中,它有遗留代码(没有测试),我们确实有很多bug 。 我们正尝试使用手动+测试(主要是集成)的组合来删除它们
但是,仍有一些漏洞可以逃脱。
例如(假设情景) - 如果客户在过去6个月内购买了一些价值的商品,那么他应该在6个月过后的购买时给予一些折扣。他的状态应该更新为特权。< / p>
但是,由于某种原因(代码中的错误),系统没有这样做。我们应该如何处理这种情况?我们是否应该在数据库上运行一个脚本来查找描述的场景?该场景的另一个扩展可能是,客户必须在获得特权后发送礼物,但系统缺失这样做。
思想?
答案 0 :(得分:1)
“我们是否应该在数据库上运行一个脚本来查找描述的场景?”
您的意思是“将脚本放入数据库以纠正问题”,然后否。
NO。决不。在任何情况下。通过添加特殊的特殊情况逻辑解决错误确实是一个非常糟糕的主意。
当这种特殊的特殊情况逻辑有它自己的错误时,你已经添加了错误的代码来尝试和纠正有错误的代码。净亏损。
当您尝试增强系统时,您就拥有了这种特殊的特殊逻辑,这种逻辑没有任何意义。
一个。如果你很幸运,你修复了应该解决的错误,这将是多余的。现在怎么办?要删除哪个副本?
湾否则,它将与其他代码相矛盾。现在怎么办?哪个是对的?
如果您的意思是“将脚本放入数据库以帮助查找和调试问题”,那么是的。在短时间内,使用您可以使用的每个工具来查找和修复错误。找到并修复后,此脚本无用,必须删除。
如果您的意思是“在数据库中编写脚本来测试应用程序”,那么是的。这就是单元测试脚本的用途。使用它们。
创建单元测试比创建放在数据库中的脚本要好得多。 单元测试是最好的方法。
答案 1 :(得分:0)
您应该有一个自动化的测试套件。该测试套件将实现规范所需的所有方案。由于人们不能等待六个月来测试折扣是否有效,实际的实现将被mock实现所取代(该示例在java中,但同样的原则适用于其他语言),例如“模拟” 6个月过去了。可以使用断言来自动化测试。
一旦准备好整个测试套件,如果所有测试都经过(就像之前一样)重构/更改代码,可以确保没有任何功能因重构而中断。