Unit testing 大数据的单元测试方法

Unit testing 大数据的单元测试方法,unit-testing,bigdata,Unit Testing,Bigdata,假设您正在设计一个系统,并且希望开始编写测试,以确定功能,但也确定性能和可伸缩性。在不同的环境中处理大型数据集时,您可以共享哪些技术 为了测试和测量性能,可以使用静态数据源和输入(可以是巨大的转储文件或sqlite DB) 您可以创建测试并将其包含在您的集成构建中,以使特定的函数调用花费X秒以上,并抛出错误 当你建立更多的系统时,你会看到这个数字增加,并打破你的测试 您可以花20%的时间获得80%的功能,其余80%用于性能和可扩展性:) 可扩展性—考虑面向服务的体系结构,这样您就可以在两者之间使

假设您正在设计一个系统,并且希望开始编写测试,以确定功能,但也确定性能和可伸缩性。在不同的环境中处理大型数据集时,您可以共享哪些技术

为了测试和测量性能,可以使用静态数据源和输入(可以是巨大的转储文件或sqlite DB)

您可以创建测试并将其包含在您的集成构建中,以使特定的函数调用花费X秒以上,并抛出错误

当你建立更多的系统时,你会看到这个数字增加,并打破你的测试

您可以花20%的时间获得80%的功能,其余80%用于性能和可扩展性:)


可扩展性—考虑面向服务的体系结构,这样您就可以在两者之间使用负载平衡器,并且只需向系统中添加新的硬件/服务,就可以提高状态/处理能力

我强烈建议优先考虑功能测试(使用TDD作为您的开发工作流)在进行性能和可伸缩性测试之前。TDD将确保您的代码设计良好且松散耦合,这将使它在创建自动化性能和可伸缩性的过程中变得越来越容易。当代码松散耦合时,您可以控制依赖关系。当您可以控制依赖项时,您可以为要编写的任何高级测试创建任何配置

做一些功能测试。考虑很少的风险管理技术,这篇文章将对你有所帮助。

< P>分离不同类型的测试。
  • 功能测试应该放在第一位,从小规模开始单元测试 模拟数据量
  • 接下来,集成测试,使用少量的 数据存储中的数据,但显然与 存储大型数据集
  • 您也许可以通过执行性能测试来减少开发工作 和可伸缩性测试一起进行
  • 一个重要提示:您的测试数据集应该尽可能真实。使用生产数据,必要时匿名。因为大数据的性能取决于数据中的统计分布,所以您不希望使用合成数据。例如,如果您使用基本上具有相同用户信息的虚假用户数据一百万次,那么您将获得非常不同的可伸缩性结果,而不是具有广泛值分布的真实混乱用户数据


    要获得更具体的建议,我需要了解您使用的技术。在Hadoop中,看看MRUnit。对于RDB,使用DBUnit。ApacheBigtop可以提供灵感,尽管它的目标是Hadoop上的核心项目,而不是特定的应用程序级项目

    我遇到了两种情况:

  • 用作其他应用程序的数据仓库或数据接收器的大型HDFS数据集

  • 使用HBASE或其他分布式数据库的应用程序

  • 两种情况下的单元测试提示:-

    a。首先测试应用的不同功能组件,大数据应用没有特殊规则;就像任何其他应用程序一样,单元测试应该确定应用程序上的不同组件是否按预期工作;然后,如果适用,您可以集成功能/服务/组件等来执行SIT

    b。特别是如果有HBASE或任何其他分布式数据库,请测试DB的要求。例如,分布式数据库通常不支持传统数据库那样的ACID属性,而是受到CAP定理(一致性、可用性、分区容差)的限制;通常保证三分之二。对于大多数RDBMS,它是CA,通常对于HBASE,它是CP和Cassandra AP。作为设计人员或测试计划人员,您应该知道,根据应用程序的功能,这是分布式数据库的CAP约束,并相应地创建测试计划以检查实际情况

  • 关于性能——同样,很大程度上取决于基础设施和应用程序设计。此外,有时某些s/w实现比其他实现更费力。您可以检查分区的数量,例如,分区的大小写都是基于大小写的

  • 关于可伸缩性——大数据实施的最大优势在于,与传统体系结构相比,它易于伸缩。我从来没有想过这是可以测试的。对于大多数大数据应用程序,您可以轻松地进行扩展,尤其是水平扩展非常容易,因此不确定是否有人考虑测试大多数应用程序的可伸缩性


  • @HappyPants博士,tnx代表downvote,对于你的一般问题,你会得到一般性的答案:)这是如何回答问题的?有时不需要。例如,“我如何用正则表达式解析html?”这个问题可以用“不要”来充分回答。@Kyranstar然而单元测试应该测试整个接口:性能也是接口的一部分(我可能会选择某个函数而不是另一个函数,因为它很大哦是O(n log n)而不是O(n^2),但有时另一种方法会导致速度越快的方法设置时间越长)。-如果我做出这样的承诺,我必须通过测试来证明这一承诺。