让你提前认识软件开发(42):性能测试

第3部分 软件研发工作总结

性能测试

【文章摘要】

对于通信领域的某些中间模块,其主要功能是对收到的消息进行处理然后发送,在两个模块之间充当了一个“桥梁”的作用。由于消息的条数有多有少,这就对其性能提出了要求。

本文结合作者的实际项目经验,描述了性能测试的整个过程,并对性能测试过程中的一些常见问题进行了简单的介绍。

1. 前言

在完成项目新需求的编码之后,对代码进行自测以验证功能的正确性是在所难免的。一般说来,花在测试上面的时间要更多一些。通过对自己所编写程序的详细测试,开发人员可以发现设计上、编码上的不足,及时对程序进行修改,减少了后续修改所带来的成本的增加。

某些中间模块位于两个重要模块之间,充当了“桥梁”的作用。它需要对收到的消息进行处理,并将处理之后的消息发送出去。消息的条数有多有少,当消息条数很大时,就要求中间模块能够有比较高的性能,不会因为处理不过来而瘫痪掉。因此,对中间模块进行性能测试以验证其处理大量消息的能力是很有必要的。

本文对性能测试的整个过程进行了详细的描述,并对测试过程中的一些注意事项进行了简单的介绍。

2. 性能测试环境的搭建

2.1 系统结构示意图

一般而言,对于要处理大量消息的系统,都需要进行性能测试。其通用的系统结构如图1所示。

图1 性能测试系统结构图

如图1所示,中间模块C需要与模块A和模块B进行消息的交互。首先由模块A发送消息到中间模块C,中间模块C按照协议组装好消息后,发送到模块B;模块B收到消息之后,会给中间模块C返回应答消息,中间模块C再按照协议组装应答消息返回给模块A。

由此可见,中间模块C需要处理不同的消息,当消息量很大的时候,就对其处理性能提出了要求。

2.2 模拟程序的编写

从图1可以看出,要对中间模块C进行性能测试,需要模拟模块A和模块B的功能。

为了方便操作,一般在自己的工作PC上编写模拟程序来完成简单的性能测试。如果要想进行大规模的性能测试,需要专门的测试人员和测试环境的配合。

一般而言,可以编写可视化的操作界面来模拟模块A和模块B,这样方便对消息进行跟踪和调试。模拟界面的示意图如图2所示。

图2 模拟界面示意图

如图2所示,整个操作界面比较简单,包括“开始测试”按钮、“退出系统”按钮、消息类别按钮、“发送次数”控制框、“发送间隔”控制框和显示框等。

“开始测试”按钮用于控制测试的开始。

“退出系统”按钮用于控制测试的结束。

消息类别按钮用于控制发送消息的内容。在系统建立起来之后,当选中其中的某项功能并点击“开始测试”按钮之后,模块A就会将消息发送到中间模块C,并接收来自中间模块C的消息。发送和接收的消息会显示在中间的显示框中。

“发送次数”控制框用于控制消息的发送条数,这是性能测试最重要的体现。对于某一类消息,可以逐渐增加该项的取值。

“发送间隔”控制框用于控制消息的发送间隔。这是为了方便观察到每条消息的发送情况,可根据实际情况进行调节。

显示框用于展示消息的执行情况,方便跟踪与调试。

在模拟模块A和模块B程序中,最为重要的是要严格按照协议来组装发送的消息,不仅要保证字段内容和顺序的正确性,还要保证格式的正确性。为了确保发送消息的准确无误,可以增加一个配置文件,在该文件中将消息配置好。

3. 性能测试的操作过程

性能测试操作过程与程序实际的测试过程没有什么两样。在测试之前,要保证系统的正常运行、要保证相关配置文件内容的正确性,并确保测试软件的正确性。

3.1 启动模拟界面

模拟程序成功启动后的界面如图3所示。

图3 模拟程序成功启动后的界面示意图

3.2 对单条消息进行测试

选择某一个消息类别,并设置“发送次数”为1,可以看到发送消息和接收消息的情况,如图4所示。

图4 发送1条消息成功示意图

通过图4的显示框可以验证程序的功能是否正确。

3.3 对中间模块C进行性能测试

编写模拟程序的一个主要目的就是要对中间模块C进行性能测试,也就是要不间断地向中间模块C发送多条消息,看一下其功能是否正常。

例如,选择某类消息,并设置“发送次数”为10000,可以看到发送消息和接收消息的情况,如图5所示。

图5 发送10000条消息成功示意图

图5中,模拟程序不停地向中间模块C发送消息,直到发送10000条为止。当消息发送完之后,可以查看中间模块C处理消息是否正常,也就是看性能测试是否达到预期的目的。

一般说来,要保证中间模块C能够承受100000次乃至1000000次以上的性能测试。当某一项功能的性能测试通过之后,还要对该中间模块C涉及到的其它功能进行性能测试,以确保其性能的稳健性。

4. 性能测试常见问题及其解答

在性能测试过程中,常见的问题及解答如下:

         1) 为什么模拟程序无法发送消息?

答:出现这种情况,一般都是配置的问题。在进行性能测试之前,一定要确保各配置文件的正确性,要确保服务器和客户端配置的正确性,以及连接端口的准确性。连接不通,一般都是由端口号不对引起的。

         2) 为什么发送过来的消息解析不对?

答:这一般是由于未按照协议的要求组装消息引起的。

         3) 为什么对于有些功能,处理少数几条消息的时候不会有什么问题,而多条消息时程序就会崩溃?

答:肯定是中间模块C程序有问题,性能测试的目的就是为了发现这类问题。可以对照相关日志文件来检查,看程序在哪里崩溃的。一般说来,通过检查对应的代码可以发现问题之所在。

5. 总结

本文主要介绍了对中间模块C进行性能测试的整个过程,并对测试过程中的常见问题进行了描述。

性能测试的主要目的是保证代码的质量,进而确保产品的质量。开发人员在编写完代码之后,一定要对代码进行充分的测试,以减少后续修改所带来的麻烦。

(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)

让你提前认识软件开发(42):性能测试

时间: 2024-10-01 06:39:28

让你提前认识软件开发(42):性能测试的相关文章

让你提前认识软件开发(42):性能測试

第3部分 软件研发工作总结 性能測试 [文章摘要] 对于通信领域的某些中间模块,其主要功能是对收到的消息进行处理然后发送,在两个模块之间充当了一个"桥梁"的作用.因为消息的条数有多有少,这就对其性能提出了要求. 本文结合作者的实际项目经验,描写叙述了性能測试的整个过程,并对性能測试过程中的一些常见问题进行了简单的介绍. 1. 前言 在完毕项目新需求的编码之后,对代码进行自測以验证功能的正确性是在所难免的.一般说来,花在測试上面的时间要很多其他一些.通过对自己所编敲代码的具体測试,开发者

让你提前认识软件开发(46):首先是为人编写程序,其次才是计算机

第3部分 软件研发工作总结 首先是为人编写程序,其次才是计算机 "首先是为人编写程序,其次才是计算机",这是软件开发的基本要点,软件的生命周期贯穿于产品的开发.测试.生产.发布.用户使用.版本升级和后期维护等长期过程中,只有易读.易维护的软件代码才具有生命力. 在实际的软件开发过程中,可能是由于工作很忙的原因,很多开发人员只注重实现程序的基本功能,而忘记了编程规范,因此写出来的代码只能让计算机看懂,人要看懂很不容易.更有甚者,有些项目组为了赶进度,明确要求组员以实现产品功能为主,代码能

让你提前认识软件开发(45):代码的第一印象

第3部分 软件研发工作总结 代码的第一印象 我们都很注重给别人的第一印象,也有很多书籍教我们怎样给别人留下一个美好印象的.确实,如果我们第一眼看到某个人,就觉得很不爽,那么一定会在心理上产生抵触,以后再见到他,会有一种疏远的感觉.也正因为如此,当今社会交往中的"面子工程"很重要,不管怎样,先撑足了自己的脸面再说. 代码也一样,也会给别人留下或好或差的印象.当我们看到优美的代码时,会有一种想继续研究下去的欲望,甚至会有一种觉得很享受的感觉.相反,当我们看到丑陋的代码时,就会咬牙切齿,因为

让你提前认识软件开发(44):如何解决软件故障?

第3部分 软件研发工作总结 如何解决软件故障? 在软件产品的运营维护阶段,软件工程师的一项重要工作就是解决软件的bug.在学校的时候,大家学完一门课程,然后考试通过就万事大吉了.但在实际的软件开发项目中,将软件成功交付给客户,只是"万里长征走完了第一步",后面还有大量的工作要做,例如:解决软件故障.新增功能.版本升级等.作为一名合格的软件工程师,一定要学会准确.迅速地解决软件出现的各种问题. 为什么解决软件问题的能力如此重要?因为软件项目的成功率不容乐观.国内某IT公司对本公司内软件项

让你提前认识软件开发(40):既要写好代码,又要写好文档

第3部分 软件研发工作总结 既要写好代码,又要写好文档 对于软件相关行业,在学校或单位上,大家也许都已经注意到了,除了要编写的程序.绘制设计图之外,还有一个重要的工作便是写文档.为什么要写文档呢?因为我们要把自己做的东西展示出来,不光展示给同行看,可能还要展示给其他岗位上的工作人员看,甚至展示给用户看.如果我们只是会写程序,不会在文档中描述自己的想法,那么就真正的成为"码农"了. 工作也有一段时间了,我发现周围的同事,会写高质量文档的确实很少.李开复老师在<浪潮之巅>的序言

让你提前认识软件开发(20):如何在C语言里面执行SQL语句?

[文章摘要] 在通信类软件中,程序经常需要与数据库打交道.为了实现诸如从数据库中获取数据.更新数据库表某字段.插入或删除某条数据等功能,就需要在C语言程序中构造一些SQL语句,并用函数来执行这些SQL语句. 本文介绍如何在C语言程序中构造并执行SQL语句,为相关软件开发工作的开展提供了参考. [关键词] SQL语句  C语言  程序  流程  开发 一.为什么要在C语言程序中执行SQL语句? 在C语言程序中执行SQL语句的原因有以下几个: (1) 程序需要获取数据库中某数据表的字段值,并对这些字

让你提前认识软件开发(47):同行评审

第3部分 软件研发工作总结 同行评审 在<浪潮之巅>这本书中,吴军老师描述了在Google早期的工作方式,其中有一段是这么写的:我一般会在吃完晚饭后把代码修改的清单发给克雷格做代码审核,他一般晚上10点左右会回复我,给我修改意见,详细到某一行多了一个空格. 吴军老师所描述的内容,其实就是软件开发中的同行评审流程. 几乎在所有的软件项目中,都需要同行评审.一个人不管能力多强,看问题的角度总会受到限制,写出来的程序和文档等定不会是十全十美的.如果能够让懂行的同事给参阅一下,并提出他们认为正确的意见

让你提前认识软件开发(28):数据库存储过程中的重要表信息的保存及相关建议

第2部分 数据库SQL语言 数据库存储过程中的重要表信息的保存及相关建议 1. 存储过程中的重要表信息的保存 在很多存储过程中,会涉及到对表数据的更新.插入或删除等,为了防止修改之后的表数据出现问题,同时方便追踪问题,一般会为一些重要的表建立一个对应的debug表.这个debug表中的字段要包括原表的所有字段,同时要增加操作时间.操作码和操作描述等字段信息. 例如,在某项目中,包括了如下一个重要的表tb_XXX: create table tb_XXX (      AAA           

让你提前认识软件开发(24):C语言的发展历史和主要特点

第1部分 重新认识C语言 C语言的发展历史和主要特点 作为一门众所周知的计算机编程语言,C语言是谁发明的呢?它是如何演进的?它有何特点?到底有多少人在使用它? 1. C语言之父 C语言是1972年由美国贝尔实验室的计算机科学家Dennis Ritchie(丹尼斯·里奇)设计发明的.因此,Dennis Ritchie被誉为"C语言之父"(他已于2011年10月9日去世,享年70岁).图1中的人物就是Dennis Ritchie. 图1 "C语言之父" Dennis R