VC++IDE/设计时压力测试

嗨,我叫李建华,我是VC++IDEQA。今天我将讨论VC++IDE/设计时压力测试。

null

什么是压力测试?

设计时应力(DTS)是一组更广泛的可靠性质量标准的一部分,其重点是在压力条件下测量应用程序的健壮性、可用性和可靠性。  它的作用域是设计时组件,这些组件是用户在IDE中工作时使用的组件,例如, 浏览或智能感知。

为什么我们要“强调”我们的产品?

基本上,我们希望确保我们的产品VC++IDE在临界条件下合理工作,这比真实世界的编码要糟糕得多。通过将产品推向极限,我们还可以发现许多“正常”测试用例无法发现的产品缺陷。  例如,压力测试可能会暴露出由于各种赛车/计时问题导致的许多产品碰撞/挂起问题;细微的内存泄漏也可以检测到,因为它将积累和扩大在广泛的长时间测试。  第三,压力测试充分模拟了真实世界程序员的连续编码体验。由于压力测试的性质,一个小时的压力测试可以相当于几天的实际测试,或者几个星期的程序员编码。

我们如何进行压力测试?

在实施压力测试的测试基础设施工作时,我们考虑了以下问题:

· 我们应该强调什么情况?

在visualstudio产品部门内部,不同的团队投资了不同的压力场景,对于VC++,我们最喜欢的是IntelliSense!我们相信Intellisense是VC++面向客户的关键设计时特性之一。想想你在日常编码工作中使用AutoComplete、MemberList、ParameterHelp和QuickInfo的频率。

· 压力测试的要求/目标是什么?

由于这是压力测试,基本要求是“长时间连续运行,没有任何IDE性能下降和内存泄漏”。在实践中,这个目标还将保证对于一个真实世界的程序员来说,经过几周的编码后,intellisense体验将和编码开始时一样流畅。新的智能感知操作不应该有任何延迟。

· 我们应该测试哪些类型的压力测试?

VC++设计时压力包含两种不同的测试类型:压力存储读取和压力存储写入。

对于“Stress Store Reads”测试类型,顾名思义,我们只是通过执行intellisense操作从intellisense“Store”读取数据,而不编辑代码。

对于“Stress Store Writes”测试类型,我们将通过自动编辑代码(例如,删除并重新键入文件中的每一行)来强制对intellisense存储进行写入。更新intellisense存储后,我们将“读取”更新的intellisense存储,以确保它产生预期的结果。

基于上述设计要求,我们实现了一个用于VC++IDE压力测试的全组件级基础设施。这利用了我们现有的组件级框架,并使用DTE和其他Microsoft内部组件级库。

下面是VC++IDE压力测试的高级概述。

1. 压力测试初始化:初始化运行设置,包括:

· 压力测试溶液:进行压力测试的溶液

· 应力类型:应力存储读取或应力存储写入

· 压力时间:压力测试将持续多久

· 压力迭代:压力测试将执行多少次迭代。

2. 打开压力测试解决方案文件,获取测试解决方案文件中所有项目的头文件和cpp文件的完整列表,然后关闭解决方案。

3. 启动压力测试监视进程,该进程将监视压力运行期间的内存使用情况。

4. 再次打开测试解决方案文件,执行以下循环:

· 打开从步骤2获得的文件列表中的每个头/cpp文件

§ If(stress type==stress Store Write)执行代码编辑,例如删除并重新键入当前打开文件中的每一行。我们不断删除并重新键入当前文件中的每一行,在这个过程中没有停顿,直到完成此文件中的最后一行。然后我们将光标移回当前打开文件的开头。

§ 获取当前文件中每个令牌的位置

§ 迭代每个标记。对于每个标记,根据需要调用AutoComplete/MemberList/ParameterHelp/QuickInfo

§ 在日志文件上收集intellisense结果。

· 如果指定的压力时间到期或达到测试迭代,则退出此步骤中的循环;否则,转到文件列表中的下一个头/cpp文件,重复上述步骤。

5. 分析压力日志文件,获得每个intellisense操作的整体intellisense操作通过率、平均值、最小值和最大运行时间。确保没有发现性能问题。另外,分析压力监视器日志文件,确保没有内存泄漏。所有这些类型的结果报告和分析都是自动完成的。

注:

· 因为我们的测试是在组件级实现的,文件打开,代码编辑,  智能感知的调用非常快。通常在1秒内,我们的压力测试可以要求大约10次甚至更多的intellisense操作,我们将在整个压力测试运行期间(大约8小时)保持这种速度。我敢打赌,现实世界中没有程序员能做到这一点。

· 对于压力运行结果分析,我们不验证每个intellisense的正确性操作,我们在压力测试中关心的是长期运行的性能。因此,压力测试的标准是没有IDE崩溃/挂起,在8小时运行期间没有任何intellisense操作的异常大运行时间,以及良好的总体通过率,例如,超过80%。

OrcasSP1压力测试的一些有趣数据。

现在让我们来看一些关于orcassp1压力测试结果的有趣数据。

对于压力存储读取类型测试,在Orcas SP1上,我们有:

§ IDE继续运行8小时,没有崩溃/挂起。

§ 在8小时的运行过程中,请求了超过220k个intellisense操作,其中超过98%的intellisense请求返回了成功的intellisense结果。这听起来像什么?让我们做一个模拟现实世界的编程。

1. 假设在日常编码中,平均C++程序员每5秒将请求1智能感知操作。

2. 每分钟12英镑

3. 720/小时

4. 每天实际编码4小时  我们每天得到2880英镑

5. 每周14400(5天)

§ 基于上述假设,我们的压力测试模拟的是一个现实世界中平均76天/15周的程序员编码!现在让我们看看我们的性能,在76天的时间里,每个intellisense操作的平均运行时间只有150ms,devenv.exe的峰值内存只有150MB。

请给我们关于IDE压力测试的反馈。

在visualstudio2010中,我们对压力测试进行了更多的投资,并将其扩展到包括浏览场景,例如goodefinition和FindAllReferences。请让我们知道您认为应该包括在我们的压力测试中的任何情况。欢迎任何评论或反馈!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享