我们的产品在性能方面赢得了不好的声誉。嗯,这是一个大型的企业应用程序,13岁,需要一个茶点款待,特别是它的性能提升。
我们决定在此版本中战略性地解决性能问题。我们正在评估如何做到这一点的几个选项。
我们确实拥有经验丰富的负载测试工程师,他们配备了市场上最好的工具,但通常他们在版本开发生命周期的后期获得稳定版本,因此在最新版本中,开发人员没有足够的时间来修复所有工具他们的发现。 (是的,我知道我们需要提供更早的稳定版本,我们也正在研究这个过程,但它不在我的领域)
我推动的一个方向是设置一个安装了每晚构建的实验室环境,以便开发人员可以测试其代码对性能的影响。 我希望通过模拟真实用户体验的脚本不断加载这个环境。在这个加载的环境中,每个开发人员都必须编写一个测试其代码的特定脚本(即在真实世界环境中的单个用户体验)。我想生成一个报告,显示每次迭代对现有功能的影响,以及新功能的性能。
我有点担心我的目标太高了,它会变得太复杂。
您如何看待这样的想法? 有没有人有建立这样一个环境的经验? 你能分享一下你的经历吗?
答案 0 :(得分:2)
这听起来是个好主意,但是老实说,如果你的组织无法为昂贵的负载测试团队建立它只是为了这个目的,那么它永远不会让你的想法发挥作用。
首先去寻找低悬的果实。在此过程的早期阶段,为性能测试团队提供每晚构建。
事实上,如果这个版本完全与性能有关,那么为什么不让团队采用这个版本来解决上一版本迭代后期出现的所有性能问题。
编辑:“开发人员不负责性能测试代码”是一个评论。是的,没错。我个人会让每个开发人员都拥有YourKit java profiler的副本(它便宜又有效),并知道如何使用它。然而,遗憾的是,性能调优是一项非常非常有趣的技术活动,当您更好地开发功能时,可能会花费大量时间进行此操作。
如果您的开发团队反复开发明显缓慢的代码,那么对性能或更好的程序员进行培训是唯一的答案,而不是更昂贵的过程。
答案 1 :(得分:2)
生产力的最大提升之一是在一夜之间运行的自动构建系统(这称为持续集成)。昨天的错误今天一大早就被抓住了,那时我还很新鲜,而且我还记得我昨天所做的事情(而不是几个星期/几个月之后)。
所以我建议首先要做到这一点,因为它是其他任何事情的基础。如果您无法可靠地构建产品,您将发现很难稳定开发过程。
完成此操作后,您将拥有创建性能测试所需的所有知识。
但有一条建议:不要试图一下子完成所有事情。一步一步,一个接一个地解决一个问题。如果有人想出“我们也必须这样做”,你必须对其他任何功能请求做同样的分类:这有多重要?有多危险?实施需要多长时间?我们会获得多少收益?
推迟艰难但重要的任务,直到你完成了基础知识。
答案 2 :(得分:1)
夜间构建是性能测试的正确方法。我建议你需要每晚自动运行的脚本。然后将结果记录在数据库中并提供定期报告。你真的需要两种报告:
其他一些建议:
答案 3 :(得分:0)
我们构建了一个小型测试平台,进行完整性测试 - 即当按钮按下时,应用程序启动并按预期工作,进行验证工作等。我们是一个Web应用程序,我们使用Watir一个基于ruby的工具包来驱动浏览器。这些运行的输出创建为Xml文档,我们的CI工具(巡航控制)可以输出结果,错误和性能作为每个构建日志的一部分。整个过程运行良好,可以扩展到多台PC上进行适当的负载测试。
然而,我们做了所有这些,因为我们拥有的身体多于工具。有一些大型压力测试装置可以满足您的所有需求。它们的成本,但这将少于手动滚动所花费的时间。我们遇到的另一个问题是让我们的开发人员编写Ruby / Watir测试,最终落到了一个人身上,因此测试工作几乎成了瓶颈。
答案 4 :(得分:0)
夜间构建非常出色,实验室环境非常出色,但我认为您可能会遇到直接错误测试的混乱性能测试。
确保您的实验室条件是隔离且稳定的(即,您一次只能改变一个因素,无论是您的应用程序还是Windows更新),并且硬件反映了您的目标。请记住,您的基准比较只会在实验室内部进行防弹。
编写代码的开发人员编写的测试脚本往往是一件有毒的事情。它不会帮助你消除实施中的误解(因为测试脚本中存在同样的误解),并且实际发现问题的动机有限。更好的方法是采用TDD方法并首先将测试编写为一个组(或一个单独的组),但如果失败,您仍然可以通过协作编写脚本来改进该过程。希望您的设计阶段有一些用户故事,并且可以重播日志以获得真实世界的体验(应用程序变化)。