在处理大数据时如何确保代码按预期工作?

时间:2019-02-28 23:59:06

标签: java spring multithreading

我写了一些多线程批处理来处理数据。

当我完成实现并再次测试不同的数据集时,每个数据都有大约100行,一切都按预期工作。但是,当它实际移至prd时,某些操作将失败。诸如死锁,空指针异常,数据约束卷和错误的输出等。

我的问题是如何确保您的代码有效?我用示例数据进行了测试,但是我真的不能对数百万个数据进行测试,对吗,这很耗时吗?但是,如果我不这样做,由于某些在测试过程中没有发生的错误,我的测试代码将失败。

人们是否使用某种实践来验证或常见?

对此需要一些指导原则。

1 个答案:

答案 0 :(得分:0)

根据我与大型公司(包括硅谷)的合作经验,我会说从一开始就使用最佳实践并坚持使用,例如:

  1. 了解并选择适合该工作的技术/语言-您可以使用C ++ 03或使用Java,GO或Rust,您将获得截然不同的体验
  2. 在该领域拥有昂贵,技能娴熟的程序员,并且选择了足够的语言或技能来在一定的正常运行时间后处理每种技术
  3. 不要强迫他们,否则他们会妥协(记住质量-速度-价格三角形)
  4. 团队中有认真的对等代码审查文化
  5. 运行静态代码分析(如果有)并修复警告
  6. 编写所有有意义的单元测试(在类/模块级别,在此级别没有多线程,理想情况下基于SOLID的软件,使用模拟进行测试)
  7. 在此处创建集成测试(多线程,真实文件,真实数据库,真实云,真实可伸缩性)
  8. 让质量检查部门在现实生活条件下进行回归测试,并一遍又一遍又一遍又一遍地重复实际的硬件...
  9. 还让QA和开发人员在可能的情况下使用内存检查器(例如valgrind)和/或配置文件(取决于语言和技术)进行测试

同样重要的是,也要使其在真实条件下运行(也就是在生产环境中进行测试...好吧,我们将其称为公开测试版)。在那里用您拥有的一切进行攻击。其中包括您所有的黑客工具和成群的野生猴子。

即使是最大的公司在其软件上投入巨资,也始终会存在一些其他隐藏的bug或安全性问题(并且可能会在以后解决的已知问题)。因此,请确保您有一些事后验尸程序,例如堆栈跟踪,应用程序日志,系统日志,屏幕截图等。

在当今的软件复杂性中,正确性和稳定性非常昂贵。对于小型项目,可以稍作努力(取决于失败人数,或者今天更重要的是资金损失,如果出现空指针的话)