具有检查代码规范性功能的静态分析工具,其内部包含了得到公认的编码规范,比如函数、变量、对象的命名规范,函数语句数的限制等等,工具支持对这些规范的设置。工具的使用者根据情况,裁减出适合自己的编码规范,然后通过工具对代码进行分析,定位代码中违反编码规范的地方。
以上就是静态分析工具所具有的功能。与人工进行静态分析的方式相比,通过使用静态分析工具,一方面能提高静态分析工作的效率,另一方面也能保证分析的全面性。
单元测试是软件测试过程中一个重要的测试阶段。与集成测试、确认测试相比,在编码完成后对程序进行有效的单元测试,能更直接、更有效的改善代码质量。
进行单元测试不是一件轻松的事。一般来讲,进行一个完整的单元测试所需的时间,与编码阶段所花费的时间相当。进行单元测试时,根据被测单元(可能是一个函数,或是一个类)的规格说明,设计测试用例,然后通过执行测试用例,验证被测单元的功能是否正常实现。除此之外,在单元测试阶段,我们还需要找出那些短时间不会马上表现出来的问题(比如C++代码中的内存泄露),还需要查找代码中的性能瓶颈,并且为了验证单元测试的全面性,我们还想了解单元测试结束后,我们的测试所达到的覆盖率。
针对这些在单元测试阶段需要做的工作,各种用于单元测试的工具就产生了。典型的单元测试工具有以下几类:动态错误检测工具、性能分析工具、覆盖率统计工具。
动态错误检测工具,用来检查代码中类似于内存泄露、数组访问越界这样的程序错误。程序功能上的错误比较容易发现,因为它们很容易表现出来。但类似于内存泄露这样的问题,因为在程序短时间运行时不会表现出来,所以不易发现。遗留有这样问题的单元被集成到系统后,会使系统表现的极不稳定。
性能分析工具,记录被测程序的执行时间。小到一行代码、一个函数的运行时间,大到一个exe或dll文件的运行时间,性能分析工具都能清晰的记录下来。通过分析这些数据,能够帮助我们定位代码中的性能瓶颈。
覆盖率统计工具,统计出我们当前执行的测试用例对代码的覆盖率。覆盖率统计工具提供的信息,可以帮助我们根据代码的覆盖情况,进一步完善测试用例,使所有的代码都被测试到,保证单元测试的全面性。
动态错误检测工具、性能分析工具、覆盖率统计工具的运行机理是:用测试工具对被测程序进行编译、连接,生成可执行程序。在这个过程中,工具会向被测代码中插入检测代码。然后运行生成的可执行程序,执行测试用例,在程序运行的过程中,工具会在后台通过插入被测程序的检测代码收集程序中的动态错误、代码执行时间、覆盖率信息。在退出程序后,工具将收集到的各种数据显示出来,供我们分析。
目前被普遍使用的单元测试工具中有Compuware公司的NuMega DevPartner Studio,Rational 公司的Rational Suite Enterprise。这些软件产品都是一个工具套件,其中包含了我们前面所讨论的动态错误检测工具、性能分析工具、覆盖率统计工具等。
在软件产品的各个测试阶段,通过测试发现了问题,开发人员就要对问题进行修正,修正后的软件版本需要再次进行测试,以验证问题是否得到解决,是否引发了新的问题,这个再次进行测试的过程,称为回归测试。
由于软件本身的特殊性,每次回归测试都要对软件进行全面的测试,以防止由于修改缺陷而引发新的缺陷。进行过回归测试人都会深有体会,回归测试的工作量是很大的,而且也很乏味,因为要将上一轮执行过的测试原封不动的再执行一遍。设想一下,如果能有一个机器人,就象播放录影带一样,忠实的将上一轮执行过的测试原封不动的在软件新版本上重新执行一遍,那就太好了。这样做,一方面,能保证回归测试的完整、全面性,测试人员也能有更多的时间来设计新的测试用例,从而提高测试质量;另一方面,能缩短回归测试所需要的时间,缩短软件产品的面市时间。功能测试自动化工具就是一个能完成这项任务的软件测试工具。
功能测试自动化工具理论上可以应用在各个测试阶段,但大多数情况下是在确认测试阶段中使用。功能测试自动化工具的测试对象是那些拥有图形用户界面的应用程序。
一个成熟的功能测试自动化工具要包括以下几个基本功能:录制和回放、检验、可编程。
录制,就是记录下对软件的操作过程,回放,就是象播放电影一样重放录制的操作。启动功能测试自动化工具,打开录制功能,依照测试用例中的描述一步一步的操作被测软件,功能测试自动化工具会以脚本语言的形式记录下你操作的全过程。依照此方法,可以将所有的测试用例进行录制。在需要重新执行测试用例时,回放录制的脚本,功能测试自动化工具依照脚本中的内容,操作被测软件。除了速度非常快之外,通过功能测试自动化工具执行测试用例与人工执行测试用例的效果是完全一样的。
录制只是实现了测试输入的自动化。一个完整的测试用例,由输入和预期输出共同组成。所以,光是录制回放还不是真正的功能测试自动化。测试自动化工具中有一个检验功能,通过检验功能,在测试脚本中设置检验点,使得功能测试自动化工具能够对操作结果的正确性进行检验,这样,就实现了完整的测试用例执行自动化。软件界面上的一切界面元素,都可以作为检验点来对其进行检验,比如文本、图片、各类控件的状态等。
脚本录制好了,也加入了检验点,一个完整的测试用例已经被自动化了。但我们还想对脚本的执行过程进行更多的控制,比如依据执行情况进行判断,从而执行不同的路径,或者是对某一段脚本重复执行多次。通过对录制的脚本进行编程,可以实现上述的要求。现在的主流功能测试自动化工具都支持对脚本的编程。象传统的程序语言一样,在功能测试自动化工具录制的脚本中,可加入分支,循环,函数调用这样的控制语句。通过对脚本进行编程,能够使脚本更加灵活,功能更加强大,脚本的组织更富有逻辑性。在传统的编程语言中适用的那些编程思想,在组织测试自动化脚本时同样适用。
在测试过程中,使用功能测试自动化工具的大体过程是这样的:
● 准备录制
保证所有要自动化的测试用例已经设计完毕,并形成文档。
● 进行录制
打开功能测试自动化工具,启动录制功能,按测试用例中的输入描述,操作被测试应用程序。
● 编辑测试脚本
通过加入检测点、参数化测试,以及添加分支、循环等控制语句,来增强测试脚本的功能,使将来的回归测试真正能够自动化。
● 调试脚本
调试脚本,保证脚本的正确性。
● 在回归测试中运行测试
在回归测试中,通过功能测试自动化工具运行脚本,检验软件正确性,实现测试的自动化进行。
● 分析结果,报告问题
查看测试自动化工具记录的运行结果,记录问题,报告测试结果。
功能测试自动化工具是软件测试工具中非常活跃的一类工具,现在发展的已经较为成熟,象Mercury Interactive公司的WinRunner,Rational公司的Robot,都是被广泛使用的功能测试自动化工具。
通过性能测试,检验软件的性能是否达到预期要求,是软件产品测试过程中的一项重要任务。性能测试用来衡量系统的响应时间、事务处理速度和其它时间敏感的需求,并能测试出与性能相关的工作负载和硬件配置条件。通常所说的压力测试和容量测试,也都属于性能测试的范畴,只是执行测试时的软、硬件环境和处理的数据量不同。
对系统经常会进行的性能测试包括:系统能承受多少用户的并发操作;系统在网络较为拥挤的情况下能否继续工作;系统在内存、处理器等资源紧张的情况下是会否发生错误,等等。由于性能测试自身的特点,完全依靠人工执行测试具有一定的难度。比如,我们要检验一个基于Web的系统,在10000个用户并发访问的情况下,是否能正常工作。如果通过人工测试的方式,很难模拟出这种环境。在这种情况下,就需要使用性能测试工具。
使用性能测试工具对软件系统的性能进行测试时,大体分为以下几个步骤:
首先,录制下软件产品中要对其进行性能测试的功能部分的操作过程。这一步与前面我们讨论过的功能测试自动化工具中的那个录制过程很相似。功能录制结束后,会形成与操作相对应的测试脚本。
然后,根据具体的测试要求,对脚本进行修改,对脚本运行的过程进行设置,如设置并发的用户数量、网络的带宽,使脚本运行的环境与我们实际要模拟的测试环境一致。
最后,运行测试脚本。性能测试工具会在模拟的环境下执行我们所录制的操作,并实时的为我们显示与被测软件系统相关的各项性能数据。
性能测试工具实际上是一种模拟软件运行环境的工具,它能帮助我们在实验室里搭建出我们需要的测试环境。现在,基于Web是软件系统发展的一个趋势,性能测试也就变的比以往更加重要了,性能测试工具也自然会在软件测试过程中被更多的使用。
3.6测试过程管理工具
软件测试贯穿于整个软件开发过程,按照工作进行的先后顺序,测试过程可分为制定计划、测试设计、测试执行、跟踪缺陷这几个阶段。在每个阶段,都有一些数据需要保存,人员之间也需要进行交互。测试过程管理工具就是一种用于满足上述需求的软件工具,它管理整个测试过程,保存在测试不同阶段产生的文档、数据,协调技术人员之间的工作。
测试过程管理工具一般都会包括以下这些功能:管理软件需求、管理测试计划、管理测试用例、缺陷跟踪、测试过程中各类数据的统计和汇总。
市面上商用的测试管理工具有很多,基本上都是基于Web的系统,这样更利于跨地区团队之间的协作。
4正确认识测试工具的作用
如果一个现在正在从事软件测试工作,但在测试过程中还没有使用过测试工具的人看到以上的这些内容,可能会非常兴奋,因为他觉的只要在测试过程中引入相关的测试工具,那些一直困扰他们测试团队的问题就都能轻松解决了。
在业内经常会有这种想法,认为通过引入一种新的技术,就能解决面临的所有问题了。这种想法,忽视了除技术以外我们仍然需要做的工作。软件测试工具确实能提高测试的效率和质量,但它并不是能够解决一切问题的灵丹妙药。
软件测试工具能在测试过程中发挥多大的作用,取决于测试过程的管理水平和人员的技术水平。测试过程的管理水平和人员的技术水平都是人的因素,是一个开发组织不断改进,长期积累的结果。如果一个测试组织的测试过程管理很混乱,人员缺乏经验,那么不必忙于引入各种测试工具,这时首先应该做的是改进测试过程,提高测试人员的技术水平,待达到一定程度后,再根据情况逐步的引入测试工具,进一步的改善测试过程,提高测试效率和质
量。
5结束语
软件测试在整个软件开发过程中占据了将近一半的时间和资源。通过在测试过程中合理的引入软件测试工具,能够缩短软件开发时间,提高测试质量,从而更快、更好的为用户提供他们需要的软件产品。