我正在开发一个非常大的数据密集型遗留应用程序。代码库和数据库的规模都很大。大量业务逻辑分布在所有层中,包括存储过程中。

有没有人对如何开始以有效的方式将“单元”测试(技术上的集成测试,因为他们需要针对几乎任何给定流程的单个方面进行跨层测试)应用到应用程序有任何建议?当前的架构不容易支持任何类型的注入或模拟。正在编写新代码以方便测试,但是遗留代码呢?由于对数据本身和数据库中的业务逻辑的强烈依赖,我目前使用内联sql来查找用于测试的数据,但这些非常耗时。创建视图和/或存储过程是不够的。

您采取了哪些方法(如果适用)?什么有效?什么没有以及为什么?任何建议,将不胜感激。谢谢。

有帮助吗?

解决方案

获取一份副本 有效地处理遗留代码 作者:迈克尔·费瑟斯。它充满了使用大型、未经测试的代码库的有用建议。

另一本好书是 面向对象的重组模式. 。本书的大部分内容并不专门针对面向对象软件。全文可免费下载 PDF 格式。

从我自己的经验来看:尝试...

  • 自动化构建和部署
  • 将数据库架构纳入版本控制(如果尚未)。通常,数据库包含事务代码在运行之前需要存在的参考数据。也将其置于版本控制之下。类似的工具 数据库部署 可以帮助您轻松地重建架构并从一系列增量中引用数据。
  • 将数据库版本(以及任何其他基础设施服务)安装到您的开发工作站上。这将使您能够处理数据库而无需不断地通过 DBA。它也比在远程数据中心的共享服务器上使用架构更快。所有主要的商业数据库服务器都有可在 Windows 上运行的免费(如啤酒)开发版本(如果您陷入在 Windows 上开发并在 Unix 上部署的尴尬境地)。
  • 在开始处理某个代码区域之前,请编写大致涵盖您正在处理的区域的行为的端到端测试。端到端测试应该从外部测试系统——通过控制其用户界面或通过网络服务进行交互——这样您就不需要更改代码来将其安装到位。它将充当(不完美的)回归测试,让您更有信心将系统内部重构为更容易进行单元测试的结构。
  • 如果有手动测试计划,请阅读它们并查看哪些内容可以自动化。大多数手动测试计划几乎完全是脚本化的,因此自动化是唾手可得的成果
  • 一旦获得端到端测试覆盖,在修改和/或扩展代码时将代码重构为更松散耦合的单元。用单元测试包围这些单元。

要避免的事情:

  • 将数据从生产数据库复制到用于自动化测试的环境中。这将使您的测试变得不可预测。当然,针对生产数据的副本运行系统,但将其用于探索性测试,而不是回归测试。
  • 在测试结束时回滚事务以将测试彼此隔离。这不会测试仅在提交事务时发生的行为,并且会丢弃对于诊断测试失败有价值的数据。相反,测试应确保数据库在启动时处于已知的初始状态。
  • 创建一个“微小”数据集以供运行测试。这使得测试难以理解,因为它们不能作为一个单元来阅读。当您为不同场景添加测试时,“微小”数据集很快就会变得非常大。相反,测试可以将数据插入数据库来设置测试装置。

其他提示

“测试传统应用程序现代化”,重点介绍:

  1. 如何在AscentialTest中创建测试的高级概述

  2. 将遗留对象转换为新平台的方法对象定义的组件

  3. 如何确保应用程序的现代化版本产生相同的结果

  4. 有关测试遗留应用程序使用的更多详细信息,请查看此处:

    http:// application-management .cioreview.com /白皮书/测试遗留应用-现代化-妇女参与发展-529.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top