测试我们的程序性能
在开发iphone程序的时候,如果程序会有较大的开销并且希望运行在配置较低的早期设备上,我们就需要解决一些在设备环境窘迫的时候出现的性能问题,程序性能优化调整上升为一个不可忽视的问题。
接下来介绍一些现有的一些测试工具,来帮助程序员发现热点,优化性能,解决程序bug。并希望以后可以出现的一些测试工具或方案。
一、 现有工具
Shark
代码分析程序。帮助分析代码性能,允许配置所有系统文件,方便调试各代码运行时间,以跟踪代码性能。
Xcode包含许多性能分析工具,其中有一个叫shark,位于/Develpoer/Applications/Performance Tools下,他最早是用于处理运行mac的程序,现在对于运行在iphone上的程序也有很大帮助。
作为没有mac开发背景的iphone程序员,不了解也是很正常的。即时现有iphone开发书籍也很少有介绍。还有一个原因可能是他的测试方式需要对程序员有更高的要求。程序员通过CPU时钟周期分析出程序的资源消耗热点,定位到代码中的位置。其实到现在我也不会很好的使用这个工具。
大致需要以下的步骤来完成测试和分析。
1. 在模拟器中构建运行程序,
2. 切换到shark设置,时间分析或其他方式,选择进程或者其他,选择指定的进程,
3. start,测试过程的操作,
4. stop,查看结果。
通过分析,可能是消耗过多的GUI布局,或者是无谓的计算等,最终发现热点用更有效的方法来消除热点
在配置好代码签名的环境,也可以测试和mac相连的ios设备,选择其中相关远程调试选项即可开始,手头没有设备的环境,没有测试。
shark有效但是还是有一定的局限性:它把在他的取样周期中的所有活动同等对待,无法捕捉一小段时间,而这段时间里也许有一些其他的外部事件,做了有趣的事情,会导致其他的结果出现。
Instruments
性能测试工具,收集程序运行数据,帮助分析程序运行。
他的出现解决的shark的不足的地方,Instruments维持一个程序关于时间的活动记录,并把它显示在一条时间线上,可以看到程序在生命周期中活动的响应,程序是如何消耗cpu,内存和其他资源的。很直观的通过图形界面得出了分析结果,程序很容易就可以定位到问题代码的位置。
这是一个iphone开发书籍必备内容,现在主要是用来检查内存泄露,你可以通过网络或其他书籍来了解Instruments其他详细的功能,这里就不在赘述了。或者你也可以直接开始,我相信你很快就可以掌握其使用方式,Instruments对程序员的要求很简单。
不过其实各有利弊,Instruments呈现的更多是分析的结果,也许会掩盖一些问题。有时候其实我们也希望通过shark的原始底层数据来更加精确的解决问题所在。
Clang静态分析器
这是一个LLVM的开源项目,更具体的信息可以通过其网站来了解。
静态分析器不是在程序运行时检查代码,它是一个代码静态分析工具,通过自身的技术建模并试图发现那些易于识别的错误。
Clang其实是集成在GCC编译器中的,并不一定需要xcode工具,也可以通过命令行配置来执行。
在xcode中使用非常简单,没错,只需要点击Build and analyze就坐等看结果了。
在制作下面这张截图的时候,我发现并解决了工程中的几个内存泄露和删除一些无效分支的死代码。
Clang主要可以分析得出以下这些问题
l 内存泄露
l Retain和release的正确使用
l 未初始化的变量
l 未使用的变量
l 无法到达的代码路径
l 引用空指针
l 除零
l 死存储(赋值非从未使用的变量)
l 类型不兼容的oc方法签名
l 缺少dealloc
在应用程序的生命周期中,有很多的对象被创建,因此要发现一个较长时间内稳定但是泄露缓慢的对象的错误可能是比较困难的。Scan-build能捕捉到这样的引用技术错误。试图写一个已释放的变量会导致崩溃,静态分析器发现可以减少测试人员和用户的痛苦。
静态分析器可以遍历所有可能的路径并发现那些可能的会错过的错误。
Unit test bundle
我们还有单元测试包( Unit test bundle),单元测试其实应该是开发的一部分工作,单很多时候我们并没有这样做。
二、 还需要什么
UI Recorder
看看截图中的那些灰色的选项,有一个UI Recorder选项,这是一个已经Mac上存在的测试工具,顾名思义,它是一个类似于windows的Winrunner的自动化测试工具。
UI Recorder通过记录一些与GUI的交互操作,通过自动录制、检测和回放用户的应用操作。
l 发现那些依赖于应用程序使用方式的的性能问题。就算只是通过简单的机械重放,通过可以发现bug的重现规律,可以发现可能需要和用户指定的交互动作才会出现的问题。
l 可以自动进行需要的压力测试,通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题。
l 有效地帮助测试人员对复杂应用的不同发布版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的应用无故障发布及长期稳定运行
相信以后有机会能够移植到iOS上的。
相关推荐
### 应用程序性能测试的艺术 #### 概览与背景 《应用程序性能测试的艺术》一书由Ian Molyneaux撰写,O'Reilly Media, Inc.出版,首次出版日期为2009年2月2日,共有160页。本书提供了针对关键业务应用程序在部署前...
《使用JMeter 4.0进行微信小程序性能测试详解》 微信小程序的广泛使用使得其性能测试变得至关重要,本文将详细介绍如何使用JMeter 4.0这一强大的性能测试工具对微信小程序进行压力测试。JMeter是一款由Apache开发的...
### 知识点:基于LoadRunner+Fiddler的小程序性能测试 #### 微信小程序的市场现状和性能测试需求 随着移动终端的普及和高速网络的发展,微信小程序作为一种便捷的移动端应用,用户使用频率日益增加。特别是在教育、...
自动化测试.NET WEB应用程序的性能测试
本文将深入探讨Microsoft .NET Web应用程序性能测试的相关知识点,旨在帮助开发者理解如何优化和测量其.NET Web应用的性能。 一、性能测试的基本概念 性能测试是评估系统在特定工作负载下的响应时间、吞吐量、资源...
测试Arduino性能程序,测试MSP430性能程序
微信小程序API性能测试相关知识点: 1. 微信小程序:微信小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。小程序具有出色的用户体验、无需下载安装、...
Web应用程序性能测试技术的研究及应用 Web应用程序性能测试技术的研究及应用
【Java服务程序性能测试总结】 在软件开发过程中,性能测试是一项至关重要的环节,尤其是在Java服务程序的场景下,确保服务程序能承受高并发负载并保持高效稳定运行是开发者的重要任务。以下是对整个性能测试过程的...
1、使用性能测试工具dotTrace 3.0,它能够计算出你程序中那些代码占用内存较多 2、强制垃圾回收 3、多dispose,close 4、用timer,每几秒钟调用:SetProcessWorkingSetSize(Process.GetCurrentProcess()....
ASP.NET应用程序性能测试是评估和优化ASP.NET应用的关键步骤,以确保它们在高并发和大量用户访问时仍能保持高效运行。在进行性能测试前,首先需要确认应用程序无错误,功能完整,因为任何未解决的问题都可能在负载...
微信小程序测试报告的主要目的是评估和验证微信小程序的功能、性能、安全性和用户体验,确保其符合用户需求并达到预期的质量标准。报告详细记录了测试过程、执行的测试类型、使用的环境和配置,以及测试人员的分工。...
在软件开发过程中,性能测试是不可或缺的一环,它旨在确保应用程序在各种负载、压力和并发情况下能够稳定运行,提供良好的用户体验。"软件性能测试检查表-模板"是为这一目标设计的一个工具,它包含了对软件性能进行...
"明华读卡器测试程序"是专为明华品牌的读卡器设计的一个应用程序,它的主要目标是确保读卡器的功能正常,性能稳定,并能够兼容不同类型的存储卡。 首先,我们要理解测试程序的基本概念。在软件开发过程中,测试程序...
横向隔离装置测试程序则是针对这类设备进行功能验证和性能评估的重要工具。 "电力专用横向隔离装置测试程序V1.0" 提供了一种便捷的方法来检测和评估这些隔离装置是否符合设计标准和安全规范。该程序可能包含以下...
* Web应用程序性能测试 * 移动应用程序性能测试 * 数据库系统性能测试 * 服务器性能测试 * 网络性能测试 Loadrunner的优点包括: * 高度模拟真实用户行为 * 支持多种协议和编程语言 * 可以测试各种类型的系统 * ...
3. **Microsoft Web Application Stress Tool (WAS)**:这是微软提供的一款免费工具,主要用于测试ASP.NET应用程序,可以模拟大量的HTTP请求来测试Web应用的性能。 4. **OpenSTA (Open System Testing Architecture...
性能测试是IT行业中一个至关重要的领域,特别是在软件开发与维护过程中,它确保应用程序在各种负载和高并发情况下能够稳定运行。下面将详细讲解性能测试的概述、步骤、关键指标以及压力测试。 一、性能测试概述 ...