欢迎访问一起赢论文辅导网
本站动态
联系我们
 
 
 
 
 
 
 
 
 
 
 
QQ:3949358033

工作时间:9:00-24:00
材料论文
当前位置:首页 > 材料论文
一种使用自动化测试保护应用程序性能的设计及实现方法
来源:一起赢论文网     日期:2013-07-31     浏览数:3485     【 字体:

摘   要:测试保护开发通常强调的是对应用程序功能的保护,即通过自动化测试用例来形成保护层以确保开发及重构过程的正确性、以及功能不被有意或无意的破坏,在测试保护开发理论的基础上,提出一种使用自动化测试保护应用程序性能的方法,通过结合正反向策略及黑白盒策略,建立针对应用程序性能的综合保护模型,为构建高性能的应用程序奠定基础。
关 键 词:自动化测试;测试保护;应用程序性能
ADesignandImplementationMethodforProtectingApplication’sPerformancebyAutoTesting
Abstract:Testprotecteddevelopmentgenerallyemphasizesonprotectingthefunctionofapplication,inotherwords,toformaprotectivelayertoensurethecorrectnessofdevelopmentandrefactoring,andtoavoiddestructiontoapplicationintentionallyoraccidentally.Thispapersuggestsadesignandimplementationmethodforprotectingapplication’sperformancebyautotesting.Withthecombinationofpros/consandblack-box/white-boxstrategies,themethodaimsatestablishingacomprehensiveprotectionmodel,andlayingthefoundationfordevelopinghigh-performanceapplications.
Keywords:autotesting;testprotected;applicationperformance
  1 引 言
  测试保护开发通常强调的是对应用程序功能的保护,即通过自动化测试用例来形成保护层以确保开发及重构过程的正确性、以及功能不被有意或无意的破坏,那么该思想是否能应用于性能保护呢,即能够通过自动化的测试用例来保护应用程序的性能呢?答案也是“可以”。
  使用自动化测试用例来保护性能,相当于为应用程序的性能添加一把把的“保护锁”,每一个自动化测试用例针对一个可能影响性能的问题,虽然我们不能保证做到100%的保护,但每添加一把锁,都能更增加一份团队的信心。性能优化的过程是阶段性的,但针对应用程序性能的这些保护锁却是持久性的。
  本文在测试保护开发理论的基础上,提出一种使用自动化测试保护应用程序性能的方法,通过结合正反向策略及黑白盒策略,建立针对应用程序性能的综合保护模型,为构建高性能的应用程序奠定基础。
  2 应用程序性能综合保护模型
  使用自动化测试保护性能,可以考虑从正向、反向的视角以及黑盒、白盒的视角来策划测试用例,即将正向、反向策略及黑盒、白盒策略相结合,形成对应用程序性能的保护锁,建立对应用程序性能的综合保护模型。
  从正向的角度考虑,该类测试用例的本质思想是“通过测试用例确保某些用于优化性能的设置处于正常状态”,是一种预防性的检测策略,因此这类测试用例大多形如:①测试x组件默认处于(某种状态)。②测试x组件在y场景下处于(某种状态)。
  从反向的角度考虑,该类测试用例的本质思想是“通过测试用例避免某些导致系统产生性能问题的行为发生”,是一种模拟攻击型的策略,因此这类测试用例大多形如:①测试x组件不会(触发某种行为)。②测试x组件在y时不会(产生某种后果)。正向策略的性能保护测试用例示例,见表1。表1 
  正向策略的性能保护测试示例项目 内容潜在的性能问题DataGrid具有UI虚拟化特性,能极大提升界面渲染及操作的性能(特别是在大数据量的情况下),且不会随着数据量的增大而呈指数级增长,但往往由于使用不当导致DataGrid“被迫”关闭UI虚拟化特性。策划的测试用例针对该性能问题,设计如下测试用例,确保在各种场景下UI虚拟化均处于开启状态(应用系统故意关闭的场景除外):测试DataGrid在StackPanel中使用时UI虚拟化处于开启状态;测试DataGrid在自适应表格中使用时UI虚拟化处于开启状态;……  
  反向策略的性能保护测试用例示例,见表2。表2 反向策略的性能保护测试示例项目 内容性能问题在复杂的主明细界面视图(例如:包含上百列/字段的DataGrid与DataForm结合使用)中,新增行或切换行时会导致SelectionChanged事件触发多次,而该事件每次触发都会导致明细区重复刷新,造成明显的延时感。策划的测试用例针对该性能问题,设计如下测试用例,以确保不会多次触发SelectionChanged事件:测试DataGrid新增行时不会多次触发SelectionChanged事件;测试DataGrid切换行时不会多次触发SelectionChanged事件。  
  正反向性能保护策略本质上是“通过测试用例确保某些用于优化性能的设置处于正常状态”或“通过测试用例避免某些导致系统产生性能问题的行为发生”,这是一个策划性能保护测试用例的维度,从测试用例的实现方式及深度来看,还存在另外一个设计的维度,即性能保护测试用例的黑盒及白盒策略。从黑盒的角度考虑,性能保护的思路是“模拟进行一系列复杂的、可能产生性能问题的操作,在操作前后,应用程序的关键性能指标变化不大,例如内存无明显上升”,该策略并不关注具体的细节,而是以最终的性能指标结果为验证点。从黑盒的角度策划性能保护的测试用例是一种相对宏观的设计策略,通常而言,这类测试用例并不能非常严谨地保证被测程序或对象就一定不存在性能问题,但却能快速检测应用程序是否存在非常明显的性能问题,是一种抓大放小的策略,见表3。表3 黑盒策略的性能保护测试示例项目 内容性能问题数据表格控件(DataGrid)更新数据的过程存在明显的内容泄漏,连续更新数十次数据后,内存迅速上升至数百兆且不会下降。策划的测试用例针对该性能问题,设计如下测试用例,以确保没有明显的内存泄漏:模拟执行1000次数据更新操作,每次更新21条数据,前后内存差值如果仅为数十兆,则认为基本正常,否则认为内存异常。  
  例如针对表3所示的明显的内存泄漏问题,使用该策略设计的测试用例就能及时并有效地检测该问题,从而形成保护。从白盒的角度考虑,性能保护的思路是“密切监控某个可能引起性能问题的对象的生命周期,检测其创建、运行、销毁等过程的正确性”,该策略并不关注宏观的性能指标,而是深入底层运行时的对象生命周期管理过程,对具体的对象进行监控及检测。从白盒的角度策划性能保护的测试用例是一种相对微观的设计策略,通常而言,这类测试用例能非常严谨地监测及判断一个对象是否按预期正常地创建、运行及销毁,是一种极细粒度的保护策略,见表4。表4 白盒策略的性能保护测试示例项目 内容潜在的性能问题一个基本输入控件不再被任何其他对象显示引用时,可能仍无法被垃圾回收,将存在缓慢的内存泄漏问题。策划的测试用例针对该性能问题,设计如下测试用例,以确保对象被垃圾回收器正常回收:在创建该控件对象时,即开始对对象实例进行监控,当对象实例不再被任何其他对象引用时,检测该对象被垃圾回收。 
   例如针对如表4所示的对象释放状态检测示例,就是通过基于该策略设计的测试用例对该类对象形成保护。上述白盒策略性能保护示例相当于更进一步“潜入水底”,从垃圾回收的层次来验证对象的状态,这样的测试用例虽然非常严谨,但仍不能保证就一定不存在内存泄漏。例如,如果使用该策略来测试数据表格(DataGrid)这样复杂的控件,虽然可以验证DataGrid能被正常回收,但是由于DataGrid是一个非常复杂“复合型”控件,因此当一个DataGrid对象被构造出来时,相当于构造了1个DataGrid实例、N个Button实例(操作栏的各个按钮)、N个StackPanel实例(分组面板、数据展示面板等)、N个Grid实例(用于布局)、N个TextBlock实例,等等。而且,随着在DataGrid实例上执行数据更新操作,还会动态地构造N个TextBox实例、N个ComboBox实例、N个CheckBox实例、N个DataGridCell实例,等等。因此,即便通过白盒策略能够验证DataGrid实例被垃圾回收器正常回收了,也不等价于这些中间过程中产生的对象实例全部都被正常回收,而从测试的角度来说,这些对象大部分都是“不可见”的。因此,在实际应用中,最好的方式是“黑白”结合,例如,既在垃圾回收器层次验证关键对象的回收状态,又从稍微抽象的高度验证一段时间内垃圾回收的“成果数据”。将正向、反向策略及黑盒、白盒策略相结合,综合策划性能保护的自动化测试用例,将形成应用· 9 3 2 ·  增刊        伍治平等:一种使用自动化测试保护应用程序性能的设计及实现方法程序性能的综合保护模型,如图1所示。图1 性能保护测试设计策略组合模型
  3 性能保护测试用例的实现
  在建立应用程序性能的综合保护模型、并按各种策略组合设计性能保护测试用例后,具体如何实现这些测试用例。这里使用NET编程语言举两个简单的示例,分别涉及模型中各种策略。以下是一个反向、黑盒策略的性能保护测试用例。在NET中,从垃圾回收的角度,检测指定操作是否存在明显的内存泄漏问题,从而形成保护。[TestMethod]void测试DataGrid数据更新操作不存在内存泄露(){//循环执行1000次,并获取最初的内存intcount=1000;longoriginalMemory=GCGetTotalMemory(false);//循环执行数据更新操作for(inti=0;i<count;i++){dataGridUpdateData(GetSampleData());}//再次获取内存的值,验证没有明显的内存泄漏//即验证前后内存差值在预期范围内longcurrentMemory=GCGetTotalMemory(false);AssertIsTrue(originalMemorycurrentMemory<(long)10241024100);}以下是一个从正向、白盒策略的性能保护测试用例。在NET中,从垃圾回收的角度,一个对象的状态大致可以分为被引用、不再被任何其他对象引用但尚未回收、正在回收中、已回收(销毁)等几个状态,如果要从底层验证一个对象没有潜在的内存泄漏问题,则可以验证一个指定的对象在不被引用后处于后几种状态即可。但是,如果要验证一个对象的状态,就不能在测试代码本身造成对指定对象的强引用关系,在NET中,可以借助WeakReference类来辅助做到这一点(Java中也有等价的类),如以下示例测试代码所示。[TestMethod]void测试DataField能被GC正常回收(){//使用WeakReference来监测实例的状态DataFieldfield=newDataField();WeakReferenceref=newWeakReference(field);//将DataField实例添加到面板中并显示出来TestPanelChildrenAdd(field);//清空面板,实例理论上应不再被任何对象引用TestPanelChildrenClear();//执行垃圾回收,验证实例已被回收,可通过//WeakReference检测对象的状态GCCollect();GCWaitingForPendingFinalizers();AssertIsFalse(refIsAlive);}
  4 结 语
  使用自动化测试保护应用程序性能的设计及实现方法,充分利用了测试保护开发、自动化测试的理论基础及有效实践,并从正向、反向策略及黑盒、白盒策略两个维度深入,充分结合两种维度策略的特点及优势并进行有效组合,从而建立针对应用程序性能的综合保护模型,为构建高性能的应用程序奠定基础。
  参考文献:[1] 梁博,许珊,徐歆恺测试有道微软测试技术心得[M]北京:电子工业出版社,2009[2] JamesDMcCaffreyNET软件测试自动化之道[M]北京:电子工业出版社,2007[3] 陈能技软件自动化测试成功之道[M]北京:人民邮电出版社,2010[4] 段念软件性能测试过程详解与案例剖析[M]北京:清华大学出版社,2006(上接第237页)反模糊化可采用重心法(COG)实现,根据得到的KP、KI、KD值,由PID算法计算出PWM控制信号参数,达到调节转矩和转速的目的。5 结 语本文设计的基于单片机和CPLD的SRM调速系统结构简单可靠,控制灵活方便,较之传统控制方法成本较低,控制精度高,采用基于模糊控制的PID控制器,样机实验结果来看可以有效降低转速超调和转矩脉动。结合SRM结构简单、坚固,效率高,性能优越,可靠性高等诸多优点,SRM调速系统在在纺织机械、电动汽车驱动、家用电器、电力传动等各种需要调速和高效率的领域均有广阔的应用前景。参考文献:[1] 吴建华.开关磁阻电机设计与应用[M].北京:机械工业出版社,2000.[2] 王宏华.开关磁阻电动机调速控制技术[M].北京:机械工业出版社,1999.[3] 张强,吴红星,谢宗武.基于单片机的电动机控制技术[M].北京:中国电力出版社,2008.[4] 贺益康,潘再平.电力电子技术[M].北京:科学出版社,2004.[5] 卢铭,刘闯.SRM驱动型电动自行车再生制动控制策略研究[J].电力电子技术,2008,42(2):8183.[6] 许力.智能控制与智能系统[M].北京:机械工业出版社,2007.

[返回]
上一篇:液体火箭自燃推进剂化学着火延迟数值模拟
下一篇:港口机电设备故障诊断技术的应用研究和推广