2009-02-12 56 views
11

我有一个Delphi应用程序,它有许多依赖关系,并且很难重构它以使用DUnit(这是巨大的),所以我在考虑使用像AutomatedQA的TestComplete这样的东西来测试来自前端用户界面。测试Delphi应用程序的最佳方法

我的主要问题是,错误修正或新功能有时会破坏以前测试(手动)并用于工作的旧代码。

我已经设置了应用程序以使用命令行开关打开可以测试的特定窗体,并且可以创建一组需要完成的值和点击。

但我有几个问题之前,我做什么过激举动...(和购买任何东西之前)

  1. 是否值得呢?
  2. 这是一个很好的测试方法吗?
  3. 测试结果应该在我的数据库(Oracle)中,在testcomplete中有一个简单的方法来检查这些值(多个表中的多个字段)?
  4. 我需要设置一个测试数据库来完成所有的自动化测试,会不会有一个简单的方法来自动重新设置测试数据库?除了删除用户级联,创建用户,...,impdp。
  5. 有没有办法在testcomplete中指定exe文件的命令行参数?
  6. 有没有人有类似的经历。

回答

9

我在类似的情况。 (具有大量依赖项的大型应用程序)。几乎没有自动化测试。但是有一个很大的希望来解决这个问题。这就是为什么我们要解决每个新版本的一些问题。

我们即将发布新产品的第一个版本。第一个迹象是好的。但这是很多工作。所以下一个版本我们确实需要一些方法来自动化测试过程。这就是为什么我已经引入了单元测试。虽然由于依赖关系,这些并不是真正的单元测试,但你必须从某个地方开始。

事情我们已经做了:

  • 推出更OO的方法,因为很大一部分的代码仍程序。
  • 移动文件之间的东西。
  • 尽可能消除依赖关系。

但是需求清单还有很多,确保整个团队有足够的工作,直到退休。

也许我有点奇怪,但清理代码可以很有趣。在没有进行单元测试的情况下进行重构是一项危险的工作,尤其是在有很多副作用的情况下。我们使用结对编程来避免愚蠢的错误。还有很多测试会话。但最终我们得到了更简洁的代码,并且引入的新bug数量非常低。

哦,并确保您知道这是一个昂贵的过程。这需要很多时间。而且你必须与连续解决多个问题的倾向作斗争。

3

我无法回答所有问题,因为我从来没有使用过testcomplete,但我可以回答其中的一些问题。

1 - 是的。回归测试是值得的。当客户回到你身边时,如果你破坏了曾经工作过的东西,那么作为一名开发人员让你感到非常尴尬。确保所有曾经工作的东西仍然是一个好主意。

4 - Oracle有一些名为Flashback的功能,它允许您在数据库中创建一个还原点。完成测试后,您可以跳回到此还原点。你也可以编写脚本来使用它,FLASHBACK DATABASE TO TIMESTAMP (FEB-12-2009, 00:00:00);

+0

谢谢,但闪回数据库是没有意义的,你帮我找到了如何在http://halisway.blogspot.com/2007/01/闪架构flashback-user-or-schema-in-oracle.html 谢谢。 – 2009-02-12 09:50:16

13

我建议你打算同时使用DUnit和类似TestComplete的东西,因为它们各自用于不同的目的。

DUnit非常适合单元测试,但难以用于整体应用程序测试和UI测试。

TestComplete是少数实际支持Delphi的自动化测试产品之一,我们的QA工程师告诉我他们的支持非常好。

请注意,设置自动化测试是一项耗时且耗时的工作。如果您严格使用单元测试和auomated UI测试,那么您可能很容易得到比生产代码更多的测试代码。

对于大型(现有)应用程序,您在执行自动化测试方面遇到困难。

我的建议是首先设置单元测试,结合自动构建服务器。每次有人检查源代码控制中的任何内容时,单元测试都会自动运行。不要试图为所有事情设置单元测试 - 对于现有的应用程序而言,这太大了。请记住,无论何时添加新功能,以及何时进行更改,都要创建单元测试。我还强烈建议,只要有错误报告,您在修复错误之前创建单元测试,以重现错误。

0

在(旧)应用程序中引入单元测试的一种方法可能是拥有“启动数据库”(如Rich Adams所描述的“闪回”功能)。 使用DUnit控制GUI的程序som unittest。 如果“使用DUnit进行GUI测试”http://delphixtreme.com/wordpress/?p=181

每次通过恢复到“启动数据库”启动测试,因为可以使用已知的一组数据。

3

我们正在考虑使用VMWare来隔离我们的一些测试。

您可以从已保存的快照开始,因此您始终拥有一致的环境和本地数据库状态。

VMWare操作可以编写脚本,因此您可以从网络位置自动安装最新版本,启动测试并在之后关闭。

+0

我正在考虑在VMWare上进行实际测试,可能是在不同的操作系统上(2000,XP,Vista,7,...,2000服务器,2003服务器) – 2009-02-12 13:58:11

3
  1. 它值得吗?

也许。建立和维护测试可能是一项重大的工作,但是当你拥有测试时,测试可以非常容易且一致地执行。如果你的项目正在发展,某种测试套件是非常有用的。

  1. 这是一个很好的测试方法吗?

我会说适当的DUnit测试套件是更好的第一步。但是,如果你的代码库不是用于测试的,那么建立功能测试比设置GUI测试更加痛苦。

  • 测试应该在我的数据库(Oracle)的结果,是有在testcomplete容易 的方法来检查这些值(在多个表中的多个字段)?
  • TestComplete有ADO和BDE接口。或者你可以在VBScript中使用OLE接口来访问所有可用的东西。

  • 是否有testcomplete一种为 一个exe指定命令行参数?
  • 是的。

    0

    我需要建立一个测试数据库来完成所有的自动化测试 ,会不会有一种简单的方法来 自动化重新设置的测试数据库?

    使用事务:当测试完成时执行回滚。这应该将一切恢复到初始状态。

    推荐阅读:

    http://xunitpatterns.com/

    相关问题