测试我们的程序性能
在开发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上的。
相关推荐
jmeter4.0进行微信小程序测试(jmeter性能测试教程) jmeter4.0进行微信小程序测试详细步骤指导书jmeter4.0进行微信小程序测试详细步骤指导书jmeter4.0进行微信小程序测试详细步骤指导书
本人采用完成端口(iocp)开发一套封装库,并开发了服务端和客户端模拟程序,可以测试程序性能。附件为执行程序,不包括源码。 通过测试,可以发现iocp处理性能非常强,支持的连接数也非常多。
应用程序性能测试的艺术,标准的英文文档,原汁原味
自动化测试.NET WEB应用程序的性能测试
基于LoadRunner+Fiddler的小程序性能测试教学设计.pdf
测试Arduino性能程序,测试MSP430性能程序
前端时间项目中需要对java服务程序进行性能测试,确保服务程序能够满足业务的并发需求,这里把整个过程中遇到的问题以及解决方法做一个总结,下次遇到类似问题的时候可以参考,提高效率。 1. 采用jmeter编写压测脚本...
Web应用程序性能测试技术的研究及应用 Web应用程序性能测试技术的研究及应用
1、使用性能测试工具dotTrace 3.0,它能够计算出你程序中那些代码占用内存较多 2、强制垃圾回收 3、多dispose,close 4、用timer,每几秒钟调用:SetProcessWorkingSetSize(Process.GetCurrentProcess()....
Microsoft _NET Web应用程序性能测试 很有用的本书
完成端口测试程序,可以测试程序性能,没有代码。收发操作只针对字节流。只能用于测试,不能用于商业。网络库有一些限制,后果自负。
微信小程序API性能测试.pdf
关于ASP.NET应用程序性能测试,在对ASP.NET应用程序进行性能测试之前,应确保应用程序没有错误,而且功能正确。具体的性能测试可以采用以下工具进行: Web Application Strees Tool (WAS)是Microsoft发布的一个免费...
简介 StressMark测试软件是一个使用Visual C++编写的,开放源代码的测试工具,可以完成服务程序及重要算法的功能和性能测试,其最主要的功能是模拟多线程或多客户端的自动化压力测试。 我们可以利用StressMark软件...
安卓触摸性能及显示性能测试程序,可用于测试安卓系统的触摸性能及显示性能,支持安卓4.4及以上所有安卓系统。
基于Web Start的应用程序性能测试研究及应用,冷知见,,目前,性能测试在软件的质量保证中越来越重要,系统性能的好坏直接影响了企业对外提供服务的质量。本文提供了基于Web Start发布的应
1.1 什么是性能测试 检验系统的性能是否符合要求的测试。包括压力测试、负荷测试、可靠性测试、稳定性测试...... 1.2 性能测试包括哪些方面的测试 速度:服务响应速度 容量:最大支持用户数 可靠性:高负荷运行...
算法性能 测试方法 以素数几个算法测试为例~~~~~~~~~~~~~~~emmmmm就这么多了…………………………………………………………………………………………………………………………………………………………………………...
测试邮件服务器性能的程序,基于linux