我们有一个包含数百种可能的用户操作的应用程序,并考虑如何增强内存泄漏测试。
目前,这就是它发生的方式:当手动测试软件时,如果我们的应用程序看起来消耗太多内存,我们使用内存工具,查找原因并修复它。这是一个相当缓慢而且效率不高的过程:问题很晚才被发现,而且它依赖于一个开发人员的善意。
我们如何才能改善这一点?
答案 0 :(得分:5)
使用哪种语言?
我使用像Valgrind这样的工具,尝试充分运用该程序并查看它所报告的内容。
答案 1 :(得分:2)
第一道防线:
如果您使用非托管语言(如C / C ++),您可以通过劫持内存管理功能有效地发现大多数内存泄漏。例如,您可以跟踪所有内存分配/解除分配。
答案 2 :(得分:1)
在我看来,问题的核心并不是找到内存泄漏,而是知道何时测试它们。您说您有很多用户操作,但您没有说用户操作的序列是有意义的。如果你可以随机生成有意义的序列,我会争论随机测试。在随机测试中,您将测量
“用户行为的覆盖范围”是指以下陈述:
如果不是这样,那么你可以询问A和B对的分数是多少。
如果你有CPU周期可以负担得起,你可能还会在每次提交源代码存储库之前或每晚构建时运行valgrind
或其他内存检查工具。
自动化!
答案 3 :(得分:0)
在我的公司,我们为我们的应用程序编写了无尽的行动路径。 java垃圾收集器应该清除所有未使用的映射和列表等等。因此,我们让应用程序从无尽的操作路径开始,看看内存使用大小是否在增长。
检查哪些字段未删除,您可以使用JProfiler for Java。
答案 4 :(得分:0)
将 新 和删除替换为您的自定义版本,并记录每个分配/解除分配行为。
一般来说(不是关于测试,而是针对问题的起源),智能指针有助于避免这个问题。幸运的是,C ++ 11标准提供了新的方便的智能指针类(shared_ptr
,unique_ptr
)。